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();
 }
예제 #3
0
 /**
  * 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;
 }