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