• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/discountcoupon.php
  • Класс: BitrixSaleInternalsDiscountCouponTable
  • Вызов: DiscountCouponTable::generateCoupon
static function generateCoupon($check = false)
{
	static $eventExists = null;

	$check = ($check === true);
	if ($eventExists === true || $eventExists === null)
	{
		$event = new MainEvent('sale', self::EVENT_ON_GENERATE_COUPON, array('CHECK' => $check));
		$event->send();
		$resultList = $event->getResults();
		if (!empty($resultList) && is_array($resultList))
		{
			/** @var MainEventResult $eventResult */
			foreach ($resultList as &$eventResult)
			{
				if ($eventResult->getType() != MainEventResult::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 = mb_strlen($allchars) - 1;

	do
	{
		$resultCorrect = true;
		$partOne = '';
		$partTwo = '';
		for ($i = 0; $i < 5; $i++)
			$partOne .= mb_substr($allchars, rand(0, $charsLen), 1);

		for ($i = 0; $i < 7; $i++)
			$partTwo .= mb_substr($allchars, rand(0, $charsLen), 1);

		$result = 'SL-'.$partOne.'-'.$partTwo;
		if ($check)
		{
			$existCoupon = SaleDiscountCouponsManager::isExist($result);
			$resultCorrect = empty($existCoupon);
		}
	} while (!$resultCorrect);
	return $result;
}