public function column_membership($item) { $html = ''; $is_any = true; foreach ($item->membership_id as $id) { if (MS_Model_Membership::is_valid_membership($id)) { $is_any = false; $membership = MS_Factory::load('MS_Model_Membership', $id); $html .= sprintf('<span class="ms-bold">%s</span><br />', $membership->name); } } if ($is_any) { $html = sprintf('<span class="ms-low">%s</span>', __('Any', 'membership2')); } return $html; }
/** * Set specific property. * * @since 1.0.0 * * @param string $property The name of a property to associate. * @param mixed $value The value of a property. */ public function __set($property, $value) { if (property_exists($this, $property)) { switch ($property) { case 'code': $value = sanitize_text_field(preg_replace('/[^a-zA-Z0-9\\s]/', '', $value)); $this->{$property} = strtoupper($value); $this->name = $this->{$property}; break; case 'discount': $this->{$property} = floatval($value); break; case 'discount_type': if (self::is_valid_discount_type($value)) { $this->{$property} = $value; } break; case 'start_date': $this->{$property} = $this->validate_date($value); break; case 'expire_date': $this->{$property} = $this->validate_date($value); if (strtotime($this->{$property}) < strtotime($this->start_date)) { $this->{$property} = null; } break; case 'membership_id': $value = lib3()->array->get($value); foreach ($value as $ind => $id) { if (!MS_Model_Membership::is_valid_membership($id)) { unset($value[$ind]); } } if (empty($value)) { $this->{$property} = array(0); } else { $this->{$property} = array_values($value); } break; case 'max_uses': case 'used': $this->{$property} = absint($value); break; default: if (property_exists($this, $property)) { $this->{$property} = $value; } break; } } do_action('ms_addon_coupon_model__set_after', $property, $value, $this); }
/** * Get signup process step (multi step form). * * @since 1.0.0 * * @return string The current signup step after validation. */ private function get_signup_step() { static $Valid_Steps = null; static $Login_Steps = null; if (empty($Valid_Steps)) { $Valid_Steps = apply_filters('ms_controller_frontend_signup_steps', array(self::STEP_CHOOSE_MEMBERSHIP, self::STEP_REGISTER_FORM, self::STEP_REGISTER_FORM_ALT, self::STEP_REGISTER_SUBMIT, self::STEP_PAYMENT_TABLE, self::STEP_GATEWAY_FORM, self::STEP_PROCESS_PURCHASE)); // These steps are only available to logged-in users. $Login_Steps = apply_filters('ms_controller_frontend_signup_steps_private', array(self::STEP_PAYMENT_TABLE, self::STEP_GATEWAY_FORM, self::STEP_PROCESS_PURCHASE)); } lib2()->array->equip_request('step', 'membership_id'); if (in_array($_REQUEST['step'], $Valid_Steps)) { $step = $_REQUEST['step']; } else { // Initial step $step = self::STEP_CHOOSE_MEMBERSHIP; } if (self::STEP_PAYMENT_TABLE == $step) { if (!MS_Model_Membership::is_valid_membership($_REQUEST['membership_id'])) { $step = self::STEP_CHOOSE_MEMBERSHIP; } } if (self::STEP_CHOOSE_MEMBERSHIP == $step && !empty($_GET['membership_id'])) { $step = self::STEP_PAYMENT_TABLE; } if (!MS_Model_Member::is_logged_in() && in_array($step, $Login_Steps)) { $step = self::STEP_REGISTER_FORM_ALT; } return apply_filters('ms_controller_frontend_get_signup_step', $step, $this); }
/** * Add a new membership. * * If multiple membership is disabled, may move existing membership. * * Only add a membership if a user is not already a member. * * @since 1.0.0 * @api * * @param int $membership_id The membership id to add to. * @param string $gateway_id Optional. The gateway used to add the membership. * @param int|string $move_from_id Optional. The membership id(s) to cancel. * * @return object|null $subscription */ public function add_membership($membership_id, $gateway_id = 'admin', $move_from_id = 0) { $subscription = null; if (MS_Model_Membership::is_valid_membership($membership_id)) { if (!$this->get_subscription($membership_id)) { $subscription = MS_Model_Relationship::create_ms_relationship($membership_id, $this->id, $gateway_id, $move_from_id); if ('admin' != $gateway_id) { $subscription->get_current_invoice(); } if (MS_Model_Relationship::STATUS_PENDING !== $subscription->status) { $this->subscriptions[] = $subscription; usort($this->subscriptions, array('MS_Model_Relationship', 'sort_by_priority')); } } else { $subscription = $this->get_subscription($membership_id); } // Reset the status and start/expire dates when added by admin. if ('admin' == $gateway_id) { $subscription->start_date = null; // Will calculate correct date. $subscription->trial_expire_date = null; $subscription->expire_date = null; $subscription->status = MS_Model_Relationship::STATUS_ACTIVE; $subscription->save(); $this->is_member = true; } } return apply_filters('ms_model_member_add_membership', $subscription, $membership_id, $gateway_id, $move_from_id, $this); }
/** * Create a new membership relationship. * * Search for existing relationship (unique object), creating if not exists. * Set initial status. * * @since 1.0.0 * @internal * * @param int $membership_id The Membership to subscribe to. * @param int $user_id The user who subscribes to the membership. * @param string $gateway_id The gateway which is used for payment. * @param int|string $move_from_id A list of membership IDs to cancel on * payment. This property is handled by the MS_Model_Invoice class. * @return MS_Model_Relationship The created relationship. */ public static function create_ms_relationship($membership_id = 0, $user_id = 0, $gateway_id = 'admin', $move_from_id = 0) { do_action('ms_model_relationship_create_ms_relationship_before', $membership_id, $user_id, $gateway_id, $move_from_id); if (MS_Model_Membership::is_valid_membership($membership_id)) { $subscription = self::_create_ms_relationship($membership_id, $user_id, $gateway_id, $move_from_id); } else { $subscription = null; MS_Helper_Debug::log('Invalid membership_id: ' . "{$membership_id}, ms_relationship not created for {$user_id}, {$gateway_id}, {$move_from_id}"); MS_Helper_Debug::debug_trace(); } return apply_filters('ms_model_relationship_create_ms_relationship', $subscription, $membership_id, $user_id, $gateway_id, $move_from_id); }
/** * Create invoice. * * Create a new invoice using the membership information. * * @since 1.0.0 * * @param MS_Model_Relationship $subscription The membership to create invoice for. * @param int $invoice_number Optional. The invoice number. * * @return object $invoice */ public static function create_invoice($subscription, $invoice_number = false) { $membership = $subscription->get_membership(); if (!MS_Model_Membership::is_valid_membership($membership->id)) { throw new Exception('Invalid Membership.'); } $invoice = null; $member = MS_Factory::load('MS_Model_Member', $subscription->user_id); $invoice_status = self::STATUS_NEW; $notes = null; if (empty($invoice_number)) { $invoice_number = $subscription->current_invoice_number; } $invoice = self::get_invoice($subscription->id, $invoice_number); // No existing invoice, create a new one. if (!$invoice || !$invoice->id) { $invoice = MS_Factory::create('MS_Model_Invoice'); $invoice = apply_filters('ms_model_invoice', $invoice); } // Update invoice info. $invoice->ms_relationship_id = $subscription->id; $invoice->gateway_id = $subscription->gateway_id; $invoice->status = $invoice_status; $invoice->invoice_date = MS_Helper_Period::current_date(); $invoice->membership_id = $membership->id; $invoice->currency = MS_Plugin::instance()->settings->currency; $invoice->user_id = $member->id; $invoice->name = apply_filters('ms_model_invoice_name', sprintf(__('Invoice for %s - %s', MS_TEXT_DOMAIN), $membership->name, $member->username)); $invoice->invoice_number = $invoice_number; $invoice->discount = 0; $invoice->notes = $notes; $invoice->amount = $membership->price; // Without taxes! // Check for trial period in the first period. if ($subscription->is_trial_eligible() && $invoice_number === $subscription->current_invoice_number) { $invoice->trial_price = $membership->trial_price; // Without taxes! $invoice->uses_trial = true; $invoice->trial_ends = $subscription->trial_expire_date; } $invoice->set_due_date(); $invoice = apply_filters('ms_model_invoice_create_before_save', $invoice, $subscription); $invoice->save(); // Refresh the tax-rate and payment description. $invoice->total_amount_changed(); $invoice->save(); return apply_filters('ms_model_relationship_create_invoice', $invoice, $subscription, $invoice_number); }
/** * Validate specific property before set. * * @since 1.0.0 * * @param string $name The name of a property to associate. * @param mixed $value The value of a property. */ public function __set($property, $value) { if (property_exists($this, $property)) { switch ($property) { case 'membership_id': $this->membership_id = null; $id = absint($value); if (!empty($id)) { if (MS_Model_Membership::is_valid_membership($id)) { $this->membership_id = $id; $this->needs_datepicker(); } } break; case 'date': if ($date = $this->validate_date($value)) { $this->date = $value; } break; default: $this->{$property} = $value; break; } } do_action('ms_model_simulate__set_after', $property, $value, $this); }