public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_Adminside::RULE_ID);
        $rule_listtable = new MS_Rule_Adminside_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Protect Admin Side pages', 'membership2'), 'desc' => array(__('Note that WordPress also restricts access to pages before Content Protection is applied.', 'membership2'), __('Tip: Combine with the <b>User Role</b> rules to grant your members additional permission if required!', 'membership2'))), MS_Rule_Adminside::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box();
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_Adminside::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_Content::RULE_ID);
        // This fixes the list-title generated by MS_Helper_ListTable_Rule.
        unset($_GET['status']);
        $rule_listtable = new MS_Rule_Content_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Comments & More Tag', MS_TEXT_DOMAIN), 'desc' => __('Decide how to protect Comments and More Tag contents.', MS_TEXT_DOMAIN)), MS_Rule_Content::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Pages', MS_TEXT_DOMAIN));
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_Content::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_Category::RULE_ID);
        $rule_listtable = new MS_Rule_Category_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = array();
        $header_data['title'] = __('Choose which Categories you want to protect', 'membership2');
        $header_data['desc'] = '';
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', $header_data, MS_Rule_Category::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings ">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Categories', 'membership2'), 'search-cat');
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_Category::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_ReplaceMenu::RULE_ID);
        // This fixes the list-title generated by MS_Helper_ListTable_Rule.
        unset($_GET['status']);
        $listtable = new MS_Rule_ReplaceMenu_ListTable($rule);
        $listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Replace Menus', 'membership2'), 'desc' => __('Replace or protect WordPress menus.', 'membership2')), MS_Rule_ReplaceMenu::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $listtable->views();
        $listtable->search_box();
        ?>
			<form action="" method="post">
				<?php 
        $listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_ReplaceMenu::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_MemberRoles::RULE_ID);
        $rule_listtable = new MS_Rule_MemberRoles_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data['title'] = __('Assign WordPress User Roles to your Members', MS_TEXT_DOMAIN);
        $header_data['desc'] = array(__('When assigning a Membership to any role, then this role will be added to all members of that Membership. You can even assign multiple roles to a single Membership.', MS_TEXT_DOMAIN), __('For security reasons the Administrator role cannot be assigned to a Membership.', MS_TEXT_DOMAIN));
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', $header_data, MS_Rule_MemberRoles::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Capability', MS_TEXT_DOMAIN));
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_MemberRoles::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_CptItem::RULE_ID);
        $rule_listtable = new MS_Rule_CptItem_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Choose Custom Post Types you want to protect', MS_TEXT_DOMAIN), 'desc' => ''), MS_Rule_CptItem::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Posts', MS_TEXT_DOMAIN));
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_CptItem::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_Page::RULE_ID);
        $rule_listtable = new MS_Rule_Page_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Apply protection to Pages and and grant access to members', 'membership2'), 'desc' => __('All pages that do not have Content Protection applied are visible to Everyone', 'membership2')), MS_Rule_Page::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Pages', 'membership2'));
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_Page::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_MemberCaps::RULE_ID);
        $rule_listtable = new MS_Rule_MemberCaps_ListTable($rule);
        $rule_listtable->prepare_items();
        $header_data = array();
        $header_data['title'] = __('Assign WordPress Capabilities to your Members', 'membership2');
        $header_data['desc'] = array(__('Fine-tune member permissions by assigning certain Capabilities to each Membership. All Members of that Membership are granted the specified Capabilities.', 'membership2'), __('Important: All users that are not inside these Memberships will be striped of any Protected Capability!', 'membership2'), __('You should only use these rules if you know what you are doing! Granting the wrong capabilities makes your website prone to abuse. For a bit of security we already removed the most critical Capabilities from this list.', 'membership2'));
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', $header_data, MS_Rule_MemberCaps::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $rule_listtable->views();
        $rule_listtable->search_box(__('Capability', 'membership2'));
        ?>
			<form action="" method="post">
				<?php 
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_MemberCaps::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
 /**
  * Load membership from request.
  *
  * @since  1.0.0
  *
  * @return MS_Model_Membership The membership model object.
  */
 public function load_membership()
 {
     $membership_id = 0;
     if (empty($this->model)) {
         if (!empty($_REQUEST['membership_id'])) {
             $membership_id = absint($_REQUEST['membership_id']);
             if ($membership_id == MS_Model_Membership::get_base()->id) {
                 wp_safe_redirect(esc_url_raw(remove_query_arg(array('membership_id'))));
             }
         } else {
             $membership_id = MS_Model_Membership::get_base()->id;
         }
         $this->model = MS_Factory::load('MS_Model_Membership', $membership_id);
         $this->model = apply_filters('ms_controller_protection_load_membership', $this->model, $this);
     }
     return $this->model;
 }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Rule_Url::RULE_ID);
        $listtable = new MS_Rule_Url_ListTable($rule);
        $listtable->prepare_items();
        if ($listtable->list_shows_base_items()) {
            $add_fields = array('url' => array('id' => 'url_value', 'title' => __('Add new URL Address', 'membership2'), 'type' => MS_Helper_Html::INPUT_TYPE_TEXT, 'class' => 'ms-text-medium'), 'url_add' => array('id' => 'url_add', 'type' => MS_Helper_Html::INPUT_TYPE_SUBMIT, 'value' => __('Protect this URL', 'membership2'), 'button_type' => 'button'), 'url_action' => array('name' => 'rule_action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => MS_Rule_Url::ACTION_ADD), 'url_nonce' => array('name' => '_wpnonce', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => wp_create_nonce(MS_Rule_Url::ACTION_ADD)));
        }
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('URL Restriction', 'membership2'), 'desc' => array(__('Specify URLs that you want to protect.', 'membership2'), __('e.g. <b>example.com/protectme/</b> will protect all URLs that contain <b>example.com/protectme/</b>, including any child page.', 'membership2')), 'class' => ''), MS_Rule_Url::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        ?>

			<form action="" method="post">
			<?php 
        if ($listtable->list_shows_base_items()) {
            foreach ($add_fields as $field) {
                MS_Helper_Html::html_element($field);
            }
        }
        ?>
			</form>

			<?php 
        $listtable->views();
        $listtable->search_box();
        ?>
			<form action="" method="post">
				<?php 
        $listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_Url::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $menus = $membership->get_rule(MS_Rule_MenuItem::RULE_ID)->get_menu_array();
        $menu_ids = array_keys($menus);
        $menu_id = reset($menu_ids);
        if (isset($_REQUEST['menu_id'])) {
            $menu_id = $_REQUEST['menu_id'];
        }
        // This fixes the list-title generated by MS_Helper_ListTable_Rule.
        unset($_GET['status']);
        $rule_menu = $membership->get_rule(MS_Rule_MenuItem::RULE_ID);
        $rule_listtable = new MS_Rule_MenuItem_ListTable($rule_menu, $menus, $menu_id);
        $fields['rule_menu'] = array('id' => 'rule_menu', 'name' => 'rule', 'value' => 'menu', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN);
        $menu_url = esc_url_raw(add_query_arg(array('menu_id' => $menu_id)));
        $rule_listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('Menu Items', MS_TEXT_DOMAIN), 'desc' => __('Protect individual menu items.', MS_TEXT_DOMAIN)), MS_Rule_MenuItem::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        ?>

			<form id="ms-menu-form" method="post" action="<?php 
        echo '' . $menu_url;
        ?>
">
				<?php 
        MS_Helper_Html::html_element($fields['rule_menu']);
        $rule_listtable->views();
        $rule_listtable->display();
        do_action('ms_view_membership_protectedcontent_footer', MS_Rule_MenuItem::RULE_ID, $this);
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
    public function to_html()
    {
        $membership = MS_Model_Membership::get_base();
        $rule = $membership->get_rule(MS_Addon_Bbpress_Rule::RULE_ID);
        $listtable = new MS_Addon_Bbpress_Rule_Listtable($rule);
        $listtable->prepare_items();
        $header_data = apply_filters('ms_view_membership_protectedcontent_header', array('title' => __('bbPress', MS_TEXT_DOMAIN), 'desc' => __('Protect the following bbPress content to members only.', MS_TEXT_DOMAIN)), MS_Addon_Bbpress_Rule::RULE_ID, $this);
        ob_start();
        ?>
		<div class="ms-settings">
			<?php 
        MS_Helper_Html::settings_tab_header($header_data);
        $listtable->views();
        ?>
			<form action="" method="post">
				<?php 
        $listtable->display();
        ?>
			</form>
		</div>
		<?php 
        MS_Helper_Html::settings_footer();
        return ob_get_clean();
    }
示例#13
0
 /**
  * Returns the ListTable object for this rule.
  *
  * @since  1.0.0
  *
  * @return MS_Helper_ListTable
  */
 public function return_listtable($empty)
 {
     $base = MS_Model_Membership::get_base();
     $rule = $base->get_rule(self::RULE_ID);
     return new MS_Rule_MemberRoles_ListTable($rule);
 }
 /**
  * Prepare html fields.
  *
  * @since  1.0.0
  *
  * @return array
  */
 public function prepare_fields()
 {
     // The ID of the main system membership.
     $base_id = MS_Model_Membership::get_base()->id;
     $sorted_memberships = array();
     $memberships = MS_Model_Membership::get_memberships(array('include_base' => 1));
     foreach ($memberships as $membership) {
         if ($base_id == $membership->id) {
             $label = __('- No membership / Visitor -', MS_TEXT_DOMAIN);
         } else {
             $label = $membership->name;
             if (!$membership->active) {
                 $label .= ' ' . __('(Inactive)', MS_TEXT_DOMAIN);
             }
         }
         $sorted_memberships[$membership->id] = $label;
     }
     asort($sorted_memberships);
     $fields = array('exit_button' => array('type' => MS_Helper_Html::TYPE_HTML_LINK, 'value' => __('Exit Test Mode', MS_TEXT_DOMAIN), 'url' => MS_Controller_Adminbar::get_simulation_exit_url(), 'class' => 'button'), 'action_field' => array('name' => 'action', 'value' => 'ms_simulate', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN), 'membership_id' => array('id' => 'ab-membership-id', 'name' => 'membership_id', 'value' => $this->data['membership_id'], 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'field_options' => $sorted_memberships), 'nonce_field' => array('id' => '_wpnonce', 'value' => wp_create_nonce('ms_simulate'), 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN), 'simulate_date' => array('id' => 'simulate_date', 'type' => MS_Helper_Html::INPUT_TYPE_DATEPICKER, 'value' => $this->data['simulate_date'], 'class' => 'ms-admin-bar-date ms-date'), 'simulate_submit' => array('id' => 'simulate_submit', 'type' => MS_Helper_Html::INPUT_TYPE_SUBMIT, 'value' => __('Go', MS_TEXT_DOMAIN), 'class' => 'ms-admin-bar-submit'));
     return apply_filters('ms_view_admin_bar_prepare_fields', $fields, $this);
 }
示例#15
0
 /**
  * Returns a list of post_ids to exclude or include to fullfil the specified
  * Membership/Status filter.
  *
  * @since  1.0.0
  * @param  array $args
  * @return array {
  *     List of post_ids to exclude or include
  *
  *     array $include
  *     array $exclude
  * }
  */
 public function get_exclude_include($args)
 {
     // Filter for Membership and Protection status via 'exclude'/'include'
     $include = array();
     $exclude = array();
     $base_rule = $this;
     $child_rule = $this;
     if (!$this->is_base_rule) {
         $base_rule = MS_Model_Membership::get_base()->get_rule($this->rule_type);
     }
     if (!empty($args['membership_id'])) {
         $child_membership = MS_Factory::load('MS_Model_Membership', $args['membership_id']);
         $child_rule = $child_membership->get_rule($this->rule_type);
     }
     $base_items = array_keys($base_rule->rule_value, true);
     $child_items = array_keys($child_rule->rule_value, true);
     $status = !empty($args['rule_status']) ? $args['rule_status'] : null;
     switch ($status) {
         case MS_Model_Rule::FILTER_PROTECTED:
             if (!empty($args['membership_id'])) {
                 $include = array_intersect($child_items, $base_items);
             } else {
                 $include = $child_items;
             }
             if (empty($include)) {
                 $include = array(-1);
             }
             break;
         case MS_Model_Rule::FILTER_NOT_PROTECTED:
             if (!empty($args['membership_id'])) {
                 $include = array_diff($base_items, $child_items);
                 if (empty($include) && empty($exclude)) {
                     $include = array(-1);
                 }
             } else {
                 $exclude = $child_items;
                 if (empty($include) && empty($exclude)) {
                     $exclude = array(-1);
                 }
             }
             break;
         default:
             // If not visitor membership, just show all Membership2
             if (!$child_rule->is_base_rule) {
                 $include = $base_items;
             }
             break;
     }
     /**
      * Allow rules/Add-ons to modify the exclude/include list.
      *
      * @since  1.0.0
      */
     $exclude = array_unique(apply_filters('ms_rule_exclude_items-' . $this->rule_type, $exclude, $args));
     $include = array_unique(apply_filters('ms_rule_include_items-' . $this->rule_type, $include, $args));
     $res = (object) array('include' => null, 'exclude' => null);
     if (!empty($include)) {
         $res->include = $include;
     } elseif (!empty($exclude)) {
         $res->exclude = $exclude;
     } elseif (!empty($args['membership_id'])) {
         $res->include = array(-1);
     }
     return $res;
 }
 /**
  * Processes a form submit and changes the rule values, if valid form data
  * is found.
  *
  * @since  1.0.0
  */
 private function process_form()
 {
     $action = false;
     if (isset($_POST['rule_action'])) {
         $action = $_POST['rule_action'];
         if (!$this->verify_nonce($action)) {
             $action = false;
         }
     } elseif (isset($_GET['rule_action'])) {
         $action = $_GET['rule_action'];
         if (!$this->verify_nonce($action, 'GET')) {
             $action = false;
         }
     }
     if (empty($action)) {
         return;
     }
     $redirect = false;
     switch ($action) {
         case self::ACTION_ADD:
             lib3()->array->strip_slashes($_POST, 'url_value');
             $url = $_POST['url_value'];
             $base = MS_Model_Membership::get_base();
             $rule = $base->get_rule(self::RULE_ID);
             $rule->add_url($url);
             $base->set_rule(self::RULE_ID, $rule);
             $base->save();
             $redirect = true;
             break;
         case self::ACTION_DELETE:
             $id = $_REQUEST['item'];
             $base = MS_Model_Membership::get_base();
             $rule = $base->get_rule(self::RULE_ID);
             $rule->delete_url($id);
             $base->set_rule(self::RULE_ID, $rule);
             $base->save();
             $redirect = true;
             break;
     }
     if ($redirect) {
         $target = esc_url_raw(remove_query_arg(array('_wpnonce', 'item', 'rule_action')));
         wp_safe_redirect($target);
         exit;
     }
 }
 /**
  * Returnst the membership of the current view.
  *
  * @since  1.0.0
  * @return bool
  */
 public function get_membership()
 {
     static $Membership = null;
     if (null === $Membership) {
         if (!empty($_REQUEST['membership_id'])) {
             $Membership = MS_Factory::load('MS_Model_Membership', $_REQUEST['membership_id']);
         }
         if (empty($Membership) || !$Membership->is_valid()) {
             $Membership = MS_Model_Membership::get_base();
         }
     }
     return $Membership;
 }
 /**
  * Main entry point: Handles the export action.
  *
  * This task will exit the current request as the result will be a download
  * and no HTML page that is displayed.
  *
  * @since  1.0.0
  */
 public function process()
 {
     $data = (object) array();
     $data->source_key = self::KEY;
     $data->source = 'Membership2';
     $data->plugin_version = MS_PLUGIN_VERSION;
     $data->export_time = date('Y-m-d H:i');
     $data->notes = array(__('Exported data:', MS_TEXT_DOMAIN), __('- Memberships (without protection rules)', MS_TEXT_DOMAIN), __('- Members (including Stripe/Authorize payment settings)', MS_TEXT_DOMAIN), __('- Subscriptions (link between Members and Memberships)', MS_TEXT_DOMAIN), __('- Invoices', MS_TEXT_DOMAIN));
     $data->memberships = array();
     // Export the base membership (i.e. the Membership2 settings)
     $membership = MS_Model_Membership::get_base();
     $data->memberships[] = $this->export_membership($membership->id);
     // Export all memberships.
     $memberships = MS_Model_Membership::get_memberships(array('post_parent' => 0));
     foreach ($memberships as $membership) {
         $data->memberships[] = $this->export_membership($membership->id);
     }
     // Export the members.
     $members = MS_Model_Member::get_members();
     $data->members = array();
     foreach ($members as $member) {
         if (!$member->is_member) {
             continue;
         }
         $data->members[] = $this->export_member($member->id);
     }
     // Export plugin settings.
     $obj = array();
     $data->settings = $this->export_settings();
     // Export Coupons.
     $data->coupons = array();
     lib2()->net->file_download(json_encode($data), 'membership2-export.json');
 }
 /**
  * Add 'Test Memberships' node.
  *
  * @since  1.0.0
  *
  */
 private function add_test_membership_node()
 {
     global $wp_admin_bar;
     $base_id = MS_Model_Membership::get_base()->id;
     if ($base_id) {
         $link_url = self::get_simulation_url($base_id);
         $wp_admin_bar->add_node(apply_filters('ms_controller_adminbar_add_test_membership_node', array('id' => 'ms-test-memberships', 'title' => __('Test Memberships', 'membership2'), 'href' => $link_url, 'meta' => array('class' => 'ms-test-memberships', 'title' => __('Membership Simulation Menu', 'membership2'), 'tabindex' => '1'))));
     }
 }
 /**
  * Load all the rules that are used by the plugin.
  *
  * Related Action Hooks:
  * - ms_load_member
  *
  * @since  1.0.0
  */
 public function load_rules()
 {
     do_action('ms_load_rules', $this);
     $rule_types = MS_Model_Rule::get_rule_types();
     $base = MS_Model_Membership::get_base();
     foreach ($rule_types as $rule_type) {
         $rule = $base->get_rule($rule_type);
     }
 }
 /**
  * Get membership from request.
  *
  * @since  1.0.0
  *
  * @return MS_Model_Membership or null if not found.
  */
 private function get_membership()
 {
     $membership_id = 0;
     if (!empty($_GET['membership_id'])) {
         $membership_id = $_GET['membership_id'];
     } elseif (!empty($_POST['membership_id'])) {
         $membership_id = $_POST['membership_id'];
     }
     $membership = null;
     if (!empty($membership_id)) {
         $membership = MS_Factory::load('MS_Model_Membership', $membership_id);
     } else {
         $membership = MS_Model_Membership::get_base();
     }
     return apply_filters('ms_controller_rule_get_membership', $membership, $this);
 }
 /**
  * Membership metabox callback function for displaying the UI.
  *
  * @since  1.0.0
  *
  * @param object $post The current post object.
  */
 public function membership_metabox($post)
 {
     $data = array();
     if (MS_Model_Pages::is_membership_page()) {
         $data['special_page'] = true;
     } else {
         $all_memberships = MS_Model_Membership::get_memberships();
         $base = MS_Model_Membership::get_base();
         $data['base_id'] = $base->id;
         // Find the post-type of the current post.
         if ('attachment' == $post->post_type) {
             $parent_id = $post->post_parent;
             $post_type = get_post_type($parent_id);
         } else {
             $post_type = $post->post_type;
         }
         // Get the base protection rule and check if post is protected.
         $rule = $this->get_rule($base, $post_type);
         $data['is_protected'] = !$rule->has_access($post->ID, false);
         $data['rule_type'] = $rule->rule_type;
         // Check each membership to see if the post is protected.
         foreach ($all_memberships as $membership) {
             if ($membership->is_base) {
                 continue;
             }
             $rule = $this->get_rule($membership, $post_type);
             $data['access'][$membership->id]['has_access'] = $rule->get_rule_value($post->ID);
             $data['access'][$membership->id]['name'] = $membership->name;
         }
     }
     $data['post_id'] = $post->ID;
     $data['read_only'] = $this->is_read_only($post->post_type);
     $view = MS_Factory::create('MS_View_Metabox');
     $view->data = apply_filters('ms_view_membership_metabox_data', $data, $this);
     $view->render();
 }
 /**
  * Give access to content.
  *
  * @since  1.0.0
  * @param string $id The content id to give access.
  */
 public function give_access($id)
 {
     if ($this->is_base_rule) {
         // The base rule can only be updated via Ajax!
         $cur_val = $this->get_rule_value($id);
         if (empty($cur_val)) {
             $this->set_access($id, true);
         }
         return;
     } else {
         $base_rule = MS_Model_Membership::get_base()->get_rule($this->rule_type);
         $value = $base_rule->get_rule_value($id);
     }
     $this->set_access($id, $value);
     do_action('ms_rule_replacemenu_give_access', $id, $this);
 }
示例#24
0
 /**
  * Returns a list with all protected URLs.
  *
  * @since  1.0.0
  * @param string $hash The URL-hash.
  */
 public function get_protected_urls()
 {
     static $Protected_Urls = null;
     if (null === $Protected_Urls) {
         $base_rule = MS_Model_Membership::get_base()->get_rule($this->rule_type);
         $Protected_Urls = $base_rule->rule_value;
     }
     return $Protected_Urls;
 }
 /**
  * Set initial protection.
  *
  * @since  1.0.0
  */
 public function protect_content()
 {
     parent::protect_content();
     // ********* COMMENTS **********
     // No comments on special pages (signup, account, ...)
     $this->add_filter('the_content', 'check_special_page');
     /*
      * We find the public comment access once.
      * This is the access ganted to guests or memberships that do not define
      * an explicit comment access rule.
      */
     if (null === self::$comment_public) {
         $base_rule = MS_Model_Membership::get_base()->get_rule($this->rule_type);
         if (null === $base_rule->get_rule_value(self::COMMENT_WRITE)) {
             self::$comment_public = self::COMMENT_WRITE;
         } elseif (null === $base_rule->get_rule_value(self::COMMENT_READ)) {
             self::$comment_public = self::COMMENT_READ;
         } else {
             self::$comment_public = self::COMMENT_NO_ACCESS;
         }
     }
     // Find the most generous comment access rule.
     $has_full = $this->get_rule_value(self::COMMENT_WRITE);
     $has_read = $this->get_rule_value(self::COMMENT_READ);
     $has_none = $this->get_rule_value(self::COMMENT_NO_ACCESS);
     if (true === $has_full) {
         // Membership allows full comment access.
         self::$comment_access = self::COMMENT_WRITE;
     } elseif (true === $has_read) {
         // Membership allows read-only access.
         if (self::$comment_access == self::COMMENT_NO_ACCESS) {
             self::$comment_access = self::COMMENT_READ;
         }
     } elseif (true === $has_none) {
         // Membership does not allow any comment access.
         // (no change, this is the default access level)
     } else {
         // This membership does not define a comment access: Use public access!
         self::$comment_access = self::$comment_public;
     }
     $this->add_action('ms_setup_protection_done', 'protect_comments');
     // ********** READ MORE **********
     $this->protection_message = MS_Plugin::instance()->settings->get_protection_message(MS_Model_Settings::PROTECTION_MSG_MORE_TAG, $this->membership_id);
     if (!parent::has_access(self::MORE_LIMIT)) {
         $this->add_filter('the_content_more_link', 'show_moretag_protection', 99, 2);
         $this->add_filter('the_content', 'replace_more_tag_content', 1);
         $this->add_filter('the_content_feed', 'replace_more_tag_content', 1);
     }
 }