• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/coupons.php
  • Класс: CSupportSuperCoupon
  • Вызов: CSupportSuperCoupon::UseCoupon
static function UseCoupon($coupon)
{
	global $DB, $USER;
	$ret = false;
	
	$arFields = false;
	$arLogFields = false;
	$arCoupon = false;

	$curr = ConvertTimeStamp();
	$arFilter = array(
		'LOGIC' => 'AND',
		
		'COUPON' => $coupon,
		'=ACTIVE' => 'Y',
		array(
			'LOGIC' => 'OR',
			
			'ACTIVE_FROM' => false,
			'<=ACTIVE_FROM' => $curr,
		),
		array(
			'LOGIC' => 'OR',
			
			'ACTIVE_TO' => false,
			'>=ACTIVE_TO' => $curr,
		)
	);
	
	
	$DB->StartTransaction();
	
	$rs = CSupportSuperCoupon::GetList(false, $arFilter);
	if ($arCoupon = $rs->Fetch())
	{
		$countTickets = intval($arCoupon['COUNT_TICKETS']);
		if ($countTickets > 0)
		{
			$countTickets--;
			$arFields = array(
				'COUNT_TICKETS' => $countTickets,
				'TIMESTAMP_X' => $DB->GetNowFunction(),
				//'UPDATED_USER_ID' => (isset($USER) && is_object($USER)) ? $USER->GetID() : false,
				'COUNT_USED' => 'COUNT_USED + 1'
			);
			if(isset($USER) && is_object($USER))
			{
				$arFields['UPDATED_USER_ID'] = $USER->GetID();
			}
			if ($aff_rows = $DB->Update('b_ticket_supercoupons', $arFields, 'WHERE ID=' . $arCoupon['ID']))
			{
				$ret = true;
			}
		}
		
		$arLogFields = array(
				'~TIMESTAMP_X' => $DB->GetNowFunction(),
				'COUPON_ID' => $arCoupon['ID'],
				'USER_ID' => ((isset($USER) && is_object($USER)) ? $USER->GetID() : false),
				'SUCCESS' => $ret ? 'Y' : 'N',
				'AFTER_COUNT' => $countTickets,
				'SESSION_ID' => (array_key_exists('SESS_SESSION_ID', $_SESSION) ? $_SESSION['SESS_SESSION_ID'] : false),
				'GUEST_ID' => (array_key_exists('SESS_GUEST_ID', $_SESSION) ? $_SESSION['SESS_GUEST_ID'] : false),
				'AFFECTED_ROWS' => $aff_rows,
				'COUPON' => $coupon,
			);
		
		$arInsert = $DB->PrepareInsert('b_ticket_supercoupons_log', $arLogFields);
		$strSql =
			"INSERT INTO b_ticket_supercoupons_log (".$arInsert[0].") ".
			"VALUES(".$arInsert[1].")";
		$DB->Query($strSql, false, 'File: ' . __FILE__ . ' Line: ' . __LINE__);
		
		$arMail = array(
			'COUPON' => $coupon,
			'COUPON_ID' => $arCoupon['ID'],
			'DATE' => ConvertTimeStamp(false, 'FULL'),
			'USER_ID' => ((isset($USER) && is_object($USER)) ? $USER->GetID() : -1),
			'SESSION_ID' => (array_key_exists('SESS_SESSION_ID', $_SESSION) ? $_SESSION['SESS_SESSION_ID'] : -1),
			'GUEST_ID' => (array_key_exists('SESS_GUEST_ID', $_SESSION) ? $_SESSION['SESS_GUEST_ID'] : -1),
		);
		
		$rsEvents = GetModuleEvents('support', 'OnBeforeSendCouponEMail');
		while ($arEvent = $rsEvents->Fetch())
		{
			$arMail = ExecuteModuleEventEx($arEvent, array($arMail));
		}
		
		if ($arMail)
		{
			$e = new CEvent();
			$e->Send('TICKET_GENERATE_SUPERCOUPON', SITE_ID, $arMail);
		}
	}
	
	$DB->Commit();
	
	$rsEvents = GetModuleEvents('support', 'OnAfterUseCoupon');
	while ($arEvent = $rsEvents->Fetch())
	{
		ExecuteModuleEventEx($arEvent, array($coupon, $arCoupon, $arFields, $arLogFields));
	}
	
	return $ret;
}