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