Exemplo n.º 1
0
 /**
  * Validate coupon.
  *
  * @param int $value					Coupon.
  * @param array|int $primary			Primary key.
  * @param array $row					Current data.
  * @param Main\Entity\Field $field		Field object.
  * @return bool|string
  */
 public static function checkCoupon($value, $primary, array $row, Main\Entity\Field $field)
 {
     $value = trim((string) $value);
     if ($value == '') {
         return Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_COUPON_EMPTY');
     }
     if (self::$existCouponsManager === null) {
         self::initUseMode();
     }
     if (self::$existCouponsManager) {
         $existCoupon = Sale\DiscountCouponsManager::isExist($value);
         if (!empty($existCoupon)) {
             $currentId = (int) (is_array($primary) ? $primary['ID'] : $primary);
             if ($existCoupon['MODULE'] != 'catalog' || $currentId != $existCoupon['ID']) {
                 return Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_COUPON_EXIST');
             }
         }
     } else {
         $currentId = (int) (is_array($primary) ? $primary['ID'] : $primary);
         $couponIterator = self::getList(array('select' => array('ID'), 'filter' => array('=COUPON' => $value, '!=ID' => $currentId), 'limit' => 1));
         if ($existCoupon = $couponIterator->fetch()) {
             return Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_COUPON_EXIST');
         }
     }
     return true;
 }
Exemplo n.º 2
0
 /**
  * Validate coupon.
  *
  * @param int $value					Coupon.
  * @param array|int $primary			Primary key.
  * @param array $row					Current data.
  * @param Main\Entity\Field $field		Field object.
  * @return bool|string
  */
 public static function checkCoupon($value, $primary, array $row, Main\Entity\Field $field)
 {
     $value = trim((string) $value);
     if ($value == '') {
         return Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_COUPON_EMPTY');
     }
     $existCoupon = Sale\DiscountCouponsManager::isExist($value);
     if (!empty($existCoupon)) {
         $currentId = (int) (is_array($primary) ? $primary['ID'] : $primary);
         if ($existCoupon['MODULE'] != 'catalog' || $currentId != $existCoupon['ID']) {
             return Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_COUPON_EXIST');
         }
     }
     return true;
 }
Exemplo n.º 3
0
 /**
  * Create coupon code.
  *
  * @param bool $check		Check new coupon or no.
  * @return string
  */
 public static function generateCoupon($check = false)
 {
     static $eventExists = null;
     $check = $check === true;
     if ($eventExists === true || $eventExists === null) {
         $event = new Main\Event('sale', self::EVENT_ON_GENERATE_COUPON, array('CHECK' => $check));
         $event->send();
         $resultList = $event->getResults();
         if (!empty($resultList) && is_array($resultList)) {
             /** @var Main\EventResult $eventResult */
             foreach ($resultList as &$eventResult) {
                 if ($eventResult->getType() != Main\EventResult::SUCCESS) {
                     continue;
                 }
                 $eventExists = true;
                 $result = $eventResult->getParameters();
                 if (!empty($result) && is_string($result)) {
                     return $result;
                 }
             }
             unset($eventResult);
         }
         if ($eventExists === null) {
             $eventExists = false;
         }
     }
     $allchars = 'ABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789';
     $charsLen = strlen($allchars) - 1;
     do {
         $resultCorrect = true;
         $partOne = '';
         $partTwo = '';
         for ($i = 0; $i < 5; $i++) {
             $partOne .= substr($allchars, rand(0, $charsLen), 1);
         }
         for ($i = 0; $i < 7; $i++) {
             $partTwo .= substr($allchars, rand(0, $charsLen), 1);
         }
         $result = 'SL-' . $partOne . '-' . $partTwo;
         if ($check) {
             $existCoupon = Sale\DiscountCouponsManager::isExist($result);
             $resultCorrect = empty($existCoupon);
         }
     } while (!$resultCorrect);
     return $result;
 }
Exemplo n.º 4
0
 /**
  * <p>Метод проверяет существование купона. Метод динамичный.</p>
  *
  *
  * @param string $strCoupon  Код купона.
  *
  * @return bool <p> В случае наличия купона возвращает true, иначе - false.</p> <br><br>
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/isexistcoupon.php
  * @author Bitrix
  * @deprecated deprecated since catalog 15.0.4  ->  \Bitrix\Sale\DiscountCouponsManager::isExist
  */
 public static function IsExistCoupon($strCoupon)
 {
     if (self::$existCouponsManager === null) {
         self::initCouponManager();
     }
     if (self::$existCouponsManager) {
         $result = DiscountCouponsManager::isExist($strCoupon);
         if (!empty($result)) {
             return true;
         }
         return false;
     } else {
         global $DB;
         if ($strCoupon == '') {
             return false;
         }
         $strSql = "select ID, COUPON from b_catalog_discount_coupon where COUPON='" . $DB->ForSql($strCoupon) . "' limit 1";
         $rsCoupons = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arCoupon = $rsCoupons->Fetch()) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 5
0
 /**
  * <p>Метод служит для проверки (и корректировки, если это возможно) параметров, переданных в методы <a href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/add.php">CCatalogDiscountCoupon::Add</a> и <a href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/update.php">CCatalogDiscountCoupon::Update</a>. Метод динамичный.</p>
  *
  *
  * @param string $ACTION  указывает, для какого метода идет проверка. Возможные значения:
  * <br><ul> <li> <b>ADD</b> - для метода <a
  * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/add.php">CCatalogDiscountCoupon::Add</a>;</li>
  * <li> <b>UPDATE</b> - для метода <a
  * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/update.php">CCatalogDiscountCoupon::Update</a>.</li>
  * </ul>
  *
  * @param array &$arFields  Ассоциативный массив параметров купона. Массив передается по
  * ссылке и его значения могут быть изменены методом. <br> Допустимые
  * ключи: <ul> <li> <b>DISCOUNT_ID</b> - код (ID) скидки;</li> <li> <b>ACTIVE</b> - флаг
  * активности купона (Y/N);</li> <li> <b>ONE_TIME</b> - флаг однократного
  * использования купона (Y|N);</li> <li> <b>COUPON</b> - код купона;</li> <li>
  * <b>DATE_APPLY</b> - дата применения купона;</li> <li> <b>DESCRIPTION</b> -
  * комментарий.</li> </ul>
  *
  * @param int $ID = 0 код (ID) купона (только для CCatalogDiscountCoupon::Update). </htm
  *
  * @return boolean <p> В случае корректности переданных параметров возвращает true,
  * иначе - false. Если метод вернул false, с помощью $APPLICATION-&gt;GetException() можно
  * получить текст ошибок.</p> <p><b>Обязательные проверки</b></p> </htm<ul>
  * <li>для <b>CCatalogDiscountCoupon::Add</b> <ul> <li>поле DISCOUNT_ID присутствует и содержит
  * код (ID) существующей скидки;</li> <li>если поле ACTIVE не существует или
  * не равно N, ему присваивается значение Y;</li> <li>если поле ONE_TIME не
  * существует или не равно N, ему присваивается значение Y;</li> <li>поле
  * COUPON существует и содержит уникальный код, отсутствующий в списке
  * купонов;</li> <li>если поле DATE_APPLY не существует или не содержит
  * корректную дату, ему присваивается значение false.</li> </ul> <br> </li>
  * <li>для <b>CCatalogDiscountCoupon::Update</b> <ul> <li>если поле DISCOUNT_ID присутствует, оно
  * должно содержать код (ID) существующей скидки;</li> <li>если поле ACTIVE
  * существует и не равно N, ему присваивается значение Y;</li> <li>если
  * поле ONE_TIME существует и не равно N, ему присваивается значение Y;</li>
  * <li>если поле COUPON существует, оно содержит уникальный код, заданный
  * только для этого купона (с таким ID);</li> <li>если поле DATE_APPLY
  * существует и содержит некорректную дату, ему присваивается
  * значение false.</li> </ul> </li> </ul>
  *
  * <h4>See Also</h4> 
  * <ul> <li><a href="http://dev.1c-bitrix.ru/api_help/catalog/fields.php">Структура таблицы</a></li> <li><a
  * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/add.php">CCatalogDiscountCoupon::Add</a></li>
  * <li><a
  * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/update.php">CCatalogDiscountCoupon::Update</a></li>
  * </ul> </ht<br><br>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscountcoupon/checkfields.php
  * @author Bitrix
  */
 public static function CheckFields($ACTION, &$arFields, $ID = 0)
 {
     global $DB, $APPLICATION, $USER;
     $ACTION = strtoupper($ACTION);
     if ('UPDATE' != $ACTION && 'ADD' != $ACTION) {
         return false;
     }
     if (self::$existCouponsManager === null) {
         self::initCouponManager();
     }
     $clearFields = array('ID', '~ID', '~COUPON', 'TIMESTAMP_X', 'DATE_CREATE', '~DATE_CREATE', '~MODIFIED_BY', '~CREATED_BY');
     if ($ACTION == 'UPDATE') {
         $clearFields[] = 'CREATED_BY';
     }
     foreach ($clearFields as &$fieldName) {
         if (array_key_exists($fieldName, $arFields)) {
             unset($arFields[$fieldName]);
         }
     }
     unset($fieldName, $clearFields);
     if ((is_set($arFields, "DISCOUNT_ID") || $ACTION == "ADD") && intval($arFields["DISCOUNT_ID"]) <= 0) {
         $APPLICATION->ThrowException(Loc::getMessage("KGDC_EMPTY_DISCOUNT"), "EMPTY_DISCOUNT_ID");
         return false;
     }
     if ((is_set($arFields, "COUPON") || $ACTION == "ADD") && strlen($arFields["COUPON"]) <= 0) {
         $APPLICATION->ThrowException(Loc::getMessage("KGDC_EMPTY_COUPON"), "EMPTY_COUPON");
         return false;
     } elseif (is_set($arFields, "COUPON")) {
         $currentId = $ACTION == 'UPDATE' ? $ID : 0;
         $arFields['COUPON'] = substr($arFields['COUPON'], 0, 32);
         if (self::$existCouponsManager) {
             $existCoupon = DiscountCouponsManager::isExist($arFields['COUPON']);
             if (!empty($existCoupon)) {
                 if ($existCoupon['MODULE'] != 'catalog' || $currentId != $existCoupon['ID']) {
                     $APPLICATION->ThrowException(Loc::getMessage("KGDC_DUPLICATE_COUPON"), "DUPLICATE_COUPON");
                     return false;
                 }
             }
         } else {
             $couponIterator = Catalog\DiscountCouponTable::getList(array('select' => array('ID', 'COUPON'), 'filter' => array('=COUPON' => $arFields['COUPON'])));
             if ($existCoupon = $couponIterator->fetch()) {
                 if ($currentId != (int) $existCoupon['ID']) {
                     $APPLICATION->ThrowException(Loc::getMessage("KGDC_DUPLICATE_COUPON"), "DUPLICATE_COUPON");
                     return false;
                 }
             }
         }
     }
     if ((is_set($arFields, "ACTIVE") || $ACTION == "ADD") && $arFields["ACTIVE"] != "N") {
         $arFields["ACTIVE"] = "Y";
     }
     if ((is_set($arFields, "ONE_TIME") || $ACTION == "ADD") && !in_array($arFields["ONE_TIME"], Catalog\DiscountCouponTable::getCouponTypes())) {
         $arFields["ONE_TIME"] = self::TYPE_ONE_TIME;
     }
     if ((is_set($arFields, "DATE_APPLY") || $ACTION == "ADD") && !$DB->IsDate($arFields["DATE_APPLY"], false, SITE_ID, "FULL")) {
         $arFields["DATE_APPLY"] = false;
     }
     $intUserID = 0;
     $boolUserExist = CCatalog::IsUserExists();
     if ($boolUserExist) {
         $intUserID = (int) $USER->GetID();
     }
     $strDateFunction = $DB->GetNowFunction();
     $arFields['~TIMESTAMP_X'] = $strDateFunction;
     if ($boolUserExist) {
         if (!array_key_exists('MODIFIED_BY', $arFields) || intval($arFields["MODIFIED_BY"]) <= 0) {
             $arFields["MODIFIED_BY"] = $intUserID;
         }
     }
     if ('ADD' == $ACTION) {
         $arFields['~DATE_CREATE'] = $strDateFunction;
         if ($boolUserExist) {
             if (!array_key_exists('CREATED_BY', $arFields) || intval($arFields["CREATED_BY"]) <= 0) {
                 $arFields["CREATED_BY"] = $intUserID;
             }
         }
     }
     return true;
 }