Your IP : 18.118.24.184
<?php
IncludeModuleLangFile(__FILE__);
class CSubscription
{
public $LAST_ERROR = '';
public $LAST_MESSAGE = '';
public static function GetList($aSort=[], $arFilter=[], $arNavStartParams=false)
{
global $DB;
$arSqlSearch = [];
$from1 = '';
if (is_array($arFilter))
{
foreach ($arFilter as $key => $val)
{
if (!is_array($val))
{
if ( ((string)$val === '') || ($val === 'NOT_REF') )
{
continue;
}
}
switch (strtoupper($key))
{
case 'ID':
$arSqlSearch[] = GetFilterQuery('S.ID', $val, 'N');
break;
case 'EMAIL':
$arSqlSearch[] = GetFilterQuery('S.EMAIL', $val, 'Y', ['@', '.', '_']);
break;
case 'UPDATE_1':
$arSqlSearch[] = 'S.DATE_UPDATE>=' . $DB->CharToDateFunction($val);
break;
case 'UPDATE_2':
$arSqlSearch[] = 'S.DATE_UPDATE<=' . $DB->CharToDateFunction($val . ' 23:59:59');
break;
case 'INSERT_1':
$arSqlSearch[] = 'S.DATE_INSERT>=' . $DB->CharToDateFunction($val);
break;
case 'INSERT_2':
$arSqlSearch[] = 'S.DATE_INSERT<=' . $DB->CharToDateFunction($val . ' 23:59:59');
break;
case 'USER':
$arSqlSearch[] = GetFilterQuery('U.ID, U.LOGIN, U.NAME, U.LAST_NAME', $val);
break;
case 'USER_ID':
$arSqlSearch[] = GetFilterQuery('S.USER_ID', $val, 'N');
break;
case 'ANONYMOUS':
$arSqlSearch[] = ($val == 'Y') ? '(S.USER_ID = 0 or S.USER_ID is null)' : '(S.USER_ID > 0 and S.USER_ID is not null)';
break;
case 'CONFIRMED':
$arSqlSearch[] = ($val == 'Y') ? "S.CONFIRMED='Y'" : "S.CONFIRMED='N'";
break;
case 'ACTIVE':
$arSqlSearch[] = ($val == 'Y') ? "S.ACTIVE='Y'" : "S.ACTIVE='N'";
break;
case 'FORMAT':
$arSqlSearch[] = ($val == 'text') ? "S.FORMAT='text'" : "S.FORMAT='html'";
break;
case 'RUBRIC':
case 'RUBRIC_MULTI':
case 'DISTRIBUTION':
if (is_array($val))
{
$val = implode(' | ', $val);
}
if ($val !== '')
{
$from1 = ' INNER JOIN b_subscription_rubric SR ON (SR.SUBSCRIPTION_ID=S.ID) ';
$arSqlSearch[] = GetFilterQuery('SR.LIST_RUBRIC_ID', $val, 'N');
}
else
{
$arSqlSearch[] = ' 1=0 ';
}
break;
}
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$arOrder = [];
foreach ($aSort as $by => $ord)
{
$by = mb_strtoupper($by);
$ord = (mb_strtoupper($ord) !== 'ASC' ? 'DESC' : 'ASC');
switch ($by)
{
case 'ID':
$arOrder[$by] = 'S.ID ' . $ord;
break;
case 'DATE_INSERT':
$arOrder[$by] = 'S.DATE_INSERT ' . $ord;
break;
case 'DATE_UPDATE':
$arOrder[$by] = 'S.DATE_UPDATE ' . $ord;
break;
case 'DATE_CONFIRM':
$arOrder[$by] = 'S.DATE_CONFIRM ' . $ord;
break;
case 'ACT':
$arOrder[$by] = 'S.ACTIVE ' . $ord;
break;
case 'CONF':
$arOrder[$by] = 'S.CONFIRMED ' . $ord;
break;
case 'EMAIL':
$arOrder[$by] = 'S.EMAIL ' . $ord;
break;
case 'FMT':
$arOrder[$by] = 'S.FORMAT ' . $ord;
break;
case 'USER':
$arOrder[$by] = 'S.USER_ID ' . $ord;
break;
case 'CONFIRM_CODE':
$arOrder[$by] = 'S.CONFIRM_CODE ' . $ord;
break;
}
}
if (!$arOrder)
{
$arOrder['ID'] = 'S.ID DESC';
}
if (is_array($arNavStartParams))
{
$strSql = '
SELECT count(' . ($from1 ? 'DISTINCT S.ID' : "'x'") . ') as C
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
' . $from1 . '
WHERE
' . $strSqlSearch;
$res_cnt = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
$res_cnt = $res_cnt->Fetch();
$cnt = $res_cnt['C'];
$strSql = '
SELECT
S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
' . $DB->DateToCharFunction('S.DATE_UPDATE') . ' DATE_UPDATE,
' . $DB->DateToCharFunction('S.DATE_INSERT') . ' DATE_INSERT,
' . $DB->DateToCharFunction('S.DATE_CONFIRM') . ' DATE_CONFIRM,
U.LOGIN USER_LOGIN,
U.NAME USER_NAME,
U.LAST_NAME USER_LAST_NAME
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
' . $from1 . '
WHERE
' . $strSqlSearch . '
' . ($from1 ?
'GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME' :
''
) . '
ORDER BY ' . implode(', ', $arOrder);
$res = new CDBResult();
$res->NavQuery($strSql, $cnt, $arNavStartParams);
$res->is_filtered = (IsFiltered($strSqlSearch));
return $res;
}
else
{
$strSql = '
SELECT
S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
' . $DB->DateToCharFunction('S.DATE_UPDATE') . ' DATE_UPDATE,
' . $DB->DateToCharFunction('S.DATE_INSERT') . ' DATE_INSERT,
' . $DB->DateToCharFunction('S.DATE_CONFIRM') . ' DATE_CONFIRM,
U.LOGIN USER_LOGIN,
U.NAME USER_NAME,
U.LAST_NAME USER_LAST_NAME
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
' . $from1 . '
WHERE
' . $strSqlSearch . '
' . ($from1 ?
'GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME' :
''
) . '
ORDER BY ' . implode(', ', $arOrder);
$res = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
$res->is_filtered = (IsFiltered($strSqlSearch));
return $res;
}
}
//list of subscribed categories
public static function GetRubricList($ID)
{
global $DB;
$ID = intval($ID);
$strSql = '
SELECT R.ID, R.NAME, R.SORT, R.LID, R.ACTIVE, R.VISIBLE
FROM b_list_rubric R, b_subscription_rubric SR
WHERE R.ID = SR.LIST_RUBRIC_ID AND SR.SUBSCRIPTION_ID = ' . $ID . '
ORDER BY R.LID, R.SORT, R.NAME
';
return $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
//array of subscribed categories
public static function GetRubricArray($ID)
{
$ID = intval($ID);
$aSubscrRub = [];
if ($ID > 0)
{
$subscr_rub = CSubscription::GetRubricList($ID);
while ($subscr_rub_arr = $subscr_rub->Fetch())
{
$aSubscrRub[] = $subscr_rub_arr['ID'];
}
}
return $aSubscrRub;
}
//subscription of current user from cookies
public static function GetUserSubscription()
{
global $USER;
$email_cookie = COption::GetOptionString('main', 'cookie_name', 'BITRIX_SM') . '_SUBSCR_EMAIL';
$subscr_EMAIL = ($_COOKIE[$email_cookie] <> '' ? $_COOKIE[$email_cookie] : $USER->GetParam('EMAIL'));
if ($subscr_EMAIL <> '')
{
$subscr = CSubscription::GetByEmail($subscr_EMAIL, intval($USER->GetID()));
if (($subscr_arr = $subscr->Fetch()))
{
return $subscr_arr;
}
}
return ['ID' => 0, 'EMAIL' => ''];
}
//get by ID
public static function GetByID($ID)
{
global $DB;
$ID = intval($ID);
$strSql = '
SELECT S.*,
' . $DB->DateToCharFunction('S.DATE_UPDATE', 'FULL') . ' AS DATE_UPDATE,
' . $DB->DateToCharFunction('S.DATE_INSERT', 'FULL') . ' AS DATE_INSERT,
' . $DB->DateToCharFunction('S.DATE_CONFIRM', 'FULL') . ' AS DATE_CONFIRM
FROM b_subscription S
WHERE S.ID = ' . $ID . '
';
return $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
// deletion
public static function Delete($ID)
{
global $DB;
$ID = intval($ID);
foreach (GetModuleEvents('subscribe', 'OnBeforeSubscriptionDelete', true) as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, [$ID]) === false)
{
return false;
}
}
$DB->StartTransaction();
$res = $DB->Query("DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID='" . $ID . "'", false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
if ($res)
{
$res = $DB->Query("DELETE FROM b_subscription WHERE ID='" . $ID . "' ", false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
if ($res)
{
foreach (GetModuleEvents('subscribe', 'OnAfterSubscriptionDelete', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, [$ID]);
}
$DB->Commit();
return $res;
}
$DB->Rollback();
return false;
}
//check fields before writing
public function CheckFields(&$arFields, $ID, $SITE_ID=SITE_ID)
{
global $DB, $APPLICATION;
$APPLICATION->ResetException();
$this->LAST_ERROR = '';
$aMsg = [];
if ($ID > 0)
{
$arFields['ID'] = $ID;
}
if ($ID > 0)
{
$db_events = GetModuleEvents('subscribe', 'OnStartSubscriptionUpdate', true);
}
else
{
$db_events = GetModuleEvents('subscribe', 'OnStartSubscriptionAdd', true);
}
foreach ($db_events as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, [&$arFields, $SITE_ID]) === false)
{
break;
}
}
if (is_set($arFields, 'EMAIL'))
{
if ($arFields['EMAIL'] == '' || !check_email($arFields['EMAIL']))
{
$aMsg[] = ['id' => 'EMAIL', 'text' => GetMessage('class_subscr_addr')];
}
else
{
$res = static::GetByEmail($arFields['EMAIL'], intval($arFields['USER_ID']));
$ar = $res->Fetch();
if ($ar && ($ar['ID'] <> intval($ID)))
{
$aMsg[] = ['id' => 'EMAIL', 'text' => GetMessage('class_subscr_addr2')];
}
}
}
if (is_set($arFields, 'USER_ID'))
{
if (intval($arFields['USER_ID']) > 0)
{
$res = $DB->Query("SELECT 'x' FROM b_user WHERE ID = " . intval($arFields['USER_ID']), false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
if (!$res->Fetch())
{
$aMsg[] = ['id' => 'USER_ID', 'text' => GetMessage('class_subscr_user')];
}
}
}
if ($ID > 0)
{
$db_events = GetModuleEvents('subscribe', 'OnBeforeSubscriptionUpdate', true);
}
else
{
$db_events = GetModuleEvents('subscribe', 'OnBeforeSubscriptionAdd', true);
}
foreach ($db_events as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, [&$arFields, $SITE_ID]) === false)
{
$err = $APPLICATION->GetException();
if ($err)
{
$aMsg[] = ['id' => '', 'text' => $err->GetString()];
$APPLICATION->ResetException();
}
else
{
$aMsg[] = ['id' => '', 'text' => 'Unknown error.'];
}
break;
}
}
if ($ID > 0)
{
unset($arFields['ID']);
}
if (!empty($aMsg))
{
$e = new CAdminException($aMsg);
$APPLICATION->ThrowException($e);
$this->LAST_ERROR = $e->GetString();
return false;
}
return true;
}
//link with categories
public function UpdateRubrics($ID, $aRubric, $SITE_ID=false)
{
global $DB;
$ID = intval($ID);
if ($SITE_ID !== false)
{
$strSql = "
SELECT sr.SUBSCRIPTION_ID,sr.LIST_RUBRIC_ID
FROM
b_subscription_rubric sr
INNER JOIN b_list_rubric lr ON lr.ID=sr.LIST_RUBRIC_ID
WHERE
sr.SUBSCRIPTION_ID='" . $ID . "'
AND lr.LID='" . $DB->ForSql($SITE_ID) . "'
";
$rs = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
while ($ar = $rs->Fetch())
{
$strSql = '
DELETE FROM b_subscription_rubric
WHERE SUBSCRIPTION_ID=' . intval($ar['SUBSCRIPTION_ID']) . '
AND LIST_RUBRIC_ID=' . intval($ar['LIST_RUBRIC_ID']) . '
';
$DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
$sID = '0';
if (is_array($aRubric))
{
foreach ($aRubric as $rub)
{
$sID .= ',' . intval($rub);
}
}
$strSql = "
INSERT INTO b_subscription_rubric (SUBSCRIPTION_ID, LIST_RUBRIC_ID)
SELECT '" . $ID . "', ID
FROM b_list_rubric
WHERE ID IN (" . $sID . ")
AND LID='" . $DB->ForSql($SITE_ID) . "'
";
$DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
else
{
$DB->Query("DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID='" . $ID . "'", false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
$sID = '0';
if (is_array($aRubric))
{
foreach ($aRubric as $rub)
{
$sID .= ',' . intval($rub);
}
}
$strSql = "
INSERT INTO b_subscription_rubric (SUBSCRIPTION_ID, LIST_RUBRIC_ID)
SELECT '" . $ID . "', ID
FROM b_list_rubric
WHERE ID IN (" . $sID . ')
';
$DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
}
//adding
public function Add($arFields, $SITE_ID=SITE_ID)
{
global $DB;
if (!$this->CheckFields($arFields, 0, $SITE_ID))
{
return false;
}
if (array_key_exists('USER_ID', $arFields) && (intval($arFields['USER_ID']) <= 0))
{
$arFields['USER_ID'] = false;
}
$arFields['CONFIRM_CODE'] = \Bitrix\Main\Security\Random::getString(8, true);
$arFields['~DATE_INSERT'] = $DB->CurrentTimeFunction();
$arFields['~DATE_CONFIRM'] = $DB->CurrentTimeFunction();
$ID = $DB->Add('b_subscription', $arFields);
if ($ID > 0)
{
if (is_set($arFields,'ALL_SITES') && $arFields['ALL_SITES'] == 'Y')
{
$this->UpdateRubrics($ID, $arFields['RUB_ID']);
}
else
{
$this->UpdateRubrics($ID, $arFields['RUB_ID'], $SITE_ID);
}
if ($arFields['SEND_CONFIRM'] <> 'N')
{
static::ConfirmEvent($ID, $SITE_ID);
}
}
return $ID;
}
//Updating record
public function Update($ID, $arFields, $SITE_ID=SITE_ID)
{
global $DB;
$ID = intval($ID);
$this->LAST_MESSAGE = '';
if (!$this->CheckFields($arFields, $ID, $SITE_ID))
{
return false;
}
if (array_key_exists('USER_ID', $arFields) && (intval($arFields['USER_ID']) <= 0))
{
$arFields['USER_ID'] = false;
}
//Check whether email changed. If changed, we must to generate new confirm code.
$strSql = 'SELECT EMAIL, CONFIRM_CODE, CONFIRMED FROM b_subscription WHERE ID = ' . $ID;
$db_check = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
if (!($db_check_arr = $db_check->Fetch()))
{
$this->LAST_ERROR = GetMessage('class_subscr_perm') . '<br>';
return false;
}
$CONFIRM_CODE = $arFields['CONFIRM_CODE'];
unset($arFields['CONFIRM_CODE']);
if (!is_set($arFields, 'EMAIL') || mb_strtoupper($db_check_arr['EMAIL']) === mb_strtoupper($arFields['EMAIL']))
{
//the same email - check confirm code
if ($CONFIRM_CODE <> '' && $db_check_arr['CONFIRMED'] <> 'Y')
{
if ($CONFIRM_CODE == $db_check_arr['CONFIRM_CODE'])
{
//let's confirm the subscription
$arFields['CONFIRMED'] = 'Y';
$this->LAST_MESSAGE = 'CONF';
}
else
{
$this->LAST_ERROR = GetMessage('class_subscr_conf') . '<br>';
return false;
}
}
}
else
{
//new email - new confirm code
$arFields['CONFIRM_CODE'] = \Bitrix\Main\Security\Random::getString(8, true);
if ($arFields['CONFIRMED'] <> 'Y')
{
$arFields['CONFIRMED'] = 'N';
}
}
$strUpdate = $DB->PrepareUpdate('b_subscription', $arFields);
if ($strUpdate <> '')
{
$strSql =
'UPDATE b_subscription SET ' . $strUpdate . ', ' . ' DATE_UPDATE=' . $DB->GetNowFunction() . ' ' . ($arFields['CONFIRM_CODE'] <> '' ? ',' . ' DATE_CONFIRM=' . $DB->GetNowFunction() . ' '
: '')
. 'WHERE ID=' . $ID;
if (!$DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__))
{
return false;
}
}
//subscription categories
if (is_set($arFields, 'RUB_ID'))
{
if (is_set($arFields,'ALL_SITES') && $arFields['ALL_SITES'] == 'Y')
{
$this->UpdateRubrics($ID, $arFields['RUB_ID']);
}
else
{
$this->UpdateRubrics($ID, $arFields['RUB_ID'], $SITE_ID);
}
}
//send confirmation code if needed
if ($arFields['SEND_CONFIRM'] <> 'N' && $arFields['CONFIRM_CODE'] <> '')
{
static::ConfirmEvent($ID, $SITE_ID);
$this->LAST_MESSAGE = 'SENT';
}
return true;
}
//message with subscription confirmation
public static function ConfirmEvent($ID, $SITE_ID=SITE_ID)
{
static $SITE_DIR_CACHE = [];
CTimeZone::Disable();
$subscr = CSubscription::GetByID($ID);
CTimeZone::Enable();
if ($subscr_arr = $subscr->Fetch())
{
if (!array_key_exists($SITE_ID, $SITE_DIR_CACHE))
{
$db_lang = CLang::GetByID($SITE_ID);
if ($ar_lang = $db_lang->Fetch())
{
$SITE_DIR_CACHE[$SITE_ID] = $ar_lang['DIR'];
}
else
{
$SITE_DIR_CACHE[$SITE_ID] = LANG_DIR;
}
}
$subscr_arr['USER_NAME'] = '';
$subscr_arr['USER_LAST_NAME'] = '';
if (intval($subscr_arr['USER_ID']) > 0)
{
$rsUser = CUser::GetByID($subscr_arr['USER_ID']);
if ($arUser = $rsUser->Fetch())
{
$subscr_arr['USER_NAME'] = $arUser['NAME'];
$subscr_arr['USER_LAST_NAME'] = $arUser['LAST_NAME'];
}
}
$arFields = [
'ID' => $subscr_arr['ID'],
'EMAIL' => $subscr_arr['EMAIL'],
'CONFIRM_CODE' => $subscr_arr['CONFIRM_CODE'],
'USER_NAME' => $subscr_arr['USER_NAME'] . ' ' . $subscr_arr['USER_LAST_NAME'],
'DATE_SUBSCR' => ($subscr_arr['DATE_UPDATE'] <> '' ? $subscr_arr['DATE_UPDATE'] : $subscr_arr['DATE_INSERT']),
'SUBSCR_SECTION' => str_replace(
['#SITE_DIR#', '#LANG_DIR#'],
[$SITE_DIR_CACHE[$SITE_ID], $SITE_DIR_CACHE[$SITE_ID]],
COption::GetOptionString('subscribe', 'subscribe_section')
),
];
CEvent::Send('SUBSCRIBE_CONFIRM', $SITE_ID, $arFields);
return true;
}
return false;
}
//checks and set user authorization
public static function Authorize($ID, $CONFIRM_CODE=false)
{
global $USER;
$subscr = CSubscription::GetByID($ID);
if (($subscr_arr = $subscr->Fetch()))
{
//unconditional auth
if ($CONFIRM_CODE === false)
{
$_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
return true;
}
//anonymous subscription
if ($subscr_arr['CONFIRM_CODE'] == $CONFIRM_CODE)
{
$_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
return true;
}
//user account subscription
if (intval($subscr_arr['USER_ID']) > 0)
{
if ($USER->IsAuthorized())
{
//user is already authorized
if ($USER->GetID() == $subscr_arr['USER_ID'])
{
$_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
return true;
}
}
}
}
$_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'NO';
return false;
}
//retuns user's subscription authorization
public static function IsAuthorized($ID)
{
return ($_SESSION['SESS_SUBSCR_AUTH'][$ID] == 'YES');
}
//*****************************
// Events
//*****************************
//user deletion event
public static function OnUserDelete($user_id)
{
//clear user subscriptions on user deletion
global $DB;
$user_id = intval($user_id);
$strSql = 'SELECT ID FROM b_subscription WHERE USER_ID = ' . $user_id;
$res = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
$arIn = [];
while ($res_arr = $res->Fetch())
{
$arIn[] = intval($res_arr['ID']);
}
if (count($arIn) > 0)
{
$sIn = implode(',',$arIn);
if (
$DB->Query('DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID IN (' . $sIn . ')', false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__) &&
$DB->Query('DELETE FROM b_subscription WHERE ID IN (' . $sIn . ')', false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__)
)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
//user logout event
public static function OnUserLogout($user_id)
{
//let's reset subscriptions authorization on user logout
global $DB;
$user_id = intval($user_id);
if ($user_id > 0)
{
$strSql = 'SELECT ID FROM b_subscription WHERE USER_ID=' . $user_id;
$res = $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
while ($res_arr = $res->Fetch())
{
$_SESSION['SESS_SUBSCR_AUTH'][$res_arr['ID']] = 'NO';
}
}
return true;
}
//*****************************
// Agents
//*****************************
//agent to delete unconfirmed subscription
public static function CleanUp()
{
$connection = \Bitrix\Main\Application::getConnection();
$helper = $connection->getSqlHelper();
$interval = intval(COption::GetOptionString('subscribe', 'subscribe_confirm_period'));
if ($interval > 0)
{
$sql = "
SELECT ID
FROM b_subscription
WHERE CONFIRMED <> 'Y'
AND DATE_CONFIRM < " . $helper->addDaysToDateTime(1) . "
";
$res = $connection->query($sql);
$sIn = '0';
while ($res_arr = $res->fetch())
{
$sIn .= ',' . $res_arr['ID'];
}
$connection->queryExecute('DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID IN (' . $sIn . ')');
$connection->queryExecute('DELETE FROM b_subscription WHERE ID IN (' . $sIn . ')');
}
return 'CSubscription::CleanUp();';
}
//get by e-mail
public static function GetByEmail($email, $user_id = false)
{
global $DB;
if ($user_id === false)
{
$sWhere = '';
}
elseif ($user_id > 0)
{
$sWhere = 'AND S.USER_ID = ' . intval($user_id);
}
else
{
$sWhere = 'AND S.USER_ID IS NULL';
}
$strSql = '
SELECT S.*,
' . $DB->DateToCharFunction('S.DATE_UPDATE', 'FULL') . ' AS DATE_UPDATE,
' . $DB->DateToCharFunction('S.DATE_INSERT', 'FULL') . ' AS DATE_INSERT,
' . $DB->DateToCharFunction('S.DATE_CONFIRM', 'FULL') . " AS DATE_CONFIRM
FROM
b_subscription S
WHERE
S.EMAIL='" . $DB->ForSQL($email) . "'
" . $sWhere . '
';
return $DB->Query($strSql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
}
}