/** * 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(); }