public function process() { $values = $this->getValues(); $lang = OW::getLanguage(); $userId = OW::getUser()->getId(); $billingService = BOL_BillingService::getInstance(); $membershipService = MEMBERSHIP_BOL_MembershipService::getInstance(); $url = OW::getRouter()->urlForRoute('membership_subscribe'); if (!($plan = $membershipService->findPlanById($values['plan']))) { OW::getFeedback()->error($lang->text('membership', 'plan_not_found')); OW::getApplication()->redirect($url); } if ($plan->price == 0) { // trial plan // check if trial plan used $used = $membershipService->isTrialUsedByUser($userId); if ($used) { OW::getFeedback()->error($lang->text('membership', 'trial_used_error')); OW::getApplication()->redirect($url); } else { // give trial plan $userMembership = new MEMBERSHIP_BOL_MembershipUser(); $userMembership->userId = $userId; $userMembership->typeId = $plan->typeId; $userMembership->expirationStamp = time() + (int) $plan->period * 3600 * 24; $userMembership->recurring = 0; $userMembership->trial = 1; $membershipService->setUserMembership($userMembership); $membershipService->addTrialPlanUsage($userId, $plan->id, $plan->period); OW::getFeedback()->info($lang->text('membership', 'trial_granted', array('days' => $plan->period))); OW::getApplication()->redirect($url); } } if (empty($values['gateway']['url']) || empty($values['gateway']['key'])) { OW::getFeedback()->error($lang->text('base', 'billing_gateway_not_found')); OW::getApplication()->redirect($url); } $gateway = $billingService->findGatewayByKey($values['gateway']['key']); if (!$gateway || !$gateway->active) { OW::getFeedback()->error($lang->text('base', 'billing_gateway_not_found')); OW::getApplication()->redirect($url); } // create membership plan product adapter object $productAdapter = new MEMBERSHIP_CLASS_MembershipPlanProductAdapter(); // sale object $sale = new BOL_BillingSale(); $sale->pluginKey = 'membership'; $sale->entityDescription = $membershipService->getFormattedPlan($plan->price, $plan->period, $plan->recurring); $sale->entityKey = $productAdapter->getProductKey(); $sale->entityId = $plan->id; $sale->price = floatval($plan->price); $sale->period = $plan->period; $sale->userId = $userId ? $userId : 0; $sale->recurring = $plan->recurring; $saleId = $billingService->initSale($sale, $values['gateway']['key']); if ($saleId) { // sale Id is temporarily stored in session $billingService->storeSaleInSession($saleId); $billingService->setSessionBackUrl($productAdapter->getProductOrderUrl()); // redirect to gateway form page OW::getApplication()->redirect($values['gateway']['url']); } }
public function process() { $values = $this->getValues(); $lang = OW::getLanguage(); $userId = OW::getUser()->getId(); $billingService = BOL_BillingService::getInstance(); $membershipService = MEMBERSHIP_BOL_MembershipService::getInstance(); if (empty($values['gateway']['url']) || empty($values['gateway']['key']) || !($gateway = $billingService->findGatewayByKey($values['gateway']['key']) || !$gateway->active)) { OW::getFeedback()->error($lang->text('base', 'billing_gateway_not_found')); OW::getApplication()->redirect(OW::getRouter()->urlForRoute('membership_subscribe')); } if (!($plan = $membershipService->findPlanById($values['plan']))) { OW::getFeedback()->error($lang->text('membership', 'plan_not_found')); OW::getApplication()->redirect(OW::getRouter()->urlForRoute('membership_subscribe')); } // create membership plan product adapter object $productAdapter = new MEMBERSHIP_CLASS_MembershipPlanProductAdapter(); // sale object $sale = new BOL_BillingSale(); $sale->pluginKey = 'membership'; $sale->entityDescription = $membershipService->getFormattedPlan($plan->price, $plan->period, $plan->recurring); $sale->entityKey = $productAdapter->getProductKey(); $sale->entityId = $plan->id; $sale->price = floatval($plan->price); $sale->period = $plan->period; $sale->userId = $userId ? $userId : 0; $sale->recurring = $plan->recurring; $saleId = $billingService->initSale($sale, $values['gateway']['key']); if ($saleId) { // sale Id is temporarily stored in session $billingService->storeSaleInSession($saleId); $billingService->setSessionBackUrl($productAdapter->getProductOrderUrl()); // redirect to gateway form page OW::getApplication()->redirect($values['gateway']['url']); } }