示例#1
0
 /**
  * Validate period type.
  *
  * @since  1.0.0
  *
  * @param string $period_type The period type to validate.
  * @param int $default The default value when not validated. Default to days.
  */
 public function validate_period_type($period_type, $default = MS_Helper_Period::PERIOD_TYPE_DAYS)
 {
     $valid_types = MS_Helper_Period::get_period_types();
     if (!isset($valid_types[$period_type])) {
         $period_type = $default;
     }
     return apply_filters('ms_model_validate_period_type', $period_type, $this);
 }
 /**
  * Prepare the fields that are displayed in the form.
  *
  * @since  1.0.1.0
  * @return array
  */
 protected function get_fields()
 {
     $comm = $this->data['comm'];
     $membership = false;
     $membership_id = 0;
     if (isset($this->data['membership'])) {
         $membership = $this->data['membership'];
         if ($membership instanceof MS_Model_Membership) {
             $membership_id = $membership->id;
         } else {
             $membership = false;
         }
     }
     lib2()->array->equip($comm, 'type', 'enabled', 'period', 'subject', 'description', 'cc_enabled', 'cc_email');
     $action = MS_Controller_Communication::AJAX_ACTION_UPDATE_COMM;
     $nonce = wp_create_nonce($action);
     $comm_titles = MS_Model_Communication::get_communication_type_titles($membership);
     $key_active = __('Send Email', MS_TEXT_DOMAIN);
     $key_inactive = __('No Email', MS_TEXT_DOMAIN);
     $key_skip = __('Use default template', MS_TEXT_DOMAIN);
     $titles = array($key_active => array(), $key_inactive => array(), $key_skip => array());
     foreach ($comm_titles as $type => $title) {
         $tmp_comm = MS_Model_Communication::get_communication($type, $membership, true);
         if ($membership && !$tmp_comm->override) {
             $titles[$key_skip][$type] = $title;
         } elseif ($tmp_comm->enabled) {
             $titles[$key_active][$type] = $title;
         } else {
             $titles[$key_inactive][$type] = $title;
         }
     }
     $fields = array('comm_type' => array('id' => 'comm_type', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $comm->type, 'field_options' => $titles), 'switch_comm_type' => array('id' => 'switch_comm_type', 'type' => MS_Helper_Html::INPUT_TYPE_BUTTON, 'value' => __('Load Template', MS_TEXT_DOMAIN)), 'override' => array('id' => 'override', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'value' => $comm->override, 'before' => __('Use default template', MS_TEXT_DOMAIN), 'after' => __('Define custom template', MS_TEXT_DOMAIN), 'wrapper_class' => 'ms-block ms-tcenter', 'class' => 'override-slider', 'ajax_data' => array('type' => $comm->type, 'field' => 'override', 'action' => $action, '_wpnonce' => $nonce, 'membership_id' => $membership_id)), 'membership_id' => array('id' => 'membership_id', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $membership_id), 'type' => array('id' => 'type', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $comm->type), 'enabled' => array('id' => 'enabled', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'value' => $comm->enabled, 'class' => 'state-slider', 'before' => '&nbsp;<i class="wpmui-fa wpmui-fa-ban"></i>', 'after' => '<i class="wpmui-fa wpmui-fa-envelope"></i>&nbsp;', 'ajax_data' => array('type' => $comm->type, 'field' => 'enabled', 'action' => $action, '_wpnonce' => $nonce, 'membership_id' => $membership_id)), 'period_unit' => array('id' => 'period_unit', 'type' => MS_Helper_Html::INPUT_TYPE_TEXT, 'title' => __('Period after/before', MS_TEXT_DOMAIN), 'value' => $comm->period['period_unit']), 'period_type' => array('id' => 'period_type', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $comm->period['period_type'], 'field_options' => MS_Helper_Period::get_period_types('plural')), 'subject' => array('id' => 'subject', 'type' => MS_Helper_Html::INPUT_TYPE_TEXT, 'title' => apply_filters('ms_translation_flag', __('Message Subject', MS_TEXT_DOMAIN), 'communication-subject'), 'value' => $comm->subject, 'class' => 'ms-comm-subject widefat'), 'email_body' => array('id' => 'email_body', 'type' => MS_Helper_Html::INPUT_TYPE_WP_EDITOR, 'title' => apply_filters('ms_translation_flag', '', 'communication-body'), 'value' => $comm->description, 'field_options' => array('media_buttons' => false, 'editor_class' => 'wpmui-ajax-update')), 'cc_enabled' => array('id' => 'cc_enabled', 'type' => MS_Helper_Html::INPUT_TYPE_CHECKBOX, 'title' => __('Send copy to Administrator', MS_TEXT_DOMAIN), 'value' => $comm->cc_enabled, 'class' => 'ms-inline-block'), 'cc_email' => array('id' => 'cc_email', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $comm->cc_email, 'field_options' => MS_Model_Member::get_admin_user_emails()), 'save_email' => array('id' => 'save_email', 'value' => __('Save Changes', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_SUBMIT), 'action' => array('id' => 'action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => 'save_comm'), 'nonce' => array('id' => '_wpnonce', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => wp_create_nonce('save_comm')), 'load_action' => array('id' => 'load_action', 'name' => 'action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => 'load_action'), 'load_nonce' => array('id' => '_wpnonce1', 'name' => '_wpnonce', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => wp_create_nonce('load_action')));
     if (!$membership instanceof MS_Model_Membership) {
         unset($fields['override']);
         unset($fields['membership_id']);
     }
     return apply_filters('ms_view_settings_prepare_email_fields', $fields);
 }
    /**
     * Displays the inline-edit form used to edit the dripped content details.
     *
     * @since  1.0.0
     */
    protected function inline_edit()
    {
        $rule = $this->model;
        $membership = $this->membership;
        $field_action = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'action', 'value' => MS_Controller_Rule::AJAX_ACTION_UPDATE_DRIPPED);
        $field_rule = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'rule_type', 'value' => $this->model->rule_type);
        $field_item = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'item_id');
        $field_offset = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'offset');
        $field_number = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'number');
        $field_filter = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'membership_id', 'value' => isset($_REQUEST['membership_id']) ? $_REQUEST['membership_id'] : '');
        $field_id = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'membership_ids');
        $field_type = array('type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'name' => 'dripped_type', 'class' => 'dripped_type', 'field_options' => MS_Model_Rule::get_dripped_types());
        $field_date = array('type' => MS_Helper_Html::INPUT_TYPE_DATEPICKER, 'name' => 'date', 'placeholder' => __('Date', 'membership2') . '...');
        $field_delay_unit = array('type' => MS_Helper_Html::INPUT_TYPE_TEXT, 'name' => 'delay_unit', 'class' => 'ms-text-small', 'placeholder' => '0');
        $field_delay_type = array('type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'name' => 'delay_type', 'field_options' => MS_Helper_Period::get_period_types('plural'), 'after' => __('after subscription', 'membership2'));
        ?>
		<div>
			<h4>
				<span class="lbl-name"></span> -
				<?php 
        _e('Dripped Content Settings', 'membership2');
        ?>
			</h4>
		</div>
		<fieldset>
			<div class="inline-edit-col">
				<?php 
        MS_Helper_Html::html_element($field_action);
        MS_Helper_Html::html_element($field_rule);
        MS_Helper_Html::html_element($field_item);
        MS_Helper_Html::html_element($field_offset);
        MS_Helper_Html::html_element($field_number);
        MS_Helper_Html::html_element($field_filter);
        ?>
				<div class="dynamic-form"></div>
			</div>
		</fieldset>
		<div class="dripped-form cf no-auto-init hidden">
			<div class="drip-col col-1">
				<span class="the-name ms-membership"></span>
				<?php 
        MS_Helper_Html::html_element($field_id);
        ?>
			</div>
			<div class="drip-col col-2">
				<?php 
        MS_Helper_Html::html_element($field_type);
        ?>
			</div>
			<div class="drip-col col-3">
				<div class="drip-option <?php 
        echo esc_attr(MS_Model_Rule::DRIPPED_TYPE_INSTANTLY);
        ?>
">
					<?php 
        _e('Instantly', 'membership2');
        ?>
				</div>
				<div class="drip-option <?php 
        echo esc_attr(MS_Model_Rule::DRIPPED_TYPE_SPEC_DATE);
        ?>
">
					<?php 
        MS_Helper_Html::html_element($field_date);
        ?>
				</div>
				<div class="drip-option <?php 
        echo esc_attr(MS_Model_Rule::DRIPPED_TYPE_FROM_REGISTRATION);
        ?>
">
					<?php 
        MS_Helper_Html::html_element($field_delay_unit);
        MS_Helper_Html::html_element($field_delay_type);
        ?>
				</div>
			</div>
			</div>
		</div>
		<?php 
    }
示例#4
0
 /**
  * Returns a string that describes the dripped rule.
  *
  * @since  1.0.0
  *
  * @param string $item_id The content id to verify dripped access.
  * @return string Text like "Instantly" or "After 7 days"
  */
 public function get_dripped_description($item_id)
 {
     $desc = '';
     $drip_data = false;
     if (!is_array($this->dripped)) {
         $this->dripped = array();
     }
     if (isset($this->dripped[$item_id])) {
         $drip_data = $this->dripped[$item_id];
     }
     if (is_array($drip_data)) {
         lib3()->array->equip($drip_data, 'type', 'date', 'delay_unit', 'delay_type');
         switch ($drip_data['type']) {
             case MS_Model_Rule::DRIPPED_TYPE_SPEC_DATE:
                 $desc = sprintf(__('On <b>%1$s</b>', 'membership2'), MS_Helper_Period::format_date($drip_data['date']));
                 break;
             case MS_Model_Rule::DRIPPED_TYPE_FROM_REGISTRATION:
                 $periods = MS_Helper_Period::get_period_types();
                 $period_key = $drip_data['delay_type'];
                 if (0 == $drip_data['delay_unit']) {
                     $desc = __('<b>Instantly</b>', 'membership2');
                 } elseif (1 == $drip_data['delay_unit']) {
                     $desc = sprintf(__('After <b>%1$s %2$s</b>', 'membership2'), $periods['1' . $period_key], '');
                 } else {
                     $desc = sprintf(__('After <b>%1$s %2$s</b>', 'membership2'), $drip_data['delay_unit'], $periods[$period_key]);
                 }
                 break;
             case MS_Model_Rule::DRIPPED_TYPE_INSTANTLY:
             default:
                 $desc = __('<b>Instantly</b>', 'membership2');
                 break;
         }
     }
     return apply_filters('ms_rule_get_dripped_description', $desc, $item_id, $this);
 }
 /**
  * Returns field definitions to render the payment box for the specified
  * membership.
  *
  * @since  1.0.0
  *
  * @return array An array containing all field definitions.
  */
 private function get_fields()
 {
     global $wp_locale;
     $membership = $this->data['membership'];
     $action = MS_Controller_Membership::AJAX_ACTION_UPDATE_MEMBERSHIP;
     $nonce = wp_create_nonce($action);
     $fields = array();
     $fields['price'] = array('id' => 'price', 'title' => __('Payment Amount', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_NUMBER, 'before' => MS_Plugin::instance()->settings->currency_symbol, 'value' => $membership->price, 'class' => 'ms-text-smallish', 'config' => array('step' => 'any', 'min' => 0), 'placeholder' => '0' . $wp_locale->number_format['decimal_point'] . '00', 'ajax_data' => array(1));
     $fields['payment_type'] = array('id' => 'payment_type', 'title' => __('This Membership requires', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $membership->payment_type, 'field_options' => MS_Model_Membership::get_payment_types(), 'ajax_data' => array(1));
     $fields['period_unit'] = array('id' => 'period_unit', 'title' => __('Grant access for', MS_TEXT_DOMAIN), 'name' => '[period][period_unit]', 'type' => MS_Helper_Html::INPUT_TYPE_NUMBER, 'value' => $membership->period_unit, 'class' => 'ms-text-small', 'config' => array('step' => 1, 'min' => 1), 'placeholder' => '1', 'ajax_data' => array(1));
     $fields['period_type'] = array('id' => 'period_type', 'name' => '[period][period_type]', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $membership->period_type, 'field_options' => MS_Helper_Period::get_period_types('plural'), 'ajax_data' => array(1));
     $fields['pay_cycle_period_unit'] = array('id' => 'pay_cycle_period_unit', 'title' => __('Payment Frequency', MS_TEXT_DOMAIN), 'name' => '[pay_cycle_period][period_unit]', 'type' => MS_Helper_Html::INPUT_TYPE_NUMBER, 'value' => $membership->pay_cycle_period_unit, 'class' => 'ms-text-small', 'config' => array('step' => 1, 'min' => 1), 'placeholder' => '1', 'ajax_data' => array(1));
     $fields['pay_cycle_period_type'] = array('id' => 'pay_cycle_period_type', 'name' => '[pay_cycle_period][period_type]', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $membership->pay_cycle_period_type, 'field_options' => MS_Helper_Period::get_period_types('plural'), 'ajax_data' => array(1));
     $fields['pay_cycle_repetitions'] = array('id' => 'pay_cycle_repetitions', 'title' => __('Total Payments', MS_TEXT_DOMAIN), 'name' => '[pay_cycle_repetitions]', 'type' => MS_Helper_Html::INPUT_TYPE_NUMBER, 'after' => __('payments (0 = unlimited)', MS_TEXT_DOMAIN), 'value' => $membership->pay_cycle_repetitions, 'class' => 'ms-text-small', 'config' => array('step' => '1', 'min' => 0), 'placeholder' => '0', 'ajax_data' => array(1));
     $fields['period_date_start'] = array('id' => 'period_date_start', 'title' => __('Grant access from', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_DATEPICKER, 'value' => $membership->period_date_start, 'placeholder' => __('Start Date...', MS_TEXT_DOMAIN), 'ajax_data' => array(1));
     $fields['period_date_end'] = array('id' => 'period_date_end', 'type' => MS_Helper_Html::INPUT_TYPE_DATEPICKER, 'value' => $membership->period_date_end, 'before' => _x('to', 'date range', MS_TEXT_DOMAIN), 'placeholder' => __('End Date...', MS_TEXT_DOMAIN), 'ajax_data' => array(1));
     $fields['on_end_membership_id'] = array('id' => 'on_end_membership_id', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'title' => __('After this membership ends', MS_TEXT_DOMAIN), 'value' => $membership->on_end_membership_id, 'field_options' => $membership->get_after_ms_ends_options(), 'ajax_data' => array(1));
     $fields['enable_trial_addon'] = array('id' => 'enable_trial_addon', 'type' => MS_Helper_Html::INPUT_TYPE_BUTTON, 'value' => __('Yes, enable Trial Memberships!', MS_TEXT_DOMAIN), 'button_value' => 1, 'ajax_data' => array('action' => MS_Controller_Addon::AJAX_ACTION_TOGGLE_ADDON, '_wpnonce' => wp_create_nonce(MS_Controller_Addon::AJAX_ACTION_TOGGLE_ADDON), 'addon' => MS_Model_Addon::ADDON_TRIAL, 'field' => 'active'));
     $fields['trial_period_enabled'] = array('id' => 'trial_period_enabled', 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'title' => '<strong>' . __('Trial Period', MS_TEXT_DOMAIN) . '</strong>', 'after' => __('Offer Free Trial', MS_TEXT_DOMAIN), 'value' => $membership->trial_period_enabled, 'ajax_data' => array(1));
     $fields['trial_period_unit'] = array('id' => 'trial_period_unit', 'name' => '[trial_period][period_unit]', 'before' => __('The Trial is free and lasts for', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_NUMBER, 'value' => $membership->trial_period_unit, 'class' => 'ms-text-small', 'config' => array('step' => 1, 'min' => 1), 'placeholder' => '1', 'ajax_data' => array(1));
     $fields['trial_period_type'] = array('id' => 'trial_period_type', 'name' => '[trial_period][period_type]', 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $membership->trial_period_type, 'field_options' => MS_Helper_Period::get_period_types('plural'), 'ajax_data' => array(1));
     $fields['membership_id'] = array('id' => 'membership_id', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $membership->id);
     $fields['action'] = array('id' => 'action', 'type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'value' => $action);
     // Get a list of all payment gateways.
     $gateways = MS_Model_Gateway::get_gateways();
     $fields['gateways'] = array();
     foreach ($gateways as $gateway) {
         if ('free' == $gateway->id) {
             continue;
         }
         if (!$gateway->active) {
             continue;
         }
         $payment_types = $gateway->supported_payment_types();
         $wrapper_class = 'ms-payment-type-' . implode(' ms-payment-type-', array_keys($payment_types));
         $fields['gateways'][$gateway->id] = array('id' => 'disabled-gateway-' . $gateway->id, 'type' => MS_Helper_Html::INPUT_TYPE_RADIO_SLIDER, 'title' => $gateway->name, 'before' => __('Available', MS_TEXT_DOMAIN), 'after' => __('Not available', MS_TEXT_DOMAIN), 'value' => !$membership->can_use_gateway($gateway->id), 'class' => 'reverse', 'wrapper_class' => 'ms-payment-type-wrapper ' . $wrapper_class, 'ajax_data' => array('field' => 'disabled_gateways[' . $gateway->id . ']', '_wpnonce' => $nonce, 'action' => $action, 'membership_id' => $membership->id));
     }
     // Modify some fields for free memberships.
     if ($membership->is_free) {
         $fields['price'] = '';
         $fields['payment_type'] = array('id' => 'payment_type', 'title' => __('Access Structure:', MS_TEXT_DOMAIN), 'type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'value' => $membership->payment_type, 'field_options' => MS_Model_Membership::get_payment_types('free'), 'ajax_data' => array(1));
     }
     // Process the fields and add missing default attributes.
     foreach ($fields as $key => $field) {
         if (!empty($field['ajax_data'])) {
             if (!empty($field['ajax_data']['action'])) {
                 continue;
             }
             if (!isset($fields[$key]['ajax_data']['field'])) {
                 $fields[$key]['ajax_data']['field'] = $fields[$key]['id'];
             }
             $fields[$key]['ajax_data']['_wpnonce'] = $nonce;
             $fields[$key]['ajax_data']['action'] = $action;
             $fields[$key]['ajax_data']['membership_id'] = $membership->id;
         }
     }
     return apply_filters('ms_view_membership_tab_payment_fields', $fields);
 }