1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
authmanager.php
См. документацию.
1<?php
9
10IncludeModuleLangFile(__FILE__);
11
12require_once(__DIR__."/descriptions.php");
13
14//manager to operate with services
16{
18 protected static $arAuthServices = false;
19
20 protected $userId = null;
21
22 public function __construct($userId = null)
23 {
24 global $USER;
25
26 if(!is_array(self::$arAuthServices))
27 {
28 self::$arAuthServices = array();
29
30 foreach(GetModuleEvents("socialservices", "OnAuthServicesBuildList", true) as $arEvent)
31 {
32 $res = ExecuteModuleEventEx($arEvent);
33 if(is_array($res))
34 {
35 if(!is_array($res[0]))
36 {
37 $res = array($res);
38 }
39 foreach($res as $serv)
40 {
41 self::$arAuthServices[$serv["ID"]] = $serv;
42 }
43 }
44 }
45 //services depend on current site
47 self::$arAuthServices = self::AppyUserSettings($suffix);
48 }
49
50 $this->userId = $userId;
51 if($this->userId === null && is_object($USER))
52 {
53 $this->userId = $USER->GetID();
54 }
55 }
56
57 protected static function AppyUserSettings($suffix)
58 {
59 $arAuthServices = self::$arAuthServices;
60
61 //user settings: sorting, active
62 $arServices = unserialize(COption::GetOptionString("socialservices", "auth_services".$suffix, ""), ["allowed_classes" => false]);
63 if(is_array($arServices))
64 {
65 $i = 0;
66 foreach($arServices as $serv=>$active)
67 {
68 if(isset($arAuthServices[$serv]))
69 {
70 $arAuthServices[$serv]["__sort"] = $i++;
71 $arAuthServices[$serv]["__active"] = ($active == "Y");
72 }
73 }
75 }
76 return $arAuthServices;
77 }
78
79 public function GetAuthServices($suffix)
80 {
81 //$suffix indicates site specific or common options
82 return self::AppyUserSettings($suffix);
83 }
84
85 public static function listServicesBlockedByZone(string $zone): array
86 {
87 if (!$zone)
88 {
89 return [];
90 }
91
92 if (in_array($zone, ['ru', 'kz', 'by'], true))
93 {
94 return [];
95 }
96
97 return [
99 'MailRuOpenID',
100 'Livejournal',
101 'Liveinternet',
106 ];
107 }
108
109 public function isActiveAuthService(string $code): bool
110 {
111 if (!isset(self::$arAuthServices[$code]))
112 {
113 return false;
114 }
115
116 $service = self::$arAuthServices[$code];
117 if (
118 isset($service["__active"])
119 && $service["__active"] === true
120 && empty($service["DISABLED"])
121 )
122 {
123 $serviceObject = new $service["CLASS"];
124 if (is_callable([$serviceObject, "CheckSettings"]))
125 {
126 if (!call_user_func_array([$serviceObject, "CheckSettings"], []))
127 {
128 return false;
129 }
130 }
131
132 return true;
133 }
134
135 return false;
136 }
137
139 {
140 $aServ = array();
141 // self::SetUniqueKey();
142
143 foreach(self::$arAuthServices as $key=>$service)
144 {
145 $isDisabled = $service["DISABLED"] ?? null;
146 if(isset($service["__active"]) && $service["__active"] === true && $isDisabled !== true)
147 {
148 $cl = new $service["CLASS"];
149 if(is_callable(array($cl, "CheckSettings")))
150 if(!call_user_func_array(array($cl, "CheckSettings"), array()))
151 continue;
152
153 if(is_callable(array($cl, "GetFormHtml")))
154 $service["FORM_HTML"] = call_user_func_array(array($cl, "GetFormHtml"), array($arParams));
155
156 if(is_callable(array($cl, "GetOnClickJs")))
157 $service["ONCLICK"] = call_user_func_array(array($cl, "GetOnClickJs"), array($arParams));
158
159 $aServ[$key] = $service;
160 }
161 }
162 return $aServ;
163 }
164
165 public function GetProfileUrl($service, $uid, $arService = false)
166 {
167 if(isset(self::$arAuthServices[$service]))
168 {
169 if(!is_array($arService))
170 {
171 $dbSocservUser = UserTable::getList([
172 'filter' => [
173 '=USER_ID' => $this->userId,
174 '=EXTERNAL_AUTH_ID' => $service,
175 ],
176 'select' => ['ID']
177 ]);
178 $arService = $dbSocservUser->fetch();
179 }
180
181 if(
182 is_array($arService)
183 && self::$arAuthServices[$service]["__active"] === true
184 && self::$arAuthServices[$service]["DISABLED"] !== true
185 )
186 {
188 $cl = new self::$arAuthServices[$service]["CLASS"];
189 if(is_callable(array($cl, "getProfileUrl")))
190 {
191 return $cl->getProfileUrl($uid);
192 }
193 }
194 }
195
196 return false;
197 }
198
199 public function GetFriendsList($service, $limit, &$next)
200 {
201 if(isset(self::$arAuthServices[$service]))
202 {
203 $dbSocservUser = UserTable::getList([
204 'filter' => [
205 '=USER_ID' => $this->userId,
206 '=EXTERNAL_AUTH_ID' => $service,
207 ],
208 'select' => ['ID']
209 ]);
210 $arService = $dbSocservUser->fetch();
211 if(
212 is_array($arService)
213 && self::$arAuthServices[$service]["__active"] === true
214 && self::$arAuthServices[$service]["DISABLED"] !== true
215 )
216 {
218 $cl = new self::$arAuthServices[$service]["CLASS"];
219
220 if(is_callable(array($cl, "setUser")))
221 {
222 $cl->setUser($this->userId);
223 }
224
225 if(is_callable(array($cl, "getFriendsList")))
226 {
227 $result = $cl->getFriendsList($limit, $next);
228
229 if($next === "__finish__")
230 {
231 $next = null;
232 }
233
234 return $result;
235 }
236 }
237 }
238
239 return false;
240 }
241
242 public function GetSettings()
243 {
244 $arOptions = array();
245 foreach(self::$arAuthServices as $service)
246 {
247 $serviceInstance = new $service["CLASS"]();
248 if(is_callable(array($serviceInstance, "GetSettings")))
249 {
251 $options = call_user_func_array(array($serviceInstance, "GetSettings"), array());
252 if(is_array($options))
253 foreach($options as $opt)
254 $arOptions[] = $opt;
255 }
256 }
257
258 return $arOptions;
259 }
260
261 public function GetSettingByServiceId(string $serviceId): ?array
262 {
263 $settings = [];
264 if (!isset(self::$arAuthServices[$serviceId]))
265 {
266 return null;
267 }
268
269 $service = self::$arAuthServices[$serviceId];
270 $serviceInstance = new $service["CLASS"]();
271 if (is_callable([$serviceInstance, "GetSettings"]))
272 {
273 $options = call_user_func_array([$serviceInstance, "GetSettings"], []);
274 if (is_array($options))
275 {
276 foreach ($options as $opt)
277 {
278 $settings[] = $opt;
279 }
280 }
281 }
282
283 return $settings;
284 }
285
286 public function Authorize($service_id, $arParams = array())
287 {
288 if($service_id === 'Bitrix24OAuth')
289 {
291 }
292
293 if(isset(self::$arAuthServices[$service_id]))
294 {
295 $service = self::$arAuthServices[$service_id];
296
297 $isDisabled = $service["DISABLED"] ?? null;
298 if(
299 (
300 $service["__active"] === true
301 && $isDisabled !== true
302 )
303 || (
304 $service_id == CSocServBitrix24Net::ID
305 && defined('ADMIN_SECTION')
306 && ADMIN_SECTION == true
307 )
308 )
309 {
310 $cl = new $service["CLASS"];
311 if(is_callable(array($cl, "Authorize")))
312 {
313 return call_user_func_array(array($cl, "Authorize"), array
314 ($arParams));
315 }
316 }
317 }
318
319 return false;
320 }
321
322 public function GetError($service_id, $error_code)
323 {
324 if(isset(self::$arAuthServices[$service_id]))
325 {
326 $service = self::$arAuthServices[$service_id];
327 if(is_callable(array($service["CLASS"], "GetError")))
328 return call_user_func_array(array($service["CLASS"], "GetError"), array($error_code));
329 $error = ($error_code == 2) ? "socserv_error_new_user" : "socserv_controller_error";
330 return GetMessage($error, array("#SERVICE_NAME#"=>$service["NAME"]));
331 }
332 return '';
333 }
334
335 public static function GetUniqueKey()
336 {
337 if(!isset($_SESSION["UNIQUE_KEY"]))
338 {
340 }
341
342 return $_SESSION["UNIQUE_KEY"];
343 }
344
345 public static function SetUniqueKey()
346 {
347 if(!isset($_SESSION["UNIQUE_KEY"]))
348 $_SESSION["UNIQUE_KEY"] = md5(bitrix_sessid_get().uniqid(rand(), true));
349 }
350
351 public static function CheckUniqueKey($bUnset = true)
352 {
353 $arState = array();
354
355 if(isset($_REQUEST["state"]))
356 {
357 $arState = StateService::getInstance()->getPayload((string)$_REQUEST['state']);
358 if (is_array($arState))
359 {
360 if (!isset($_REQUEST['check_key']) && isset($arState['check_key']))
361 {
362 $_REQUEST['check_key'] = $arState['check_key'];
363 }
364
365 if (isset($arState['backurl']))
366 {
367 InitURLParam($arState['backurl']);
368 }
369
370 if (isset($arState['redirect_url']))
371 {
372 InitURLParam($arState['redirect_url']);
373 }
374 }
375 else
376 {
377 parse_str($_REQUEST["state"], $arState);
378
379 if (isset($arState['backurl']))
380 {
381 InitURLParam($arState['backurl']);
382 }
383 }
384 }
385
386 if(!isset($_REQUEST['check_key']) && isset($_REQUEST['backurl']))
387 {
388 InitURLParam($_REQUEST['backurl']);
389 }
390
391 $checkKey = '';
392 if(isset($_REQUEST['check_key']))
393 {
394 $checkKey = $_REQUEST['check_key'];
395 }
396 elseif(isset($arState['check_key']))
397 {
398 $checkKey = $arState['check_key'];
399 }
400
401 if(!empty($_SESSION["UNIQUE_KEY"]) && $checkKey && ($checkKey === $_SESSION["UNIQUE_KEY"]))
402 {
403 if($bUnset)
404 {
405 unset($_SESSION["UNIQUE_KEY"]);
406 }
407
408 return true;
409 }
410 return false;
411 }
412
413 public static function SetAuthorizedServiceId($service_id)
414 {
415 $session = \Bitrix\Main\Application::getInstance()->getKernelSession();
416 $session["AUTH_SERVICE_ID"] = $service_id;
417 }
418
419 public static function UnsetAuthorizedServiceId()
420 {
421 $session = \Bitrix\Main\Application::getInstance()->getKernelSession();
422 unset($session["AUTH_SERVICE_ID"]);
423 }
424
425 public static function GetAuthorizedServiceId()
426 {
427 $session = \Bitrix\Main\Application::getInstance()->getKernelSession();
428 return $session["AUTH_SERVICE_ID"];
429 }
430
431 function CleanParam()
432 {
433 global $APPLICATION;
434
435 $redirect_url = $APPLICATION->GetCurPageParam('', array("auth_service_id", "check_key"), false);
436 LocalRedirect($redirect_url);
437 }
438
439 public static function GetUserArrayForSendMessages($userId)
440 {
441 $arUserOauth = array();
442 $userId = intval($userId);
443 if($userId > 0)
444 {
445 $dbSocservUser = UserTable::getList([
446 'filter' => [
447 '=USER_ID' => $userId
448 ],
449 'select' => ["ID", "EXTERNAL_AUTH_ID", "OATOKEN"]
450 ]);
451 while($arOauth = $dbSocservUser->fetch())
452 {
453 if($arOauth["OATOKEN"] <> '' && ($arOauth["EXTERNAL_AUTH_ID"] == "Twitter" || $arOauth["EXTERNAL_AUTH_ID"] == "Facebook"))
454 $arUserOauth[$arOauth["ID"]] = $arOauth["EXTERNAL_AUTH_ID"];
455 }
456 }
457 if(!empty($arUserOauth))
458 return $arUserOauth;
459 return false;
460 }
461
462 public static function SendUserMessage($socServUserId, $providerName, $message, $messageId)
463 {
464 $result = false;
465 $socServUserId = intval($socServUserId);
466 if($providerName != '' && $socServUserId > 0)
467 {
468 switch($providerName)
469 {
470 case 'Twitter':
471 $className = "CSocServTwitter";
472 break;
473 case 'Facebook':
474 $className = "CSocServFacebook";
475 break;
476 case 'Odnoklassniki':
477 $className = "CSocServOdnoklassniki";
478 break;
479 default:
480 $className = "";
481 }
482 if($className != "")
483 $result = call_user_func($className.'::SendUserFeed', $socServUserId, $message, $messageId);
484 }
485 return $result;
486 }
487
496 public static function PostIntoBuzz($arUserTwit, $lastTwitId, $arSiteId=array())
497 {
498 if(isset($arUserTwit['statuses']) && !empty($arUserTwit['statuses']))
499 {
500 foreach($arUserTwit['statuses'] as $userTwit)
501 {
502 if(isset($userTwit["id_str"]))
503 $lastTwitId = ($userTwit["id_str"].'/' > $lastTwitId.'/') ? $userTwit["id_str"] : $lastTwitId;
504 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
505 {
506 $userId = $userTwit['kp_user_id'];
507 $rsUser = CUser::GetByID($userId);
508 $arUser = $rsUser->Fetch();
509 foreach(GetModuleEvents("socialservices", "OnPublishSocServMessage", true) as $arEvent)
510 ExecuteModuleEventEx($arEvent, array($arUser, $userTwit, $arSiteId));
511 }
512 else
513 self::PostIntoBuzzAsBlog($userTwit, $lastTwitId, $arSiteId);
514 }
515 return $lastTwitId;
516 }
517 return null;
518 }
519
520 public static function PostIntoBuzzAsBlog($userTwit, $arSiteId=array(), $userLogin = '')
521 {
522 global $DB;
523 if(!CModule::IncludeModule("blog") || !CModule::IncludeModule("socialnetwork"))
524 return;
525 $arParams = array();
526 if((IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME')) && $userLogin != '')
527 {
528 if($arUserTwit = unserialize(base64_decode($userTwit), ["allowed_classes" => false]))
529 $userTwit = $arUserTwit;
530 if($arSiteIdCheck = unserialize(base64_decode($arSiteId), ["allowed_classes" => false]))
531 $arSiteId = $arSiteIdCheck;
532 $dbUser = CUser::GetByLogin($userLogin);
533 if($arUser = $dbUser->Fetch())
534 $arParams["USER_ID"] = $arUser["ID"];
535 }
536 else
537 $arParams["USER_ID"] = $userTwit['kp_user_id'];
538 $siteId = null;
539 if(isset($arSiteId[$userTwit['kp_user_id']]))
540 $siteId = $arSiteId[$userTwit['kp_user_id']];
541 if($siteId == '')
543 if(isset($userTwit['text']))
544 {
545 $arParams["GROUP_ID"] = COption::GetOptionString("socialnetwork", "userbloggroup_id", false, $siteId);
546 $arParams["PATH_TO_BLOG"] = COption::GetOptionString("socialnetwork", "userblogpost_page", false, $siteId);
547 $arParams["PATH_TO_SMILE"] = COption::GetOptionString("socialnetwork", "smile_page", false, $siteId);
548 $arParams["NAME_TEMPLATE"] = COption::GetOptionString("main", "TOOLTIP_NAME_TEMPLATE", false, $siteId);
549 $arParams["SHOW_LOGIN"] = 'Y';
550 $arParams["PATH_TO_POST"] = $arParams["PATH_TO_BLOG"];
551
552 $arFilterblg = Array(
553 "ACTIVE" => "Y",
554 "USE_SOCNET" => "Y",
555 "GROUP_ID" => $arParams["GROUP_ID"],
556 "GROUP_SITE_ID" => $siteId,
557 "OWNER_ID" => $arParams["USER_ID"],
558 );
559 $groupId = (is_array($arParams["GROUP_ID"]) ? intval($arParams["GROUP_ID"][0]) : intval($arParams["GROUP_ID"]));
560 if (isset($GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]]) && !empty($GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]]))
561 {
562 $arBlog = $GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]];
563 }
564 else
565 {
566 $dbBl = CBlog::GetList(Array(), $arFilterblg);
567 $arBlog = $dbBl ->Fetch();
568 if (!$arBlog && IsModuleInstalled("intranet"))
569 $arBlog = CBlog::GetByOwnerID($arParams["USER_ID"]);
570
571 $GLOBALS["BLOG_POST"]["BLOG_P_".$groupId."_".$arParams["USER_ID"]] = $arBlog;
572 }
573
574 $arResult["Blog"] = $arBlog;
575
576 if(empty($arBlog))
577 {
578 if(!empty($arParams["GROUP_ID"]))
579 {
581 "=DATE_UPDATE" => $DB->CurrentTimeFunction(),
582 "GROUP_ID" => (is_array($arParams["GROUP_ID"])) ? intval($arParams["GROUP_ID"][0]) : intval($arParams["GROUP_ID"]),
583 "ACTIVE" => "Y",
584 "ENABLE_COMMENTS" => "Y",
585 "ENABLE_IMG_VERIF" => "Y",
586 "EMAIL_NOTIFY" => "Y",
587 "ENABLE_RSS" => "Y",
588 "ALLOW_HTML" => "N",
589 "ENABLE_TRACKBACK" => "N",
590 "SEARCH_INDEX" => "Y",
591 "USE_SOCNET" => "Y",
592 "=DATE_CREATE" => $DB->CurrentTimeFunction(),
593 "PERMS_POST" => Array(
594 1 => "I",
595 2 => "I" ),
596 "PERMS_COMMENT" => Array(
597 1 => "P",
598 2 => "P" ),
599 );
600
601 $bRights = false;
602 $rsUser = CUser::GetByID($arParams["USER_ID"]);
603 $arUser = $rsUser->Fetch();
604 if($arUser["NAME"]."".$arUser["LAST_NAME"] == '')
605 $arFields["NAME"] = GetMessage("BLG_NAME")." ".$arUser["LOGIN"];
606 else
607 $arFields["NAME"] = GetMessage("BLG_NAME")." ".$arUser["NAME"]." ".$arUser["LAST_NAME"];
608
609 $arFields["URL"] = str_replace(" ", "_", $arUser["LOGIN"])."-blog-".SITE_ID;
610 $arFields["OWNER_ID"] = $arParams["USER_ID"];
611
612 $urlCheck = preg_replace("/[^a-zA-Z0-9_-]/is", "", $arFields["URL"]);
613 if ($urlCheck != $arFields["URL"])
614 {
615 $arFields["URL"] = "u".$arParams["USER_ID"]."-blog-".SITE_ID;
616 }
617 if(CBlog::GetByUrl($arFields["URL"]))
618 {
619 $uind = 0;
620 do
621 {
622 $uind++;
623 $arFields["URL"] = $arFields["URL"].$uind;
624 }
625 while (CBlog::GetByUrl($arFields["URL"]));
626 }
627
628 $featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $arFields["OWNER_ID"], "blog", "view_post");
629 if ($featureOperationPerms == SONET_RELATIONS_TYPE_ALL)
630 $bRights = true;
631
632 $arFields["PATH"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BLOG"], array("blog" => $arFields["URL"], "user_id" => $arFields["OWNER_ID"], "group_id" => $arFields["SOCNET_GROUP_ID"]));
633
634 $blogID = CBlog::Add($arFields);
635 if($bRights)
636 CBlog::AddSocnetRead($blogID);
637 $arBlog = CBlog::GetByID($blogID, $arParams["GROUP_ID"]);
638 }
639 }
640
641 // $DATE_PUBLISH = "";
642 // if(strlen($_POST["DATE_PUBLISH_DEF"]) > 0)
643 // $DATE_PUBLISH = $_POST["DATE_PUBLISH_DEF"];
644 // elseif (strlen($_POST["DATE_PUBLISH"])<=0)
645
646 $DATE_PUBLISH = ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL");
647
648 // else
649 // $DATE_PUBLISH = $_POST["DATE_PUBLISH"];
650
652 "DETAIL_TEXT" => $userTwit['text'],
653 "DETAIL_TEXT_TYPE" => "text",
654 "DATE_PUBLISH" => $DATE_PUBLISH,
655 "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH,
656 "PATH" => CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => "#post_id#", "user_id" => $arBlog["OWNER_ID"])),
657 "URL" => $arBlog["URL"],
658 "SOURCE_TYPE" => "twitter",
659 );
660
661 $arFields["PERMS_POST"] = array();
662 $arFields["PERMS_COMMENT"] = array();
663 $arFields["MICRO"] = "N";
664 if($arFields["TITLE"] == '')
665 {
666 $arFields["MICRO"] = "Y";
667 $arFields["TITLE"] = trim(blogTextParser::killAllTags($arFields["DETAIL_TEXT"]));
668 if($arFields["TITLE"] == '')
669 $arFields["TITLE"] = GetMessage("BLOG_EMPTY_TITLE_PLACEHOLDER");
670 }
671
672 $arFields["SOCNET_RIGHTS"] = Array();
673 if(!empty($userTwit['user_perms']))
674 {
675 $bOne = true;
676 foreach($userTwit['user_perms'] as $v => $k)
677 {
678 if($v <> '' && is_array($k) && !empty($k))
679 {
680 foreach($k as $vv)
681 {
682 if($vv <> '')
683 {
684 $arFields["SOCNET_RIGHTS"][] = $vv;
685 if($v != "SG")
686 $bOne = false;
687
688 }
689 }
690 }
691 }
692
693 if($bOne && !empty($userTwit['user_perms']["SG"]))
694 {
695 $bOnesg = false;
696 $bFirst = true;
697 $oGrId = 0;
698 foreach($userTwit['user_perms']["SG"] as $v)
699 {
700 if($v <> '')
701 {
702 if($bFirst)
703 {
704 $bOnesg = true;
705 $bFirst = false;
706 $v = str_replace("SG", "", $v);
707 $oGrId = intval($v);
708 }
709 else
710 {
711 $bOnesg = false;
712 }
713 }
714 }
715 if($bOnesg)
716 {
717 if (!CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "write_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "moderate_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "full_post"))
718 $arFields["PUBLISH_STATUS"] = BLOG_PUBLISH_STATUS_READY;
719 }
720 }
721 }
722 $bError = false;
723 /* if (CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())
724 {
725 if(empty($arFields["SOCNET_RIGHTS"]) || in_array("UA", $arFields["SOCNET_RIGHTS"]))
726 {
727 $bError = true;
728 $arResult["ERROR_MESSAGE"] = GetMessage("BLOG_BPE_EXTRANET_ERROR");
729 }
730 }*/
731
732 $newID = null;
733 $socnetRightsOld = Array("U" => Array());
734 if(!$bError)
735 {
736 preg_match_all("/\\[user\\s*=\\s*([^\\]]*)\\](.+?)\\[\\/user\\]/iesu", $userTwit['text'], $arMention);
737
738 $arFields["=DATE_CREATE"] = $DB->GetNowFunction();
739 $arFields["AUTHOR_ID"] = $arParams["USER_ID"];
740 $arFields["BLOG_ID"] = $arBlog["ID"];
741
742 $newID = CBlogPost::Add($arFields);
743
744 if($newID)
745 {
746 $arFields["ID"] = $newID;
747 $arParamsNotify = Array(
748 "bSoNet" => true,
749 "UserID" => $arParams["USER_ID"],
750 "allowVideo" => $arResult["allowVideo"],
751 //"bGroupMode" => $arResult["bGroupMode"],
752 "PATH_TO_SMILE" => $arParams["PATH_TO_SMILE"],
753 "PATH_TO_POST" => $arParams["PATH_TO_POST"],
754 "SOCNET_GROUP_ID" => $arParams["GROUP_ID"],
755 "user_id" => $arParams["USER_ID"],
756 "NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"],
757 "SHOW_LOGIN" => $arParams["SHOW_LOGIN"],
758 );
759 CBlogPost::Notify($arFields, $arBlog, $arParamsNotify);
760 }
761 }
762 if ($newID > 0 && $arResult["ERROR_MESSAGE"] == '' && $arFields["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) // Record saved successfully
763 {
764 BXClearCache(true, "/".SITE_ID."/blog/last_messages_list/");
765
766 $arFieldsIM = Array(
767 "TYPE" => "POST",
768 "TITLE" => $arFields["TITLE"],
769 "URL" => CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => $newID, "user_id" => $arBlog["OWNER_ID"])),
770 "ID" => $newID,
771 "FROM_USER_ID" => $arParams["USER_ID"],
772 "TO_USER_ID" => array(),
773 "TO_SOCNET_RIGHTS" => $arFields["SOCNET_RIGHTS"],
774 "TO_SOCNET_RIGHTS_OLD" => $socnetRightsOld["U"],
775 );
776 if(!empty($arMentionOld))
777 $arFieldsIM["MENTION_ID_OLD"] = $arMentionOld[1];
778 if(!empty($arMention))
779 $arFieldsIM["MENTION_ID"] = $arMention[1];
780
781 CBlogPost::NotifyIm($arFieldsIM);
782
783 $arParams["ID"] = $newID;
784 if(!empty($_POST["SPERM"]["SG"]))
785 {
786 foreach($_POST["SPERM"]["SG"] as $v)
787 {
788 $group_id_tmp = mb_substr($v, 2);
789 if(intval($group_id_tmp) > 0)
790 CSocNetGroup::SetLastActivity(intval($group_id_tmp));
791 }
792 }
793 }
794 }
795 }
796
797 public static function GetTwitMessages($lastTwitId = "1", $counter = 1)
798 {
800 if(!$oAuthManager->isActiveAuthService('Twitter') || !function_exists("hash_hmac"))
801 return false;
802 if(!CModule::IncludeModule("socialnetwork"))
803 return "CSocServAuthManager::GetTwitMessages(\"$lastTwitId\", $counter);";
804 global $USER;
805 $bTmpUserCreated = false;
806 if(!isset($USER) || !(($USER instanceof CUser) && ('CUser' == get_class($USER))))
807 {
808 $bTmpUserCreated = true;
809 if(isset($USER))
810 {
811 $USER_TMP = $USER;
812 unset($USER);
813 }
814
815 $USER = new CUser();
816 }
817 if(intval($lastTwitId) <= 1 || $counter == 1)
818 $lastTwitId = COption::GetOptionString('socialservices', 'last_twit_id', '1');
819 $socServUserArray = self::GetUserArray('Twitter');
820 $arSiteId = array();
821 if(isset($socServUserArray[3]) && is_array($socServUserArray[3]))
822 $arSiteId = $socServUserArray[3];
823 $twitManager = new CSocServTwitter();
824 $arUserTwit = $twitManager->GetUserMessage($socServUserArray, $lastTwitId);
825 if(is_array($arUserTwit))
826 {
827 if(isset($arUserTwit["statuses"]) && !empty($arUserTwit["statuses"]))
828 $lastTwitId = self::PostIntoBuzz($arUserTwit, $lastTwitId, $arSiteId);
829 elseif((is_array($arUserTwit["search_metadata"]) && isset($arUserTwit["search_metadata"]["max_id_str"])) && ($arUserTwit["search_metadata"]["max_id_str"] <> ''))
830 $lastTwitId = $arUserTwit["search_metadata"]["max_id_str"];
831 }
832 $counter++;
833 if($counter >= 20)
834 {
835 // $oldLastId = COption::GetOptionString('socialservices', 'last_twit_id', '1');
836 // if((strlen($lastTwitId) > strlen($oldLastId)) && $oldLastId[0] != 9)
837 // $lastTwitId = substr($lastTwitId, 1);
838 COption::SetOptionString('socialservices', 'last_twit_id', $lastTwitId);
839 $counter = 1;
840 }
841 $lastTwitId = preg_replace("|\D|", '', $lastTwitId);
843 {
844 unset($USER);
845 if(isset($USER_TMP))
846 {
847 $USER = $USER_TMP;
848 unset($USER_TMP);
849 }
850 }
851 return "CSocServAuthManager::GetTwitMessages(\"$lastTwitId\", $counter);";
852 }
853
854 public static function SendSocialservicesMessages()
855 {
857 if(!$oAuthManager->isActiveAuthService('Twitter') || !function_exists("hash_hmac"))
858 return false;
859
860 $ttl = 86400;
861 $cache_id = 'socserv_mes_user';
862 $obCache = new CPHPCache;
863 $cache_dir = '/bx/socserv_mes_user';
864
865 $arSocServMessage = array();
866 if($obCache->InitCache($ttl, $cache_id, $cache_dir))
867 $arSocServMessage = $obCache->GetVars();
868 else
869 {
870 $dbSocServMessage = CSocServMessage::GetList(array(), array('SUCCES_SENT' => 'N'), false, array("nTopCount" => 5), array("ID", "SOCSERV_USER_ID", "PROVIDER", "MESSAGE"));
871
872 while($arSocMessage = $dbSocServMessage->Fetch())
873 $arSocServMessage[] = $arSocMessage;
874 if(empty($arSocServMessage))
875 if($obCache->StartDataCache())
876 $obCache->EndDataCache($arSocServMessage);
877 }
878 if(is_array($arSocServMessage) && !empty($arSocServMessage))
879 foreach($arSocServMessage as $arSocMessage)
880 {
881 $arResult = CSocServAuthManager::SendUserMessage($arSocMessage['SOCSERV_USER_ID'], $arSocMessage['PROVIDER'], $arSocMessage['MESSAGE'], $arSocMessage['ID']);
882 if($arResult !== false && is_array($arResult) && !preg_match("/error/i", join(",", array_keys($arResult))))
883 self::MarkMessageAsSent($arSocMessage['ID']);
884 }
885 return "CSocServAuthManager::SendSocialservicesMessages();";
886 }
887
888 private static function MarkMessageAsSent($id)
889 {
890 CSocServMessage::Update($id, array("SUCCES_SENT" => 'Y'));
891 }
892
893 public static function GetUserArray($authId)
894 {
895 $ttl = 10000;
896 $cache_id = 'socserv_ar_user';
897 $obCache = new CPHPCache;
898 $cache_dir = '/bx/socserv_ar_user';
899
900 if($obCache->InitCache($ttl, $cache_id, $cache_dir))
901 {
902 $arResult = $obCache->GetVars();
903 }
904 else
905 {
906 $arUserXmlId = $arOaToken = $arOaSecret = $arSiteId = array();
907 $dbSocUser = UserTable::getList([
908 'filter' => [
909 '=EXTERNAL_AUTH_ID' => $authId,
910 "=USER.ACTIVE" => 'Y'
911 ],
912 'select' => ["XML_ID", "USER_ID", "OATOKEN", "OASECRET", "SITE_ID"]
913 ]);
914
915 while($arSocUser = $dbSocUser->fetch())
916 {
917 $arUserXmlId[$arSocUser["USER_ID"]] = $arSocUser["XML_ID"];
918 $arOaToken[$arSocUser["USER_ID"]] = $arSocUser["OATOKEN"];
919 $arOaSecret[$arSocUser["USER_ID"]] = $arSocUser["OASECRET"];
920 $arSiteId[$arSocUser["USER_ID"]] = $arSocUser["SITE_ID"];
921 }
922 $arResult = array($arUserXmlId, $arOaToken, $arOaSecret, $arSiteId);
923 if($obCache->StartDataCache())
924 $obCache->EndDataCache($arResult);
925 }
926 return $arResult;
927 }
928
929 public static function GetCachedUserOption($option)
930 {
931 global $USER;
932 $result = '';
933 if(is_object($USER))
934 {
935 $userId = $USER->GetID();
936 $ttl = 10000;
937 $cache_id = 'socserv_user_option_'.$userId;
938 $obCache = new CPHPCache;
939 $cache_dir = '/bx/socserv_user_option';
940
941 if($obCache->InitCache($ttl, $cache_id, $cache_dir))
942 $result = $obCache->GetVars();
943 else
944 {
945 $result = CUtil::JSEscape(CUserOptions::GetOption("socialservices", $option, "N", $USER->GetID()));
946 if($obCache->StartDataCache())
947 $obCache->EndDataCache($result);
948 }
949
950 }
951
952 return $result;
953 }
954
955 public static function checkOldUser(&$socservUserFields)
956 {
957 // check for user with old socialservices linking system (socservice ID in user's EXTERNAL_AUTH_ID)
958 $dbUsersOld = CUser::GetList('ID', 'ASC', array('XML_ID' => $socservUserFields['XML_ID'], 'EXTERNAL_AUTH_ID' => $socservUserFields['EXTERNAL_AUTH_ID'], 'ACTIVE' => 'Y'), array('NAV_PARAMS' => array("nTopCount" => "1")));
959 $socservUser = $dbUsersOld->Fetch();
960 if($socservUser)
961 {
962 return $socservUser["ID"];
963 }
964
965 return false;
966 }
967
968 public static function checkAbandonedUser(&$socservUserFields)
969 {
970 // theoretically possible situation with abandoned external user w/o b_socialservices_user entry
971 $dbUsersNew = CUser::GetList('ID', 'ASC', array('XML_ID' => $socservUserFields['XML_ID'], 'EXTERNAL_AUTH_ID' => 'socservices', 'ACTIVE' => 'Y'), array('NAV_PARAMS' => array("nTopCount" => "1")));
972 $socservUser = $dbUsersNew->Fetch();
973
974 if($socservUser)
975 {
976 return $socservUser["ID"];
977 }
978
979 return false;
980 }
981}
982
983//base class for auth services
985{
986 protected static $settingsSuffix = false;
987
988 protected $checkRestrictions = true;
989 protected $allowChangeOwner = true;
990
991 protected $userId = null;
992
993 public const OPENER_MODE = 'opener';
994 public const MOBILE_MODE = 'bx_mobile';
995
996 function __construct($userId = null)
997 {
998 global $USER;
999
1000 if($userId === null)
1001 {
1002 if(is_object($USER) && $USER->IsAuthorized())
1003 {
1004 $this->userId = $USER->GetID();
1005 }
1006 }
1007 else
1008 {
1009 $this->userId = $userId;
1010 }
1011 }
1012
1013 public static function getControllerUrl()
1014 {
1015 return 'https://www.bitrix24.com/controller';
1016
1017 // this may be needed later
1018/*
1019 static $controllerUrl = '';
1020 if(
1021 $controllerUrl === ''
1022 && \Bitrix\Main\Loader::includeModule('bitrix24')
1023 )
1024 {
1025 $controllerUrl = 'https://www.bitrix24.com/controller';
1026 $controllerUrlList = array(
1027 'de' => 'https://www.bitrix24.de/controller',
1028 'ua' => 'https://www.bitrix24.ua/controller',
1029 'ru' => 'https://www.bitrix24.ru/controller',
1030 'eu' => 'https://www.bitrix24.eu/controller',
1031 'la' => 'https://www.bitrix24.es/controller',
1032 'br' => 'https://www.bitrix24.com.br/controller',
1033 'in' => 'https://www.bitrix24.in/controller',
1034 'cn' => 'https://www.bitrix24.cn/controller',
1035 'kz' => 'https://www.bitrix24.kz/controller',
1036 'by' => 'https://www.bitrix24.by/controller',
1037 'fr' => 'https://www.bitrix24.fr/controller',
1038 'pl' => 'https://www.bitrix24.pl/controller',
1039 );
1040
1041 $lang = \CBitrix24::getLicensePrefix();
1042 if(array_key_exists($lang, $controllerUrlList))
1043 {
1044 $controllerUrl = $controllerUrlList[$lang];
1045 }
1046 }
1047
1048 return $controllerUrl;
1049*/
1050 }
1051
1052 public function GetSettings()
1053 {
1054 return false;
1055 }
1056
1057 protected static function CheckFields($action, &$arFields)
1058 {
1059 global $USER;
1060
1061 if($action === 'ADD')
1062 {
1063 if(isset($arFields["EXTERNAL_AUTH_ID"]) && $arFields["EXTERNAL_AUTH_ID"] == '')
1064 {
1065 return false;
1066 }
1067
1068 if(isset($arFields["SITE_ID"]) && $arFields["SITE_ID"] == '')
1069 {
1070 $arFields["SITE_ID"] = SITE_ID;
1071 }
1072
1073 if(!isset($arFields["USER_ID"]))
1074 {
1075 $arFields["USER_ID"] = $USER->GetID();
1076 }
1077
1078 $dbCheck = UserTable::getList([
1079 'filter' => [
1080 '=USER_ID' => $arFields["USER_ID"],
1081 '=EXTERNAL_AUTH_ID' => $arFields["EXTERNAL_AUTH_ID"],
1082 ],
1083 'select' => ["ID"]
1084 ]);
1085 if($dbCheck->fetch())
1086 {
1087 return false;
1088 }
1089 }
1090
1091 if(is_set($arFields, "PERSONAL_PHOTO"))
1092 {
1093 $res = CFile::CheckImageFile($arFields["PERSONAL_PHOTO"]);
1094 if($res <> '')
1095 {
1096 unset($arFields["PERSONAL_PHOTO"]);
1097 }
1098 else
1099 {
1100 $arFields["PERSONAL_PHOTO"]["MODULE_ID"] = "socialservices";
1101 CFile::SaveForDB($arFields, "PERSONAL_PHOTO", "socialservices");
1102 }
1103 }
1104
1105 return true;
1106 }
1107
1108 public static function Update($id, $arFields)
1109 {
1110 global $DB;
1111 $id = intval($id);
1112
1113 if($id <= 0)
1114 {
1115 return false;
1116 }
1117
1118 foreach(GetModuleEvents("socialservices", "OnBeforeSocServUserUpdate", true) as $arEvent)
1119 {
1120 if(ExecuteModuleEventEx($arEvent, array($id, &$arFields)) === false)
1121 {
1122 return false;
1123 }
1124 }
1125
1126 if (is_set($arFields, "PERSONAL_PHOTO"))
1127 {
1128 if ($arFields["PERSONAL_PHOTO"]["name"] == '' && $arFields["PERSONAL_PHOTO"]["del"] == '')
1129 {
1130 unset($arFields["PERSONAL_PHOTO"]);
1131 }
1132 else
1133 {
1134 $rsPersonalPhoto = $DB->Query("SELECT PERSONAL_PHOTO FROM b_socialservices_user WHERE ID=".$id);
1135 if ($personalPhoto = $rsPersonalPhoto->Fetch())
1136 {
1137 $arFields["PERSONAL_PHOTO"]["old_file"] = $personalPhoto["PERSONAL_PHOTO"];
1138 }
1139 }
1140 }
1141
1142 if(!self::CheckFields('UPDATE', $arFields))
1143 {
1144 return false;
1145 }
1146
1147 $arDbFields = $arFields;
1148 if (static::hasEncryptedFields(array_keys($arDbFields)))
1149 static::encryptFields($arDbFields);
1150
1151 $strUpdate = $DB->PrepareUpdate("b_socialservices_user", $arDbFields);
1152
1153 $strSql = "UPDATE b_socialservices_user SET ".$strUpdate." WHERE ID = ".$id." ";
1154 $DB->Query($strSql);
1155
1156 $cache_id = 'socserv_ar_user';
1157 $obCache = new CPHPCache;
1158 $cache_dir = '/bx/socserv_ar_user';
1159 $obCache->Clean($cache_id, $cache_dir);
1160
1161 $arFields['ID'] = $id;
1162 foreach(GetModuleEvents("socialservices", "OnAfterSocServUserUpdate", true) as $arEvent)
1164
1165 return $id;
1166 }
1167
1168 public static function Delete($id)
1169 {
1170 global $DB;
1171 $id = intval($id);
1172 if ($id > 0)
1173 {
1174 $rsUser = $DB->Query("SELECT ID, PERSONAL_PHOTO FROM b_socialservices_user WHERE ID=".$id);
1175 $arUser = $rsUser->Fetch();
1176 if (!$arUser)
1177 {
1178 return false;
1179 }
1180
1181 foreach (GetModuleEvents("socialservices", "OnBeforeSocServUserDelete", true) as $arEvent)
1182 {
1183 ExecuteModuleEventEx($arEvent, array($id));
1184 }
1185
1186 CFile::Delete($arUser["PERSONAL_PHOTO"]);
1187
1188 $DB->Query("DELETE FROM b_socialservices_user WHERE ID = ".$id." ", true);
1189
1190 $cache_id = 'socserv_ar_user';
1191 $obCache = new CPHPCache;
1192 $cache_dir = '/bx/socserv_ar_user';
1193 $obCache->Clean($cache_id, $cache_dir);
1194
1195 return true;
1196 }
1197 return false;
1198 }
1199
1200 public static function OnUserDelete($id)
1201 {
1202 global $DB;
1203 $id = intval($id);
1204 if ($id > 0)
1205 {
1206 $rsUsers = $DB->Query("SELECT ID FROM b_socialservices_user WHERE USER_ID = ".$id." ", true);
1207 while ($arUserLink = $rsUsers->Fetch())
1208 {
1209 self::Delete($arUserLink["ID"]);
1210 }
1211 return true;
1212 }
1213 return false;
1214 }
1215
1216 public static function OnAfterTMReportDailyAdd()
1217 {
1218 if(COption::GetOptionString("socialservices", "allow_send_user_activity", "Y") != 'Y')
1219 return;
1220 global $USER;
1221 $arIntranetData = $arResult = $arData = array();
1222 $eventCounter = $taskCounter = 0;
1223 if(CModule::IncludeModule('intranet'))
1224 {
1225 $arIntranetData = CIntranetPlanner::getData(SITE_ID, true);
1226 }
1227 if(isset($arIntranetData['DATA']))
1228 {
1229 $arData = $arIntranetData['DATA'];
1230 }
1231 if(isset($arData['EVENTS']) && is_array($arData['EVENTS']))
1232 {
1233 $eventCounter = count($arData['EVENTS']);
1234 }
1235 if(isset($arData['TASKS']) && is_array($arData['TASKS']))
1236 {
1237 $taskCounter = count($arData['TASKS']);
1238 }
1239
1240 $arResult['USER_ID'] = intval($USER?->GetID());
1241 if($arResult['USER_ID'] > 0)
1242 {
1243 $enabledSendMessage = CUserOptions::GetOption("socialservices", "user_socserv_enable", "N", $arResult['USER_ID']);
1244 if($enabledSendMessage == 'Y')
1245 {
1246 $enabledEndDaySend = CUserOptions::GetOption("socialservices", "user_socserv_end_day", "N", $arResult['USER_ID']);
1247 if($enabledEndDaySend == 'Y')
1248 {
1249 $arResult['MESSAGE'] = str_replace('#event#', $eventCounter, str_replace('#task#', $taskCounter, CUserOptions::GetOption("socialservices", "user_socserv_end_text", GetMessage("JS_CORE_SS_WORKDAY_START"), $arResult['USER_ID'])));
1250
1251 $socServArray = CUserOptions::GetOption("socialservices", "user_socserv_array", "a:0:{}", $arResult['USER_ID']);
1252 if(!CheckSerializedData($socServArray))
1253 {
1254 $socServArray = "a:0:{}";
1255 }
1256
1257 $arSocServUser['SOCSERVARRAY'] = unserialize($socServArray, ["allowed_classes" => false]);
1258
1259 if(is_array($arSocServUser['SOCSERVARRAY']) && count($arSocServUser['SOCSERVARRAY']) > 0)
1260 {
1261 foreach($arSocServUser['SOCSERVARRAY'] as $id => $providerName)
1262 {
1263 $arResult['SOCSERV_USER_ID'] = $id;
1264 $arResult['PROVIDER'] = $providerName;
1266 }
1267 }
1268 }
1269 }
1270 }
1271 }
1272
1273 public static function OnAfterTMDayStart()
1274 {
1275 if(COption::GetOptionString("socialservices", "allow_send_user_activity", "Y") != 'Y')
1276 return;
1277 global $USER;
1278 $arResult = array();
1279 $arResult['USER_ID'] = intval($USER->GetID());
1280 if($arResult['USER_ID'] > 0)
1281 {
1282 $enabledSendMessage = CUserOptions::GetOption("socialservices", "user_socserv_enable", "N", $arResult['USER_ID']);
1283 if($enabledSendMessage == 'Y')
1284 {
1285 $enabledEndDaySend = CUserOptions::GetOption("socialservices", "user_socserv_start_day", "N", $arResult['USER_ID']);
1286 if($enabledEndDaySend == 'Y')
1287 {
1288 $arResult['MESSAGE'] = CUserOptions::GetOption("socialservices", "user_socserv_start_text", GetMessage("JS_CORE_SS_WORKDAY_START"), $arResult['USER_ID']);
1289
1290 $socServArray = CUserOptions::GetOption("socialservices", "user_socserv_array", "a:0:{}", $arResult['USER_ID']);
1291 if(!CheckSerializedData($socServArray))
1292 {
1293 $socServArray = "a:0:{}";
1294 }
1295
1296 $arSocServUser['SOCSERVARRAY'] = unserialize($socServArray, ["allowed_classes" => false]);
1297
1298 if(is_array($arSocServUser['SOCSERVARRAY']) && count($arSocServUser['SOCSERVARRAY']) > 0)
1299 {
1300 foreach($arSocServUser['SOCSERVARRAY'] as $id => $providerName)
1301 {
1302 $arResult['SOCSERV_USER_ID'] = $id;
1303 $arResult['PROVIDER'] = $providerName;
1305 }
1306 }
1307 }
1308 }
1309 }
1310 }
1311
1312 public function CheckSettings()
1313 {
1314 $arSettings = $this->GetSettings();
1315 if(is_array($arSettings))
1316 {
1317 foreach($arSettings as $sett)
1318 if(is_array($sett) && !array_key_exists("note", $sett))
1319 if(self::GetOption($sett[0]) == '')
1320 return false;
1321 }
1322 return true;
1323 }
1324
1325 public function CheckPhotoURI($photoURI)
1326 {
1327 if(preg_match("|^http[s]?://|i", $photoURI))
1328 return true;
1329 return false;
1330 }
1331
1332 public static function OptionsSuffix()
1333 {
1334 //settings depend on current site
1335 $arUseOnSites = unserialize(COption::GetOptionString("socialservices", "use_on_sites", ""), ["allowed_classes" => false]);
1336 return (isset($arUseOnSites[SITE_ID]) && $arUseOnSites[SITE_ID] === "Y"? '_bx_site_'.SITE_ID : '');
1337 }
1338
1339 public static function GetOption($opt)
1340 {
1341 if(self::$settingsSuffix === false)
1342 self::$settingsSuffix = self::OptionsSuffix();
1343
1344 return COption::GetOptionString("socialservices", $opt.self::$settingsSuffix);
1345 }
1346
1347 public static function SetOption($opt, $value)
1348 {
1349 if(self::$settingsSuffix === false)
1350 self::$settingsSuffix = self::OptionsSuffix();
1351
1352 return COption::SetOptionString("socialservices", $opt.self::$settingsSuffix, $value);
1353 }
1354
1355 public static function getGroupsDenyAuth()
1356 {
1357 return explode(',', (\COption::GetOptionString("socialservices", "group_deny_auth", "")));
1358 }
1359
1360 public static function getGroupsDenySplit()
1361 {
1362 return explode(',', (\COption::GetOptionString("socialservices", "group_deny_split", "")));
1363 }
1364
1365 public static function setGroupsDenyAuth($value)
1366 {
1367 \COption::SetOptionString('socialservices', 'group_deny_auth', is_array($value) ? implode(',', $value) : '');
1368 }
1369
1370 public static function setGroupsDenySplit($value)
1371 {
1372 \COption::SetOptionString('socialservices', 'group_deny_split', is_array($value) ? implode(',', $value) : '');
1373 }
1374
1375 public static function isSplitDenied($arGroups = null)
1376 {
1377 global $USER;
1378
1379 if($arGroups === null)
1380 {
1381 return $USER->IsAuthorized()
1382 && count(array_intersect(self::getGroupsDenySplit(), $USER->GetUserGroupArray())) > 0;
1383 }
1384 else
1385 {
1386 return count(array_intersect(self::getGroupsDenySplit(), $arGroups)) > 0;
1387 }
1388 }
1389
1390 public static function isAuthDenied($arGroups)
1391 {
1392 return count(array_intersect(self::getGroupsDenyAuth(), $arGroups)) > 0;
1393 }
1394
1395 public function AuthorizeUser($socservUserFields, $bSave = false)
1396 {
1397 global $USER, $APPLICATION;
1398
1399 foreach(GetModuleEvents("socialservices", "OnBeforeSocServUserAuthorize", true) as $arEvent)
1400 {
1401 $errorCode = SOCSERV_AUTHORISATION_ERROR;
1402 if(ExecuteModuleEventEx($arEvent, array($this, &$socservUserFields, &$errorCode)) === false)
1403 {
1404 return $errorCode;
1405 }
1406 }
1407
1408 if(!isset($socservUserFields['XML_ID']) || $socservUserFields['XML_ID'] == '')
1409 {
1410 return false;
1411 }
1412
1413 if(!isset($socservUserFields['EXTERNAL_AUTH_ID']) || $socservUserFields['EXTERNAL_AUTH_ID'] == '')
1414 {
1415 return false;
1416 }
1417
1418 $oauthKeys = array();
1419 if(isset($socservUserFields["OATOKEN"]))
1420 {
1421 $oauthKeys["OATOKEN"] = $socservUserFields["OATOKEN"];
1422 }
1423 if(isset($socservUserFields["REFRESH_TOKEN"]) && $socservUserFields["REFRESH_TOKEN"] !== '')
1424 {
1425 $oauthKeys["REFRESH_TOKEN"] = $socservUserFields["REFRESH_TOKEN"];
1426 }
1427 if(isset($socservUserFields["OATOKEN_EXPIRES"]))
1428 {
1429 $oauthKeys["OATOKEN_EXPIRES"] = $socservUserFields["OATOKEN_EXPIRES"];
1430 }
1431
1432 $errorCode = SOCSERV_AUTHORISATION_ERROR;
1433
1434 $dbSocUser = UserTable::getList(array(
1435 'filter' => array(
1436 '=XML_ID'=>$socservUserFields['XML_ID'],
1437 '=EXTERNAL_AUTH_ID'=>$socservUserFields['EXTERNAL_AUTH_ID']
1438 ),
1439 'select' => array("ID", "USER_ID", "ACTIVE" => "USER.ACTIVE", "PERSONAL_PHOTO"),
1440 ));
1441 $socservUser = $dbSocUser->fetch();
1442
1443 if($USER->IsAuthorized())
1444 {
1445 if(!$this->checkRestrictions || !self::isSplitDenied())
1446 {
1447 if(!$socservUser)
1448 {
1449 $socservUserFields["USER_ID"] = $USER->GetID();
1450 $result = UserTable::add(UserTable::filterFields($socservUserFields));
1451 $id = $result->getId();
1452 }
1453 else
1454 {
1455 $id = $socservUser['ID'];
1456
1457 // socservice link split
1458 if($socservUser['USER_ID'] != $USER->GetID())
1459 {
1460 if($this->allowChangeOwner)
1461 {
1462 $dbSocUser = UserTable::getList(array(
1463 'filter' => array(
1464 '=USER_ID' => $USER->GetID(),
1465 '=EXTERNAL_AUTH_ID' => $socservUserFields['EXTERNAL_AUTH_ID']
1466 ),
1467 'select' => array("ID")
1468 ));
1469 if($dbSocUser->fetch())
1470 {
1472 }
1473 else
1474 {
1475 $oauthKeys['USER_ID'] = $USER->GetID();
1476 $oauthKeys['CAN_DELETE'] = 'Y';
1477 }
1478 }
1479 else
1480 {
1482 }
1483 }
1484 }
1485
1486 if($_SESSION["OAUTH_DATA"] && is_array($_SESSION["OAUTH_DATA"]))
1487 {
1488 $oauthKeys = array_merge($oauthKeys, $_SESSION['OAUTH_DATA']);
1489 unset($_SESSION["OAUTH_DATA"]);
1490 }
1491
1492 UserTable::update($id, $oauthKeys);
1493 }
1494 else
1495 {
1497 }
1498 }
1499 else
1500 {
1501 $entryId = 0;
1502 $USER_ID = 0;
1503
1504 if($socservUser)
1505 {
1506 $entryId = $socservUser['ID'];
1507 if($socservUser["ACTIVE"] === 'Y')
1508 {
1509 $USER_ID = $socservUser["USER_ID"];
1510 }
1511 }
1512 else
1513 {
1514 foreach(GetModuleEvents('socialservices', 'OnFindSocialservicesUser', true) as $event)
1515 {
1516 $eventResult = ExecuteModuleEventEx($event, array(&$socservUserFields));
1517 if($eventResult > 0)
1518 {
1519 $USER_ID = $eventResult;
1520 break;
1521 }
1522 }
1523
1524 if(!$USER_ID)
1525 {
1526 if ($this->isAllowedRegisterNewUser())
1527 {
1528 $socservUserFields['PASSWORD'] = randString(30); //not necessary but...
1529 $socservUserFields['LID'] = SITE_ID;
1530
1531 $def_group = Option::get('main', 'new_user_registration_def_group', '');
1532 if($def_group <> '')
1533 {
1534 $socservUserFields['GROUP_ID'] = explode(',', $def_group);
1535 }
1536
1537
1538 if(
1539 $this->checkRestrictions
1540 && !empty($socservUserFields['GROUP_ID'])
1541 && self::isAuthDenied($socservUserFields['GROUP_ID'])
1542 )
1543 {
1544 $errorCode = SOCSERV_REGISTRATION_DENY;
1545 }
1546 else
1547 {
1548 $userFields = $socservUserFields;
1549 $userFields["EXTERNAL_AUTH_ID"] = "socservices";
1550
1551 if(isset($userFields['PERSONAL_PHOTO']) && is_array($userFields['PERSONAL_PHOTO']))
1552 {
1553 $res = CFile::CheckImageFile($userFields["PERSONAL_PHOTO"]);
1554 if($res <> '')
1555 {
1556 unset($userFields['PERSONAL_PHOTO']);
1557 }
1558 }
1559
1560 $USER_ID = $USER->Add($userFields);
1561 if($USER_ID <= 0)
1562 {
1563 $errorCode = SOCSERV_AUTHORISATION_ERROR;
1564 }
1565 }
1566 }
1567 elseif(Option::get("main", "new_user_registration", "N") == "N")
1568 {
1569 $errorCode = SOCSERV_REGISTRATION_DENY;
1570 }
1571
1572 $socservUserFields['CAN_DELETE'] = 'N';
1573 }
1574 }
1575
1576 if(isset($_SESSION["OAUTH_DATA"]) && is_array($_SESSION["OAUTH_DATA"]))
1577 {
1578 foreach ($_SESSION['OAUTH_DATA'] as $key => $value)
1579 {
1580 $socservUserFields[$key] = $value;
1581 }
1582 unset($_SESSION["OAUTH_DATA"]);
1583 }
1584
1585 if($USER_ID > 0)
1586 {
1587 $arGroups = $USER->GetUserGroup($USER_ID);
1588 if($this->checkRestrictions && self::isAuthDenied($arGroups))
1589 {
1591 }
1592
1593 if($entryId > 0)
1594 {
1595 UserTable::update($entryId, UserTable::filterFields($socservUserFields, $socservUser));
1596 }
1597 else
1598 {
1599 $socservUserFields['USER_ID'] = $USER_ID;
1600 UserTable::add(UserTable::filterFields($socservUserFields));
1601
1602 foreach(\Bitrix\Main\EventManager::getInstance()->findEventHandlers("socialservices", "OnUserInitialize") as $arEvent)
1603 {
1604 ExecuteModuleEventEx($arEvent, array($USER_ID));
1605 }
1606 }
1607
1608 $USER->AuthorizeWithOtp($USER_ID, $bSave);
1609
1610 if($USER->IsJustAuthorized())
1611 {
1612 foreach(GetModuleEvents("socialservices", "OnUserLoginSocserv", true) as $arEvent)
1613 {
1614 ExecuteModuleEventEx($arEvent, array($socservUserFields));
1615 }
1616 }
1617 }
1618 else
1619 {
1620 return $errorCode;
1621 }
1622
1623 // possible redirect after authorization, so no spreading. Store cookies in the session for next hit
1624 $APPLICATION->StoreCookies();
1625 }
1626
1627 return true;
1628 }
1629
1630 public static function OnFindExternalUser($login)
1631 {
1633 'select' => ['ID'],
1634 'filter' => [
1635 '=ACTIVE' => 'Y',
1636 '=EXTERNAL_AUTH_ID' => 'socservices',
1637 '=LOGIN' => $login,
1638 ],
1639 ]);
1640
1641 if (isset($userRow['ID']))
1642 {
1643 return $userRow['ID'];
1644 }
1645
1646 $socialserviceRow = UserTable::getRow([
1647 'select' => ['USER_ID'],
1648 'filter' => [
1649 '=USER.ACTIVE' => 'Y',
1650 '=LOGIN' => $login,
1651 ],
1652 ]);
1653
1654 return $socialserviceRow['USER_ID'] ?? 0;
1655 }
1656
1657 public function setAllowChangeOwner($value)
1658 {
1659 $this->allowChangeOwner = (bool)$value;
1660 }
1661
1662 protected static function hasEncryptedFields($arFields)
1663 {
1664 if (!\Bitrix\Socialservices\EncryptedToken\CryptoField::cryptoAvailable())
1665 return false;
1666
1667 return (
1668 !$arFields
1669 || in_array('*', $arFields)
1670 || in_array('OATOKEN', $arFields)
1671 || in_array('OASECRET', $arFields)
1672 || in_array('REFRESH_TOKEN', $arFields)
1673 );
1674 }
1675
1676 protected static function encryptFields(&$arFields)
1677 {
1678 $cryptoField = new \Bitrix\Socialservices\EncryptedToken\CryptoField('OATOKEN');
1679
1680 if (array_key_exists('OATOKEN', $arFields))
1681 $arFields['OATOKEN'] = $cryptoField->encrypt($arFields['OATOKEN']);
1682
1683 if (array_key_exists('OASECRET', $arFields))
1684 $arFields['OASECRET'] = $cryptoField->encrypt($arFields['OASECRET']);
1685
1686 if (array_key_exists('REFRESH_TOKEN', $arFields))
1687 $arFields['REFRESH_TOKEN'] = $cryptoField->encrypt($arFields['REFRESH_TOKEN']);
1688 }
1689
1690 protected function isAllowedRegisterNewUser(): bool
1691 {
1692 return COption::GetOptionString("main", "new_user_registration", "N") === "Y"
1693 && COption::GetOptionString("socialservices", "allow_registration", "Y") === "Y";
1694 }
1695
1696 protected function onAfterMobileAuth()
1697 {
1698 $params = http_build_query([
1699 'mode' => self::MOBILE_MODE,
1700 ]);
1701
1702 $httpResponse = new HttpResponse();
1703 $httpResponse->addHeader('Location', 'bitrix24://?' . $params);
1704 Application::getInstance()->end(0, $httpResponse);
1705 }
1706
1707 protected function onAfterWebAuth($addParams, $mode, $url)
1708 {
1709 if($addParams)
1710 {
1711 $location = ($mode === self::OPENER_MODE) ? 'if(window.opener) window.opener.location = \''.$url.'\'; window.close();' : ' window.location = \''.$url.'\';';
1712 }
1713 else
1714 {
1715 //fix for chrome
1716 $location = ($mode === self::OPENER_MODE) ? 'if(window.opener) window.opener.location = window.opener.location.href + \''.$url.'\'; window.close();' : ' window.location = window.location.href + \''.$url.'\';';
1717 }
1718
1719 $JSScript = '
1720 <script>
1721 '.$location.'
1722 </script>
1723 ';
1724
1725 echo $JSScript;
1726 }
1727}
1728
1729//some repetitive functionality
1730class CSocServUtil
1731{
1732 const OAUTH_PACK_PARAM = "oauth_proxy_params";
1733 private static $oAuthParams = array("redirect_uri", "client_id", "scope", "response_type", "state");
1734
1735 public static function GetCurUrl($addParam="", $removeParam=false, $checkOAuthProxy=true)
1736 {
1737 global $APPLICATION;
1738
1739 $arRemove = array("logout", "auth_service_error", "auth_service_id", "MUL_MODE");
1740
1741 if($removeParam !== false)
1742 {
1743 $arRemove = array_merge($arRemove, $removeParam);
1744 }
1745
1746 if($checkOAuthProxy !== false)
1747 {
1748 $proxyString = "";
1749 foreach(self::$oAuthParams as $param)
1750 {
1751 if (isset($_GET[$param]) && (is_string($_GET[$param]) || is_numeric($_GET[$param])))
1752 {
1753 $arRemove[] = $param;
1754 $proxyString .= ($proxyString == "" ? "" : "&").urlencode($param)."=".urlencode($_GET[$param]);
1755 }
1756 }
1757
1758 if($proxyString != "")
1759 {
1760 $addParam .= ($addParam == "" ? "" : "&").self::packOAuthProxyString($proxyString);
1761 }
1762 }
1763 return \CHTTP::URN2URI($APPLICATION->GetCurPageParam($addParam, $arRemove));
1764 }
1765
1769 public static function ServerName($forceHttps = false)
1770 {
1771 $request = Context::getCurrent()->getRequest();
1772
1773 $protocol = ($forceHttps || $request->isHttps()) ? "https" : "http";
1774 $serverName = $request->getHttpHost();
1775
1776 // :-(
1777 if($protocol == "https")
1778 {
1779 $serverName = str_replace(":443", "", $serverName);
1780 }
1781
1782 return $protocol.'://'.$serverName;
1783 }
1784
1785 public static function packOAuthProxyString($proxyString)
1786 {
1787 return self::OAUTH_PACK_PARAM."=".urlencode(base64_encode($proxyString));
1788 }
1789
1790 public static function getOAuthProxyString()
1791 {
1792 return isset($_REQUEST[self::OAUTH_PACK_PARAM]) ? self::OAUTH_PACK_PARAM."=".urlencode($_REQUEST[self::OAUTH_PACK_PARAM]) : '';
1793 }
1794
1795 public static function checkOAuthProxyParams()
1796 {
1797 if(isset($_REQUEST[self::OAUTH_PACK_PARAM]) && $_REQUEST[self::OAUTH_PACK_PARAM] <> '')
1798 {
1799 $proxyString = base64_decode($_REQUEST[self::OAUTH_PACK_PARAM]);
1800 if($proxyString <> '')
1801 {
1802 $arVars = array();
1803 parse_str($proxyString, $arVars);
1804 foreach(self::$oAuthParams as $param)
1805 {
1806 if(isset($arVars[$param]))
1807 {
1808 $_GET[$param] = $_REQUEST[$param] = $arVars[$param];
1809 }
1810 }
1811 }
1812
1813 unset($_REQUEST[self::OAUTH_PACK_PARAM]);
1814 unset($_GET[self::OAUTH_PACK_PARAM]);
1815 }
1816 }
1817}
1818
1820{
1821 protected static function CheckFields($action, &$arFields)
1822 {
1823 if(($action == "ADD" && !isset($arFields["SOCSERV_USER_ID"])) || (isset($arFields["SOCSERV_USER_ID"]) && intval($arFields["SOCSERV_USER_ID"])<=0))
1824 {
1825 return false;
1826 }
1827 if(($action == "ADD" && !isset($arFields["PROVIDER"])) || (isset($arFields["PROVIDER"]) && $arFields["PROVIDER"] == ''))
1828 {
1829 return false;
1830 }
1831 if($action == "ADD")
1832 $arFields["INSERT_DATE"] = ConvertTimeStamp(time(), "FULL");
1833 return true;
1834 }
1835
1836 public static function Update($id, $arFields)
1837 {
1838 global $DB;
1839 $id = intval($id);
1840 if($id<=0 || !self::CheckFields('UPDATE', $arFields))
1841 return false;
1842 $strUpdate = $DB->PrepareUpdate("b_socialservices_message", $arFields);
1843 $strSql = "UPDATE b_socialservices_message SET ".$strUpdate." WHERE ID = ".$id." ";
1844 $DB->Query($strSql);
1845 $cache_id = 'socserv_mes_user';
1846 $obCache = new CPHPCache;
1847 $cache_dir = '/bx/socserv_mes_user';
1848 $obCache->Clean($cache_id, $cache_dir);
1849
1850 return $id;
1851 }
1852
1853 public static function Delete($id)
1854 {
1855 global $DB;
1856 $id = intval($id);
1857 if ($id > 0)
1858 {
1859 $rsUser = $DB->Query("SELECT ID FROM b_socialservices_message WHERE ID=".$id);
1860 $arUser = $rsUser->Fetch();
1861 if(!$arUser)
1862 return false;
1863
1864 $DB->Query("DELETE FROM b_socialservices_message WHERE ID = ".$id." ", true);
1865 $cache_id = 'socserv_mes_user';
1866 $obCache = new CPHPCache;
1867 $cache_dir = '/bx/socserv_mes_user';
1868 $obCache->Clean($cache_id, $cache_dir);
1869 return true;
1870 }
1871 return false;
1872 }
1873}
$arParams
Определения access_dialog.php:21
const BLOG_PUBLISH_STATUS_READY
Определения include.php:46
const BLOG_PUBLISH_STATUS_PUBLISH
Определения include.php:47
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
$login
Определения change_password.php:8
static getInstance()
Определения application.php:98
static getInstance()
Определения eventmanager.php:31
static getRow(array $parameters)
Определения datamanager.php:398
static getList(array $parameters=array())
Определения datamanager.php:431
static cryptoAvailable($key='')
Определения cryptofield.php:73
static sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)
Определения collection.php:24
Определения user.php:48
static add(array $data)
Определения user.php:532
static update($primary, array $data)
Определения user.php:537
static GetByOwnerID($ID, $arGroup=Array())
Определения blog.php:968
static GetByID($ID)
Определения blog.php:931
static GetByUrl($BLOG_URL, $arGroup=Array())
Определения blog.php:1026
static Notify($arPost, $arBlog, $arParams)
Определения blog_post.php:726
static NotifyIm($arParams)
Определения blog_post.php:2058
static Add($arFields)
Определения blog.php:8
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения blog.php:249
static AddSocnetRead($ID)
Определения blog.php:452
static Add($arFields)
Определения blog_post.php:8
Определения cache.php:11
Clean($uniq_str, $initdir=false, $basedir="cache")
Определения cache.php:20
static Delete($id)
Определения authmanager.php:1853
static CheckFields($action, &$arFields)
Определения authmanager.php:1821
static Update($id, $arFields)
Определения authmanager.php:1836
Определения authmanager.php:985
CheckSettings()
Определения authmanager.php:1312
AuthorizeUser($socservUserFields, $bSave=false)
Определения authmanager.php:1395
static isSplitDenied($arGroups=null)
Определения authmanager.php:1375
GetSettings()
Определения authmanager.php:1052
static Delete($id)
Определения authmanager.php:1168
const MOBILE_MODE
Определения authmanager.php:994
static setGroupsDenyAuth($value)
Определения authmanager.php:1365
isAllowedRegisterNewUser()
Определения authmanager.php:1690
static OnAfterTMReportDailyAdd()
Определения authmanager.php:1216
static OnAfterTMDayStart()
Определения authmanager.php:1273
setAllowChangeOwner($value)
Определения authmanager.php:1657
static hasEncryptedFields($arFields)
Определения authmanager.php:1662
static setGroupsDenySplit($value)
Определения authmanager.php:1370
$allowChangeOwner
Определения authmanager.php:989
static GetOption($opt)
Определения authmanager.php:1339
onAfterWebAuth($addParams, $mode, $url)
Определения authmanager.php:1707
$userId
Определения authmanager.php:991
const OPENER_MODE
Определения authmanager.php:993
CheckPhotoURI($photoURI)
Определения authmanager.php:1325
static getGroupsDenySplit()
Определения authmanager.php:1360
onAfterMobileAuth()
Определения authmanager.php:1696
static getControllerUrl()
Определения authmanager.php:1013
static $settingsSuffix
Определения authmanager.php:986
static OnFindExternalUser($login)
Определения authmanager.php:1630
$checkRestrictions
Определения authmanager.php:988
static encryptFields(&$arFields)
Определения authmanager.php:1676
__construct($userId=null)
Определения authmanager.php:996
static OnUserDelete($id)
Определения authmanager.php:1200
static getGroupsDenyAuth()
Определения authmanager.php:1355
static OptionsSuffix()
Определения authmanager.php:1332
static CheckFields($action, &$arFields)
Определения authmanager.php:1057
static isAuthDenied($arGroups)
Определения authmanager.php:1390
static Update($id, $arFields)
Определения authmanager.php:1108
static SetOption($opt, $value)
Определения authmanager.php:1347
static SendSocialservicesMessages()
Определения authmanager.php:854
GetError($service_id, $error_code)
Определения authmanager.php:322
static CheckUniqueKey($bUnset=true)
Определения authmanager.php:351
GetSettingByServiceId(string $serviceId)
Определения authmanager.php:261
static listServicesBlockedByZone(string $zone)
Определения authmanager.php:85
static checkOldUser(&$socservUserFields)
Определения authmanager.php:955
static $arAuthServices
Определения authmanager.php:18
GetSettings()
Определения authmanager.php:242
static PostIntoBuzz($arUserTwit, $lastTwitId, $arSiteId=array())
Определения authmanager.php:496
static GetCachedUserOption($option)
Определения authmanager.php:929
static SetUniqueKey()
Определения authmanager.php:345
static GetTwitMessages($lastTwitId="1", $counter=1)
Определения authmanager.php:797
Authorize($service_id, $arParams=array())
Определения authmanager.php:286
GetAuthServices($suffix)
Определения authmanager.php:79
$userId
Определения authmanager.php:20
static SendUserMessage($socServUserId, $providerName, $message, $messageId)
Определения authmanager.php:462
static GetAuthorizedServiceId()
Определения authmanager.php:425
static checkAbandonedUser(&$socservUserFields)
Определения authmanager.php:968
static GetUniqueKey()
Определения authmanager.php:335
GetActiveAuthServices($arParams)
Определения authmanager.php:138
__construct($userId=null)
Определения authmanager.php:22
static SetAuthorizedServiceId($service_id)
Определения authmanager.php:413
static UnsetAuthorizedServiceId()
Определения authmanager.php:419
static GetUserArray($authId)
Определения authmanager.php:893
static PostIntoBuzzAsBlog($userTwit, $arSiteId=array(), $userLogin='')
Определения authmanager.php:520
static AppyUserSettings($suffix)
Определения authmanager.php:57
static GetUserArrayForSendMessages($userId)
Определения authmanager.php:439
isActiveAuthService(string $code)
Определения authmanager.php:109
CleanParam()
Определения authmanager.php:431
const ID
Определения bitrix24net.php:82
static gadgetAuthorize()
Определения bitrix24.php:149
const ID
Определения mailru2.php:12
static Add($arFields)
Определения authmanager.php:183
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения authmanager.php:208
const ID
Определения mailru.php:6
const ID
Определения odnoklassniki.php:6
Определения twitter.php:8
static getOAuthProxyString()
Определения authmanager.php:1790
static checkOAuthProxyParams()
Определения authmanager.php:1795
static packOAuthProxyString($proxyString)
Определения authmanager.php:1785
const ID
Определения vkontakte.php:6
const ID
Определения yandex.php:6
Определения user.php:6037
static killAllTags($text)
Определения functions.php:473
$options
Определения commerceml2.php:49
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$arGroups
Определения options.php:1766
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
$uid
Определения hot_keys_act.php:8
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$bTmpUserCreated
Определения csv_new_run.php:41
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$arOptions
Определения structure.php:223
$siteId
Определения ajax.php:8
CheckSerializedData($str, $max_depth=200)
Определения tools.php:4949
InitURLParam($url=false)
Определения tools.php:4443
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
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
BXClearCache($full=false, $initdir='')
Определения tools.php:5150
randString($pass_len=10, $pass_chars=false)
Определения tools.php:2154
bitrix_sessid_get($varname='sessid')
Определения tools.php:4695
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
Определения tools.php:4005
Определения culture.php:9
$GLOBALS['____1690880296']
Определения license.php:1
Определения ap.php:2
$service
Определения payment.php:18
$bError
Определения result_rec.php:46
$message
Определения payment.php:8
$counter
Определения options.php:5
$settings
Определения product_settings.php:43
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
const ADMIN_SECTION
Определения rss.php:2
$i
Определения factura.php:643
</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
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$option
Определения options.php:1711
$location
Определения options.php:2729
const SONET_ENTITY_GROUP
Определения include.php:117
const SONET_ENTITY_USER
Определения include.php:118
const SONET_RELATIONS_TYPE_ALL
Определения include.php:38
const SOCSERV_REGISTRATION_DENY
Определения include.php:4
const SOCSERV_AUTHORISATION_ERROR
Определения include.php:3
$arUseOnSites
Определения options.php:264
while($arSite=$dbSites->Fetch()) $oAuthManager
Определения options.php:26
const SITE_ID
Определения sonet_set_content_view.php:12
$error
Определения subscription_card_product.php:20
$k
Определения template_pdf.php:567
$action
Определения file_dialog.php:21
$url
Определения iframe.php:7