/** * Get available tabs for Membership2 page. * * @since 1.0.0 * * @return array The tabs configuration. */ public function get_available_tabs() { static $Tabs = null; if (null === $Tabs) { $membership = $this->load_membership(); $membership_id = $membership->id; $is_base = $membership->is_base(); $settings = MS_Factory::load('MS_Model_Settings'); // First create a list including all possible tabs. $tabs = array(MS_Rule_Page::RULE_ID => true, MS_Rule_Post::RULE_ID => true, MS_Rule_Category::RULE_ID => true, MS_Rule_Content::RULE_ID => true, MS_Rule_Media::RULE_ID => true, MS_Rule_MenuItem::RULE_ID => true, MS_Rule_ReplaceMenu::RULE_ID => true, MS_Rule_ReplaceLocation::RULE_ID => true, MS_Rule_Shortcode::RULE_ID => true, MS_Rule_Url::RULE_ID => true, MS_Rule_Special::RULE_ID => true, MS_Rule_MemberCaps::RULE_ID => true, MS_Rule_MemberRoles::RULE_ID => true); // Now remove items from the list that are not available. // Optionally show "Posts" if (!MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_POST_BY_POST)) { $tabs[MS_Rule_Post::RULE_ID] = false; } // Optionally show "Category" if (!MS_Model_Addon::is_enabled(MS_Addon_Category::ID)) { $tabs[MS_Rule_Category::RULE_ID] = false; } // Optionally show "Media" if (!MS_Model_Addon::is_enabled(MS_Addon_Mediafiles::ID)) { $tabs[MS_Rule_Media::RULE_ID] = false; } // Either "Menu Item" or "Menus" or "Menu Location" switch ($settings->menu_protection) { case 'menu': $tabs[MS_Rule_MenuItem::RULE_ID] = false; $tabs[MS_Rule_ReplaceLocation::RULE_ID] = false; break; case 'location': $tabs[MS_Rule_MenuItem::RULE_ID] = false; $tabs[MS_Rule_ReplaceMenu::RULE_ID] = false; break; case 'item': default: $tabs[MS_Rule_ReplaceMenu::RULE_ID] = false; $tabs[MS_Rule_ReplaceLocation::RULE_ID] = false; break; } // Maybe "Special Pages". if (!MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_SPECIAL_PAGES)) { $tabs[MS_Rule_Special::RULE_ID] = false; } // Maybe "URLs" if (!MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_URL_GROUPS)) { $tabs[MS_Rule_Url::RULE_ID] = false; } // Maybe "Shortcodes" if (!MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_SHORTCODE)) { $tabs[MS_Rule_Shortcode::RULE_ID] = false; } // Maybe "Membercaps" if (MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_MEMBERCAPS)) { if (MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_MEMBERCAPS_ADV)) { $tabs[MS_Rule_MemberRoles::RULE_ID] = false; } else { $tabs[MS_Rule_MemberCaps::RULE_ID] = false; } } else { $tabs[MS_Rule_MemberRoles::RULE_ID] = false; $tabs[MS_Rule_MemberCaps::RULE_ID] = false; } lib2()->array->equip($_GET, 'page'); // Allow Add-ons to add or remove rule tabs $tabs = apply_filters('ms_controller_protection_tabs', $tabs, $membership_id); $page = sanitize_html_class($_GET['page'], MS_Controller_Plugin::MENU_SLUG . '-memberships'); $rule_titles = MS_Model_Rule::get_rule_type_titles(); $result = array(); foreach ($tabs as $rule_type => $state) { if (!$state) { continue; } $url = sprintf('%s?page=%s&tab=%s', admin_url('admin.php'), $page, $rule_type); // Try to keep the selected Membership and Status filter. if (!empty($_REQUEST['membership_id'])) { $url = esc_url_raw(add_query_arg(array('membership_id' => $_REQUEST['membership_id']), $url)); } if (!empty($_REQUEST['status'])) { $url = esc_url_raw(add_query_arg(array('status' => $_REQUEST['status']), $url)); } $result[$rule_type] = array('title' => $rule_titles[$rule_type], 'url' => $url); } $Tabs = apply_filters('ms_controller_protection_get_available_tabs', $result, $membership_id, $this); } return $Tabs; }
/** * Echo a content list as 2-column table that show Content-Title and the * Available date. * Used by Dripped-Content view. * * @since 1.0.0 * * @param array $contents List of content items to display. */ protected function content_box($contents) { $row_class = ''; ksort($contents); $rule_titles = MS_Model_Rule::get_rule_type_titles(); $edit_url = MS_Controller_Plugin::get_admin_url('protection', array('tab' => $rule->rule_type)); $edit_link = array('id' => 'edit_dripped', 'type' => MS_Helper_Html::TYPE_HTML_LINK); ?> <table class="ms-list-table ms-list-date widefat"> <thead> <tr> <th class="col-icon"> </th> <th class="col-text"><?php _e('Rule', MS_TEXT_DOMAIN); ?> </th> <th class="col-text"><?php _e('Protected Item', MS_TEXT_DOMAIN); ?> </th> <th class="col-date"><?php _e('Access', MS_TEXT_DOMAIN); ?> </th> </tr> </thead> <tbody> <?php foreach ($contents as $id => $content) { $row_class = $row_class == 'alternate' ? '' : 'alternate'; ?> <tr class="<?php echo esc_attr($row_class . ' ' . $content->icon); ?> "> <td class="col-icon"> <i class="dashicons dashicons-<?php echo esc_attr($content->icon); ?> "></i> </td> <td class="col-text col-type"> <?php $edit_link['url'] = esc_url_raw(add_query_arg('tab', $content->type, $edit_url)); $edit_link['value'] = $rule_titles[$content->type]; MS_Helper_Html::html_element($edit_link); ?> </td> <td class="col-text"> <?php MS_Helper_Html::content_tag($content, 'span'); ?> </td> <td class="col-date"> <?php echo '' . $content->date; ?> </td> </tr> <?php } ?> </tbody> </table> <?php }
/** * Echo a content list as tag-list. * * @since 1.0.0 * * @param array $contents List of content items to display. */ protected function content_box($rule) { static $row_items = 0; $rule_titles = MS_Model_Rule::get_rule_type_titles(); $title = $rule_titles[$rule->rule_type]; $contents = (array) $rule->get_contents(null, true); $membership_id = $this->data['membership']->id; $row_items += 1; $new_row = $row_items % 4 === 0; $show_sep = ($row_items - 1) % 4 === 0; if ($show_sep && $row_items > 1) { MS_Helper_Html::html_separator(); } ?> <div class="ms-part-4 ms-min-height"> <?php if (!$new_row) { MS_Helper_Html::html_separator('vertical'); } ?> <div class="ms-bold"> <?php printf('%s (%s):', $title, $rule->count_rules()); ?> </div> <div class="inside"> <ul class="ms-content-tag-list ms-group"> <?php foreach ($contents as $content) { if ($content->access) { MS_Helper_Html::content_tag($content); } } ?> </ul> <div class="ms-protection-edit-wrapper"> <?php $edit_url = MS_Controller_Plugin::get_admin_url('protection', array('tab' => $rule->rule_type, 'membership_id' => $membership_id)); MS_Helper_Html::html_element(array('id' => 'edit_' . $rule->rule_type, 'type' => MS_Helper_Html::TYPE_HTML_LINK, 'title' => $title, 'value' => sprintf(__('Edit %s Access', 'membership2'), $title), 'url' => $edit_url, 'class' => 'wpmui-field-button button')); ?> </div> </div> </div> <?php if ($new_row) { echo '</div><div class="ms-group">'; } }
/** * Output details on which membership denied or allowed access to the * current page * * @since 1.0.0 * @param string $denied_url URL of the denied page (empty if not denied) * @param int $membership_id Membership_id * @param array $rules List of Rule_types */ protected function output_deciding_info($denied_url, $membership_id, $rules) { $membership = MS_Factory::load('MS_Model_Membership', $membership_id); $rule_title = MS_Model_Rule::get_rule_type_titles(); if (!empty($denied_url)) { ?> <div class="ms-sim-denied"> <?php printf(__('Access denied by %s', MS_TEXT_DOMAIN), '<b>' . esc_html($membership->name) . '</b>'); ?> </div> <ul class="ms-sim-rules"> <?php printf('<li><a href="%1$s">%1$s</a></li>', $denied_url); foreach ($rules as $rule_type) { printf('<li><a href="%1$s" target="_blank">%3$s %2$s</a></li>', MS_Controller_Plugin::get_admin_url('protection', array('tab' => $rule_type, 'membership_id' => $membership->id)), $rule_title[$rule_type], __('Denied by Rule:', MS_TEXT_DOMAIN)); } ?> <?php } elseif ($membership->is_valid()) { ?> <div class="ms-sim-allowed"> <?php printf(__('Access granted by %s', MS_TEXT_DOMAIN), '<b>' . esc_html($membership->name) . '</b>'); ?> </div> <ul class="ms-sim-rules"> <?php foreach ($rules as $rule_type) { printf('<li><a href="%1$s" target="_blank">%3$s %2$s</a></li>', MS_Controller_Plugin::get_admin_url('protection', array('tab' => $rule_type, 'membership_id' => $membership->id)), $rule_title[$rule_type], __('Allowed by Rule:', MS_TEXT_DOMAIN)); } ?> </ul> <?php } else { ?> <div class="ms-sim-public"> <?php _e('Unprotected', MS_TEXT_DOMAIN); ?> </div> <?php } }