1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
subscription.php
См. документацию.
1<?php
3
5{
6 public $LAST_ERROR = '';
7 public $LAST_MESSAGE = '';
8
9 public static function GetList($aSort=[], $arFilter=[], $arNavStartParams=false)
10 {
11 global $DB;
12 $arSqlSearch = [];
13 $from1 = '';
14 if (is_array($arFilter))
15 {
16 foreach ($arFilter as $key => $val)
17 {
18 if (!is_array($val))
19 {
20 if ( ((string)$val === '') || ($val === 'NOT_REF') )
21 {
22 continue;
23 }
24 }
25 switch (strtoupper($key))
26 {
27 case 'ID':
28 $arSqlSearch[] = GetFilterQuery('S.ID', $val, 'N');
29 break;
30 case 'EMAIL':
31 $arSqlSearch[] = GetFilterQuery('S.EMAIL', $val, 'Y', ['@', '.', '_']);
32 break;
33 case 'UPDATE_1':
34 $arSqlSearch[] = 'S.DATE_UPDATE>=' . $DB->CharToDateFunction($val);
35 break;
36 case 'UPDATE_2':
37 $arSqlSearch[] = 'S.DATE_UPDATE<=' . $DB->CharToDateFunction($val . ' 23:59:59');
38 break;
39 case 'INSERT_1':
40 $arSqlSearch[] = 'S.DATE_INSERT>=' . $DB->CharToDateFunction($val);
41 break;
42 case 'INSERT_2':
43 $arSqlSearch[] = 'S.DATE_INSERT<=' . $DB->CharToDateFunction($val . ' 23:59:59');
44 break;
45 case 'USER':
46 $arSqlSearch[] = GetFilterQuery('U.ID, U.LOGIN, U.NAME, U.LAST_NAME', $val);
47 break;
48 case 'USER_ID':
49 $arSqlSearch[] = GetFilterQuery('S.USER_ID', $val, 'N');
50 break;
51 case 'ANONYMOUS':
52 $arSqlSearch[] = ($val == 'Y') ? '(S.USER_ID = 0 or S.USER_ID is null)' : '(S.USER_ID > 0 and S.USER_ID is not null)';
53 break;
54 case 'CONFIRMED':
55 $arSqlSearch[] = ($val == 'Y') ? "S.CONFIRMED='Y'" : "S.CONFIRMED='N'";
56 break;
57 case 'ACTIVE':
58 $arSqlSearch[] = ($val == 'Y') ? "S.ACTIVE='Y'" : "S.ACTIVE='N'";
59 break;
60 case 'FORMAT':
61 $arSqlSearch[] = ($val == 'text') ? "S.FORMAT='text'" : "S.FORMAT='html'";
62 break;
63 case 'RUBRIC':
64 case 'RUBRIC_MULTI':
65 case 'DISTRIBUTION':
66 if (is_array($val))
67 {
68 $val = implode(' | ', $val);
69 }
70 if ($val !== '')
71 {
72 $from1 = ' INNER JOIN b_subscription_rubric SR ON (SR.SUBSCRIPTION_ID=S.ID) ';
73 $arSqlSearch[] = GetFilterQuery('SR.LIST_RUBRIC_ID', $val, 'N');
74 }
75 else
76 {
77 $arSqlSearch[] = ' 1=0 ';
78 }
79 break;
80 }
81 }
82 }
83 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
84
85 $arOrder = [];
86 foreach ($aSort as $by => $ord)
87 {
88 $by = mb_strtoupper($by);
89 $ord = (mb_strtoupper($ord) !== 'ASC' ? 'DESC' : 'ASC');
90 switch ($by)
91 {
92 case 'ID':
93 $arOrder[$by] = 'S.ID ' . $ord;
94 break;
95 case 'DATE_INSERT':
96 $arOrder[$by] = 'S.DATE_INSERT ' . $ord;
97 break;
98 case 'DATE_UPDATE':
99 $arOrder[$by] = 'S.DATE_UPDATE ' . $ord;
100 break;
101 case 'DATE_CONFIRM':
102 $arOrder[$by] = 'S.DATE_CONFIRM ' . $ord;
103 break;
104 case 'ACT':
105 $arOrder[$by] = 'S.ACTIVE ' . $ord;
106 break;
107 case 'CONF':
108 $arOrder[$by] = 'S.CONFIRMED ' . $ord;
109 break;
110 case 'EMAIL':
111 $arOrder[$by] = 'S.EMAIL ' . $ord;
112 break;
113 case 'FMT':
114 $arOrder[$by] = 'S.FORMAT ' . $ord;
115 break;
116 case 'USER':
117 $arOrder[$by] = 'S.USER_ID ' . $ord;
118 break;
119 case 'CONFIRM_CODE':
120 $arOrder[$by] = 'S.CONFIRM_CODE ' . $ord;
121 break;
122 }
123 }
124 if (!$arOrder)
125 {
126 $arOrder['ID'] = 'S.ID DESC';
127 }
128
129 if (is_array($arNavStartParams))
130 {
131 $strSql = '
132 SELECT count(' . ($from1 ? 'DISTINCT S.ID' : "'x'") . ') as C
133 FROM
134 b_subscription S
135 LEFT JOIN b_user U ON (S.USER_ID=U.ID)
136 ' . $from1 . '
137 WHERE
138 ' . $strSqlSearch;
139
140 $res_cnt = $DB->Query($strSql);
141 $res_cnt = $res_cnt->Fetch();
142 $cnt = $res_cnt['C'];
143
144 $strSql = '
145 SELECT
146 S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
147 ' . $DB->DateToCharFunction('S.DATE_UPDATE') . ' DATE_UPDATE,
148 ' . $DB->DateToCharFunction('S.DATE_INSERT') . ' DATE_INSERT,
149 ' . $DB->DateToCharFunction('S.DATE_CONFIRM') . ' DATE_CONFIRM,
150 U.LOGIN USER_LOGIN,
151 U.NAME USER_NAME,
152 U.LAST_NAME USER_LAST_NAME
153 FROM
154 b_subscription S
155 LEFT JOIN b_user U ON (S.USER_ID=U.ID)
156 ' . $from1 . '
157 WHERE
158 ' . $strSqlSearch . '
159 ' . ($from1 ?
160 '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' :
161 ''
162 ) . '
163 ORDER BY ' . implode(', ', $arOrder);
164
165 $res = new CDBResult();
166 $res->NavQuery($strSql, $cnt, $arNavStartParams);
167 $res->is_filtered = (IsFiltered($strSqlSearch));
168
169 return $res;
170 }
171 else
172 {
173 $strSql = '
174 SELECT
175 S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
176 ' . $DB->DateToCharFunction('S.DATE_UPDATE') . ' DATE_UPDATE,
177 ' . $DB->DateToCharFunction('S.DATE_INSERT') . ' DATE_INSERT,
178 ' . $DB->DateToCharFunction('S.DATE_CONFIRM') . ' DATE_CONFIRM,
179 U.LOGIN USER_LOGIN,
180 U.NAME USER_NAME,
181 U.LAST_NAME USER_LAST_NAME
182 FROM
183 b_subscription S
184 LEFT JOIN b_user U ON (S.USER_ID=U.ID)
185 ' . $from1 . '
186 WHERE
187 ' . $strSqlSearch . '
188 ' . ($from1 ?
189 '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' :
190 ''
191 ) . '
192 ORDER BY ' . implode(', ', $arOrder);
193
194 $res = $DB->Query($strSql);
195 $res->is_filtered = (IsFiltered($strSqlSearch));
196
197 return $res;
198 }
199 }
200
201 //list of subscribed categories
202 public static function GetRubricList($ID)
203 {
204 global $DB;
205 $ID = intval($ID);
206 $strSql = '
207 SELECT R.ID, R.NAME, R.SORT, R.LID, R.ACTIVE, R.VISIBLE
208 FROM b_list_rubric R, b_subscription_rubric SR
209 WHERE R.ID = SR.LIST_RUBRIC_ID AND SR.SUBSCRIPTION_ID = ' . $ID . '
210 ORDER BY R.LID, R.SORT, R.NAME
211 ';
212 return $DB->Query($strSql);
213 }
214
215 //array of subscribed categories
216 public static function GetRubricArray($ID)
217 {
218 $ID = intval($ID);
219 $aSubscrRub = [];
220 if ($ID > 0)
221 {
222 $subscr_rub = CSubscription::GetRubricList($ID);
223 while ($subscr_rub_arr = $subscr_rub->Fetch())
224 {
225 $aSubscrRub[] = $subscr_rub_arr['ID'];
226 }
227 }
228 return $aSubscrRub;
229 }
230
231 //subscription of current user from cookies
232 public static function GetUserSubscription()
233 {
234 global $USER;
235 $email_cookie = COption::GetOptionString('main', 'cookie_name', 'BITRIX_SM') . '_SUBSCR_EMAIL';
236
237 $subscr_EMAIL = ($_COOKIE[$email_cookie] <> '' ? $_COOKIE[$email_cookie] : $USER->GetParam('EMAIL'));
238 if ($subscr_EMAIL <> '')
239 {
240 $subscr = CSubscription::GetByEmail($subscr_EMAIL, intval($USER->GetID()));
241 if (($subscr_arr = $subscr->Fetch()))
242 {
243 return $subscr_arr;
244 }
245 }
246 return ['ID' => 0, 'EMAIL' => ''];
247 }
248
249 //get by ID
250 public static function GetByID($ID)
251 {
252 global $DB;
253 $ID = intval($ID);
254 $strSql = '
255 SELECT S.*,
256 ' . $DB->DateToCharFunction('S.DATE_UPDATE', 'FULL') . ' AS DATE_UPDATE,
257 ' . $DB->DateToCharFunction('S.DATE_INSERT', 'FULL') . ' AS DATE_INSERT,
258 ' . $DB->DateToCharFunction('S.DATE_CONFIRM', 'FULL') . ' AS DATE_CONFIRM
259 FROM b_subscription S
260 WHERE S.ID = ' . $ID . '
261 ';
262
263 return $DB->Query($strSql);
264 }
265
266 // deletion
267 public static function Delete($ID)
268 {
269 global $DB;
270 $ID = intval($ID);
271
272 foreach (GetModuleEvents('subscribe', 'OnBeforeSubscriptionDelete', true) as $arEvent)
273 {
274 if (ExecuteModuleEventEx($arEvent, [$ID]) === false)
275 {
276 return false;
277 }
278 }
279
280 $DB->StartTransaction();
281
282 $res = $DB->Query("DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID='" . $ID . "'");
283 if ($res)
284 {
285 $res = $DB->Query("DELETE FROM b_subscription WHERE ID='" . $ID . "' ");
286 }
287
288 if ($res)
289 {
290 foreach (GetModuleEvents('subscribe', 'OnAfterSubscriptionDelete', true) as $arEvent)
291 {
292 ExecuteModuleEventEx($arEvent, [$ID]);
293 }
294
295 $DB->Commit();
296 return $res;
297 }
298
299 $DB->Rollback();
300 return false;
301 }
302
303 //check fields before writing
305 {
306 global $DB, $APPLICATION;
307
308 $APPLICATION->ResetException();
309 $this->LAST_ERROR = '';
310 $aMsg = [];
311 if ($ID > 0)
312 {
313 $arFields['ID'] = $ID;
314 }
315
316 if ($ID > 0)
317 {
318 $db_events = GetModuleEvents('subscribe', 'OnStartSubscriptionUpdate', true);
319 }
320 else
321 {
322 $db_events = GetModuleEvents('subscribe', 'OnStartSubscriptionAdd', true);
323 }
324
325 foreach ($db_events as $arEvent)
326 {
327 if (ExecuteModuleEventEx($arEvent, [&$arFields, $SITE_ID]) === false)
328 {
329 break;
330 }
331 }
332
333 if (is_set($arFields, 'EMAIL'))
334 {
335 if ($arFields['EMAIL'] == '' || !check_email($arFields['EMAIL']))
336 {
337 $aMsg[] = ['id' => 'EMAIL', 'text' => GetMessage('class_subscr_addr')];
338 }
339 else
340 {
341 $res = static::GetByEmail($arFields['EMAIL'], intval($arFields['USER_ID']));
342 $ar = $res->Fetch();
343 if ($ar && ($ar['ID'] <> intval($ID)))
344 {
345 $aMsg[] = ['id' => 'EMAIL', 'text' => GetMessage('class_subscr_addr2')];
346 }
347 }
348 }
349
350 if (is_set($arFields, 'USER_ID'))
351 {
352 if (intval($arFields['USER_ID']) > 0)
353 {
354 $res = $DB->Query("SELECT 'x' FROM b_user WHERE ID = " . intval($arFields['USER_ID']));
355 if (!$res->Fetch())
356 {
357 $aMsg[] = ['id' => 'USER_ID', 'text' => GetMessage('class_subscr_user')];
358 }
359 }
360 }
361
362 if ($ID > 0)
363 {
364 $db_events = GetModuleEvents('subscribe', 'OnBeforeSubscriptionUpdate', true);
365 }
366 else
367 {
368 $db_events = GetModuleEvents('subscribe', 'OnBeforeSubscriptionAdd', true);
369 }
370
371 foreach ($db_events as $arEvent)
372 {
373 if (ExecuteModuleEventEx($arEvent, [&$arFields, $SITE_ID]) === false)
374 {
375 $err = $APPLICATION->GetException();
376 if ($err)
377 {
378 $aMsg[] = ['id' => '', 'text' => $err->GetString()];
379 $APPLICATION->ResetException();
380 }
381 else
382 {
383 $aMsg[] = ['id' => '', 'text' => 'Unknown error.'];
384 }
385 break;
386 }
387 }
388
389 if ($ID > 0)
390 {
391 unset($arFields['ID']);
392 }
393
394 if (!empty($aMsg))
395 {
396 $e = new CAdminException($aMsg);
397 $APPLICATION->ThrowException($e);
398 $this->LAST_ERROR = $e->GetString();
399 return false;
400 }
401
402 return true;
403 }
404
405 //link with categories
406 public function UpdateRubrics($ID, $aRubric, $SITE_ID=false)
407 {
408 global $DB;
409 $ID = intval($ID);
410
411 if ($SITE_ID !== false)
412 {
413 $strSql = "
414 SELECT sr.SUBSCRIPTION_ID,sr.LIST_RUBRIC_ID
415 FROM
416 b_subscription_rubric sr
417 INNER JOIN b_list_rubric lr ON lr.ID=sr.LIST_RUBRIC_ID
418 WHERE
419 sr.SUBSCRIPTION_ID='" . $ID . "'
420 AND lr.LID='" . $DB->ForSql($SITE_ID) . "'
421 ";
422 $rs = $DB->Query($strSql);
423 while ($ar = $rs->Fetch())
424 {
425 $strSql = '
426 DELETE FROM b_subscription_rubric
427 WHERE SUBSCRIPTION_ID=' . intval($ar['SUBSCRIPTION_ID']) . '
428 AND LIST_RUBRIC_ID=' . intval($ar['LIST_RUBRIC_ID']) . '
429 ';
430 $DB->Query($strSql);
431 }
432
433 $sID = '0';
434 if (is_array($aRubric))
435 {
436 foreach ($aRubric as $rub)
437 {
438 $sID .= ',' . intval($rub);
439 }
440 }
441
442 $strSql = "
443 INSERT INTO b_subscription_rubric (SUBSCRIPTION_ID, LIST_RUBRIC_ID)
444 SELECT '" . $ID . "', ID
445 FROM b_list_rubric
446 WHERE ID IN (" . $sID . ")
447 AND LID='" . $DB->ForSql($SITE_ID) . "'
448 ";
449 $DB->Query($strSql);
450 }
451 else
452 {
453 $DB->Query("DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID='" . $ID . "'");
454
455 $sID = '0';
456 if (is_array($aRubric))
457 {
458 foreach ($aRubric as $rub)
459 {
460 $sID .= ',' . intval($rub);
461 }
462 }
463
464 $strSql = "
465 INSERT INTO b_subscription_rubric (SUBSCRIPTION_ID, LIST_RUBRIC_ID)
466 SELECT '" . $ID . "', ID
467 FROM b_list_rubric
468 WHERE ID IN (" . $sID . ')
469 ';
470 $DB->Query($strSql);
471 }
472 }
473
474 //adding
475 public function Add($arFields, $SITE_ID=SITE_ID)
476 {
477 global $DB;
478
479 if (!$this->CheckFields($arFields, 0, $SITE_ID))
480 {
481 return false;
482 }
483
484 if (array_key_exists('USER_ID', $arFields) && (intval($arFields['USER_ID']) <= 0))
485 {
486 $arFields['USER_ID'] = false;
487 }
488
489 $arFields['CONFIRM_CODE'] = \Bitrix\Main\Security\Random::getString(8, true);
490 $arFields['~DATE_INSERT'] = $DB->CurrentTimeFunction();
491 $arFields['~DATE_CONFIRM'] = $DB->CurrentTimeFunction();
492
493 $ID = $DB->Add('b_subscription', $arFields);
494
495 if ($ID > 0)
496 {
497 if (is_set($arFields,'ALL_SITES') && $arFields['ALL_SITES'] == 'Y')
498 {
499 $this->UpdateRubrics($ID, $arFields['RUB_ID']);
500 }
501 else
502 {
503 $this->UpdateRubrics($ID, $arFields['RUB_ID'], $SITE_ID);
504 }
505
506 if ($arFields['SEND_CONFIRM'] <> 'N')
507 {
508 static::ConfirmEvent($ID, $SITE_ID);
509 }
510 }
511
512 return $ID;
513 }
514
515 //Updating record
517 {
518 global $DB;
519 $ID = intval($ID);
520 $this->LAST_MESSAGE = '';
521
522 if (!$this->CheckFields($arFields, $ID, $SITE_ID))
523 {
524 return false;
525 }
526
527 if (array_key_exists('USER_ID', $arFields) && (intval($arFields['USER_ID']) <= 0))
528 {
529 $arFields['USER_ID'] = false;
530 }
531
532 //Check whether email changed. If changed, we must to generate new confirm code.
533 $strSql = 'SELECT EMAIL, CONFIRM_CODE, CONFIRMED FROM b_subscription WHERE ID = ' . $ID;
534 $db_check = $DB->Query($strSql);
535
536 if (!($db_check_arr = $db_check->Fetch()))
537 {
538 $this->LAST_ERROR = GetMessage('class_subscr_perm') . '<br>';
539 return false;
540 }
541
542 $CONFIRM_CODE = $arFields['CONFIRM_CODE'];
543 unset($arFields['CONFIRM_CODE']);
544 if (!is_set($arFields, 'EMAIL') || mb_strtoupper($db_check_arr['EMAIL']) === mb_strtoupper($arFields['EMAIL']))
545 {
546 //the same email - check confirm code
547 if ($CONFIRM_CODE <> '' && $db_check_arr['CONFIRMED'] <> 'Y')
548 {
549 if ($CONFIRM_CODE == $db_check_arr['CONFIRM_CODE'])
550 {
551 //let's confirm the subscription
552 $arFields['CONFIRMED'] = 'Y';
553 $this->LAST_MESSAGE = 'CONF';
554 }
555 else
556 {
557 $this->LAST_ERROR = GetMessage('class_subscr_conf') . '<br>';
558 return false;
559 }
560 }
561 }
562 else
563 {
564 //new email - new confirm code
565 $arFields['CONFIRM_CODE'] = \Bitrix\Main\Security\Random::getString(8, true);
566 if ($arFields['CONFIRMED'] <> 'Y')
567 {
568 $arFields['CONFIRMED'] = 'N';
569 }
570 }
571
572 $strUpdate = $DB->PrepareUpdate('b_subscription', $arFields);
573 if ($strUpdate <> '')
574 {
575 $strSql =
576 'UPDATE b_subscription SET ' . $strUpdate . ', ' . ' DATE_UPDATE=' . $DB->GetNowFunction() . ' ' . ($arFields['CONFIRM_CODE'] <> '' ? ',' . ' DATE_CONFIRM=' . $DB->GetNowFunction() . ' '
577 : '')
578 . 'WHERE ID=' . $ID;
579 if (!$DB->Query($strSql))
580 {
581 return false;
582 }
583 }
584
585 //subscription categories
586 if (is_set($arFields, 'RUB_ID'))
587 {
588 if (is_set($arFields,'ALL_SITES') && $arFields['ALL_SITES'] == 'Y')
589 {
590 $this->UpdateRubrics($ID, $arFields['RUB_ID']);
591 }
592 else
593 {
594 $this->UpdateRubrics($ID, $arFields['RUB_ID'], $SITE_ID);
595 }
596 }
597 //send confirmation code if needed
598 if ($arFields['SEND_CONFIRM'] <> 'N' && $arFields['CONFIRM_CODE'] <> '')
599 {
600 static::ConfirmEvent($ID, $SITE_ID);
601 $this->LAST_MESSAGE = 'SENT';
602 }
603
604 return true;
605 }
606
607 //message with subscription confirmation
608 public static function ConfirmEvent($ID, $SITE_ID=SITE_ID)
609 {
610 static $SITE_DIR_CACHE = [];
611 CTimeZone::Disable();
612 $subscr = CSubscription::GetByID($ID);
613 CTimeZone::Enable();
614 if ($subscr_arr = $subscr->Fetch())
615 {
616 if (!array_key_exists($SITE_ID, $SITE_DIR_CACHE))
617 {
618 $db_lang = CLang::GetByID($SITE_ID);
619 if ($ar_lang = $db_lang->Fetch())
620 {
621 $SITE_DIR_CACHE[$SITE_ID] = $ar_lang['DIR'];
622 }
623 else
624 {
625 $SITE_DIR_CACHE[$SITE_ID] = LANG_DIR;
626 }
627 }
628
629 $subscr_arr['USER_NAME'] = '';
630 $subscr_arr['USER_LAST_NAME'] = '';
631 if (intval($subscr_arr['USER_ID']) > 0)
632 {
633 $rsUser = CUser::GetByID($subscr_arr['USER_ID']);
634 if ($arUser = $rsUser->Fetch())
635 {
636 $subscr_arr['USER_NAME'] = $arUser['NAME'];
637 $subscr_arr['USER_LAST_NAME'] = $arUser['LAST_NAME'];
638 }
639 }
640
641 $arFields = [
642 'ID' => $subscr_arr['ID'],
643 'EMAIL' => $subscr_arr['EMAIL'],
644 'CONFIRM_CODE' => $subscr_arr['CONFIRM_CODE'],
645 'USER_NAME' => $subscr_arr['USER_NAME'] . ' ' . $subscr_arr['USER_LAST_NAME'],
646 'DATE_SUBSCR' => ($subscr_arr['DATE_UPDATE'] <> '' ? $subscr_arr['DATE_UPDATE'] : $subscr_arr['DATE_INSERT']),
647 'SUBSCR_SECTION' => str_replace(
648 ['#SITE_DIR#', '#LANG_DIR#'],
649 [$SITE_DIR_CACHE[$SITE_ID], $SITE_DIR_CACHE[$SITE_ID]],
650 COption::GetOptionString('subscribe', 'subscribe_section')
651 ),
652 ];
653 CEvent::Send('SUBSCRIBE_CONFIRM', $SITE_ID, $arFields);
654 return true;
655 }
656 return false;
657 }
658
659 //checks and set user authorization
660 public static function Authorize($ID, $CONFIRM_CODE=false)
661 {
662 global $USER;
663
664 $subscr = CSubscription::GetByID($ID);
665 if (($subscr_arr = $subscr->Fetch()))
666 {
667 //unconditional auth
668 if ($CONFIRM_CODE === false)
669 {
670 $_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
671 return true;
672 }
673 //anonymous subscription
674 if ($subscr_arr['CONFIRM_CODE'] == $CONFIRM_CODE)
675 {
676 $_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
677 return true;
678 }
679 //user account subscription
680 if (intval($subscr_arr['USER_ID']) > 0)
681 {
682 if ($USER->IsAuthorized())
683 {
684 //user is already authorized
685 if ($USER->GetID() == $subscr_arr['USER_ID'])
686 {
687 $_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'YES';
688 return true;
689 }
690 }
691 }
692 }
693 $_SESSION['SESS_SUBSCR_AUTH'][$ID] = 'NO';
694 return false;
695 }
696
697 //retuns user's subscription authorization
698 public static function IsAuthorized($ID)
699 {
700 return ($_SESSION['SESS_SUBSCR_AUTH'][$ID] == 'YES');
701 }
702
703 //*****************************
704 // Events
705 //*****************************
706
707 //user deletion event
708 public static function OnUserDelete($user_id)
709 {
710 //clear user subscriptions on user deletion
711 global $DB;
712 $user_id = intval($user_id);
713
714 $strSql = 'SELECT ID FROM b_subscription WHERE USER_ID = ' . $user_id;
715 $res = $DB->Query($strSql);
716 $arIn = [];
717 while ($res_arr = $res->Fetch())
718 {
719 $arIn[] = intval($res_arr['ID']);
720 }
721
722 if (count($arIn) > 0)
723 {
724 $sIn = implode(',',$arIn);
725 if (
726 $DB->Query('DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID IN (' . $sIn . ')') &&
727 $DB->Query('DELETE FROM b_subscription WHERE ID IN (' . $sIn . ')')
728 )
729 {
730 return true;
731 }
732 else
733 {
734 return false;
735 }
736 }
737 else
738 {
739 return true;
740 }
741 }
742
743 //user logout event
744 public static function OnUserLogout($user_id)
745 {
746 //let's reset subscriptions authorization on user logout
747 global $DB;
748 $user_id = intval($user_id);
749 if ($user_id > 0)
750 {
751 $strSql = 'SELECT ID FROM b_subscription WHERE USER_ID=' . $user_id;
752 $res = $DB->Query($strSql);
753 while ($res_arr = $res->Fetch())
754 {
755 $_SESSION['SESS_SUBSCR_AUTH'][$res_arr['ID']] = 'NO';
756 }
757 }
758 return true;
759 }
760
761 //*****************************
762 // Agents
763 //*****************************
764
765 //agent to delete unconfirmed subscription
766 public static function CleanUp()
767 {
769 $helper = $connection->getSqlHelper();
770
771 $interval = intval(COption::GetOptionString('subscribe', 'subscribe_confirm_period'));
772 if ($interval > 0)
773 {
774 $sql = "
775 SELECT ID
776 FROM b_subscription
777 WHERE CONFIRMED <> 'Y'
778 AND DATE_CONFIRM < " . $helper->addDaysToDateTime(1) . "
779 ";
780 $res = $connection->query($sql);
781 $sIn = '0';
782 while ($res_arr = $res->fetch())
783 {
784 $sIn .= ',' . $res_arr['ID'];
785 }
786
787 $connection->queryExecute('DELETE FROM b_subscription_rubric WHERE SUBSCRIPTION_ID IN (' . $sIn . ')');
788 $connection->queryExecute('DELETE FROM b_subscription WHERE ID IN (' . $sIn . ')');
789 }
790
791 return 'CSubscription::CleanUp();';
792 }
793
794 //get by e-mail
795 public static function GetByEmail($email, $user_id = false)
796 {
797 global $DB;
798
799 if ($user_id === false)
800 {
801 $sWhere = '';
802 }
803 elseif ($user_id > 0)
804 {
805 $sWhere = 'AND S.USER_ID = ' . intval($user_id);
806 }
807 else
808 {
809 $sWhere = 'AND S.USER_ID IS NULL';
810 }
811
812 $strSql = '
813 SELECT S.*,
814 ' . $DB->DateToCharFunction('S.DATE_UPDATE', 'FULL') . ' AS DATE_UPDATE,
815 ' . $DB->DateToCharFunction('S.DATE_INSERT', 'FULL') . ' AS DATE_INSERT,
816 ' . $DB->DateToCharFunction('S.DATE_CONFIRM', 'FULL') . " AS DATE_CONFIRM
817 FROM
818 b_subscription S
819 WHERE
820 S.EMAIL='" . $DB->ForSQL($email) . "'
821 " . $sWhere . '
822 ';
823
824 return $DB->Query($strSql);
825 }
826}
$connection
Определения actionsdefinitions.php:38
global $APPLICATION
Определения include.php:80
static getConnection($name="")
Определения application.php:638
static getString($length, $caseSensitive=false)
Определения random.php:76
Определения subscription.php:5
CheckFields(&$arFields, $ID, $SITE_ID=SITE_ID)
Определения subscription.php:304
static Delete($ID)
Определения subscription.php:267
static ConfirmEvent($ID, $SITE_ID=SITE_ID)
Определения subscription.php:608
static GetByID($ID)
Определения subscription.php:250
$LAST_MESSAGE
Определения subscription.php:7
static GetRubricArray($ID)
Определения subscription.php:216
static OnUserDelete($user_id)
Определения subscription.php:708
static GetList($aSort=[], $arFilter=[], $arNavStartParams=false)
Определения subscription.php:9
static IsAuthorized($ID)
Определения subscription.php:698
static GetRubricList($ID)
Определения subscription.php:202
static CleanUp()
Определения subscription.php:766
$LAST_ERROR
Определения subscription.php:6
Update($ID, $arFields, $SITE_ID=SITE_ID)
Определения subscription.php:516
static GetByEmail($email, $user_id=false)
Определения subscription.php:795
UpdateRubrics($ID, $aRubric, $SITE_ID=false)
Определения subscription.php:406
Add($arFields, $SITE_ID=SITE_ID)
Определения subscription.php:475
static Authorize($ID, $CONFIRM_CODE=false)
Определения subscription.php:660
static GetUserSubscription()
Определения subscription.php:232
static OnUserLogout($user_id)
Определения subscription.php:744
$arFields
Определения dblapprove.php:5
$res
Определения filter_act.php:7
GetFilterSqlSearch($arSqlSearch=array(), $FilterLogic="FILTER_logic")
Определения filter_tools.php:397
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
IsFiltered($strSqlSearch)
Определения filter_tools.php:337
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
const LANG_DIR(!defined('SITE_SERVER_NAME'))
Определения include.php:77
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
check_email($email, $strict=false, $domainCheck=false)
Определения tools.php:4571
$email
Определения payment.php:49
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$val
Определения options.php:1793
const SITE_ID
Определения sonet_set_content_view.php:12
$rs
Определения action.php:82
$arFilter
Определения user_search.php:106
$SITE_ID
Определения yandex_run.php:607