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_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()
    {
        $settings = $this->data['settings'];
        $fields = array('plugin_enabled' => array('id' => 'plugin_enabled', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'title' => __('Content Protection', 'membership2'), 'desc' => __('This setting toggles the content protection on this site.', 'membership2'), 'value' => MS_Plugin::is_enabled(), 'data_ms' => array('action' => MS_Controller_Settings::AJAX_ACTION_TOGGLE_SETTINGS, 'setting' => 'plugin_enabled')), 'hide_admin_bar' => array('id' => 'hide_admin_bar', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'title' => __('Hide admin toolbar', 'membership2'), 'desc' => __('Hide the admin toolbar for non administrator users.', 'membership2'), 'value' => $settings->hide_admin_bar, 'data_ms' => array('action' => MS_Controller_Settings::AJAX_ACTION_TOGGLE_SETTINGS, 'setting' => 'hide_admin_bar')));
        $fields = apply_filters('ms_view_settings_prepare_general_fields', $fields);
        $setup = MS_Factory::create('MS_View_Settings_Page_Setup');
        $action_url = esc_url_raw(remove_query_arg(array('msg')));
        ob_start();
        MS_Helper_Html::settings_tab_header();
        ?>

		<form action="<?php 
        echo esc_url($action_url);
        ?>
" method="post" class="cf">
			<div class="cf">
				<div class="ms-half">
					<?php 
        MS_Helper_Html::html_element($fields['plugin_enabled']);
        ?>
				</div>
				<div class="ms-half">
					<?php 
        MS_Helper_Html::html_element($fields['hide_admin_bar']);
        ?>
				</div>
			</div>
			<?php 
        MS_Helper_Html::html_separator();
        MS_Helper_Html::html_element($setup->html_full_form());
        ?>
		</form>
		<?php 
        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_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_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_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_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();
    }
    public function to_html()
    {
        $export_action = MS_Controller_Import::ACTION_EXPORT;
        $import_action = MS_Controller_Import::ACTION_PREVIEW;
        $messages = $this->data['message'];
        $preview = false;
        if (isset($messages['preview'])) {
            $preview = $messages['preview'];
        }
        $export_fields = array('export' => array('id' => 'btn_export', 'type' => MS_Helper_Html::INPUT_TYPE_SUBMIT, 'value' => __('Generate Export', 'membership2'), 'desc' => __('Generate an export file with the current membership settings. ' . '<em>Note that this is not a full backup of the plugin settings.</em>', 'membership2')), 'action' => array('id' => 'action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $export_action), 'nonce' => array('id' => '_wpnonce', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => wp_create_nonce($export_action)));
        $file_field = array('id' => 'upload', 'type' => MS_Helper_Html::INPUT_TYPE_FILE, 'title' => __('From export file', 'membership2'));
        $import_options = array('file' => array('text' => MS_Helper_Html::html_element($file_field, true), 'disabled' => !MS_Model_Import_File::present()), 'membership' => array('text' => __('Membership (WPMU DEV)', 'membership2'), 'disabled' => !MS_Model_Import_Membership::present()));
        $sel_source = 'file';
        if (isset($_POST['import_source']) && isset($import_options[$_POST['import_source']])) {
            $sel_source = $_POST['import_source'];
        }
        $import_fields = array('source' => array('id' => 'import_source', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO, 'title' => __('Choose an import source', 'membership2'), 'field_options' => $import_options, 'value' => $sel_source), 'import' => array('id' => 'btn_import', 'type' => MS_Helper_Html::INPUT_TYPE_SUBMIT, 'value' => __('Preview Import', 'membership2'), 'desc' => __('Import data into this installation.', 'membership2')), 'action' => array('id' => 'action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $import_action), 'nonce' => array('id' => '_wpnonce', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => wp_create_nonce($import_action)));
        ob_start();
        MS_Helper_Html::settings_tab_header(array('title' => __('Import Tool', 'membership2')));
        ?>

		<div>
			<?php 
        if ($preview) {
            ?>
				<form action="" method="post">
					<?php 
            echo '' . $preview;
            ?>
				</form>
			<?php 
        } else {
            ?>
				<form action="" method="post" enctype="multipart/form-data">
					<?php 
            MS_Helper_Html::settings_box($import_fields, __('Import data', 'membership2'));
            ?>
				</form>
				<form action="" method="post">
					<?php 
            MS_Helper_Html::settings_box($export_fields, __('Export data', 'membership2'));
            ?>
				</form>
			<?php 
        }
        ?>
		</div>
		<?php 
        return ob_get_clean();
    }
    /**
     * Overrides parent's to_html() method.
     *
     * Creates an output buffer, outputs the HTML and grabs the buffer content before releasing it.
     * HTML contains the list of available payment gateways.
     *
     * @since  1.0.0
     *
     * @return string
     */
    public function to_html()
    {
        $fields = $this->get_global_payment_fields();
        ob_start();
        ?>
		<div id="ms-payment-settings-wrapper">
		<div class="ms-global-payment-wrapper">
			<div class="ms-list-table-wrapper">
				<?php 
        MS_Helper_Html::settings_tab_header(array('title' => __('Global Payment Settings', MS_TEXT_DOMAIN), 'desc' => __('These are shared across all memberships.', MS_TEXT_DOMAIN)));
        ?>
				<div class="ms-half space">
					<?php 
        MS_Helper_Html::html_element($fields['currency']);
        ?>
				</div>
				<div class="ms-half">
					<?php 
        MS_Helper_Html::html_element($fields['invoice_sender_name']);
        ?>
				</div>

				<div class="ms-group-head">
					<div class="ms-bold"><?php 
        _e('Payment Gateways', MS_TEXT_DOMAIN);
        ?>
</div>
					<div class="ms-description"><?php 
        _e('You need to set-up at least one Payment Gateway to be able to process payments.', MS_TEXT_DOMAIN);
        ?>
</div>
				</div>

				<div class="gateways">
					<?php 
        $this->gateway_settings();
        ?>
				</div>
			</div>

			<?php 
        MS_Helper_Html::settings_footer();
        ?>
		</div>
		</div>
		<?php 
        $html = ob_get_clean();
        return $html;
    }
    /**
     * Return the Form HTML code.
     *
     * @since  1.0.1.0
     * @return string
     */
    public function render_tab()
    {
        $fields = $this->prepare_fields();
        ob_start();
        ?>
		<div class="ms-addon-wrap">
			<?php 
        MS_Helper_Html::settings_tab_header(array('title' => __('Profile Fields Settings', MS_TEXT_DOMAIN)));
        foreach ($fields as $field) {
            MS_Helper_Html::html_element($field);
        }
        ?>
		</div>
		<?php 
        $html = ob_get_clean();
        echo $html;
    }
    public function render_tab()
    {
        $fields = $this->prepare_fields();
        ob_start();
        ?>
		<div class="ms-addon-wrap">
			<?php 
        MS_Helper_Html::settings_tab_header(array('title' => __('Redirect Settings', 'membership2'), 'desc' => array(__('Specify your custom URLs here. You can use either an absolute URL (starting with "http://") or an site-relative path (like "/some-page/")', 'membership2'), sprintf(__('The URLs you specify here can always be overwritten in the %slogin shortcode%s using the redirect-attributes. Example: <code>[%s redirect_login="******" redirect_logout="/good-bye/"]</code>.', 'membership2'), sprintf('<a href="%s#ms-membership-login" target="_blank">', MS_Controller_Plugin::get_admin_url('help', array('tab' => 'shortcodes'))), '</a>', MS_Helper_Shortcode::SCODE_LOGIN))));
        foreach ($fields as $field) {
            MS_Helper_Html::html_element($field);
        }
        ?>
		</div>
		<?php 
        $html = ob_get_clean();
        echo $html;
    }
    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();
    }
    /**
     * Returns the HTML code of the Settings form.
     *
     * @since  1.0.0
     * @return string
     */
    public function render_tab()
    {
        $fields = $this->prepare_fields();
        $manage_url = MS_Controller_Plugin::get_admin_url('settings', array('tab' => MS_Addon_Attributes::ID));
        ob_start();
        ?>
		<div class="ms-addon-wrap">
			<?php 
        MS_Helper_Html::settings_tab_header(array('title' => __('Custom Membership Attributes', 'membership2'), 'desc' => sprintf(__('You can manage custom attributes in %sthe plugin settings%s.', 'membership2'), '<a href="' . $manage_url . '">', '</a>')));
        echo '<div class="ms-attributes">';
        foreach ($fields as $field) {
            MS_Helper_Html::html_element($field);
        }
        echo '</div>';
        ?>
		</div>
		<?php 
        $html = ob_get_clean();
        echo $html;
    }
    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();
    }
    /**
     * Returns the HTML code of the Settings form.
     *
     * @since  1.0.0
     * @return string
     */
    public function render_tab()
    {
        $groups = $this->prepare_fields();
        ob_start();
        ?>
		<div class="ms-addon-wrap">
			<?php 
        MS_Helper_Html::settings_tab_header(array('title' => __('Custom Membership Attributes', MS_TEXT_DOMAIN), 'desc' => __('Define custom fields that are available in the Memberships Edit-Page.', MS_TEXT_DOMAIN)));
        foreach ($groups as $key => $fields) {
            echo '<div class="ms-group ms-group-' . esc_attr($key) . '">';
            foreach ($fields as $field) {
                MS_Helper_Html::html_element($field);
            }
            echo '</div>';
        }
        MS_Helper_Html::html_separator();
        $help_link = MS_Controller_Plugin::get_admin_url('help', array('tab' => 'shortcodes'));
        printf('<p>%s</p><ul><li>%s</li><li>%s</li><li>%s</li><li>%s</li></ul>', __('How to use custom attribute values:', MS_TEXT_DOMAIN), sprintf(__('Via the %sshortcode%s %s', MS_TEXT_DOMAIN), '<a href="' . $help_link . '#ms-membership-buy">', '</a>', '<code>[<b>' . MS_Addon_Attributes::SHORTCODE . '</b> slug="slug" id="..."]</code>'), sprintf(__('Via WordPress filter %s', MS_TEXT_DOMAIN), '<code>$val = apply_filters( "<b>ms_membership_attr</b>", "", "slug", $membership_id );</code>'), sprintf(__('Get via php function %s', MS_TEXT_DOMAIN), '<code>$val = <b>ms_membership_attr</b>( "slug", $membership_id );</code>'), sprintf(__('Set via php function %s', MS_TEXT_DOMAIN), '<code><b>ms_membership_attr_set</b>( "slug", $val, $membership_id );</code>'));
        ?>
		</div>
		<?php 
        $html = ob_get_clean();
        echo $html;
    }
    /**
     * Return the HTML form.
     *
     * @since  1.0.0
     * @return string
     */
    public function to_html()
    {
        $fields = $this->get_fields();
        // TODO: Fix that condition again.
        $has_more = true;
        $title = __('Protection Messages', MS_TEXT_DOMAIN);
        if (isset($this->data['membership'])) {
            $membership = $this->data['membership'];
        } else {
            $membership = false;
        }
        if ($membership instanceof MS_Model_Membership) {
            $settings_url = MS_Controller_Plugin::get_admin_url('settings', array('tab' => MS_Controller_Settings::TAB_MESSAGES));
            $desc = sprintf(__('Here you can override %sdefault settings%s for this membership.', MS_TEXT_DOMAIN), '<a href="' . $settings_url . '">', '</a>');
        } else {
            $desc = '';
        }
        ob_start();
        MS_Helper_Html::settings_tab_header(array('title' => $title, 'desc' => $desc));
        ?>
		<form class="ms-form" action="" method="post">
			<?php 
        $subtitle = apply_filters('ms_translation_flag', __('Content protection message', MS_TEXT_DOMAIN), 'message-protected');
        MS_Helper_Html::settings_box($fields['content'], $subtitle, '', 'open');
        $subtitle = apply_filters('ms_translation_flag', __('Shortcode protection message', MS_TEXT_DOMAIN), 'message-shortcode');
        MS_Helper_Html::settings_box($fields['shortcode'], $subtitle, '', 'open');
        if ($has_more) {
            $subtitle = apply_filters('ms_translation_flag', __('More tag protection message', MS_TEXT_DOMAIN), 'message-more_tag');
            MS_Helper_Html::settings_box($fields['more_tag'], $subtitle, '', 'open');
        }
        ?>
		</form>
		<?php 
        $html = ob_get_clean();
        return $html;
    }
    /**
     * Return the HTML form.
     *
     * @since  1.0.0
     * @return string
     */
    public function to_html()
    {
        $comm = $this->data['comm'];
        $fields = $this->get_fields();
        $this->add_action('admin_footer', 'wp_footer');
        $title = __('Automated Email Responses', MS_TEXT_DOMAIN);
        if (isset($this->data['membership'])) {
            $membership = $this->data['membership'];
        } else {
            $membership = false;
        }
        if ($membership instanceof MS_Model_Membership) {
            $settings_url = MS_Controller_Plugin::get_admin_url('settings', array('tab' => MS_Controller_Settings::TAB_EMAILS));
            $desc = sprintf(__('Here you can override %sdefault messages%s for this membership.', MS_TEXT_DOMAIN), '<a href="' . $settings_url . '">', '</a>');
        } else {
            $desc = '';
        }
        ob_start();
        MS_Helper_Html::settings_tab_header(array('title' => $title, 'desc' => $desc));
        ?>

		<form id="ms-comm-type-form" action="" method="post">
			<?php 
        MS_Helper_Html::html_element($fields['load_action']);
        MS_Helper_Html::html_element($fields['load_nonce']);
        MS_Helper_Html::html_element($fields['comm_type']);
        MS_Helper_Html::html_element($fields['switch_comm_type']);
        ?>
		</form>

		<?php 
        MS_Helper_Html::html_separator();
        if (!empty($fields['override'])) {
            MS_Helper_Html::html_element($fields['override']);
        }
        ?>

		<form action="" method="post" class="ms-editor-form">
			<?php 
        if (!empty($fields['membership_id'])) {
            MS_Helper_Html::html_separator();
            MS_Helper_Html::html_element($fields['membership_id']);
        }
        MS_Helper_Html::html_element($fields['action']);
        MS_Helper_Html::html_element($fields['nonce']);
        MS_Helper_Html::html_element($fields['type']);
        if (is_a($comm, 'MS_Model_Communication')) {
            printf('<h3>%1$s %2$s: %3$s</h3><div class="ms-description" style="margin-bottom:20px;">%4$s</div>', $comm->get_title(), __('Message', MS_TEXT_DOMAIN), MS_Helper_Html::html_element($fields['enabled'], true), $comm->get_description());
            if ($comm->period_enabled) {
                echo '<div class="ms-period-wrapper clear">';
                $fields['period_unit'] = $comm->set_period_name($fields['period_unit']);
                MS_Helper_Html::html_element($fields['period_unit']);
                MS_Helper_Html::html_element($fields['period_type']);
                echo '</div>';
            }
        }
        MS_Helper_Html::html_element($fields['subject']);
        MS_Helper_Html::html_element($fields['email_body']);
        MS_Helper_Html::html_element($fields['cc_enabled']);
        echo ' &nbsp; ';
        MS_Helper_Html::html_element($fields['cc_email']);
        MS_Helper_Html::html_separator();
        MS_Helper_Html::html_element($fields['save_email']);
        ?>
		</form>
		<?php 
        return ob_get_clean();
    }