Bitrix-D7  20.0.0
Класс DiscountCouponsManagerBase
Граф наследования:DiscountCouponsManagerBase:
DiscountCouponsManager

Открытые статические члены

static getRegistryType ()
 
static initUseMode ($mode=self::MODE_CLIENT, $params=array())
 Init use mode and user id. Подробнее...
 
static getUseMode ()
 Returns use mode. Подробнее...
 
static usedByClient ()
 Verifies that the client mode being used. Подробнее...
 
static usedByManager ()
 Verifies that the manager mode being used. Подробнее...
 
static usedByExternal ()
 Verifies that the external order mode being used. Подробнее...
 
static getUserId ()
 Returns user id. Подробнее...
 
static getOrderId ()
 Returns order id, if current use mode self::MODE_ORDER. Подробнее...
 
static isSuccess ()
 Returns a sign of success. Подробнее...
 
static getErrors ()
 Returns error list. Подробнее...
 
static clearErrors ()
 Clear errors list. Подробнее...
 
static getStatusList ($extendedMode=false)
 Returns coupon status list. Подробнее...
 
static getCheckCodeList ($extendedMode=false)
 Returns check code list. Подробнее...
 
static getCheckCodeMessage ($code)
 Returns description of check code. Подробнее...
 
static useSavedCouponsForApply ($state)
 Set use ordered coupons for apply. Подробнее...
 
static isUsedOrderCouponsForApply ()
 Returns use ordered coupons for apply. Подробнее...
 
static unFreezeCouponStorage ()
 Enable get coupons for calculate discounts. Подробнее...
 
static freezeCouponStorage ()
 Disable get coupons for calculate discounts. Подробнее...
 
static isFrozenCouponStorage ()
 Returns true, if disallow get coupons for calculate discounts. Подробнее...
 
static init ($mode=self::MODE_CLIENT, $params=array(), $clearStorage=false)
 Initialization coupon manager. Подробнее...
 
static reInit ($mode=self::MODE_CLIENT, $params=array(), $clearStorage=false)
 Unconditional reinitialization coupon manager. Подробнее...
 
static isEntered ()
 Returns true, if coupons were are entered. Подробнее...
 
static add ($coupon)
 Add coupon in manager. Подробнее...
 
static delete ($coupon)
 Delete coupon from manager. Подробнее...
 
static clear ($clearStorage=false)
 Clear coupon storage. Подробнее...
 
static clearByOrder ($order)
 Clear coupon storage for order. Подробнее...
 
static migrateStorage ($oldUser)
 Change coupons owner in manager or order mode. Подробнее...
 
static load ()
 Load coupons for existing order. Подробнее...
 
static get ($extMode=true, $filter=array(), $show=false, $final=false)
 Get coupons list. Подробнее...
 
static getForApply ($filter, $product=array(), $uniqueDiscount=false)
 Get coupons list for apply. Подробнее...
 
static getOrderedCoupons ($extMode=true, $filter=array())
 Returns coupons for current order. Подробнее...
 
static verifyApplied ()
 Verifies the current status of new applied coupons. Подробнее...
 
static saveApplied ()
 Save applied coupons. Подробнее...
 
static setApplyByProduct ($product, $couponsList, $oldMode=false)
 Set applied information for product. Подробнее...
 
static setApply ($coupon, $data)
 Set applied information for basket. Подробнее...
 
static deleteApplyByProduct ($product)
 Clear applied information for product. Подробнее...
 
static finalApply ()
 Change status coupons for save. Подробнее...
 
static clearApplyCoupon ($coupon)
 Clear applied data for coupon. Подробнее...
 
static clearApply ($all=true)
 Clear applied data for coupons. Подробнее...
 
static getData ($coupon, $checkCoupon=true)
 Returns information about coupon. Подробнее...
 
static isExist ($coupon)
 Checks if a coupon exists. Подробнее...
 
static getEnteredCoupon ($coupon, $clearData=false)
 Returns entered coupon data. Подробнее...
 
static logout ()
 Clear coupons storage with logout from public. Подробнее...
 
static filterOrderCoupons ($coupon)
 Returns true if the coupon was used in the order and saved. Подробнее...
 
static setUseOnlySaleDiscounts ($mode)
 Reload discount coupons providers. Подробнее...
 

Поля данных

const MODE_CLIENT = 0x0001
 
const MODE_MANAGER = 0x0002
 
const MODE_ORDER = 0x0004
 
const MODE_SYSTEM = 0x0008
 
const MODE_EXTERNAL = 0x0010
 
const STATUS_NOT_FOUND = 0x0001
 
const STATUS_ENTERED = 0x0002
 
const STATUS_APPLYED = 0x0004
 
const STATUS_NOT_APPLYED = 0x0008
 
const STATUS_FREEZE = 0x0010
 
const COUPON_CHECK_OK = 0x0000
 
const COUPON_CHECK_NOT_FOUND = 0x0001
 
const COUPON_CHECK_NO_ACTIVE = 0x0002
 
const COUPON_CHECK_RANGE_ACTIVE_FROM = 0x0004
 
const COUPON_CHECK_RANGE_ACTIVE_TO = 0x0008
 
const COUPON_CHECK_NO_ACTIVE_DISCOUNT = 0x0010
 
const COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT = 0x0020
 
const COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT = 0x0040
 
const COUPON_CHECK_BAD_USER_ID = 0x0080
 
const COUPON_CHECK_ALREADY_MAX_USED = 0x0100
 
const COUPON_CHECK_UNKNOWN_TYPE = 0x0200
 
const COUPON_CHECK_CORRUPT_DATA = 0x0400
 
const COUPON_CHECK_NOT_APPLIED = 0x0800
 
const COUPON_MODE_SIMPLE = 0x0001
 
const COUPON_MODE_FULL = 0x0002
 
const EVENT_ON_BUILD_COUPON_PROVIDES = 'onBuildCouponProviders'
 
const EVENT_ON_SAVE_APPLIED_COUPONS = 'onManagerSaveApplied'
 
const EVENT_ON_COUPON_ADD = 'onManagerCouponAdd'
 
const EVENT_ON_COUPON_DELETE = 'onManagerCouponDelete'
 
const EVENT_ON_COUPON_APPLY_PRODUCT = 'onManagerCouponApplyByProduct'
 
const EVENT_ON_COUPON_APPLY = 'onManagerCouponApply'
 
const STORAGE_MANAGER_COUPONS = 'CATALOG_MANAGE_COUPONS'
 
const STORAGE_CLIENT_COUPONS = 'CATALOG_USER_COUPONS'
 

Защищенные статические члены

static checkBaseData (&$data, $checkCode=self::COUPON_CHECK_OK)
 Checks the basic coupon fields. Подробнее...
 
static checkFullData (&$data, $mode=self::COUPON_MODE_FULL, $checkCode=self::COUPON_CHECK_OK, $currentTimestamp)
 Checks the extended coupon fields. Подробнее...
 
static fillUserInfo (&$result, $existCoupon, $checkCode)
 Fill client information. Подробнее...
 
static initUserId ()
 Get user by fuser id. Подробнее...
 
static saveToStorage ()
 Save current coupons to session storage. Подробнее...
 
static eraseAppliedCoupons ($result)
 Clear applied coupons. Подробнее...
 
static createApplyFields (&$couponData)
 Create applied fields. Подробнее...
 
static loadCouponProviders ()
 Load coupon providers from modules. Подробнее...
 
static initUseDiscount ()
 Initialization coupons providers. Подробнее...
 
static filterUnknownCoupons ($coupon)
 Filter for remove unknown coupons. Подробнее...
 
static filterFreezeCoupons ($coupon)
 Filter for remove freeze coupons. Подробнее...
 
static filterFreezeOrderedCoupons ($coupon)
 Filter for remove freeze ordered coupons. Подробнее...
 
static filterOneRowCoupons ($coupon, $hash)
 Clear one row coupons. Подробнее...
 
static filterUniqueDiscount (&$coupons)
 Returns one coupon for one discount. Подробнее...
 
static filterCoupons ($filter, $getId=false)
 Filter manager coupons list. Подробнее...
 
static filterArrayCoupons (&$coupons, $filter)
 Filter coupons list. Подробнее...
 
static getProductHash ($product)
 Create product hash. Подробнее...
 
static getCatalogProductHash ($product)
 Create catalog product hash for old custom providers. Подробнее...
 
static fillCouponHints (&$coupons)
 Fill coupon hints. Подробнее...
 
static setCoupons ($couponsList, $checkCoupons=true)
 Set coupons list. Подробнее...
 
static clearSavedCoupons ($coupon)
 Clear order saved coupons. Подробнее...
 
static clearSystemData (&$coupons)
 Clear system data. Подробнее...
 
static convertOldFilterFields (array &$filter)
 Convert old filter fields. Подробнее...
 
static getEmptyCouponFields ($coupon)
 Returns empty coupon (default field values). Подробнее...
 

Статические защищенные данные

static $coupons = array()
 
static $init = false
 
static $useMode = self::MODE_CLIENT
 
static $errors = array()
 
static $onlySaleDiscount = null
 
static $userId = null
 
static $couponProviders = array()
 
static $couponTypes = array()
 
static $couponIndex = 0
 
static $orderId = null
 
static $allowedSave = false
 
static $checkActivity = true
 
static $useOrderCoupons = true
 
static $clearFields
 
static $timeFields
 
static $allowCouponStorage = 0
 

Подробное описание

См. определение в файле discountcouponsmanagerbase.php строка 13

Методы

◆ add()

static add (   $coupon)
static

Add coupon in manager.

Аргументы
string$couponAdded coupon.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 503

504  {
505  if (!self::$init)
506  self::init();
507  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
508  return false;
509 
510  $coupon = trim((string)$coupon);
511  if ($coupon === '')
512  return false;
513  if (!isset(self::$coupons[$coupon]))
514  {
515  $couponData = self::getData($coupon);
516  if (!isset(self::$coupons[$couponData['COUPON']]))
517  {
518  $couponData['SORT'] = self::$couponIndex;
519  self::createApplyFields($couponData);
520  self::$coupons[$couponData['COUPON']] = $couponData;
521  self::$couponIndex++;
523  $event = new Main\Event('sale', self::EVENT_ON_COUPON_ADD, $couponData);
524  $event->send();
525  }
526  if (self::$coupons[$couponData['COUPON']]['MODE'] == self::COUPON_MODE_FULL)
527  return (self::$coupons[$couponData['COUPON']]['STATUS'] != self::STATUS_NOT_FOUND);
528  else
529  return (
530  self::$coupons[$couponData['COUPON']]['STATUS'] != self::STATUS_NOT_FOUND
531  && self::$coupons[$couponData['COUPON']]['STATUS'] != self::STATUS_FREEZE
532  );
533  }
534  else
535  {
536  if (self::$coupons[$coupon]['MODE'] == self::COUPON_MODE_FULL)
537  return (self::$coupons[$coupon]['STATUS'] != self::STATUS_NOT_FOUND);
538  else
539  return (
540  self::$coupons[$coupon]['STATUS'] != self::STATUS_NOT_FOUND
541  && self::$coupons[$coupon]['STATUS'] != self::STATUS_FREEZE
542  );
543  }
544  }

◆ checkBaseData()

static checkBaseData ( $data,
  $checkCode = self::COUPON_CHECK_OK 
)
staticprotected

Checks the basic coupon fields.

Аргументы
array&$dataCoupon data.
int$checkCodeStart status.
Возвращает
int

См. определение в файле discountcouponsmanagerbase.php строка 1496

1497  {
1498  if (empty(self::$couponTypes))
1499  self::$couponTypes = Internals\DiscountCouponTable::getCouponTypes(true);
1500 
1501  if (!isset($data['ID']))
1502  {
1503  $data['ID'] = 0;
1504  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1505  }
1506  else
1507  {
1508  $data['ID'] = (int)$data['ID'];
1509  if ($data['ID'] <= 0 && self::$checkActivity)
1510  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1511  }
1512  if (!isset($data['DISCOUNT_ID']))
1513  {
1514  $data['DISCOUNT_ID'] = (int)$data['DISCOUNT_ID'];
1515  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1516  }
1517  else
1518  {
1519  $data['DISCOUNT_ID'] = (int)$data['DISCOUNT_ID'];
1520  if ($data['DISCOUNT_ID'] <= 0 && self::$checkActivity)
1521  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1522  }
1523  if (!isset($data['TYPE']))
1524  {
1525  $data['TYPE'] = Internals\DiscountCouponTable::TYPE_UNKNOWN;
1526  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1527  }
1528  else
1529  {
1530  $data['TYPE'] = (int)$data['TYPE'];
1531  if (!isset(self::$couponTypes[$data['TYPE']]) && $data['TYPE'] != Internals\DiscountCouponTable::TYPE_ARCHIVED)
1532  {
1533  $data['TYPE'] = Internals\DiscountCouponTable::TYPE_UNKNOWN;
1534  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1535  }
1536  }
1537  if (!isset($data['ACTIVE']))
1538  {
1539  $data['ACTIVE'] = '';
1540  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1541  }
1542  else
1543  {
1544  $data['ACTIVE'] = (string)$data['ACTIVE'];
1545  if ($data['ACTIVE'] != 'Y' && $data['ACTIVE'] != 'N')
1546  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1547  }
1548  if (isset($data['ACTIVE_FROM']) && !($data['ACTIVE_FROM'] instanceof Main\Type\DateTime))
1549  {
1550  $data['ACTIVE_FROM'] = null;
1551  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1552  }
1553  if (isset($data['ACTIVE_TO']) && !($data['ACTIVE_TO'] instanceof Main\Type\DateTime))
1554  {
1555  $data['ACTIVE_TO'] = null;
1556  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1557  }
1558  $data['DISCOUNT_NAME'] = (isset($data['DISCOUNT_NAME']) ? (string)$data['DISCOUNT_NAME'] : '');
1559  if (!isset($data['DISCOUNT_ACTIVE']))
1560  {
1561  $data['DISCOUNT_ACTIVE'] = '';
1562  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1563  }
1564  else
1565  {
1566  $data['DISCOUNT_ACTIVE'] = (string)$data['DISCOUNT_ACTIVE'];
1567  if ($data['DISCOUNT_ACTIVE'] != 'Y' && $data['DISCOUNT_ACTIVE'] != 'N')
1568  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1569  }
1570  if (isset($data['DISCOUNT_ACTIVE_FROM']) && !($data['DISCOUNT_ACTIVE_FROM'] instanceof Main\Type\DateTime))
1571  {
1572  $data['DISCOUNT_ACTIVE_FROM'] = null;
1573  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1574  }
1575  if (isset($data['DISCOUNT_ACTIVE_TO']) && !($data['DISCOUNT_ACTIVE_TO'] instanceof Main\Type\DateTime))
1576  {
1577  $data['DISCOUNT_ACTIVE_TO'] = null;
1578  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1579  }
1580  return $checkCode;
1581  }

◆ checkFullData()

static checkFullData ( $data,
  $mode = self::COUPON_MODE_FULL,
  $checkCode = self::COUPON_CHECK_OK,
  $currentTimestamp 
)
staticprotected

Checks the extended coupon fields.

Аргументы
array&$dataCoupon data.
int$modeCoupon mode (full or simple).
int$checkCodeStart check status.
int$currentTimestampCurrent time.
Возвращает
int

См. определение в файле discountcouponsmanagerbase.php строка 1592

1593  {
1594  $mode = ((int)$mode != self::COUPON_MODE_SIMPLE ? self::COUPON_MODE_FULL : self::COUPON_MODE_SIMPLE);
1595 
1596  if (self::$checkActivity)
1597  {
1598  if ($data['ACTIVE'] != 'Y')
1599  $checkCode |= self::COUPON_CHECK_NO_ACTIVE;
1600  if ($data['DISCOUNT_ACTIVE'] != 'Y')
1602  if ($data['DISCOUNT_ACTIVE_FROM'] instanceof Main\Type\DateTime && $data['DISCOUNT_ACTIVE_FROM']->getTimestamp() > $currentTimestamp)
1603  $checkCode |= self::COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT;
1604  if ($data['DISCOUNT_ACTIVE_TO'] instanceof Main\Type\DateTime && $data['DISCOUNT_ACTIVE_TO']->getTimestamp() < $currentTimestamp)
1605  $checkCode |= self::COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT;
1606  }
1607 
1608  if ($mode == self::COUPON_MODE_FULL)
1609  {
1610  if (self::$checkActivity)
1611  {
1612  if ($data['ACTIVE_FROM'] instanceof Main\Type\DateTime && $data['ACTIVE_FROM']->getTimestamp() > $currentTimestamp)
1613  $checkCode |= self::COUPON_CHECK_RANGE_ACTIVE_FROM;
1614  if ($data['ACTIVE_TO'] instanceof Main\Type\DateTime && $data['ACTIVE_TO']->getTimestamp() < $currentTimestamp)
1615  $checkCode |= self::COUPON_CHECK_RANGE_ACTIVE_TO;
1616  }
1617  if (!isset($data['USER_ID']))
1618  {
1619  $data['USER_ID'] = 0;
1620  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1621  }
1622  else
1623  {
1624  $data['USER_ID'] = (int)$data['USER_ID'];
1625  if ($data['USER_ID'] > 0 && $data['USER_ID'] != self::$userId)
1626  $checkCode |= self::COUPON_CHECK_BAD_USER_ID;
1627  }
1628  if (!isset($data['MAX_USE']))
1629  {
1630  $data['MAX_USE'] = 0;
1631  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1632  }
1633  else
1634  {
1635  $data['MAX_USE'] = (int)$data['MAX_USE'];
1636  }
1637  if (!isset($data['USE_COUNT']))
1638  {
1639  $data['USE_COUNT'] = 0;
1640  $checkCode |= self::COUPON_CHECK_CORRUPT_DATA;
1641  }
1642  else
1643  {
1644  if (self::$checkActivity)
1645  {
1646  $data['USE_COUNT'] = (int)$data['USE_COUNT'];
1647  if ($data['MAX_USE'] > 0 && $data['USE_COUNT'] >= $data['MAX_USE'])
1649  }
1650  }
1651  }
1652 
1653  return $checkCode;
1654  }

◆ clear()

static clear (   $clearStorage = false)
static

Clear coupon storage.

Аргументы
bool$clearStorageClear coupon session storage.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 594

595  {
596  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
597  return false;
598 
599  $clearStorage = ($clearStorage === true);
600  self::$coupons = array();
601  if ($clearStorage)
603  return true;
604  }

◆ clearApply()

static clearApply (   $all = true)
static

Clear applied data for coupons.

Аргументы
bool$allClear for coupons or not saved.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1212

1213  {
1214  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
1215  return false;
1216  if (self::isFrozenCouponStorage())
1217  return false;
1218  if (empty(self::$coupons))
1219  return true;
1220  $all = ($all !== false);
1221  foreach (self::$coupons as &$coupon)
1222  {
1223  if ($coupon['STATUS'] == self::STATUS_NOT_FOUND || $coupon['STATUS'] == self::STATUS_FREEZE)
1224  continue;
1225  if (!$all && $coupon['SAVED'] == 'Y')
1226  continue;
1227  $coupon['STATUS'] = self::STATUS_ENTERED;
1228  self::createApplyFields($coupon);
1229  }
1230  unset($coupon);
1231  return true;
1232  }

◆ clearApplyCoupon()

static clearApplyCoupon (   $coupon)
static

Clear applied data for coupon.

Аргументы
string$couponCoupon.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1187

1188  {
1189  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
1190  return false;
1191  if (empty(self::$coupons))
1192  return true;
1193  $coupon = trim((string)$coupon);
1194  if ($coupon == '')
1195  return false;
1196  if (!isset(self::$coupons[$coupon]))
1197  return false;
1198  if (self::$coupons[$coupon]['STATUS'] == self::STATUS_NOT_FOUND || self::$coupons[$coupon]['STATUS'] == self::STATUS_FREEZE)
1199  return false;
1200  self::$coupons[$coupon]['STATUS'] = self::STATUS_ENTERED;
1201  self::createApplyFields(self::$coupons[$coupon]);
1202 
1203  return true;
1204  }

◆ clearByOrder()

static clearByOrder (   $order)
static

Clear coupon storage for order.

Аргументы
int$orderOrder id.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 612

613  {
614  if (!self::isSuccess())
615  return false;
616  $order = (int)$order;
617  if ($order <= 0)
618  return false;
619  $userId = 0;
620 
621  $registry = Registry::getInstance(static::getRegistryType());
622 
623  /** @var OrderBase $orderClassName */
624  $orderClassName = $registry->getOrderClassName();
625 
626  $orderIterator = $orderClassName::getList([
627  'select' => ['ID', 'USER_ID'],
628  'filter' => ['=ID' => $order]
629  ]);
630  if ($orderData = $orderIterator->fetch())
631  $userId = (int)$orderData['USER_ID'];
632  unset($orderData, $orderIterator);
633  if ($userId <= 0)
634  return false;
635  self::initUseMode(self::MODE_ORDER, array('userId' => $userId, 'orderId' => $order));
636  if (!self::isSuccess())
637  return false;
638  self::$coupons = array();
640 
641  return true;
642  }

◆ clearErrors()

static clearErrors ( )
static

Clear errors list.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 262

263  {
264  self::$errors = array();
265  }

◆ clearSavedCoupons()

static clearSavedCoupons (   $coupon)
staticprotected

Clear order saved coupons.

См. определение в файле discountcouponsmanagerbase.php строка 2266

2267  {
2268  return (!isset($coupon['SAVED']) || $coupon['SAVED'] != 'Y');
2269  }

◆ clearSystemData()

static clearSystemData ( $coupons)
staticprotected

Clear system data.

См. определение в файле discountcouponsmanagerbase.php строка 2278

2279  {
2280  $result = array();
2281  foreach ($coupons as $couponIndex => $couponData)
2282  {
2283  if (array_key_exists('SYSTEM_DATA', $couponData))
2284  unset($couponData['SYSTEM_DATA']);
2285  $result[$couponIndex] = $couponData;
2286  }
2287  unset($couponIndex, $couponData);
2288  $coupons = $result;
2289  }

◆ convertOldFilterFields()

static convertOldFilterFields ( array &  $filter)
staticprotected

Convert old filter fields.

См. определение в файле discountcouponsmanagerbase.php строка 2298

2299  {
2300  if (array_key_exists('MODULE', $filter))
2301  {
2302  if (!isset($filter['MODULE_ID']))
2303  $filter['MODULE_ID'] = $filter['MODULE'];
2304  unset($filter['MODULE']);
2305  }
2306  if (array_key_exists('!MODULE', $filter))
2307  {
2308  if (!isset($filter['!MODULE_ID']))
2309  $filter['!MODULE_ID'] = $filter['!MODULE'];
2310  unset($filter['!MODULE']);
2311  }
2312  }

◆ createApplyFields()

static createApplyFields ( $couponData)
staticprotected

Create applied fields.

Аргументы
array&$couponDataCoupon data.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1772

1773  {
1774  $couponData['BASKET'] = array();
1775  $couponData['DELIVERY'] = array();
1776  }

◆ delete()

static delete (   $coupon)
static

Delete coupon from manager.

Аргументы
string$couponDeleted coupon.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 552

553  {
554  if (!self::$init)
555  self::init();
556  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
557  return false;
558 
559  $coupon = trim((string)$coupon);
560  if ($coupon === '')
561  return false;
562  $founded = false;
563  if (isset(self::$coupons[$coupon]))
564  {
565  $couponData = self::$coupons[$coupon];
566  unset(self::$coupons[$coupon]);
567  $founded = true;
568  }
569  else
570  {
571  $couponData = self::getData($coupon, false);
572  if (isset(self::$coupons[$couponData['COUPON']]))
573  {
574  unset(self::$coupons[$couponData['COUPON']]);
575  $founded = true;
576  }
577  }
578  if ($founded)
579  {
581  $event = new Main\Event('sale', self::EVENT_ON_COUPON_DELETE, $couponData);
582  $event->send();
583  return true;
584  }
585  return false;
586  }

◆ deleteApplyByProduct()

static deleteApplyByProduct (   $product)
static

Clear applied information for product.

Аргументы
array$productProduct description.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1134

1135  {
1136  if (self::$useMode == self::MODE_SYSTEM || empty($product))
1137  return false;
1138  $hash = self::getProductHash($product);
1139  if ($hash === '')
1140  return false;
1141  $success = false;
1142  foreach (self::$coupons as &$oneCoupon)
1143  {
1144  if ($oneCoupon['STATUS'] == self::STATUS_NOT_FOUND || $oneCoupon['STATUS'] == self::STATUS_FREEZE)
1145  continue;
1146  if ($oneCoupon['SAVED'] == 'Y')
1147  continue;
1148  if (isset($oneCoupon['BASKET'][$hash]))
1149  {
1150  unset($oneCoupon['BASKET'][$hash]);
1151  if (empty($oneCoupon['BASKET']) && empty($oneCoupon['DELIVERY']))
1152  $oneCoupon['STATUS'] = self::STATUS_NOT_APPLYED;
1153  $success = true;
1154  }
1155  }
1156  unset($oneCoupon);
1157  return $success;
1158  }

◆ eraseAppliedCoupons()

static eraseAppliedCoupons (   $result)
staticprotected

Clear applied coupons.

Аргументы
array$resultApplied coupons.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1752

1753  {
1754  if (!empty($result['DEACTIVATE']) || !empty($result['LIMITED']))
1755  {
1756  $clear = array_keys(array_merge($result['DEACTIVATE'], $result['LIMITED']));
1757  foreach ($clear as $coupon)
1758  {
1759  if (isset(self::$coupons[$coupon]))
1760  unset(self::$coupons[$coupon]);
1761  }
1762  unset($coupon, $clear);
1763  }
1764  }

◆ fillCouponHints()

static fillCouponHints ( $coupons)
staticprotected

Fill coupon hints.

Аргументы
array&$couponsCoupons list.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 2165

2166  {
2167  $statusList = self::getStatusList(true);
2168  $checkCode = self::getCheckCodeList(true);
2169  foreach ($coupons as &$oneCoupon)
2170  {
2171  $oneCoupon['STATUS_TEXT'] = $statusList[$oneCoupon['STATUS']];
2172  if ($oneCoupon['CHECK_CODE'] == self::COUPON_CHECK_OK || $oneCoupon['CHECK_CODE'] == self::COUPON_CHECK_NOT_APPLIED)
2173  {
2174  if ($oneCoupon['CHECK_CODE'] == self::COUPON_CHECK_OK)
2175  {
2176  $oneCoupon['CHECK_CODE_TEXT'] = (
2177  $oneCoupon['STATUS'] == self::STATUS_APPLYED
2178  ? array($statusList[$oneCoupon['STATUS']])
2179  : array($checkCode[self::COUPON_CHECK_OK])
2180  );
2181  }
2182  else
2183  {
2184  $oneCoupon['CHECK_CODE_TEXT'] = array($checkCode[self::COUPON_CHECK_NOT_APPLIED]);
2185  }
2186  }
2187  else
2188  {
2189  $oneCoupon['CHECK_CODE_TEXT'] = array();
2190  foreach ($checkCode as $code => $text)
2191  {
2192  if ($code == self::COUPON_CHECK_OK)
2193  continue;
2194  if (($oneCoupon['CHECK_CODE'] & $code) == $code)
2195  $oneCoupon['CHECK_CODE_TEXT'][] = $checkCode[$code];
2196  }
2197  }
2198  }
2199  unset($oneCoupon);
2200  }

◆ fillUserInfo()

static fillUserInfo ( $result,
  $existCoupon,
  $checkCode 
)
staticprotected

Fill client information.

Аргументы
array&$resultCoupon data.
array$existCouponUser data.
int$checkCodeChecked result.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1664

1665  {
1666  if ($checkCode == self::COUPON_CHECK_OK && $result['MODE'] == self::COUPON_MODE_FULL)
1667  {
1668  $result['SYSTEM_DATA'] = array(
1669  'USER_ID' => $existCoupon['USER_ID'],
1670  'MAX_USE' => $existCoupon['MAX_USE'],
1671  'USE_COUNT' => $existCoupon['USE_COUNT'],
1672  'ACTIVE_FROM' => $existCoupon['ACTIVE_FROM'],
1673  'ACTIVE_TO' => $existCoupon['ACTIVE_TO']
1674  );
1675  if (self::usedByManager() || ($existCoupon['USER_ID'] > 0 && $existCoupon['USER_ID'] == self::$userId))
1676  $result['USER_INFO'] = $result['SYSTEM_DATA'];
1677  }
1678  }

◆ filterArrayCoupons()

static filterArrayCoupons ( $coupons,
  $filter 
)
staticprotected

Filter coupons list.

Аргументы
array&$couponsCoupons list.
array$filterCoupon filter.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 2035

2036  {
2037  if (empty($coupons) || !is_array($coupons) || empty($filter) || !is_array($filter))
2038  return;
2039  $result = array();
2040  foreach ($coupons as $id => $data)
2041  {
2042  $copy = true;
2043  foreach ($filter as $filterKey => $filterValue)
2044  {
2045  if (is_array($filterValue) && isset($filterValue['LOGIC']))
2046  {
2047  $logic = strtolower($filterValue['LOGIC']);
2048  if ($logic != 'and' && $logic != 'or')
2049  break 2;
2050  unset($filterValue['LOGIC']);
2051  if (empty($filterValue))
2052  break 2;
2053  $subresult = array();
2054  foreach ($filterValue as $subfilterKey => $subfilterValue)
2055  {
2056  $invert = strncmp($subfilterKey, '!', 1) == 0;
2057  $fieldName = ($invert ? substr($subfilterKey, 1) : $subfilterKey);
2058  if (!isset($data[$fieldName]))
2059  {
2060  break 3;
2061  }
2062  else
2063  {
2064  $compare = (is_array($subfilterValue) ? in_array($data[$fieldName], $subfilterValue) : $data[$fieldName] == $subfilterValue);
2065  if ($invert)
2066  $compare = !$compare;
2067  $subresult[] = $compare;
2068  }
2069  }
2070  $compare = (
2071  $logic == 'and'
2072  ? !in_array(false, $subresult, true)
2073  : in_array(true, $subresult, true)
2074  );
2075  if (!$compare)
2076  {
2077  $copy = false;
2078  break;
2079  }
2080  }
2081  else
2082  {
2083  $invert = strncmp($filterKey, '!', 1) == 0;
2084  $fieldName = ($invert ? substr($filterKey, 1) : $filterKey);
2085  if (!isset($data[$fieldName]))
2086  {
2087  break 2;
2088  }
2089  else
2090  {
2091  $compare = (is_array($filterValue) ? in_array($data[$fieldName], $filterValue) : $data[$fieldName] == $filterValue);
2092  if ($invert)
2093  $compare = !$compare;
2094  if (!$compare)
2095  {
2096  $copy = false;
2097  break;
2098  }
2099  }
2100  }
2101  }
2102  if ($copy)
2103  $result[$id] = $data;
2104  }
2105  $coupons = $result;
2106  unset($result);
2107  }

◆ filterCoupons()

static filterCoupons (   $filter,
  $getId = false 
)
staticprotected

Filter manager coupons list.

Аргументы
array$filterFilter for coupons.
bool$getIdResturn Id or full data.
Возвращает
array

См. определение в файле discountcouponsmanagerbase.php строка 1951

1952  {
1953  $getId = ($getId === true);
1954  $result = array();
1955  if (empty(self::$coupons) || empty($filter) || !is_array($filter))
1956  return $result;
1957 
1958  foreach (self::$coupons as $id => $data)
1959  {
1960  $copy = true;
1961  foreach ($filter as $filterKey => $filterValue)
1962  {
1963  if (is_array($filterValue) && isset($filterValue['LOGIC']))
1964  {
1965  $logic = strtolower($filterValue['LOGIC']);
1966  if ($logic != 'and' && $logic != 'or')
1967  break 2;
1968  unset($filterValue['LOGIC']);
1969  if (empty($filterValue))
1970  break 2;
1971  $subresult = array();
1972  foreach ($filterValue as $subfilterKey => $subfilterValue)
1973  {
1974  $invert = strncmp($subfilterKey, '!', 1) == 0;
1975  $fieldName = ($invert ? substr($subfilterKey, 1) : $subfilterKey);
1976  if (!isset($data[$fieldName]))
1977  {
1978  break 3;
1979  }
1980  else
1981  {
1982  $compare = (is_array($subfilterValue) ? in_array($data[$fieldName], $subfilterValue) : $data[$fieldName] == $subfilterValue);
1983  if ($invert)
1984  $compare = !$compare;
1985  $subresult[] = $compare;
1986  }
1987  }
1988  $compare = (
1989  $logic == 'and'
1990  ? !in_array(false, $subresult, true)
1991  : in_array(true, $subresult, true)
1992  );
1993  if (!$compare)
1994  {
1995  $copy = false;
1996  break;
1997  }
1998  }
1999  else
2000  {
2001  $invert = strncmp($filterKey, '!', 1) == 0;
2002  $fieldName = ($invert ? substr($filterKey, 1) : $filterKey);
2003  if (!isset($data[$fieldName]))
2004  {
2005  break 2;
2006  }
2007  else
2008  {
2009  $compare = (is_array($filterValue) ? in_array($data[$fieldName], $filterValue) : $data[$fieldName] == $filterValue);
2010  if ($invert)
2011  $compare = !$compare;
2012  if (!$compare)
2013  {
2014  $copy = false;
2015  break;
2016  }
2017  }
2018  }
2019  }
2020  if ($copy)
2021  {
2022  $result[$id] = ($getId ? $data['ID'] : $data);
2023  }
2024  }
2025  return $result;
2026  }

◆ filterFreezeCoupons()

static filterFreezeCoupons (   $coupon)
staticprotected

Filter for remove freeze coupons.

Аргументы
array$couponCoupon data.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1857

1858  {
1859  if (empty(self::$couponTypes))
1860  self::$couponTypes = Internals\DiscountCouponTable::getCouponTypes(true);
1861  return (isset($coupon['TYPE']) && isset(self::$couponTypes[$coupon['TYPE']]) && $coupon['STATUS'] != self::STATUS_FREEZE);
1862  }

◆ filterFreezeOrderedCoupons()

static filterFreezeOrderedCoupons (   $coupon)
staticprotected

Filter for remove freeze ordered coupons.

Аргументы
array$couponCoupon data.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1870

1871  {
1872  static $currentTimeStamp = null;
1873  if ($currentTimeStamp === null)
1874  $currentTimeStamp = time();
1875  if (!isset($coupon['SAVED']) || $coupon['SAVED'] != 'Y')
1876  return true;
1877  if (isset($coupon['MODE']) && $coupon['MODE'] == self::COUPON_MODE_FULL)
1878  {
1879  if (
1880  isset($coupon['ACTIVE_FROM']) && $coupon['ACTIVE_FROM'] instanceof Main\Type\DateTime
1881  && $coupon['ACTIVE_FROM']->getTimestamp() > $currentTimeStamp
1882  )
1883  return false;
1884  if (
1885  isset($coupon['ACTIVE_TO']) && $coupon['ACTIVE_TO'] instanceof Main\Type\DateTime
1886  && $coupon['ACTIVE_TO']->getTimestamp() < $currentTimeStamp
1887  )
1888  return false;
1889  }
1890  return true;
1891  }

◆ filterOneRowCoupons()

static filterOneRowCoupons (   $coupon,
  $hash 
)
staticprotected

Clear one row coupons.

Аргументы
array$couponCoupon data.
string$hashProduct hash.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1900

1901  {
1902  return (
1903  $coupon['TYPE'] != Internals\DiscountCouponTable::TYPE_BASKET_ROW
1904  ||
1905  (empty($coupon['BASKET']))
1906  ||
1907  (count($coupon['BASKET']) == 1 && isset($coupon['BASKET'][$hash]))
1908  );
1909  }

◆ filterOrderCoupons()

static filterOrderCoupons (   $coupon)
static

Returns true if the coupon was used in the order and saved.

Аргументы
array$couponCoupon data.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1467

1468  {
1469  return (isset($coupon['SAVED']) && $coupon['SAVED'] == 'Y');
1470  }

◆ filterUniqueDiscount()

static filterUniqueDiscount ( $coupons)
staticprotected

Returns one coupon for one discount.

Аргументы
array&$couponsCoupons list.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1917

1918  {
1919  $existDiscount = array();
1920  $hash = '';
1921  foreach ($coupons as $key => $oneCoupon)
1922  {
1923  $hash = $oneCoupon['MODULE_ID'].':'.$oneCoupon['DISCOUNT_ID'];
1924  if (
1925  isset($existDiscount[$hash])
1926  &&
1927  (
1928  $oneCoupon['TYPE'] == Internals\DiscountCouponTable::TYPE_ONE_ORDER
1929  ||
1930  $oneCoupon['TYPE'] == Internals\DiscountCouponTable::TYPE_MULTI_ORDER
1931  )
1932  )
1933  {
1934  unset($coupons[$key]);
1935  }
1936  else
1937  {
1938  $existDiscount[$hash] = true;
1939  }
1940  }
1941  unset($hash, $existDiscount);
1942  }

◆ filterUnknownCoupons()

static filterUnknownCoupons (   $coupon)
staticprotected

Filter for remove unknown coupons.

Аргументы
array$couponCoupon data.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1844

1845  {
1846  if (empty(self::$couponTypes))
1847  self::$couponTypes = Internals\DiscountCouponTable::getCouponTypes(true);
1848  return (isset($coupon['TYPE']) && isset(self::$couponTypes[$coupon['TYPE']]));
1849  }

◆ finalApply()

static finalApply ( )
static

Change status coupons for save.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1165

1166  {
1167  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess() || empty(self::$coupons))
1168  return;
1169  foreach (self::$coupons as &$oneCoupon)
1170  {
1171  if ($oneCoupon['STATUS'] == self::STATUS_ENTERED)
1172  {
1173  $oneCoupon['STATUS'] = self::STATUS_NOT_APPLYED;
1174  if ($oneCoupon['CHECK_CODE'] == self::COUPON_CHECK_OK)
1175  $oneCoupon['CHECK_CODE'] = self::COUPON_CHECK_NOT_APPLIED;
1176  }
1177  }
1178  unset($oneCoupon);
1179  }

◆ freezeCouponStorage()

static freezeCouponStorage ( )
static

Disable get coupons for calculate discounts.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 394

395  {
396  self::$allowCouponStorage--;
397  }

◆ get()

static get (   $extMode = true,
  $filter = array(),
  $show = false,
  $final = false 
)
static

Get coupons list.

Аргументы
bool$extModeGet full information or coupons only.
array$filterCoupons filter.
bool$showGet for show or apply.
bool$finalChange status ENTERED to NOT_APPLIED.
Возвращает
array|bool

См. определение в файле discountcouponsmanagerbase.php строка 758

759  {
760  if (self::$useMode == self::MODE_SYSTEM)
761  return false;
762  $extMode = ($extMode === true);
763  if (!is_array($filter))
764  $filter = array();
765  static::convertOldFilterFields($filter);
766  $show = ($show === true);
767  if (!self::$init)
768  self::init();
769  if (!self::isSuccess())
770  return false;
771 
772  if (self::isFrozenCouponStorage() || !self::isEntered())
773  return array();
774 
775  $final = ($final === true);
776  if ($final)
778  $validCoupons = (
779  $show
781  : array_filter(self::$coupons, '\Bitrix\Sale\DiscountCouponsManager::filterFreezeCoupons')
782  );
783  if (empty($validCoupons))
784  return array();
785  if (!empty($filter))
786  self::filterArrayCoupons($validCoupons, $filter);
787  if (!empty($validCoupons))
788  self::clearSystemData($validCoupons);
789  if ($show && !empty($validCoupons))
790  self::fillCouponHints($validCoupons);
791  return ($extMode ? $validCoupons : array_keys($validCoupons));
792  }

◆ getCatalogProductHash()

static getCatalogProductHash (   $product)
staticprotected

Create catalog product hash for old custom providers.

Аргументы
array$productProduct description.
Возвращает
string

См. определение в файле discountcouponsmanagerbase.php строка 2139

2140  {
2141  $hash = '';
2142  $module = 'catalog';
2143  $productId = 0;
2144  $basketId = '';
2145  if (!empty($product) && is_array($product))
2146  {
2147  if (isset($product['MODULE_ID']))
2148  $module = trim((string)$product['MODULE_ID']);
2149  elseif (isset($product['MODULE']))
2150  $module = trim((string)$product['MODULE']);
2151  if (isset($product['PRODUCT_ID']))
2152  $productId = (int)$product['PRODUCT_ID'];
2153  $basketId = (isset($product['BASKET_ID']) ? trim((string)$product['BASKET_ID']) : '0');
2154  }
2155  if ($productId >= 0 && $basketId !== '')
2156  $hash = $module.':'.$productId.':'.$basketId;
2157  return $hash;
2158  }

◆ getCheckCodeList()

static getCheckCodeList (   $extendedMode = false)
static

Returns check code list.

Аргументы
bool$extendedModeGet codes or codes with description.
Возвращает
array

См. определение в файле discountcouponsmanagerbase.php строка 301

302  {
303  $extendedMode = ($extendedMode === true);
304  if ($extendedMode)
305  {
306  return array(
307  self::COUPON_CHECK_OK => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_OK'),
308  self::COUPON_CHECK_NOT_FOUND => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_NOT_FOUND'),
309  self::COUPON_CHECK_NO_ACTIVE => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_NO_ACTIVE'),
310  self::COUPON_CHECK_RANGE_ACTIVE_FROM => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_RANGE_ACTIVE_FROM'),
311  self::COUPON_CHECK_RANGE_ACTIVE_TO => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_RANGE_ACTIVE_TO'),
312  self::COUPON_CHECK_NO_ACTIVE_DISCOUNT => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_NO_ACTIVE_DISCOUNT'),
313  self::COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT'),
314  self::COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT'),
315  self::COUPON_CHECK_BAD_USER_ID => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_BAD_USER_ID'),
316  self::COUPON_CHECK_ALREADY_MAX_USED => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_ALREADY_MAX_USED'),
317  self::COUPON_CHECK_UNKNOWN_TYPE => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_UNKNOWN_TYPE'),
318  self::COUPON_CHECK_CORRUPT_DATA => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_CORRUPT_DATA'),
319  self::COUPON_CHECK_NOT_APPLIED => Loc::getMessage('BX_SALE_DCM_COUPON_CHECK_NOT_APPLIED')
320  );
321  }
322  return array(
323  self::COUPON_CHECK_OK,
324  self::COUPON_CHECK_NOT_FOUND,
325  self::COUPON_CHECK_NO_ACTIVE,
326  self::COUPON_CHECK_RANGE_ACTIVE_FROM,
327  self::COUPON_CHECK_RANGE_ACTIVE_TO,
328  self::COUPON_CHECK_NO_ACTIVE_DISCOUNT,
329  self::COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT,
330  self::COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT,
331  self::COUPON_CHECK_BAD_USER_ID,
332  self::COUPON_CHECK_ALREADY_MAX_USED,
333  self::COUPON_CHECK_UNKNOWN_TYPE,
334  self::COUPON_CHECK_CORRUPT_DATA,
335  self::COUPON_CHECK_NOT_APPLIED
336  );
337  }

◆ getCheckCodeMessage()

static getCheckCodeMessage (   $code)
static

Returns description of check code.

Аргументы
int$codeCode value.
Возвращает
string|null

См. определение в файле discountcouponsmanagerbase.php строка 345

346  {
347  $codes = self::getCheckCodeList(true);
348  if (isset($codes[$code]))
349  {
350  return $codes[$code];
351  }
352 
353  return null;
354  }

◆ getData()

static getData (   $coupon,
  $checkCoupon = true 
)
static

Returns information about coupon.

Аргументы
string$couponCoupon for search.
bool$checkCouponCheck coupon data.
Возвращает
array|false

См. определение в файле discountcouponsmanagerbase.php строка 1241

1242  {
1243  $currentTime = new Main\Type\DateTime();
1244  $currentTimestamp = $currentTime->getTimestamp();
1246  $coupon = trim((string)$coupon);
1247  if ($coupon === '')
1248  return false;
1249  $checkCoupon = ($checkCoupon === true);
1250 
1251  $result = static::getEmptyCouponFields($coupon);
1252 
1253  $resultKeyList = array(
1254  'ID', 'COUPON', 'DISCOUNT_ID', 'TYPE', 'ACTIVE', 'DISCOUNT_NAME',
1255  'DISCOUNT_ACTIVE', 'DISCOUNT_ACTIVE_FROM', 'DISCOUNT_ACTIVE_TO'
1256  );
1257 
1258  $couponIterator = Internals\DiscountCouponTable::getList(array(
1259  'select' => array(
1260  'ID', 'COUPON', 'DISCOUNT_ID', 'TYPE', 'ACTIVE',
1261  'USER_ID', 'MAX_USE', 'USE_COUNT', 'ACTIVE_FROM', 'ACTIVE_TO',
1262  'DISCOUNT_NAME' => 'DISCOUNT.NAME', 'DISCOUNT_ACTIVE' => 'DISCOUNT.ACTIVE',
1263  'DISCOUNT_ACTIVE_FROM' => 'DISCOUNT.ACTIVE_FROM', 'DISCOUNT_ACTIVE_TO' => 'DISCOUNT.ACTIVE_TO'
1264  ),
1265  'filter' => array('=COUPON' => $coupon)
1266  ));
1267  if ($existCoupon = $couponIterator->fetch())
1268  {
1269  $result['MODE'] = self::COUPON_MODE_FULL;
1270  $result['MODULE'] = 'sale';
1271  $result['MODULE_ID'] = 'sale';
1272  $checkCode = self::checkBaseData($existCoupon, self::COUPON_CHECK_OK);
1273  foreach ($resultKeyList as $resultKey)
1274  $result[$resultKey] = $existCoupon[$resultKey];
1275  unset($resultKey);
1276 
1277  if ($checkCoupon)
1278  {
1279  $checkCode = self::checkFullData($existCoupon, $result['MODE'], $checkCode, $currentTimestamp);
1280  self::fillUserInfo($result, $existCoupon, $checkCode);
1281  }
1282  $result['STATUS'] = ($checkCode == self::COUPON_CHECK_OK ? self::STATUS_ENTERED : self::STATUS_FREEZE);
1283  $result['CHECK_CODE'] = $checkCode;
1284  unset($checkCode);
1285  }
1286  elseif (!self::$onlySaleDiscount && !empty(self::$couponProviders))
1287  {
1288  foreach (self::$couponProviders as $provider)
1289  {
1290  $existCoupon = call_user_func_array(
1291  $provider['getData'],
1292  array(
1293  $coupon
1294  )
1295  );
1296  if (!empty($existCoupon) && is_array($existCoupon))
1297  {
1298  $result['MODE'] = $provider['mode'];
1299  $result['MODULE'] = $provider['module'];
1300  $result['MODULE_ID'] = $provider['module'];
1301  $checkCode = self::checkBaseData($existCoupon, self::COUPON_CHECK_OK);
1302  foreach ($resultKeyList as $resultKey)
1303  $result[$resultKey] = $existCoupon[$resultKey];
1304  unset($resultKey);
1305 
1306  if ($checkCoupon)
1307  {
1308  $checkCode = self::checkFullData($existCoupon, $result['MODE'], $checkCode, $currentTimestamp);
1309  self::fillUserInfo($result, $existCoupon, $checkCode);
1310  }
1311  $result['STATUS'] = ($checkCode == self::COUPON_CHECK_OK ? self::STATUS_ENTERED : self::STATUS_FREEZE);
1312  $result['CHECK_CODE'] = $checkCode;
1313  unset($checkCode);
1314  break;
1315  }
1316  }
1317  unset($provider);
1318  }
1319  return $result;
1320  }

◆ getEmptyCouponFields()

static getEmptyCouponFields (   $coupon)
staticprotected

Returns empty coupon (default field values).

См. определение в файле discountcouponsmanagerbase.php строка 2321

2322  {
2323  /* field MODULE - unused, for compatibility only */
2324  return array(
2325  'COUPON' => $coupon,
2326  'MODE' => self::COUPON_MODE_SIMPLE,
2327  'STATUS' => self::STATUS_NOT_FOUND,
2328  'CHECK_CODE' => self::COUPON_CHECK_NOT_FOUND,
2329  'MODULE' => '',
2330  'MODULE_ID' => '',
2331  'ID' => 0,
2332  'DISCOUNT_ID' => 0,
2333  'DISCOUNT_NAME' => '',
2334  'TYPE' => Internals\DiscountCouponTable::TYPE_UNKNOWN,
2335  'ACTIVE' => '',
2336  'USER_INFO' => array(),
2337  'SAVED' => 'N'
2338  );
2339  }

◆ getEnteredCoupon()

static getEnteredCoupon (   $coupon,
  $clearData = false 
)
static

Returns entered coupon data.

Аргументы
string$couponCoupon code.
bool$clearDataClear data for save order coupon.
Возвращает
bool|array

См. определение в файле discountcouponsmanagerbase.php строка 1385

1386  {
1387  if (!self::$init)
1388  self::init();
1389  $result = false;
1390  if (self::$useMode == self::MODE_SYSTEM || !self::isSuccess())
1391  return $result;
1392 
1393  $clearData = ($clearData === true);
1394  $coupon = trim((string)$coupon);
1395  if ($coupon === '')
1396  return $result;
1397  if (!isset(self::$coupons[$coupon]))
1398  {
1399  $couponData = self::getData($coupon);
1400  if (isset(self::$coupons[$couponData['COUPON']]))
1401  $result = self::$coupons[$couponData['COUPON']];
1402  }
1403  else
1404  {
1405  $result = self::$coupons[$coupon];
1406  }
1407  if (!empty($result))
1408  {
1409  if ($result['MODE'] == self::COUPON_MODE_FULL)
1410  {
1411  $result['USER_INFO'] = $result['SYSTEM_DATA'];
1412  unset($result['SYSTEM_DATA']);
1413  }
1414  if ($clearData)
1415  {
1416  foreach (self::$clearFields as $fieldName)
1417  unset($result[$fieldName]);
1418  unset($fieldName);
1419  foreach (self::$timeFields as $fieldName)
1420  {
1421  if (isset($result[$fieldName]) && $result[$fieldName] instanceof Main\Type\DateTime)
1422  {
1423  /** @noinspection PhpUndefinedMethodInspection */
1424  $result[$fieldName] = $result[$fieldName]->getTimestamp();
1425  }
1426  }
1427  unset($fieldName);
1428 
1429  if (!empty($result['USER_INFO']))
1430  {
1431  foreach (self::$timeFields as $fieldName)
1432  {
1433  if (isset($result['USER_INFO'][$fieldName]) && $result['USER_INFO'][$fieldName] instanceof Main\Type\DateTime)
1434  {
1435  /** @noinspection PhpUndefinedMethodInspection */
1436  $result['USER_INFO'][$fieldName] = $result['USER_INFO'][$fieldName]->getTimestamp();
1437  }
1438  }
1439  unset($fieldName);
1440  }
1441  }
1442  }
1443  return $result;
1444  }

◆ getErrors()

static getErrors ( )
static

Returns error list.

Возвращает
array

См. определение в файле discountcouponsmanagerbase.php строка 252

253  {
254  return self::$errors;
255  }

◆ getForApply()

static getForApply (   $filter,
  $product = array(),
  $uniqueDiscount = false 
)
static

Get coupons list for apply.

Аргументы
array$filterCoupons filter.
array$productProduct description.
bool$uniqueDiscountGet one coupon for discount.
Возвращает
array|bool

См. определение в файле discountcouponsmanagerbase.php строка 802

803  {
804  if (self::$useMode == self::MODE_SYSTEM)
805  return array();
806  if (self::$useMode == self::MODE_ORDER && static::isUsedOrderCouponsForApply())
807  $filter['SAVED'] = array('Y', 'N');
808  else
809  $filter['SAVED'] = 'N';
810 
811  $couponsList = self::get(true, $filter, false);
812  if ($couponsList === false)
813  return array();
814  if (!empty($couponsList))
815  {
816  $uniqueDiscount = ($uniqueDiscount === true);
817  if ($uniqueDiscount)
818  self::filterUniqueDiscount($couponsList);
819  if (!empty($product))
820  {
821  $hash = self::getProductHash($product);
822  if ($hash !== '')
823  {
824  $productCoupons = array();
825  foreach ($couponsList as $id => $data)
826  {
827  if (self::filterOneRowCoupons($data, $hash))
828  $productCoupons[$id] = $data;
829  }
830  $couponsList = $productCoupons;
831  unset($productCoupons);
832  }
833  else
834  {
835  $couponsList = array();
836  }
837  }
838  }
839  return $couponsList;
840  }

◆ getOrderedCoupons()

static getOrderedCoupons (   $extMode = true,
  $filter = array() 
)
static

Returns coupons for current order.

Аргументы
bool$extModeGet full information or coupons only.
array$filterCoupons filter.
Возвращает
array

См. определение в файле discountcouponsmanagerbase.php строка 849

850  {
851  $extMode = ($extMode === true);
852  $result = array();
853  if (self::$useMode != self::MODE_ORDER)
854  return $result;
855  if (!self::isSuccess())
856  return $result;
857 
858  if (!self::isEntered())
859  return $result;
860 
861  $result = array_filter(self::$coupons, '\Bitrix\Sale\DiscountCouponsManager::filterFreezeCoupons');
862  if (empty($result))
863  return $result;
864  $result = array_filter($result, '\Bitrix\Sale\DiscountCouponsManager::filterFreezeOrderedCoupons');
865  if (empty($result))
866  return $result;
867 
868  $filter['SAVED'] = 'Y';
869  static::filterArrayCoupons($result, $filter);
870  if (!empty($result))
871  static::clearSystemData($result);
872 
873  return ($extMode ? $result : array_keys($result));
874  }

◆ getOrderId()

static getOrderId ( )
static

Returns order id, if current use mode self::MODE_ORDER.

Возвращает
null|int

См. определение в файле discountcouponsmanagerbase.php строка 232

233  {
234  return self::$orderId;
235  }

◆ getProductHash()

static getProductHash (   $product)
staticprotected

Create product hash.

Аргументы
array$productProduct description.
Возвращает
string

См. определение в файле discountcouponsmanagerbase.php строка 2115

2116  {
2117  $hash = '';
2118  if (!empty($product) && is_array($product))
2119  {
2120  $module = '';
2121  if (isset($product['MODULE_ID']))
2122  $module = trim((string)$product['MODULE_ID']);
2123  elseif (isset($product['MODULE']))
2124  $module = trim((string)$product['MODULE']);
2125  $productId = (isset($product['PRODUCT_ID']) ? (int)$product['PRODUCT_ID'] : 0);
2126  $basketId = (isset($product['BASKET_ID']) ? trim((string)$product['BASKET_ID']) : '0');
2127  if ($productId > 0 && $basketId !== '')
2128  $hash = $module.':'.$productId.':'.$basketId;
2129  }
2130  return $hash;
2131  }

◆ getRegistryType()

static getRegistryType ( )
static
Исключения
Main

Переопределяется в DiscountCouponsManager.

См. определение в файле discountcouponsmanagerbase.php строка 84

85  {
86  throw new Main\NotImplementedException();
87  }

◆ getStatusList()

static getStatusList (   $extendedMode = false)
static

Returns coupon status list.

Аргументы
bool$extendedModeGet status Ids or Ids with description.
Возвращает
array

См. определение в файле discountcouponsmanagerbase.php строка 273

274  {
275  $extendedMode = ($extendedMode === true);
276  if ($extendedMode)
277  {
278  return array(
279  self::STATUS_NOT_FOUND => Loc::getMessage('BX_SALE_DCM_STATUS_NOT_FOUND'),
280  self::STATUS_ENTERED => Loc::getMessage('BX_SALE_DCM_STATUS_ENTERED'),
281  self::STATUS_NOT_APPLYED => Loc::getMessage('BX_SALE_DCM_STATUS_NOT_APPLYED'),
282  self::STATUS_APPLYED => Loc::getMessage('BX_SALE_DCM_STATUS_APPLYED'),
283  self::STATUS_FREEZE => Loc::getMessage('BX_SALE_DCM_STATUS_FREEZE')
284  );
285  }
286  return array(
287  self::STATUS_NOT_FOUND,
288  self::STATUS_ENTERED,
289  self::STATUS_NOT_APPLYED,
290  self::STATUS_APPLYED,
291  self::STATUS_FREEZE
292  );
293  }

◆ getUseMode()

static getUseMode ( )
static

Returns use mode.

Возвращает
int

См. определение в файле discountcouponsmanagerbase.php строка 177

178  {
179  return self::$useMode;
180  }

◆ getUserId()

static getUserId ( )
static

Returns user id.

Возвращает
null|int

См. определение в файле discountcouponsmanagerbase.php строка 217

218  {
219  if ((self::$userId === null || self::$userId === 0) && self::usedByClient())
220  {
221  self::$userId = null;
223  }
224  return self::$userId;
225  }

◆ init()

static init (   $mode = self::MODE_CLIENT,
  $params = array(),
  $clearStorage = false 
)
static

Initialization coupon manager.

Аргументы
int$modeDiscount manager mode.
array$paramsInitial params (userId, orderId, oldUserId) keys are case sensitive:
  • int userId Order owner (for MODE_MANAGER or MODE_ORDER only)
  • int orderId Edit order id (for MODE_ORDER only(!))
  • int oldUserId Old order owner for MODE_MANAGER or MODE_ORDER only)
.
bool$clearStorageClear coupon session storage.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 423

424  {
425  if (self::$init)
426  return;
427  self::$onlySaleDiscount = null;
428  self::$couponTypes = Internals\DiscountCouponTable::getCouponTypes(true);
429  self::$couponIndex = 0;
431  self::initUseMode($mode, $params);
433  if (!self::isSuccess())
434  return;
435  if (self::$useMode != self::MODE_SYSTEM)
436  {
437  self::clear($clearStorage);
438  $couponsList = array();
439  switch (self::$useMode)
440  {
441  case self::MODE_CLIENT:
442  case self::MODE_EXTERNAL:
443  if (!empty($_SESSION[self::STORAGE_CLIENT_COUPONS]) && is_array($_SESSION[self::STORAGE_CLIENT_COUPONS]))
444  $couponsList = $_SESSION[self::STORAGE_CLIENT_COUPONS];
445  break;
446  case self::MODE_MANAGER:
447  if (!empty($_SESSION[self::STORAGE_MANAGER_COUPONS]) && !empty($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]) && is_array($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]))
448  $couponsList = $_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId];
449  break;
450  case self::MODE_ORDER:
451  self::load();
452  if (!empty($_SESSION[self::STORAGE_MANAGER_COUPONS]) && !empty($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]) && is_array($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]))
453  $couponsList = $_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId];
454  break;
455  }
456  if (!empty($couponsList))
457  self::setCoupons($couponsList);
458  unset($couponsList);
459  if (self::$useMode == self::MODE_ORDER)
461  }
462  self::$init = true;
463  }

◆ initUseDiscount()

static initUseDiscount ( )
staticprotected

Initialization coupons providers.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1829

1830  {
1831  if (self::$onlySaleDiscount !== null)
1832  return;
1833 
1834  self::$onlySaleDiscount = (string)Option::get('sale', 'use_sale_discount_only') == 'Y';
1836  }

◆ initUseMode()

static initUseMode (   $mode = self::MODE_CLIENT,
  $params = array() 
)
static

Init use mode and user id.

Аргументы
int$modeDiscount manager mode.
array$paramsInitial params (userId, orderId, oldUserId) keys are case sensitive:
  • int userId Order owner (for MODE_MANAGER or MODE_ORDER only)
  • int orderId Edit order id (for MODE_ORDER only(!))
  • int oldUserId Old order owner for MODE_MANAGER or MODE_ORDER only)
.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 102

103  {
104  $mode = (int)$mode;
105  if (!is_array($params))
106  $params = array();
107  self::$checkActivity = true;
108  self::$userId = null;
109  self::$orderId = null;
110  self::$allowedSave = false;
111  self::$useOrderCoupons = true;
112 
113  self::$useMode = self::MODE_SYSTEM;
114  switch ($mode)
115  {
116  case self::MODE_MANAGER:
117  if (!isset($params['userId']) || (int)$params['userId'] < 0)
118  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_BAD_USER_ID');
119  if (isset($params['orderId']))
120  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_ORDER_ID_EXIST');
121  if (empty(self::$errors))
122  {
123  self::$userId = (int)$params['userId'];
124  self::$orderId = null;
125  self::$allowedSave = true;
126  self::$useMode = self::MODE_MANAGER;
127  if (isset($params['oldUserId']))
128  self::migrateStorage($params['oldUserId']);
129  }
130  break;
131  case self::MODE_ORDER:
132  if (!isset($params['userId']) || (int)$params['userId'] < 0)
133  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_BAD_USER_ID');
134  if (!isset($params['orderId']) || (int)$params['orderId'] <= 0)
135  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_ORDER_ID_ABSENT');
136  if (empty(self::$errors))
137  {
138  self::$userId = (int)$params['userId'];
139  self::$orderId = (int)$params['orderId'];
140  self::$allowedSave = true;
141  self::$useMode = self::MODE_ORDER;
142  if (isset($params['oldUserId']))
143  self::migrateStorage($params['oldUserId']);
144 
145  }
146  break;
147  case self::MODE_CLIENT:
148  self::$useMode = self::MODE_CLIENT;
149  if (isset($params['userId']) && (int)$params['userId'] >= 0)
150  self::$userId = (int)$params['userId'];
151  else
153  if (self::isSuccess())
154  self::$allowedSave = true;
155  break;
156  case self::MODE_EXTERNAL:
157  self::$useMode = self::MODE_EXTERNAL;
158  self::$userId = (
159  isset($params['userId']) && (int)$params['userId'] >= 0
160  ? (int)$params['userId']
161  : \CSaleUser::GetAnonymousUserID()
162  );
163  break;
164  case self::MODE_SYSTEM:
165  break;
166  default:
167  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_BAD_MODE');
168  break;
169  }
170  }

◆ initUserId()

static initUserId ( )
staticprotected

Get user by fuser id.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1685

1686  {
1687  global $USER;
1688  if (self::$useMode == self::MODE_CLIENT && self::$userId === null && self::isSuccess())
1689  {
1690  $currentUserId = (isset($USER) && $USER instanceof \CUser ? (int)$USER->GetID() : 0);
1691  if ($currentUserId == 0)
1692  {
1693  $currentUserId = false;
1694  $fuser = (int)\CSaleBasket::GetBasketUserID(true);
1695  if ($fuser > 0)
1696  {
1697  $conn = Application::getConnection();
1698  $helper = $conn->getSqlHelper();
1699  $iterator = $conn->query(
1700  'select '.$helper->quote('USER_ID').' from '.$helper->quote('b_sale_fuser').' where '.$helper->quote('ID').'='.$fuser
1701  );
1702  if ($fuser = $iterator->fetch())
1703  $currentUserId = $fuser['USER_ID'];
1704  unset($fuser, $iterator);
1705  }
1706  if ($currentUserId === false)
1707  self::$errors[] = Loc::getMessage('BX_SALE_DCM_ERR_BAD_FUSER_ID');
1708  else
1709  $currentUserId = (int)$currentUserId;
1710  }
1711  if (self::isSuccess())
1712  self::$userId = $currentUserId;
1713  }
1714  }

◆ isEntered()

static isEntered ( )
static

Returns true, if coupons were are entered.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 492

493  {
494  return !empty(self::$coupons);
495  }

◆ isExist()

static isExist (   $coupon)
static

Checks if a coupon exists.

Аргументы
string$couponCoupon for check.
Возвращает
array|bool

См. определение в файле discountcouponsmanagerbase.php строка 1328

1329  {
1330  $coupon = trim((string)$coupon);
1331  if ($coupon === '')
1332  return false;
1333 
1335  $couponIterator = Internals\DiscountCouponTable::getList(array(
1336  'select' => array('ID', 'COUPON'),
1337  'filter' => array('=COUPON' => $coupon)
1338  ));
1339  if ($existCoupon = $couponIterator->fetch())
1340  {
1341  return array(
1342  'ID' => $existCoupon['ID'],
1343  'COUPON' => $existCoupon['COUPON'],
1344  'MODULE' => 'sale',
1345  'MODULE_ID' => 'sale',
1346  );
1347  }
1348  else
1349  {
1350  if (!self::$onlySaleDiscount && !empty(self::$couponProviders))
1351  {
1352  foreach (self::$couponProviders as $provider)
1353  {
1354  $existCoupon = call_user_func_array(
1355  $provider['isExist'],
1356  array(
1357  $coupon
1358  )
1359  );
1360  if (!empty($existCoupon) && is_array($existCoupon))
1361  {
1362  if (!isset($existCoupon['ID']) || !isset($existCoupon['COUPON']))
1363  continue;
1364  return array(
1365  'ID' => $existCoupon['ID'],
1366  'COUPON' => $existCoupon['COUPON'],
1367  'MODULE' => $provider['module'],
1368  'MODULE_ID' => $provider['module']
1369  );
1370  }
1371  }
1372  unset($provider);
1373  }
1374  }
1375  return false;
1376  }

◆ isFrozenCouponStorage()

static isFrozenCouponStorage ( )
static

Returns true, if disallow get coupons for calculate discounts.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 404

405  {
406  return (self::$allowCouponStorage < 0);
407  }

◆ isSuccess()

static isSuccess ( )
static

Returns a sign of success.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 242

243  {
244  return empty(self::$errors);
245  }

◆ isUsedOrderCouponsForApply()

static isUsedOrderCouponsForApply ( )
static

Returns use ordered coupons for apply.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 374

375  {
376  return self::$useOrderCoupons;
377  }

◆ load()

static load ( )
static

Load coupons for existing order.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 674

675  {
676  if (self::$useMode != self::MODE_ORDER)
677  return;
678 
679  self::$checkActivity = false;
680  $couponsList = array();
681 
682  $registry = Registry::getInstance(static::getRegistryType());
683 
684  /** @var OrderDiscountBase $storageClassName */
685  $storageClassName = $registry->getOrderDiscountClassName();
686 
687  $couponIterator = $storageClassName::getOrderCouponIterator([
688  'select' => [
689  '*',
690  'MODULE_ID' => 'ORDER_DISCOUNT.MODULE_ID',
691  'DISCOUNT_ID' => 'ORDER_DISCOUNT.DISCOUNT_ID',
692  'DISCOUNT_NAME' => 'ORDER_DISCOUNT.NAME'
693  ],
694  'filter' => ['=ORDER_ID' => self::$orderId],
695  'order' => ['ID' => 'ASC']
696  ]);
697  while ($coupon = $couponIterator->fetch())
698  {
699  $couponData = $coupon['DATA'];
700  $couponData['COUPON'] = $coupon['COUPON'];
701  $couponData['STATUS'] = self::STATUS_ENTERED;
702  $couponData['CHECK_CODE'] = self::COUPON_CHECK_OK;
703  $couponData['MODULE'] = $coupon['MODULE_ID'];
704  $couponData['MODULE_ID'] = $coupon['MODULE_ID'];
705  $couponData['ID'] = $coupon['COUPON_ID'];
706  $couponData['DISCOUNT_ID'] = $coupon['DISCOUNT_ID'];
707  $couponData['DISCOUNT_NAME'] = (string)$coupon['DISCOUNT_NAME'];
708  $couponData['DISCOUNT_ACTIVE'] = 'Y';
709  $couponData['TYPE'] = $coupon['TYPE'];
710  $couponData['ACTIVE'] = 'Y';
711  $couponData['SAVED'] = 'Y';
712  foreach (self::$timeFields as $fieldName)
713  {
714  if (isset($couponData[$fieldName]))
715  $couponData[$fieldName] = Main\Type\DateTime::createFromTimestamp($couponData[$fieldName]);
716  }
717  unset($fieldName);
718  if (empty($couponData['USER_INFO']) && $couponData['MODE'] == self::COUPON_MODE_FULL)
719  {
720  $couponData['USER_INFO'] = array(
721  'USER_ID' => 0,
722  'MAX_USE' => 0,
723  'USE_COUNT' => 0,
724  'ACTIVE_FROM' => null,
725  'ACTIVE_TO' => null
726  );
727  }
728  if (!empty($couponData['USER_INFO']))
729  {
730  foreach (self::$timeFields as $fieldName)
731  {
732  if (isset($couponData['USER_INFO'][$fieldName]))
733  $couponData['USER_INFO'][$fieldName] = Main\Type\DateTime::createFromTimestamp($couponData['USER_INFO'][$fieldName]);
734  }
735  unset($fieldName);
736  foreach ($couponData['USER_INFO'] as $fieldName => $fieldValue)
737  $couponData[$fieldName] = $fieldValue;
738  }
739  $couponsList[$couponData['COUPON']] = $couponData;
740  }
741  unset($coupon, $couponIterator);
742 
743  if (!empty($couponsList))
744  self::setCoupons($couponsList, false);
745 
746  self::$checkActivity = true;
747  }

◆ loadCouponProviders()

static loadCouponProviders ( )
staticprotected

Load coupon providers from modules.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1783

1784  {
1785  self::$couponProviders = array();
1786  if (!self::$onlySaleDiscount)
1787  {
1788  $eventData = array(
1789  'COUPON_UNKNOWN' => Internals\DiscountCouponTable::TYPE_UNKNOWN,
1790  'COUPON_TYPES' => Internals\DiscountCouponTable::getCouponTypes(false)
1791  );
1792  $event = new Main\Event('sale', self::EVENT_ON_BUILD_COUPON_PROVIDES, $eventData);
1793  $event->send();
1794  $resultList = $event->getResults();
1795  if (empty($resultList) || !is_array($resultList))
1796  return;
1797  /** @var Main\EventResult $eventResult */
1798  foreach ($resultList as $eventResult)
1799  {
1800  if ($eventResult->getType() != Main\EventResult::SUCCESS)
1801  continue;
1802  $module = (string)$eventResult->getModuleId();
1803  $provider = $eventResult->getParameters();
1804  if (empty($provider) || !is_array($provider))
1805  continue;
1806  if (empty($provider['getData']) || empty($provider['isExist']) || empty($provider['saveApplied']))
1807  continue;
1808  self::$couponProviders[] = array(
1809  'module' => $module,
1810  'getData' => $provider['getData'],
1811  'isExist' => $provider['isExist'],
1812  'saveApplied' => $provider['saveApplied'],
1813  'mode' => (
1814  isset($provider['mode']) && $provider['mode'] == self::COUPON_MODE_FULL
1815  ? self::COUPON_MODE_FULL
1816  : self::COUPON_MODE_SIMPLE
1817  )
1818  );
1819  }
1820  unset($provider, $module, $eventResult, $resultList, $event, $eventData);
1821  }
1822  }

◆ logout()

static logout ( )
static

Clear coupons storage with logout from public.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1451

1452  {
1453  if (!self::$init)
1454  self::init();
1455  if (self::$useMode != self::MODE_CLIENT)
1456  return;
1457  if (self::isSuccess())
1458  self::clear(true);
1459  }

◆ migrateStorage()

static migrateStorage (   $oldUser)
static

Change coupons owner in manager or order mode.

Аргументы
int$oldUserOld user id.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 650

651  {
652  if (self::$useMode != self::MODE_MANAGER && self::$useMode != self::MODE_ORDER || self::$userId === null)
653  return;
654  $oldUser = (int)$oldUser;
655  if ($oldUser < 0)
656  return;
657  if (empty($_SESSION[self::STORAGE_MANAGER_COUPONS]))
658  $_SESSION[self::STORAGE_MANAGER_COUPONS] = array();
659  if (empty($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]) || !is_array($_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId]))
660  $_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId] = array();
661  if (!empty($_SESSION[self::STORAGE_MANAGER_COUPONS][$oldUser]))
662  {
663  if (is_array($_SESSION[self::STORAGE_MANAGER_COUPONS][$oldUser]))
664  $_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId] = $_SESSION[self::STORAGE_MANAGER_COUPONS][$oldUser];
665  unset($_SESSION[self::STORAGE_MANAGER_COUPONS][$oldUser]);
666  }
667  }

◆ reInit()

static reInit (   $mode = self::MODE_CLIENT,
  $params = array(),
  $clearStorage = false 
)
static

Unconditional reinitialization coupon manager.

Аргументы
int$modeDiscount manager mode.
array$paramsInitial params (userId, orderId, oldUserId) keys are case sensitive:
  • int userId Order owner (for MODE_MANAGER or MODE_ORDER only)
  • int orderId Edit order id (for MODE_ORDER only(!))
  • int oldUserId Old order owner for MODE_MANAGER or MODE_ORDER only)
.
bool$clearStorageClear coupon session storage.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 479

480  {
481  if (self::isFrozenCouponStorage())
482  return;
483  self::$init = false;
484  self::init($mode, $params, $clearStorage);
485  }

◆ saveApplied()

static saveApplied ( )
static

Save applied coupons.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 930

931  {
932  if (
933  self::$useMode == self::MODE_SYSTEM
934  ||
935  !self::isEntered()
936  ||
937  !self::$allowedSave
938  )
939  return;
940 
941  $result = array();
942  $currentTime = new Main\Type\DateTime();
944 
945  $appliedCoupons = self::filterCoupons(
946  array('STATUS' => self::STATUS_APPLYED, 'MODULE_ID' => 'sale', 'SAVED' => 'N'),
947  true
948  );
949 
950  if (!empty($appliedCoupons))
951  {
952  $result['sale'] = array(
953  'COUPONS' => $appliedCoupons
954  );
955  $saveResult = Internals\DiscountCouponTable::saveApplied($appliedCoupons, $userId, $currentTime);
956 
957  if ($saveResult === false)
958  {
959  $result['sale']['ERROR'] = true;
960  }
961  else
962  {
963  $result['sale']['DEACTIVATE'] = $saveResult['DEACTIVATE'];
964  $result['sale']['LIMITED'] = $saveResult['LIMITED'];
965  $result['sale']['INCREMENT'] = $saveResult['INCREMENT'];
966  self::eraseAppliedCoupons($result['sale']);
967  }
968  }
969  if (!self::$onlySaleDiscount && !empty(self::$couponProviders))
970  {
971  foreach (self::$couponProviders as $provider)
972  {
973  $appliedCoupons = self::filterCoupons(
974  array('STATUS' => self::STATUS_APPLYED, 'MODULE_ID' => $provider['module'], 'SAVED' => 'N'),
975  true
976  );
977  if (empty($appliedCoupons))
978  continue;
979  $result[$provider['module']] = array(
980  'COUPONS' => $appliedCoupons
981  );
982  $saveResult = call_user_func_array(
983  $provider['saveApplied'],
984  array(
985  $appliedCoupons,
986  $userId,
987  $currentTime
988  )
989  );
990  if (empty($saveResult) || !is_array($saveResult))
991  {
992  $result[$provider['module']]['ERROR'] = true;
993  }
994  else
995  {
996  $result[$provider['module']]['DEACTIVATE'] = (isset($saveResult['DEACTIVATE']) ? $saveResult['DEACTIVATE'] : array());
997  $result[$provider['module']]['LIMITED'] = (isset($saveResult['LIMITED']) ? $saveResult['LIMITED'] : array());
998  $result[$provider['module']]['INCREMENT'] = (isset($saveResult['INCREMENT']) ? $saveResult['INCREMENT'] : array());
999  self::eraseAppliedCoupons($result[$provider['module']]);
1000  }
1001  }
1002  }
1004  self::$allowedSave = false;
1005  $event = new Main\Event('sale', self::EVENT_ON_SAVE_APPLIED_COUPONS, $result);
1006  $event->send();
1007  }

◆ saveToStorage()

static saveToStorage ( )
staticprotected

Save current coupons to session storage.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 1721

1722  {
1723  if (self::isSuccess())
1724  {
1725  $couponsList = array();
1726  if (!empty(self::$coupons))
1727  {
1728  $couponsList = array_filter(self::$coupons, '\Bitrix\Sale\DiscountCouponsManager::clearSavedCoupons');
1729  if (!empty($couponsList))
1730  $couponsList = array_keys($couponsList);
1731  }
1732  if (self::usedByManager())
1733  {
1734  if (!isset($_SESSION[self::STORAGE_MANAGER_COUPONS]) || !is_array($_SESSION[self::STORAGE_MANAGER_COUPONS]))
1735  $_SESSION[self::STORAGE_MANAGER_COUPONS] = array();
1736  $_SESSION[self::STORAGE_MANAGER_COUPONS][self::$userId] = $couponsList;
1737  }
1738  else
1739  {
1740  $_SESSION[self::STORAGE_CLIENT_COUPONS] = $couponsList;
1741  }
1742  unset($couponsList);
1743  }
1744  }

◆ setApply()

static setApply (   $coupon,
  $data 
)
static

Set applied information for basket.

Аргументы
string$couponCoupon.
array$dataApply data (basket, delivery).
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1077

1078  {
1079  if (self::$useMode == self::MODE_SYSTEM)
1080  return false;
1081  $coupon = trim((string)$coupon);
1082  if ($coupon == '' || empty($data) || !is_array($data))
1083  return false;
1084  if (!isset(self::$coupons[$coupon]))
1085  return false;
1086  if (self::$coupons[$coupon]['STATUS'] == self::STATUS_NOT_FOUND || self::$coupons[$coupon]['STATUS'] == self::STATUS_FREEZE)
1087  return false;
1088  $result = array();
1089  if ((!empty($data['BASKET']) && is_array($data['BASKET'])) || !empty($data['DELIVERY']))
1090  {
1091  if (!empty($data['BASKET']) && is_array($data['BASKET']))
1092  {
1093  if (self::$coupons[$coupon]['TYPE'] == Internals\DiscountCouponTable::TYPE_BASKET_ROW && count($data['BASKET']) > 1)
1094  return false;
1095  foreach ($data['BASKET'] as $product)
1096  {
1097  if (empty($product))
1098  continue;
1099  $hash = self::getProductHash($product);
1100  if ($hash == '')
1101  continue;
1102  if (self::$coupons[$coupon]['TYPE'] == Internals\DiscountCouponTable::TYPE_BASKET_ROW && !empty(self::$coupons[$coupon]['BASKET']))
1103  continue;
1104  self::$coupons[$coupon]['BASKET'][$hash] = true;
1105  self::$coupons[$coupon]['STATUS'] = self::STATUS_APPLYED;
1106  $result['COUPON'] = self::$coupons[$coupon];
1107  if (!isset($result['BASKET']))
1108  $result['BASKET'] = array();
1109  $result['BASKET'][] = $product;
1110  }
1111  unset($product);
1112  }
1113  if (!empty($data['DELIVERY']))
1114  {
1115  self::$coupons[$coupon]['DELIVERY'] = $data['DELIVERY'];
1116  self::$coupons[$coupon]['STATUS'] = self::STATUS_APPLYED;
1117  $result['COUPON'] = self::$coupons[$coupon];
1118  $result['DELIVERY'] = self::$coupons[$coupon]['DELIVERY'];
1119  }
1120  $event = new Main\Event('sale', self::EVENT_ON_COUPON_APPLY, $result);
1121  unset($result);
1122  $event->send();
1123  return true;
1124  }
1125  return false;
1126  }

◆ setApplyByProduct()

static setApplyByProduct (   $product,
  $couponsList,
  $oldMode = false 
)
static

Set applied information for product.

Аргументы
array$productProduct description.
array$couponsListCoupons for product.
bool$oldModeCompatibility mode with old custom providers.
Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 1017

1018  {
1019  static $count = null;
1020  if ($count === null)
1021  $count = 0;
1022  if (self::$useMode == self::MODE_SYSTEM)
1023  return false;
1024  if (empty($couponsList) || empty($product))
1025  return false;
1026  $oldMode = ($oldMode === true);
1027  if ($oldMode)
1028  {
1029  if (!isset($product['BASKET_ID']))
1030  $product['BASKET_ID'] = 'c'.$count;
1031  $count++;
1032  }
1033  $hash = ($oldMode ? self::getCatalogProductHash($product) : self::getProductHash($product));
1034 
1035  if ($hash === '')
1036  return false;
1037  $applyed = false;
1038  $applyList = array();
1039  foreach ($couponsList as $coupon)
1040  {
1041  $coupon = trim((string)$coupon);
1042  if ($coupon === '' || !isset(self::$coupons[$coupon]))
1043  continue;
1044  if (self::$coupons[$coupon]['STATUS'] == self::STATUS_NOT_FOUND || self::$coupons[$coupon]['STATUS'] == self::STATUS_FREEZE)
1045  continue;
1046  if (self::$coupons[$coupon]['TYPE'] == Internals\DiscountCouponTable::TYPE_BASKET_ROW && !empty(self::$coupons[$coupon]['BASKET']))
1047  continue;
1048  self::$coupons[$coupon]['BASKET'][$hash] = true;
1049  self::$coupons[$coupon]['STATUS'] = self::STATUS_APPLYED;
1050  $applyed = true;
1051  $applyList[$coupon] = self::$coupons[$coupon];
1052  }
1053  unset($coupon);
1054  if ($applyed)
1055  {
1056  $event = new Main\Event(
1057  'sale',
1058  self::EVENT_ON_COUPON_APPLY_PRODUCT,
1059  array(
1060  'PRODUCT' => $product,
1061  'COUPONS' => $applyList
1062  )
1063  );
1064  $event->send();
1065  }
1066  unset($applyList);
1067  return $applyed;
1068  }

◆ setCoupons()

static setCoupons (   $couponsList,
  $checkCoupons = true 
)
staticprotected

Set coupons list.

Аргументы
array$couponsListCoupons list.
bool$checkCouponsFind coupons.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 2209

2210  {
2211  if (empty($couponsList) || !is_array($couponsList))
2212  return;
2213 
2214  $checkCoupons = ($checkCoupons !== false);
2215  if ($checkCoupons)
2216  {
2217  foreach ($couponsList as $coupon)
2218  {
2219  $coupon = trim((string)$coupon);
2220  if ($coupon == '')
2221  continue;
2222  $couponData = self::getData($coupon);
2223  if (!isset(self::$coupons[$couponData['COUPON']]))
2224  {
2225  $couponData['SORT'] = self::$couponIndex;
2226  self::createApplyFields($couponData);
2227  self::$coupons[$couponData['COUPON']] = $couponData;
2228  self::$couponIndex++;
2229  }
2230  }
2231  unset($couponData, $coupon);
2232  }
2233  else
2234  {
2235  $currentTime = new Main\Type\DateTime();
2236  $currentTimestamp = $currentTime->getTimestamp();
2237  unset($currentTime);
2238  foreach ($couponsList as $coupon)
2239  {
2240  if (empty($coupon) || !is_array($coupon))
2241  continue;
2242  $checkCode = self::checkBaseData($coupon, self::COUPON_CHECK_OK);
2243  $checkCode = self::checkFullData($coupon, $coupon['MODE'], $checkCode, $currentTimestamp);
2244  $coupon['STATUS'] = ($checkCode == self::COUPON_CHECK_OK ? self::STATUS_ENTERED : self::STATUS_FREEZE);
2245  $coupon['CHECK_CODE'] = $checkCode;
2246  unset($checkCode);
2247  if (!isset(self::$coupons[$coupon['COUPON']]))
2248  {
2249  $coupon['SORT'] = self::$couponIndex;
2250  self::createApplyFields($coupon);
2251  self::$coupons[$coupon['COUPON']] = $coupon;
2252  self::$couponIndex++;
2253  }
2254  }
2255  unset($coupon, $currentTimestamp);
2256  }
2257  }

◆ setUseOnlySaleDiscounts()

static setUseOnlySaleDiscounts (   $mode)
static

Reload discount coupons providers.

См. определение в файле discountcouponsmanagerbase.php строка 1479

1480  {
1481  if (!is_bool($mode))
1482  return;
1483  if (self::getUseMode() != self::MODE_ORDER)
1484  return;
1485  self::$onlySaleDiscount = $mode;
1487  }

◆ unFreezeCouponStorage()

static unFreezeCouponStorage ( )
static

Enable get coupons for calculate discounts.

Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 384

385  {
386  self::$allowCouponStorage++;
387  }

◆ usedByClient()

static usedByClient ( )
static

Verifies that the client mode being used.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 187

188  {
189  return (self::$useMode == self::MODE_CLIENT);
190  }

◆ usedByExternal()

static usedByExternal ( )
static

Verifies that the external order mode being used.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 207

208  {
209  return (self::$useMode == self::MODE_EXTERNAL);
210  }

◆ usedByManager()

static usedByManager ( )
static

Verifies that the manager mode being used.

Возвращает
bool

См. определение в файле discountcouponsmanagerbase.php строка 197

198  {
199  return (self::$useMode == self::MODE_MANAGER || self::$useMode == self::MODE_ORDER);
200  }

◆ useSavedCouponsForApply()

static useSavedCouponsForApply (   $state)
static

Set use ordered coupons for apply.

Аргументы
bool$stateUse state.
Возвращает
void

См. определение в файле discountcouponsmanagerbase.php строка 362

363  {
364  if ($state !== true && $state !== false)
365  return;
366  self::$useOrderCoupons = $state;
367  }

◆ verifyApplied()

static verifyApplied ( )
static

Verifies the current status of new applied coupons.

Used before order save.

Возвращает
Result

См. определение в файле discountcouponsmanagerbase.php строка 881

882  {
883  $result = new Sale\Result();
884 
885  if (
886  self::$useMode == self::MODE_SYSTEM
887  ||
888  !self::isEntered()
889  )
890  return $result;
891 
892  $appliedCoupons = self::filterCoupons(['STATUS' => self::STATUS_APPLYED, 'SAVED' => 'N'], true);
893  if (!empty($appliedCoupons))
894  {
895  $badCoupons = [];
896  $appliedCoupons = array_keys($appliedCoupons);
897  foreach ($appliedCoupons as $coupon)
898  {
899  $row = self::getData($coupon, true);
900  if ($row['STATUS'] == self::STATUS_NOT_FOUND || $row['STATUS'] == self::STATUS_FREEZE)
901  $badCoupons[$coupon] = $row;
902  }
903  unset($row, $coupon);
904  if (!empty($badCoupons))
905  {
906  self::fillCouponHints($badCoupons);
907  $errorData = [];
908  foreach ($badCoupons as $row)
909  $errorData[$row['COUPON']] = implode(', ', $row['CHECK_CODE_TEXT']);
910  unset($row);
911  $result->addError(new Main\Error(
912  Loc::getMessage('BX_SALE_DCM_COUPONS_VERIFY_ERR'),
913  'COUPON',
914  $errorData
915  ));
916  unset($errorData);
917  }
918  unset($badCoupons);
919  }
920  unset($appliedCoupons);
921 
922  return $result;
923  }

Поля

◆ $allowCouponStorage

$allowCouponStorage = 0
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 78

◆ $allowedSave

$allowedSave = false
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 64

◆ $checkActivity

$checkActivity = true
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 65

◆ $clearFields

$clearFields
staticprotected
Инициализатор
= array(
'STATUS', 'CHECK_CODE',
'DISCOUNT_NAME', 'DISCOUNT_ACTIVE',
'SAVED',
'BASKET', 'DELIVERY'
)

См. определение в файле discountcouponsmanagerbase.php строка 68

◆ $couponIndex

$couponIndex = 0
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 62

◆ $couponProviders

$couponProviders = array()
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 60

◆ $coupons

$coupons = array()
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 54

◆ $couponTypes

$couponTypes = array()
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 61

◆ $errors

$errors = array()
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 57

◆ $init

$init = false
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 55

◆ $onlySaleDiscount

$onlySaleDiscount = null
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 58

◆ $orderId

$orderId = null
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 63

◆ $timeFields

$timeFields
staticprotected
Инициализатор
= array(
'DISCOUNT_ACTIVE_FROM', 'DISCOUNT_ACTIVE_TO', 'ACTIVE_FROM', 'ACTIVE_TO'
)

См. определение в файле discountcouponsmanagerbase.php строка 74

◆ $useMode

$useMode = self::MODE_CLIENT
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 56

◆ $useOrderCoupons

$useOrderCoupons = true
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 66

◆ $userId

$userId = null
staticprotected

См. определение в файле discountcouponsmanagerbase.php строка 59

◆ COUPON_CHECK_ALREADY_MAX_USED

const COUPON_CHECK_ALREADY_MAX_USED = 0x0100

См. определение в файле discountcouponsmanagerbase.php строка 36

◆ COUPON_CHECK_BAD_USER_ID

const COUPON_CHECK_BAD_USER_ID = 0x0080

См. определение в файле discountcouponsmanagerbase.php строка 35

◆ COUPON_CHECK_CORRUPT_DATA

const COUPON_CHECK_CORRUPT_DATA = 0x0400

См. определение в файле discountcouponsmanagerbase.php строка 38

◆ COUPON_CHECK_NO_ACTIVE

const COUPON_CHECK_NO_ACTIVE = 0x0002

См. определение в файле discountcouponsmanagerbase.php строка 29

◆ COUPON_CHECK_NO_ACTIVE_DISCOUNT

const COUPON_CHECK_NO_ACTIVE_DISCOUNT = 0x0010

См. определение в файле discountcouponsmanagerbase.php строка 32

◆ COUPON_CHECK_NOT_APPLIED

const COUPON_CHECK_NOT_APPLIED = 0x0800

См. определение в файле discountcouponsmanagerbase.php строка 39

◆ COUPON_CHECK_NOT_FOUND

const COUPON_CHECK_NOT_FOUND = 0x0001

См. определение в файле discountcouponsmanagerbase.php строка 28

◆ COUPON_CHECK_OK

const COUPON_CHECK_OK = 0x0000

См. определение в файле discountcouponsmanagerbase.php строка 27

◆ COUPON_CHECK_RANGE_ACTIVE_FROM

const COUPON_CHECK_RANGE_ACTIVE_FROM = 0x0004

См. определение в файле discountcouponsmanagerbase.php строка 30

◆ COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT

const COUPON_CHECK_RANGE_ACTIVE_FROM_DISCOUNT = 0x0020

См. определение в файле discountcouponsmanagerbase.php строка 33

◆ COUPON_CHECK_RANGE_ACTIVE_TO

const COUPON_CHECK_RANGE_ACTIVE_TO = 0x0008

См. определение в файле discountcouponsmanagerbase.php строка 31

◆ COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT

const COUPON_CHECK_RANGE_ACTIVE_TO_DISCOUNT = 0x0040

См. определение в файле discountcouponsmanagerbase.php строка 34

◆ COUPON_CHECK_UNKNOWN_TYPE

const COUPON_CHECK_UNKNOWN_TYPE = 0x0200

См. определение в файле discountcouponsmanagerbase.php строка 37

◆ COUPON_MODE_FULL

const COUPON_MODE_FULL = 0x0002

См. определение в файле discountcouponsmanagerbase.php строка 42

◆ COUPON_MODE_SIMPLE

const COUPON_MODE_SIMPLE = 0x0001

См. определение в файле discountcouponsmanagerbase.php строка 41

◆ EVENT_ON_BUILD_COUPON_PROVIDES

const EVENT_ON_BUILD_COUPON_PROVIDES = 'onBuildCouponProviders'

См. определение в файле discountcouponsmanagerbase.php строка 44

◆ EVENT_ON_COUPON_ADD

const EVENT_ON_COUPON_ADD = 'onManagerCouponAdd'

См. определение в файле discountcouponsmanagerbase.php строка 46

◆ EVENT_ON_COUPON_APPLY

const EVENT_ON_COUPON_APPLY = 'onManagerCouponApply'

См. определение в файле discountcouponsmanagerbase.php строка 49

◆ EVENT_ON_COUPON_APPLY_PRODUCT

const EVENT_ON_COUPON_APPLY_PRODUCT = 'onManagerCouponApplyByProduct'

См. определение в файле discountcouponsmanagerbase.php строка 48

◆ EVENT_ON_COUPON_DELETE

const EVENT_ON_COUPON_DELETE = 'onManagerCouponDelete'

См. определение в файле discountcouponsmanagerbase.php строка 47

◆ EVENT_ON_SAVE_APPLIED_COUPONS

const EVENT_ON_SAVE_APPLIED_COUPONS = 'onManagerSaveApplied'

См. определение в файле discountcouponsmanagerbase.php строка 45

◆ MODE_CLIENT

const MODE_CLIENT = 0x0001

См. определение в файле discountcouponsmanagerbase.php строка 15

◆ MODE_EXTERNAL

const MODE_EXTERNAL = 0x0010

См. определение в файле discountcouponsmanagerbase.php строка 19

◆ MODE_MANAGER

const MODE_MANAGER = 0x0002

См. определение в файле discountcouponsmanagerbase.php строка 16

◆ MODE_ORDER

const MODE_ORDER = 0x0004

См. определение в файле discountcouponsmanagerbase.php строка 17

◆ MODE_SYSTEM

const MODE_SYSTEM = 0x0008

См. определение в файле discountcouponsmanagerbase.php строка 18

◆ STATUS_APPLYED

const STATUS_APPLYED = 0x0004

См. определение в файле discountcouponsmanagerbase.php строка 23

◆ STATUS_ENTERED

const STATUS_ENTERED = 0x0002

См. определение в файле discountcouponsmanagerbase.php строка 22

◆ STATUS_FREEZE

const STATUS_FREEZE = 0x0010

См. определение в файле discountcouponsmanagerbase.php строка 25

◆ STATUS_NOT_APPLYED

const STATUS_NOT_APPLYED = 0x0008

См. определение в файле discountcouponsmanagerbase.php строка 24

◆ STATUS_NOT_FOUND

const STATUS_NOT_FOUND = 0x0001

См. определение в файле discountcouponsmanagerbase.php строка 21

◆ STORAGE_CLIENT_COUPONS

const STORAGE_CLIENT_COUPONS = 'CATALOG_USER_COUPONS'

См. определение в файле discountcouponsmanagerbase.php строка 52

◆ STORAGE_MANAGER_COUPONS

const STORAGE_MANAGER_COUPONS = 'CATALOG_MANAGE_COUPONS'

См. определение в файле discountcouponsmanagerbase.php строка 51


Объявления и описания членов класса находятся в файле:
Bitrix\Sale\DiscountCouponsManagerBase\setCoupons
static setCoupons($couponsList, $checkCoupons=true)
Set coupons list.
Definition: discountcouponsmanagerbase.php:2209
Bitrix\Main\Localization\Loc\getMessage
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_ALREADY_MAX_USED
const COUPON_CHECK_ALREADY_MAX_USED
Definition: discountcouponsmanagerbase.php:36
Bitrix\Sale\DiscountCouponsManagerBase\eraseAppliedCoupons
static eraseAppliedCoupons($result)
Clear applied coupons.
Definition: discountcouponsmanagerbase.php:1752
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_BAD_USER_ID
const COUPON_CHECK_BAD_USER_ID
Definition: discountcouponsmanagerbase.php:35
Bitrix\Sale\DiscountCouponsManagerBase\$coupons
static $coupons
Definition: discountcouponsmanagerbase.php:54
Bitrix\Sale\DiscountCouponsManagerBase\STATUS_APPLYED
const STATUS_APPLYED
Definition: discountcouponsmanagerbase.php:23
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_NOT_APPLIED
const COUPON_CHECK_NOT_APPLIED
Definition: discountcouponsmanagerbase.php:39
Bitrix\Sale\DiscountCouponsManagerBase\MODE_SYSTEM
const MODE_SYSTEM
Definition: discountcouponsmanagerbase.php:18
Bitrix\Sale\DiscountCouponsManagerBase\fillCouponHints
static fillCouponHints(&$coupons)
Fill coupon hints.
Definition: discountcouponsmanagerbase.php:2165
Bitrix\Sale\DiscountCouponsManagerBase\$errors
static $errors
Definition: discountcouponsmanagerbase.php:57
Bitrix\Sale\DiscountCouponsManagerBase\getStatusList
static getStatusList($extendedMode=false)
Returns coupon status list.
Definition: discountcouponsmanagerbase.php:273
Bitrix\Sale\DiscountCouponsManagerBase\$useMode
static $useMode
Definition: discountcouponsmanagerbase.php:56
Bitrix\Sale\DiscountCouponsManagerBase\clear
static clear($clearStorage=false)
Clear coupon storage.
Definition: discountcouponsmanagerbase.php:594
Bitrix\Sale\DiscountCouponsManagerBase\getProductHash
static getProductHash($product)
Create product hash.
Definition: discountcouponsmanagerbase.php:2115
Bitrix\Sale\DiscountCouponsManagerBase\saveToStorage
static saveToStorage()
Save current coupons to session storage.
Definition: discountcouponsmanagerbase.php:1721
Bitrix\Sale\DiscountCouponsManagerBase\getCheckCodeList
static getCheckCodeList($extendedMode=false)
Returns check code list.
Definition: discountcouponsmanagerbase.php:301
Bitrix\Sale\DiscountCouponsManagerBase\STATUS_ENTERED
const STATUS_ENTERED
Definition: discountcouponsmanagerbase.php:22
Bitrix\Sale\DiscountCouponsManagerBase\fillUserInfo
static fillUserInfo(&$result, $existCoupon, $checkCode)
Fill client information.
Definition: discountcouponsmanagerbase.php:1664
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_OK
const COUPON_CHECK_OK
Definition: discountcouponsmanagerbase.php:27
Bitrix\Sale\DiscountCouponsManagerBase\filterUniqueDiscount
static filterUniqueDiscount(&$coupons)
Returns one coupon for one discount.
Definition: discountcouponsmanagerbase.php:1917
Bitrix\Sale\DiscountCouponsManagerBase\get
static get($extMode=true, $filter=array(), $show=false, $final=false)
Get coupons list.
Definition: discountcouponsmanagerbase.php:758
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_MODE_FULL
const COUPON_MODE_FULL
Definition: discountcouponsmanagerbase.php:42
Bitrix\Sale\DiscountCouponsManagerBase\$orderId
static $orderId
Definition: discountcouponsmanagerbase.php:63
Bitrix\Catalog\DiscountCouponTable\getCouponTypes
static getCouponTypes($extendedMode=false)
Returns coupon types list.
Definition: catalog/lib/discountcoupon.php:473
Bitrix\Sale\DiscountCouponsManagerBase\createApplyFields
static createApplyFields(&$couponData)
Create applied fields.
Definition: discountcouponsmanagerbase.php:1772
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_CORRUPT_DATA
const COUPON_CHECK_CORRUPT_DATA
Definition: discountcouponsmanagerbase.php:38
Bitrix\Main\Config\Option\get
static get($moduleId, $name, $default="", $siteId=false)
Returns a value of an option.
Definition: main/lib/config/option.php:29
Bitrix\Main\Type
Definition: main/lib/type/collection.php:2
Bitrix\Sale\Registry\getInstance
static getInstance($type)
Definition: sale/lib/registry.php:161
Bitrix\Sale\DiscountCouponsManagerBase\STORAGE_CLIENT_COUPONS
const STORAGE_CLIENT_COUPONS
Definition: discountcouponsmanagerbase.php:52
Bitrix\Sale\DiscountCouponsManagerBase\init
static init($mode=self::MODE_CLIENT, $params=array(), $clearStorage=false)
Initialization coupon manager.
Definition: discountcouponsmanagerbase.php:423
Bitrix\Sale\DiscountCouponsManagerBase\getUserId
static getUserId()
Returns user id.
Definition: discountcouponsmanagerbase.php:217
Bitrix\Catalog\DiscountCouponTable\TYPE_ONE_ORDER
const TYPE_ONE_ORDER
Definition: catalog/lib/discountcoupon.php:38
Bitrix\Main\Application\getConnection
static getConnection($name="")
Static method returns database connection for the specified name.
Definition: main/lib/application.php:381
Bitrix\Sale\DiscountCouponsManagerBase\checkBaseData
static checkBaseData(&$data, $checkCode=self::COUPON_CHECK_OK)
Checks the basic coupon fields.
Definition: discountcouponsmanagerbase.php:1496
Bitrix\Sale\DiscountCouponsManagerBase\$userId
static $userId
Definition: discountcouponsmanagerbase.php:59
Bitrix\Sale\DiscountCouponsManagerBase\STORAGE_MANAGER_COUPONS
const STORAGE_MANAGER_COUPONS
Definition: discountcouponsmanagerbase.php:51
Bitrix\Sale\DiscountCouponsManagerBase\clearErrors
static clearErrors()
Clear errors list.
Definition: discountcouponsmanagerbase.php:262
Bitrix\Main\EventResult\SUCCESS
const SUCCESS
Definition: main/lib/eventresult.php:7
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_NO_ACTIVE_DISCOUNT
const COUPON_CHECK_NO_ACTIVE_DISCOUNT
Definition: discountcouponsmanagerbase.php:32
Bitrix\Sale\DiscountCouponsManagerBase\STATUS_NOT_APPLYED
const STATUS_NOT_APPLYED
Definition: discountcouponsmanagerbase.php:24
Bitrix\Main\Type\DateTime\createFromTimestamp
static createFromTimestamp($timestamp)
Creates DateTime object from Unix timestamp.
Definition: main/lib/type/datetime.php:234
Bitrix\Sale\DiscountCouponsManagerBase\filterCoupons
static filterCoupons($filter, $getId=false)
Filter manager coupons list.
Definition: discountcouponsmanagerbase.php:1951
Bitrix\Sale\DiscountCouponsManagerBase\MODE_ORDER
const MODE_ORDER
Definition: discountcouponsmanagerbase.php:17
Bitrix\Sale\DiscountCouponsManagerBase\MODE_CLIENT
const MODE_CLIENT
Definition: discountcouponsmanagerbase.php:15
Bitrix\Sale\DiscountCouponsManagerBase\loadCouponProviders
static loadCouponProviders()
Load coupon providers from modules.
Definition: discountcouponsmanagerbase.php:1783
Bitrix\Catalog\DiscountCouponTable\saveApplied
static saveApplied($coupons, $userId, Main\Type\DateTime $currentTime)
Save apllied coupons.
Definition: catalog/lib/discountcoupon.php:392
Bitrix\Sale\DiscountCouponsManagerBase\checkFullData
static checkFullData(&$data, $mode=self::COUPON_MODE_FULL, $checkCode=self::COUPON_CHECK_OK, $currentTimestamp)
Checks the extended coupon fields.
Definition: discountcouponsmanagerbase.php:1592
Bitrix\Sale\DiscountCouponsManagerBase\finalApply
static finalApply()
Change status coupons for save.
Definition: discountcouponsmanagerbase.php:1165
Bitrix\Sale\DiscountCouponsManagerBase\getData
static getData($coupon, $checkCoupon=true)
Returns information about coupon.
Definition: discountcouponsmanagerbase.php:1241
Bitrix\Sale\DiscountCouponsManagerBase\initUseDiscount
static initUseDiscount()
Initialization coupons providers.
Definition: discountcouponsmanagerbase.php:1829
Bitrix\Sale\DiscountCouponsManagerBase\getCatalogProductHash
static getCatalogProductHash($product)
Create catalog product hash for old custom providers.
Definition: discountcouponsmanagerbase.php:2139
Bitrix\Sale\DiscountCouponsManagerBase\$useOrderCoupons
static $useOrderCoupons
Definition: discountcouponsmanagerbase.php:66
Bitrix\Sale\DiscountCouponsManagerBase\initUserId
static initUserId()
Get user by fuser id.
Definition: discountcouponsmanagerbase.php:1685
Bitrix\Sale\DiscountCouponsManagerBase\$couponIndex
static $couponIndex
Definition: discountcouponsmanagerbase.php:62
Bitrix\Sale\DiscountCouponsManagerBase\MODE_EXTERNAL
const MODE_EXTERNAL
Definition: discountcouponsmanagerbase.php:19
Bitrix\Sale\DiscountCouponsManagerBase\STATUS_FREEZE
const STATUS_FREEZE
Definition: discountcouponsmanagerbase.php:25
Bitrix\Sale\DiscountCouponsManagerBase\load
static load()
Load coupons for existing order.
Definition: discountcouponsmanagerbase.php:674
Bitrix\Sale\DiscountCouponsManagerBase\initUseMode
static initUseMode($mode=self::MODE_CLIENT, $params=array())
Init use mode and user id.
Definition: discountcouponsmanagerbase.php:102
Bitrix\Sale\DiscountCouponsManagerBase\COUPON_CHECK_NO_ACTIVE
const COUPON_CHECK_NO_ACTIVE
Definition: discountcouponsmanagerbase.php:29
Bitrix\Sale\DiscountCouponsManagerBase\MODE_MANAGER
const MODE_MANAGER
Definition: discountcouponsmanagerbase.php:16