コード例 #1
0
 /**
  * Returns a query arg structure tailored to give the defined results
  *
  * @since  1.0.0
  * @return array Query args
  */
 protected function prepare_query_args($args)
 {
     lib2()->array->equip_request('s', 'membership_id', 'search_options', 'status');
     // Prepare order by statement.
     if (!empty($_REQUEST['orderby']) && !empty($_REQUEST['order'])) {
         $args['orderby'] = $_REQUEST['orderby'];
         $args['order'] = $_REQUEST['order'];
     }
     // Filter by search-term
     $search_filter = $_REQUEST['s'];
     if (!empty($search_filter)) {
         $this->search_string = $search_filter;
         $search_option = $_REQUEST['search_options'];
         switch ($search_option) {
             case 'email':
             case 'username':
                 $args['search'] = sprintf('*%s*', $search_filter);
                 break;
             default:
                 $args['meta_query'][$search_option] = array('key' => $search_option, 'value' => $search_filter, 'compare' => 'LIKE');
                 break;
         }
         $args['posts_per_page'] = -1;
         $args['number'] = false;
         $args['offset'] = 0;
     }
     // Filter by membership_id and membership status
     $membership_id = $_REQUEST['membership_id'];
     $members = array();
     $filter = array();
     if (!empty($membership_id)) {
         $filter['membership_id'] = $membership_id;
     }
     if (!empty($status)) {
         $filter['status'] = $status;
     }
     if (!empty($filter)) {
         $subscriptions = MS_Model_Relationship::get_subscriptions($filter);
         foreach ($subscriptions as $subscription) {
             $members[$subscription->user_id] = $subscription->user_id;
         }
         // Workaround to invalidate query
         if (empty($members)) {
             $members[0] = 0;
         }
         $args['include'] = $members;
     }
     return $args;
 }
コード例 #2
0
    /**
     * Returns the contens of the dialog
     *
     * @since  1.0.0
     *
     * @return object
     */
    public function get_contents($data)
    {
        $member = $data['model'];
        $currency = MS_Plugin::instance()->settings->currency;
        $show_trial = MS_Model_Addon::is_enabled(MS_Model_Addon::ADDON_TRIAL);
        $all_subscriptions = MS_Model_Relationship::get_subscriptions(array('user_id' => $member->id, 'status' => 'all', 'meta_key' => 'expire_date', 'orderby' => 'meta_value', 'order' => 'DESC'));
        // Prepare the form fields.
        $inp_dialog = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'dialog', 'value' => 'View_Member_Dialog');
        $inp_id = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'member_id', 'value' => $member->id);
        $inp_nonce = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => '_wpnonce', 'value' => wp_create_nonce(self::ACTION_SAVE));
        $inp_action = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'name' => 'dialog_action', 'value' => self::ACTION_SAVE);
        $inp_save = array('type' => MS_Helper_Html::INPUT_TYPE_SUBMIT, 'value' => __('Save', 'membership2'), 'class' => 'ms-submit-form', 'data' => array('form' => 'ms-edit-member'));
        $inp_cancel = array('type' => MS_Helper_Html::INPUT_TYPE_BUTTON, 'value' => __('Close', 'membership2'), 'class' => 'close');
        ob_start();
        ?>
		<div>
			<form class="ms-form wpmui-ajax-update ms-edit-member" data-wpmui-ajax="<?php 
        echo esc_attr('save');
        ?>
">
				<div class="ms-form wpmui-form wpmui-grid-8">
					<table class="widefat">
					<thead>
						<tr>
							<th class="column-membership">
								<?php 
        _e('Membership', 'membership2');
        ?>
							</th>
							<th class="column-status">
								<?php 
        _e('Status', 'membership2');
        ?>
							</th>
							<th class="column-start">
								<?php 
        _e('Subscribed on', 'membership2');
        ?>
							</th>
							<th class="column-expire">
								<?php 
        _e('Expires on', 'membership2');
        ?>
							</th>
							<?php 
        if ($show_trial) {
            ?>
							<th class="column-trialexpire">
								<?php 
            _e('Trial until', 'membership2');
            ?>
							</th>
							<?php 
        }
        ?>
							<th class="column-payments">
								<?php 
        _e('Payments', 'membership2');
        ?>
							</th>
						</tr>
					</thead>
					<tbody>
					<?php 
        foreach ($all_subscriptions as $subscription) {
            $membership = $subscription->get_membership();
            $payments = $subscription->get_payments();
            $num_payments = count($payments);
            $amount_payments = 0;
            foreach ($payments as $payment) {
                $amount_payments += $payment['amount'];
            }
            $subscription_info = array('subscription_id' => $subscription->id);
            $update_info = array('subscription_id' => $subscription->id, 'statuscheck' => 'yes');
            ?>
						<tr>
							<td class="column-membership">
								<?php 
            $membership->name_tag();
            ?>
							</td>
							<td class="column-status">
								<?php 
            printf('<a href="#" data-ms-dialog="View_Member_Subscription" data-ms-data="%2$s">%1$s</a>
									<a href="#" data-ms-dialog="View_Member_Subscription" data-ms-data="%3$s" title="%5$s">%4$s</a>', $subscription->status, esc_attr(json_encode($subscription_info)), esc_attr(json_encode($update_info)), '<i class="dashicons dashicons-update"></i>', __('Check and update subscription status', 'membership2'));
            ?>
							</td>
							<td class="column-start">
								<?php 
            echo $subscription->start_date;
            ?>
							</td>
							<td class="column-expire">
								<?php 
            echo $subscription->expire_date;
            ?>
							</td>
							<?php 
            if ($show_trial) {
                ?>
							<td class="column-trialexpire">
								<?php 
                if ($subscription->start_date == $subscription->trial_expire_date) {
                    echo '-';
                } else {
                    echo $subscription->trial_expire_date;
                }
                ?>
							</td>
							<?php 
            }
            ?>
							<td class="column-payments">
								<?php 
            $total = sprintf('<b>%1$s</b> (%3$s %2$s)', $num_payments, MS_Helper_Billing::format_price($amount_payments), $currency);
            printf('<a href="#" data-ms-dialog="View_Member_Payment" data-ms-data="%1$s">%2$s</a>', esc_attr(json_encode($subscription_info)), $total);
            ?>
							</td>
						</tr>
					<?php 
        }
        ?>
					</tbody>
					</table>
				</div>
				<?php 
        MS_Helper_Html::html_element($inp_id);
        MS_Helper_Html::html_element($inp_dialog);
        MS_Helper_Html::html_element($inp_nonce);
        MS_Helper_Html::html_element($inp_action);
        ?>
			</form>
			<div class="buttons">
				<?php 
        MS_Helper_Html::html_element($inp_cancel);
        // MS_Helper_Html::html_element( $inp_save );
        ?>
			</div>
		</div>
		<?php 
        $html = ob_get_clean();
        return apply_filters('ms_view_member_dialog_to_html', $html);
    }
コード例 #3
0
 /**
  * Display Membership Overview page.
  *
  * @since  1.0.0
  */
 public function page_overview()
 {
     $membership = $this->load_membership();
     $membership_id = $membership->id;
     $data = array();
     $data['step'] = $this->get_step();
     $data['action'] = self::ACTION_SAVE;
     $data['membership'] = $membership;
     $data['bread_crumbs'] = $this->get_bread_crumbs();
     $data['members'] = array();
     $subscriptions = MS_Model_Relationship::get_subscriptions(array('membership_id' => $membership->id));
     foreach ($subscriptions as $subscription) {
         $data['members'][] = $subscription->get_member();
     }
     switch ($membership->type) {
         case MS_Model_Membership::TYPE_DRIPPED:
             $view = MS_Factory::create('MS_View_Membership_Overview_Dripped');
             break;
         default:
         case MS_Model_Membership::TYPE_STANDARD:
             $view = MS_Factory::create('MS_View_Membership_Overview_Simple');
             break;
     }
     // Select Events args
     $args = array();
     $args['meta_query']['membership_id'] = array('key' => 'membership_id', 'value' => array($membership_id, 0), 'compare' => 'IN');
     $data['events'] = MS_Model_Event::get_events($args);
     $view = apply_filters('ms_view_membership_overview', $view);
     $view->data = apply_filters('ms_view_membership_overview_data', $data, $this);
     $view->render();
 }
コード例 #4
0
 /**
  * Membership account page shortcode callback function.
  *
  * @since  1.0.0
  *
  * @param mixed[] $atts Shortcode attributes.
  */
 public function membership_account($atts)
 {
     MS_Helper_Shortcode::did_shortcode(MS_Helper_Shortcode::SCODE_MS_ACCOUNT);
     $data = apply_filters('ms_controller_shortcode_membership_account_atts', shortcode_atts(array('show_membership' => true, 'show_membership_change' => true, 'membership_title' => __('Your Membership', 'membership2'), 'membership_change_label' => __('Change', 'membership2'), 'show_profile' => true, 'show_profile_change' => true, 'profile_title' => __('Personal details', 'membership2'), 'profile_change_label' => __('Edit', 'membership2'), 'show_invoices' => true, 'limit_invoices' => 10, 'show_all_invoices' => true, 'invoices_title' => __('Invoices', 'membership2'), 'invoices_details_label' => __('View all', 'membership2'), 'show_activity' => true, 'limit_activities' => 10, 'show_all_activities' => true, 'activity_title' => __('Activities', 'membership2'), 'activity_details_label' => __('View all', 'membership2')), $atts));
     $data['show_membership'] = lib3()->is_true($data['show_membership']);
     $data['show_membership_change'] = lib3()->is_true($data['show_membership_change']);
     $data['show_profile'] = lib3()->is_true($data['show_profile']);
     $data['show_profile_change'] = lib3()->is_true($data['show_profile_change']);
     $data['show_invoices'] = lib3()->is_true($data['show_invoices']);
     $data['show_all_invoices'] = lib3()->is_true($data['show_all_invoices']);
     $data['show_activity'] = lib3()->is_true($data['show_activity']);
     $data['show_all_activities'] = lib3()->is_true($data['show_all_activities']);
     $data['limit_invoices'] = absint($data['limit_invoices']);
     $data['limit_activities'] = absint($data['limit_activities']);
     $data['member'] = MS_Model_Member::get_current_member();
     $data['membership'] = array();
     $subscriptions = MS_Model_Relationship::get_subscriptions(array('user_id' => $data['member']->id, 'status' => 'all'));
     if (is_array($subscriptions)) {
         foreach ($subscriptions as $subscription) {
             // Do not display system-memberships in Account
             if ($subscription->is_system()) {
                 continue;
             }
             // Do not display deactivated memberships in Account
             if ($subscription->get_status() == MS_Model_Relationship::STATUS_DEACTIVATED) {
                 continue;
             }
             $data['subscription'][] = $subscription;
         }
     }
     $data['invoices'] = MS_Model_Invoice::get_public_invoices($data['member']->id, $data['limit_invoices']);
     $data['events'] = MS_Model_Event::get_events(array('author' => $data['member']->id, 'posts_per_page' => $data['limit_activities']));
     $view = MS_Factory::create('MS_View_Shortcode_Account');
     $view->data = apply_filters('ms_view_shortcode_account_data', $data, $this);
     return $view->to_html();
 }
コード例 #5
0
 /**
  * Get members list of this membership.
  *
  * This will also count members that have "cancelled" or "expired"
  * subscriptions but not "pending" or "deactivated".
  *
  * To change this use the filter parameter:
  * $args = array( 'status' => 'all' )
  *
  * @since  1.0.1.0
  * @api
  *
  * @param  array $args The query post args
  * @return array List of members.
  */
 public function get_members($args = null)
 {
     $args = wp_parse_args(array('membership_id' => $this->id), $args);
     // Get a list of subscriptions.
     $items = MS_Model_Relationship::get_subscriptions($args);
     // Get a list of members.
     $result = array();
     foreach ($items as $item) {
         $result[$item->user_id] = $item->get_member();
     }
     return apply_filters('ms_model_membership_get_members', $result, $args, $this);
 }
コード例 #6
0
 /**
  * Removes all subscriptions and memberships from the current site.
  * This is done before the import if the "Replace existing data" flag is set.
  *
  * @since  1.0.0
  */
 protected function clear_memberships()
 {
     // Delete all Relationships.
     $subscriptions = MS_Model_Relationship::get_subscriptions(array('status' => 'all'));
     foreach ($subscriptions as $subscription) {
         $subscription->delete();
     }
     // Delete all Memberships.
     $memberships = MS_Model_Membership::get_memberships();
     foreach ($memberships as $membership) {
         if ($membership->is_base()) {
             continue;
         }
         $membership->delete(true);
     }
 }
コード例 #7
0
ファイル: class-ms-factory.php プロジェクト: klgrimley/mzf
 /**
  * Load MS_Model_Member Object.
  *
  * Load from user and user meta.
  * This data is always network-wide.
  *
  * @since  1.0.0
  *
  * @param MS_Model_Member $model The empty member instance.
  * @param int $user_id The user/member ID.
  *
  * @return MS_Model_Member The retrieved object.
  */
 protected static function load_from_wp_user($model, $user_id, $name = null)
 {
     $class = get_class($model);
     $cache = wp_cache_get($user_id, $class);
     if ($cache) {
         $model = $cache;
     } else {
         $wp_user = new WP_User($user_id, $name);
         if (!empty($wp_user->ID)) {
             $member_details = get_user_meta($user_id);
             $model->id = $wp_user->ID;
             $model->username = $wp_user->user_login;
             $model->email = $wp_user->user_email;
             $model->name = $wp_user->user_nicename;
             $model->first_name = $wp_user->first_name;
             $model->last_name = $wp_user->last_name;
             $model->wp_user = $wp_user;
             self::populate_model($model, $member_details, 'ms_');
             // Load membership_relationships
             $model->subscriptions = MS_Model_Relationship::get_subscriptions(array('user_id' => $model->id));
         }
     }
     return apply_filters('ms_factory_load_from_wp_user', $model, $class, $user_id);
 }
コード例 #8
0
 /**
  * Check membership status.
  *
  * Execute actions when time/period condition are met.
  * E.g. change membership status, add communication to queue, create invoices.
  *
  * @since  1.0.0
  */
 public function check_membership_status()
 {
     do_action('ms_model_plugin_check_membership_status_before', $this);
     if ($this->member->is_simulated_user()) {
         return;
     }
     $args = apply_filters('ms_model_plugin_check_membership_status_get_subscription_args', array('status' => 'valid'));
     $subscriptions = MS_Model_Relationship::get_subscriptions($args);
     foreach ($subscriptions as $subscription) {
         $subscription->check_membership_status();
     }
     do_action('ms_model_plugin_check_membership_status_after', $this);
 }
コード例 #9
0
 /**
  * Check membership status.
  *
  * Execute actions when time/period condition are met.
  * E.g. change membership status, add communication to queue, create invoices.
  *
  * @since  1.0.0
  */
 public function check_membership_status()
 {
     do_action('ms_model_plugin_check_membership_status_before', $this);
     if ($this->member->is_simulated_user()) {
         return;
     }
     /*
      * For performance reasons we only process a small batch at once.
      * Here we find out, which subscriptions should be processed during
      * the current request.
      */
     $offset = (int) MS_Factory::get_option('ms_batch_check_offset_flag');
     // Find the next X subscriptions from DB.
     $args = apply_filters('ms_model_plugin_check_membership_status_get_subscription_args', array('status' => 'valid', 'orderby' => 'ID', 'posts_per_page' => $this->_process_per_batch, 'offset' => $offset, 'nopaging' => false));
     $subscriptions = MS_Model_Relationship::get_subscriptions($args);
     if (count($subscriptions) < $this->_process_per_batch) {
         // We processed all subscriptions. Clean up.
         MS_Factory::delete_option('ms_batch_check_offset_flag');
     } else {
         // We did not process all subscriptions. Remember where to continue.
         MS_Factory::update_option('ms_batch_check_offset_flag', $offset + $this->_process_per_batch);
         // Re-scheduling the cron job will run it again on next page load.
         $hook = 'ms_cron_check_membership_status';
         wp_clear_scheduled_hook($hook);
         $this->setup_cron_services($hook);
     }
     // Perform the actual status checks!
     foreach ($subscriptions as $subscription) {
         error_log('This is ' . $subscription->id);
         $subscription->check_membership_status();
     }
     do_action('ms_model_plugin_check_membership_status_after', $this);
 }
コード例 #10
0
 /**
  * Load MS_Model_Member Object.
  *
  * Load from user and user meta.
  * This data is always network-wide.
  *
  * @since  1.0.0
  *
  * @param MS_Model_Member $model The empty member instance.
  * @param int $user_id The user/member ID.
  *
  * @return MS_Model_Member The retrieved object.
  */
 protected static function load_from_wp_user($model, $user_id, $name = null)
 {
     $class = get_class($model);
     $cache = wp_cache_get($user_id, $class);
     if ($cache) {
         $model = $cache;
     } else {
         $wp_user = new WP_User($user_id, $name);
         if (!empty($wp_user->ID)) {
             $member_details = get_user_meta($user_id);
             $model->id = $wp_user->ID;
             $model->username = $wp_user->user_login;
             $model->email = $wp_user->user_email;
             $model->name = $wp_user->display_name;
             $model->first_name = $wp_user->first_name;
             $model->last_name = $wp_user->last_name;
             $model->wp_user = $wp_user;
             if (!$model->name) {
                 if ($model->first_name) {
                     $model->name = $model->first_name . ' ' . $model->last_name;
                 } else {
                     $model->name = $wp_user->user_login;
                 }
                 $model->name = ucwords(strtolower($model->name));
             }
             $model->name = trim($model->name);
             /**
              * Manually customize the display name of the user via a filter.
              *
              * @since  1.0.1.2
              * @param  string $name The default display name used by M2.
              * @param  WP_User $wp_user The user object used to populate the name.
              */
             $model->name = apply_filters('ms_model_user_set_name', $model->name, $wp_user);
             // Remove automatic populated values from metadata, if present.
             unset($member_details['ms_username']);
             unset($member_details['ms_email']);
             unset($member_details['ms_name']);
             unset($member_details['ms_first_name']);
             unset($member_details['ms_last_name']);
             self::populate_model($model, $member_details, 'ms_');
             // Load membership_relationships
             $model->subscriptions = MS_Model_Relationship::get_subscriptions(array('user_id' => $model->id));
         }
     }
     return apply_filters('ms_factory_load_from_wp_user', $model, $class, $user_id);
 }