123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?php
- if (!class_exists('WP_List_Table')){
- require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
- }
- class SwpmMembershipLevels extends WP_List_Table {
- function __construct() {
- parent::__construct(array(
- 'singular' => SwpmUtils::_('Membership Level'),
- 'plural' => SwpmUtils::_('Membership Levels'),
- 'ajax' => false
- ));
- }
- function get_columns() {
- return array(
- 'cb' => '<input type="checkbox" />'
- , 'id' => SwpmUtils::_('ID')
- , 'alias' => SwpmUtils::_('Membership Level')
- , 'role' => SwpmUtils::_('Role')
- , 'valid_for' => SwpmUtils::_('Access Valid For/Until')
- );
- }
- function get_sortable_columns() {
- return array(
- 'id' => array('id', true),
- 'alias' => array('alias', true)
- );
- }
- function get_bulk_actions() {
- $actions = array(
- 'bulk_delete' => SwpmUtils::_('Delete')
- );
- return $actions;
- }
- function column_default($item, $column_name) {
- if ($column_name == 'valid_for') {
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::NO_EXPIRY) {
- return 'No Expiry';
- }
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::FIXED_DATE) {
- $formatted_date = SwpmUtils::get_formatted_date_according_to_wp_settings($item['subscription_period']);
- return $formatted_date;
- }
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::DAYS) {
- return $item['subscription_period'] . " Day(s)";
- }
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::WEEKS) {
- return $item['subscription_period'] . " Week(s)";
- }
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::MONTHS) {
- return $item['subscription_period'] . " Month(s)";
- }
- if ($item['subscription_duration_type'] == SwpmMembershipLevel::YEARS) {
- return $item['subscription_period'] . " Year(s)";
- }
- }
- if ($column_name == 'role') {
- return ucfirst($item['role']);
- }
- return stripslashes($item[$column_name]);
- }
- function column_id($item) {
- $delete_swpmlevel_nonce = wp_create_nonce( 'nonce_delete_swpmlevel_admin_end' );
- $actions = array(
- 'edit' => sprintf('<a href="admin.php?page=simple_wp_membership_levels&level_action=edit&id=%s">Edit</a>', $item['id']),
- 'delete' => sprintf('<a href="admin.php?page=simple_wp_membership_levels&level_action=delete&id=%s&delete_swpmlevel_nonce=%s" onclick="return confirm(\'Are you sure you want to delete this entry?\')">Delete</a>', $item['id'],$delete_swpmlevel_nonce),
- );
- return $item['id'] . $this->row_actions($actions);
- }
- function column_cb($item) {
- return sprintf(
- '<input type="checkbox" name="ids[]" value="%s" />', $item['id']
- );
- }
- function prepare_items() {
- global $wpdb;
- $this->process_bulk_action();
- $query = "SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id !=1 ";
- if (isset($_POST['s'])){
- $search_keyword = sanitize_text_field($_POST['s']);
- $search_keyword = esc_attr ($search_keyword);
- $query .= " AND alias LIKE '%" . $search_keyword . "%' ";
- }
- //Read and sanitize the sort inputs.
- $orderby = !empty($_GET["orderby"]) ? esc_sql($_GET["orderby"]) : 'id';
- $order = !empty($_GET["order"]) ? esc_sql($_GET["order"]) : 'DESC';
- $sortable_columns = $this->get_sortable_columns();
- $orderby = SwpmUtils::sanitize_value_by_array($orderby, $sortable_columns);
- $order = SwpmUtils::sanitize_value_by_array($order, array('DESC' => '1', 'ASC' => '1'));
- if (!empty($orderby) && !empty($order)) {
- $query.=' ORDER BY ' . $orderby . ' ' . $order;
- }
- $totalitems = $wpdb->query($query); //Return the total number of affected rows
- $perpage = 50;
- $paged = !empty($_GET["paged"]) ? sanitize_text_field($_GET["paged"]) : '';
- if (empty($paged) || !is_numeric($paged) || $paged <= 0) {
- $paged = 1;
- }
- $totalpages = ceil($totalitems / $perpage);
- if (!empty($paged) && !empty($perpage)) {
- $offset = ($paged - 1) * $perpage;
- $query.=' LIMIT ' . (int) $offset . ',' . (int) $perpage;
- }
- $this->set_pagination_args(array(
- "total_items" => $totalitems,
- "total_pages" => $totalpages,
- "per_page" => $perpage,
- ));
- $columns = $this->get_columns();
- $hidden = array();
- $sortable = $this->get_sortable_columns();
- $this->_column_headers = array($columns, $hidden, $sortable);
- $this->items = $wpdb->get_results($query, ARRAY_A);
- }
- function no_items() {
- SwpmUtils::e('No membership levels found.');
- }
- function process_form_request() {
- if (isset($_REQUEST['id'])) {
- //This is a level edit action
- $record_id = sanitize_text_field($_REQUEST['id']);
- if(!is_numeric($record_id)){
- wp_die('Error! ID must be numeric.');
- }
- return $this->edit($record_id);
- }
- //Level add action
- return $this->add();
- }
- function add() {
- //Level add interface
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_add_level.php');
- return false;
- }
- function edit($id) {
- global $wpdb;
- $query = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}swpm_membership_tbl WHERE id = %d", absint($id));
- $membership = $wpdb->get_row($query, ARRAY_A);
- extract($membership, EXTR_SKIP);
- $email_activation = get_option('swpm_email_activation_lvl_'.$id);
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_edit_level.php');
- return false;
- }
- function process_bulk_action() {
- //Detect when a bulk action is being triggered...
- global $wpdb;
- if ('bulk_delete' === $this->current_action()) {
- $records_to_delete = array_map( 'sanitize_text_field', $_REQUEST['ids'] );
- if (empty($records_to_delete)) {
- echo '<div id="message" class="updated fade"><p>Error! You need to select multiple records to perform a bulk action!</p></div>';
- return;
- }
- foreach ($records_to_delete as $record_id) {
- if( !is_numeric( $record_id )){
- wp_die('Error! ID must be numeric.');
- }
- $query = $wpdb->prepare("DELETE FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $record_id);
- $wpdb->query($query);
- }
- echo '<div id="message" class="updated fade"><p>Selected records deleted successfully!</p></div>';
- }
- }
- function delete_level() {
- global $wpdb;
- if (isset($_REQUEST['id'])) {
- //Check we are on the admin end and user has management permission
- SwpmMiscUtils::check_user_permission_and_is_admin('membership level delete');
- //Check nonce
- if ( !isset($_REQUEST['delete_swpmlevel_nonce']) || !wp_verify_nonce($_REQUEST['delete_swpmlevel_nonce'], 'nonce_delete_swpmlevel_admin_end' )){
- //Nonce check failed.
- wp_die(SwpmUtils::_("Error! Nonce verification failed for membership level delete from admin end."));
- }
- $id = sanitize_text_field($_REQUEST['id']);
- $id = absint($id);
- $query = $wpdb->prepare("DELETE FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $id);
- $wpdb->query($query);
- echo '<div id="message" class="updated fade"><p>Selected record deleted successfully!</p></div>';
- }
- }
- function show_levels() {
- ?>
- <div class="swpm-margin-top-10"></div>
- <form method="post">
- <p class="search-box">
- <label class="screen-reader-text" for="search_id-search-input">
- search:</label>
- <input id="search_id-search-input" type="text" name="s" value="" />
- <input id="search-submit" class="button" type="submit" name="" value="<?php echo SwpmUtils::_('Search')?>" />
- </p>
- </form>
- <?php $this->prepare_items(); ?>
- <form method="post">
- <?php $this->display(); ?>
- </form>
- <p>
- <a href="admin.php?page=simple_wp_membership_levels&level_action=add" class="button-primary"><?php SwpmUtils::e('Add New') ?></a>
- </p>
- <?php
- }
- function manage() {
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_membership_manage.php');
- }
- function manage_categroy() {
- $selected = "category_list";
- include_once('class.swpm-category-list.php');
- $category_list = new SwpmCategoryList();
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_category_list.php');
- }
- function manage_post() {
- $selected = "post_list";
- include_once('class.swpm-post-list.php');
- $post_list = new SwpmPostList();
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_post_list.php');
- }
- function handle_main_membership_level_admin_menu(){
- do_action( 'swpm_membership_level_menu_start' );
- //Check current_user_can() or die.
- SwpmMiscUtils::check_user_permission_and_is_admin('Main Membership Level Admin Menu');
- $level_action = filter_input(INPUT_GET, 'level_action');
- $action = $level_action;
- $selected= $action;
- ?>
- <div class="wrap swpm-admin-menu-wrap"><!-- start wrap -->
- <!-- page title -->
- <h1><?php echo SwpmUtils::_('Simple WP Membership::Membership Levels') ?></h1>
- <!-- start nav menu tabs -->
- <h2 class="nav-tab-wrapper">
- <a class="nav-tab <?php echo ($selected == "") ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels"><?php echo SwpmUtils::_('Membership Levels') ?></a>
- <a class="nav-tab <?php echo ($selected == "add") ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=add"><?php echo SwpmUtils::_('Add Level') ?></a>
- <a class="nav-tab <?php echo ($selected == "manage") ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=manage"><?php echo SwpmUtils::_('Manage Content Protection') ?></a>
- <a class="nav-tab <?php echo ($selected == "category_list") ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=category_list"><?php echo SwpmUtils::_('Category Protection') ?></a>
- <a class="nav-tab <?php echo ($selected == "post_list") ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=post_list"><?php echo SwpmUtils::_('Post and Page Protection') ?></a>
- <?php
- //Trigger hooks that allows an extension to add extra nav tabs in the membership levels menu.
- do_action ('swpm_membership_levels_menu_nav_tabs', $selected);
- $menu_tabs = apply_filters('swpm_membership_levels_additional_menu_tabs_array', array());
- foreach ($menu_tabs as $level_action => $title){
- ?>
- <a class="nav-tab <?php echo ($selected == $member_action) ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=<?php echo $level_action; ?>" ><?php SwpmUtils::e($title); ?></a>
- <?php
- }
- ?>
- </h2>
- <!-- end nav menu tabs -->
- <?php
- do_action( 'swpm_membership_level_menu_after_nav_tabs' );
- //Trigger hook so anyone listening for this particular action can handle the output.
- do_action( 'swpm_membership_level_menu_body_' . $action );
- //Allows an addon to completely override the body section of the membership level admin menu for a given action.
- $output = apply_filters('swpm_membership_level_menu_body_override', '', $action);
- if (!empty($output)) {
- //An addon has overriden the body of this page for the given action. So no need to do anything in core.
- echo $output;
- echo '</div>';//<!-- end of wrap -->
- return;
- }
- //Switch case for the various different actions handled by the core plugin.
- switch ($action) {
- case 'add':
- case 'edit':
- $this->process_form_request();
- break;
- case 'manage':
- $this->manage();
- break;
- case 'category_list':
- $this->manage_categroy();
- break;
- case 'post_list':
- $this->manage_post();
- break;
- case 'delete':
- $this->delete_level();
- default:
- $this->show_levels();
- break;
- }
- echo '</div>';//<!-- end of wrap -->
- }
- }
|