/** * Save invoices using the invoices model. * * @since 1.0.0 * * @param mixed $fields Transaction fields */ private function save_invoice($fields) { $msg = MS_Helper_Billing::BILLING_MSG_NOT_UPDATED; if ($this->is_admin_user() && is_array($fields) && !empty($fields['user_id']) && !empty($fields['membership_id'])) { $member = MS_Factory::load('MS_Model_Member', $fields['user_id']); $membership_id = $fields['membership_id']; $gateway_id = 'admin'; $subscription = MS_Model_Relationship::get_subscription($member->id, $membership_id); if (empty($subscription)) { $subscription = MS_Model_Relationship::create_ms_relationship($membership_id, $member->id, $gateway_id); } else { $subscription->gateway_id = $gateway_id; $subscription->save(); } $invoice_id = intval($fields['invoice_id']); $invoice = MS_Factory::load('MS_Model_Invoice', $invoice_id); if (!$invoice->is_valid()) { $invoice = $subscription->get_current_invoice(); $msg = MS_Helper_Billing::BILLING_MSG_ADDED; } else { $msg = MS_Helper_Billing::BILLING_MSG_UPDATED; } foreach ($fields as $field => $value) { $invoice->{$field} = $value; } $invoice->save(); if (!empty($fields['execute'])) { $invoice->changed(); } } return apply_filters('ms_controller_billing_save_invoice', $msg, $fields, $this); }
/** * Render membership payment information. * * Related Filter Hooks: * - the_content * * @since 1.0.0 * * @param string $content The page content to filter. * @return string The filtered content. */ public function payment_table($content) { $data = array(); $subscription = null; $member = MS_Model_Member::get_current_member(); $membership_id = 0; lib2()->array->equip_request('membership_id', 'move_from_id', 'ms_relationship_id'); if (!empty($_POST['ms_relationship_id'])) { // Error path, showing payment table again with error msg $subscription = MS_Factory::load('MS_Model_Relationship', absint(intval($_POST['ms_relationship_id']))); $membership = $subscription->get_membership(); $membership_id = $membership->id; if (!empty($_POST['error'])) { lib2()->array->strip_slashes($_POST, 'error'); $data['error'] = $_POST['error']; } } elseif (!empty($_REQUEST['membership_id'])) { // First time loading $membership_id = intval($_REQUEST['membership_id']); $membership = MS_Factory::load('MS_Model_Membership', $membership_id); $move_from_id = absint($_REQUEST['move_from_id']); $subscription = MS_Model_Relationship::create_ms_relationship($membership_id, $member->id, '', $move_from_id); } else { MS_Helper_Debug::log('Error: missing POST params'); MS_Helper_Debug::log($_POST); return $content; } $invoice = $subscription->get_current_invoice(); /** * Notify Add-ons that we are preparing payment details for a membership * subscription. * * E.g. Coupon discount is applied by this hook. * * @since 1.0.0 */ $invoice = apply_filters('ms_signup_payment_details', $invoice, $subscription, $membership); $invoice->save(); $data['invoice'] = $invoice; $data['membership'] = $membership; $data['member'] = $member; $data['ms_relationship'] = $subscription; $view = MS_Factory::load('MS_View_Frontend_Payment'); $view->data = apply_filters('ms_view_frontend_payment_data', $data, $membership_id, $subscription, $member, $this); return apply_filters('ms_controller_frontend_payment_table', $view->to_html(), $this); }
/** * Creates a new subscription for the specified user/membership and returns * the MS_Model_Relationship object. * * @since 1.0.0 * @return MS_Model_Relationship */ public static function subscribe($user_key, $membership_key, $gateway_id = '') { if (!is_numeric($user_key)) { $user_key = self::id('user', $user_key); } if (!is_numeric($membership_key)) { $membership_key = self::id('membership', $membership_key); } $subscription = MS_Model_Relationship::create_ms_relationship($membership_key, $user_key, $gateway_id, 0); return $subscription; }
/** * Move a membership. * * @since 1.0.0 * @api * * @param int $old_membership_id The membership id to move from. * @param int $mew_membership_id The membership id to move to. */ public function move_membership($old_membership_id, $mew_membership_id) { $old_subscription = $this->get_subscription($old_membership_id); if ($old_subscription) { $new_subscription = MS_Model_Relationship::create_ms_relationship($mew_membership_id, $this->id, $old_subscription->gateway_id, $old_membership_id); $this->cancel_membership($old_membership_id); $this->subscriptions[] = $new_subscription; MS_Model_Event::save_event(MS_Model_Event::TYPE_MS_MOVED, $new_subscription); } do_action('ms_model_membership_move_membership', $old_membership_id, $mew_membership_id, $this); }
/** * Add the simulated relationship to the current users memberships. * * @since 1.0.0 */ public function add_simulation_membership($subscriptions) { $subscription = false; if (!isset($subscriptions[$this->membership_id])) { $this->start_simulation(); $subscription = MS_Model_Relationship::create_ms_relationship($this->membership_id, 0, 'simulation'); } if (is_a($subscription, 'MS_Model_Relationship')) { $membership = $subscription->get_membership(); if (MS_Model_Membership::PAYMENT_TYPE_PERMANENT == $membership->payment_type) { $subscription->expire_date = '2999-12-31'; } $key = 'ms_model_relationship--1'; MS_Factory::set_singleton($subscription, $key); $this->_subscription = $subscription; $subscriptions[$this->membership_id] = $subscription; } return $subscriptions; }