/** * 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' => ' <i class="wpmui-fa wpmui-fa-ban"></i>', 'after' => '<i class="wpmui-fa wpmui-fa-envelope"></i> ', '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 }
/** * 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); }