Beispiel #1
0
 /**
  * Save applied coupons.
  *
  * @return void
  */
 public static function saveApplied()
 {
     if (self::$useMode == self::MODE_SYSTEM || !self::isEntered() || !self::$allowedSave) {
         return;
     }
     $result = array();
     $currentTime = new Type\DateTime();
     $userId = self::getUserId();
     $appliedCoupons = self::filterCoupons(array('STATUS' => self::STATUS_APPLYED, 'MODULE' => 'sale', 'SAVED' => 'N'), true);
     if (!empty($appliedCoupons)) {
         $result['sale'] = array('COUPONS' => $appliedCoupons);
         $saveResult = Internals\DiscountCouponTable::saveApplied($appliedCoupons, $userId, $currentTime);
         if ($saveResult === false) {
             $result['sale']['ERROR'] = true;
         } else {
             $result['sale']['DEACTIVATE'] = $saveResult['DEACTIVATE'];
             $result['sale']['LIMITED'] = $saveResult['LIMITED'];
             $result['sale']['INCREMENT'] = $saveResult['INCREMENT'];
             self::eraseAppliedCoupons($result['sale']);
         }
     }
     if (!self::$onlySaleDiscount && !empty(self::$couponProviders)) {
         foreach (self::$couponProviders as &$provider) {
             $appliedCoupons = self::filterCoupons(array('STATUS' => self::STATUS_APPLYED, 'MODULE' => $provider['module'], 'SAVED' => 'N'), true);
             if (empty($appliedCoupons)) {
                 continue;
             }
             $result[$provider['module']] = array('COUPONS' => $appliedCoupons);
             $saveResult = call_user_func_array($provider['saveApplied'], array($appliedCoupons, $userId, $currentTime));
             if (empty($saveResult) || !is_array($saveResult)) {
                 $result[$provider['module']]['ERROR'] = true;
             } else {
                 $result[$provider['module']]['DEACTIVATE'] = isset($saveResult['DEACTIVATE']) ? $saveResult['DEACTIVATE'] : array();
                 $result[$provider['module']]['LIMITED'] = isset($saveResult['LIMITED']) ? $saveResult['LIMITED'] : array();
                 $result[$provider['module']]['INCREMENT'] = isset($saveResult['INCREMENT']) ? $saveResult['INCREMENT'] : array();
                 self::eraseAppliedCoupons($result[$provider['module']]);
             }
         }
     }
     self::saveToStorage();
     self::$allowedSave = false;
     $event = new Main\Event('sale', self::EVENT_ON_SAVE_APPLIED_COUPONS, $result);
     $event->send();
 }