public function handle() { $itemInfo = $this->item['info']; // Get user require_once dirname(dirname(dirname(__DIR__))) . DS . 'models' . DS . 'Cart.php'; $uId = \Components\Cart\Models\Cart::getCartUser($this->crtId); // Get product type require_once PATH_CORE . DS . 'components' . DS . 'com_storefront' . DS . 'models' . DS . 'Warehouse.php'; $warehouse = new \Components\Storefront\Models\Warehouse(); $pType = $warehouse->getProductTypeInfo($itemInfo->ptId); $type = $pType['ptName']; require_once PATH_CORE . DS . 'components' . DS . 'com_storefront' . DS . 'models' . DS . 'Memberships.php'; $subscription = \Components\Storefront\Models\Memberships::getSubscriptionObject($type, $itemInfo->pId, $uId); // Get the expiration for the current subscription (if any) $currentExpiration = $subscription->getExpiration(); // Calculate new expiration $newExpires = Components\Storefront\Models\Memberships::calculateNewExpiration($currentExpiration, $this->item); // Update/Create membership expiration date with new value $subscription->setExpiration($newExpires); }
/** * Main handler. Does all the checks * * @param void * @return void */ public function audit() { /* Membership may have a limit on when it can be extended */ /* If no user, some checks may be skipped... */ // Get user $jUser = User::getRoot(); if (!$jUser->get('guest')) { // Check if there is a limitation on when the subscription can be extended $subscriptionMaxLen = Product::getMeta($this->pId, 'subscriptionMaxLen'); if ($subscriptionMaxLen) { /* Check if the current user has the existing subscription and how much is left on it i.e. figure out if he may extend his current subscription */ /* * This is not working very well for multiple SKUs with multiple subscriptionMaxLen's * at this point code doesn't know what SKU will be added, * so for one SKU subscriptionMaxLen should * be set to time less than actual membership length, ie if membership is sold for 1 year and * cannot be renewed more than 6 month before it expires the subscriptionMaxLen must be set to 6 MONTH * if it cannot be renewed more than 3 month before it expires the subscriptionMaxLen must be set to 3 MONTH * * so subscriptionMaxLen = XX is actually "let renew XX time before expiration" */ // Get the proper product type subscription object reference $subscription = Memberships::getSubscriptionObject($this->type, $this->pId, $this->uId); // Get the expiration for the current subscription (if any) $currentExpiration = $subscription->getExpiration(); if ($currentExpiration && $currentExpiration['crtmActive']) { // Do the check $currentExpirationTime = $currentExpiration['crtmExpires']; // See if current expiration is later than max allowed time from now (max allowed time + now) if (strtotime('+' . $subscriptionMaxLen) < strtotime($currentExpirationTime)) { // Expiration is not allowed -- the current expiration is too far in the future $this->setResponseStatus('error'); $this->setResponseNotice('You already have an active subscription to this item. Subscription extension is not available at this time.'); $this->setResponseError(': you already have an active subscription. Subscription extension is not available at this time.'); } } } } return $this->getResponse(); }
/** * Handle memberships * * @param object $cartInfo * @param object $cartCoupons * @return object membership info */ public function getMembershipInfo() { $cartInfo = $this->getCartInfo(); $cartItems = $cartInfo->items; // init membership info $memberships = array(); require_once PATH_CORE . DS . 'components' . DS . 'com_storefront' . DS . 'models' . DS . 'Memberships.php'; $ms = new \Components\Storefront\Models\Memberships(); // Get membership types $membershipTypes = $ms->getMembershipTypes(); // Go through each product and see if the type is membership foreach ($cartItems as $sId => $item) { if (in_array($item['info']->ptId, $membershipTypes) && !empty($item['meta']['ttl'])) { $itemInfo = $item['info']; // Get product type $warehouse = $this->warehouse; $pType = $warehouse->getProductTypeInfo($itemInfo->ptId); $type = $pType['ptName']; // Get user $jUser = User::getInstance(); // Get the correct membership Object $subscription = \Components\Storefront\Models\Memberships::getSubscriptionObject($type, $itemInfo->pId, $jUser->id); // Get the expiration for the current subscription (if any) $currentExpiration = $subscription->getExpiration(); // Calculate new expiration $newExpires = \Components\Storefront\Models\Memberships::calculateNewExpiration($currentExpiration, $item); $membershipSIdInfo = new \stdClass(); $membershipSIdInfo->newExpires = strtotime($newExpires); if ($currentExpiration && $currentExpiration['crtmActive']) { $membershipSIdInfo->existingExpires = strtotime($currentExpiration['crtmExpires']); } $memberships[$sId] = $membershipSIdInfo; unset($membershipSIdInfo); } } return $memberships; }