1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
controller_member.php
См. документацию.
1<?php
2
6
8
10{
11 public static function IsInCommonKernel()
12 {
13 return file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/update_db_updater.php");
14 }
15
16 // Controller's authentication
17 public static function OnExternalLogin(&$arParams)
18 {
19 global $USER, $APPLICATION;
20
21 $FORMAT_DATE = false;
22 $ar_mem = null;
23
24 $prefix = COption::GetOptionString("main", "auth_controller_prefix", "controller");
25 if (
26 ($prefix != '' && str_starts_with(mb_strtolower($arParams["LOGIN"]), $prefix . '\\'))
27 ||
28 ($prefix == '' && !str_contains($arParams["LOGIN"], "\\"))
29 )
30 {
31 $site = $prefix;
32 if ($prefix == '')
33 {
34 $login = $arParams["LOGIN"];
35 }
36 else
37 {
38 $login = mb_substr($arParams["LOGIN"], mb_strlen($prefix) + 1);
39 }
40 $password = $arParams["PASSWORD"];
41 $arVars = ["login" => $login, "password" => $password];
42
43 $oRequest = new CControllerClientRequestTo("check_auth", $arVars);
44 $oResponse = $oRequest->SendWithCheck();
45 if (!$oResponse)
46 {
47 return false;
48 }
49
50 if (!$oResponse->OK())
51 {
52 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR1") . ": " . $oResponse->text);
53 $APPLICATION->ThrowException($e);
54 return false;
55 }
56
57 $arUser = $oResponse->arParameters['USER_INFO'];
58 }
59 elseif (
60 COption::GetOptionString("main", "auth_controller_sso", "N") == "Y"
61 && mb_strpos($arParams["LOGIN"], "\\") > 0
62 )
63 {
64 $site = mb_substr($arParams["LOGIN"], 0, mb_strpos($arParams["LOGIN"], "\\"));
65 $login = mb_substr($arParams["LOGIN"], mb_strpos($arParams["LOGIN"], "\\") + 1);
66 $password = $arParams["PASSWORD"];
67 $arVars = ["login" => $login, "password" => $password, "site" => $site];
68
69 $oRequest = new CControllerClientRequestTo("remote_auth", $arVars);
70 $oResponse = $oRequest->SendWithCheck();
71 if (!$oResponse)
72 {
73 return false;
74 }
75
76 if (!$oResponse->OK())
77 {
78 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR1") . ": " . $oResponse->text);
79 $APPLICATION->ThrowException($e);
80 return false;
81 }
82
83 $arUser = $oResponse->arParameters['USER_INFO'];
84 }
85 elseif (
86 COption::GetOptionString("controller", "auth_controller_enabled", "N") === "Y"
87 && mb_strpos($arParams["LOGIN"], "\\") > 0
88 && CModule::IncludeModule("controller")
89 )
90 {
91 $site = mb_substr($arParams["LOGIN"], 0, mb_strpos($arParams["LOGIN"], "\\"));
92 $login = mb_substr($arParams["LOGIN"], mb_strpos($arParams["LOGIN"], "\\") + 1);
93 $password = $arParams["PASSWORD"];
94
95 $url = mb_strtolower(trim($site, " \t\r\n./"));
96 if (!str_starts_with($url, "http://") && !str_starts_with($url, "https://"))
97 {
98 $url = ["http://" . $url, "https://" . $url];
99 }
100
101 $dbr_mem = CControllerMember::GetList(
102 [],
103 [
104 "=URL" => $url,
105 "=DISCONNECTED" => "N",
106 "=ACTIVE" => "Y",
107 ]
108 );
109 $ar_mem = $dbr_mem->Fetch();
110 if (!$ar_mem)
111 {
112 return false;
113 }
114
115 $res = CControllerMember::CheckUserAuth($ar_mem["ID"], $login, $password);
116
117 if (!is_array($res))
118 {
119 return false;
120 }
121
122 $arUser = $res['USER_INFO'];
123 if (is_array($arUser))
124 {
125 $arUser["CONTROLLER_ADMIN"] = "N";
126 }
127 if (isset($res["FORMAT_DATE"]))
128 {
129 $FORMAT_DATE = $res["FORMAT_DATE"];
130 }
131 }
132 else
133 {
134 return false;
135 }
136
140 if (is_array($arUser) && mb_strtolower($arUser['LOGIN']) == mb_strtolower($login))
141 {
142 //When user did not fill any inforamtion about
143 //we'll use first part of his e-mail like login
144 if ($arUser["NAME"] == '' && $arUser["SECOND_NAME"] == '')
145 {
146 if (preg_match("/^(.+)@/", $arUser["LOGIN"], $match))
147 {
148 $arUser["NAME"] = $match[1];
149 }
150 else
151 {
152 $arUser["NAME"] = $arUser["LOGIN"];
153 }
154 }
155
156 if ($site != '')
157 {
158 $arUser['LOGIN'] = $site . "\\" . $arUser['LOGIN'];
159 }
160
161 $USER_ID = CControllerClient::UpdateUser($arUser, $FORMAT_DATE);
162
163 if ($arUser["CONTROLLER_ADMIN"] == "Y")
164 {
165 AddEventHandler("main", "OnAfterUserLogin", ["CControllerClient", "OnAfterUserLogin"]);
166 $arParams["CONTROLLER_ADMIN"] = "Y";
167 }
168
169 $arParams["REMEMBER"] = "N";
170
171 if (
172 $ar_mem
173 && $USER_ID
174 && class_exists("\\Bitrix\\Controller\\AuthLogTable")
175 && \Bitrix\Controller\AuthLogTable::isEnabled()
176 )
177 {
178 \Bitrix\Controller\AuthLogTable::logSiteToControllerAuth(
179 $ar_mem["ID"],
180 $USER_ID,
181 true,
182 'CONTROLLER_MEMBER',
183 $arUser['NAME'] . ' ' . $arUser['LAST_NAME'] . ' (' . $arUser['LOGIN'] . ')'
184 )->isSuccess();
185 }
186
187 return $USER_ID;
188 }
189
190 return false;
191 }
192
193 public static function OnAfterUserLogin($arParams)
194 {
195 global $USER;
196 if ($arParams["CONTROLLER_ADMIN"] === "Y")
197 {
198 $USER->SetControllerAdmin();
199 }
200 }
201
202 public static function UpdateUser($arFields = [], $FORMAT_DATE = false)
203 {
204 global $DB;
205
206 $arFields["ACTIVE"] = "Y";
207 $arFields["PASSWORD"] = Random::getString(32);
208
209 $oUser = new CUser;
210 unset($arFields["ID"]);
211 unset($arFields["TIMESTAMP_X"]);
212 unset($arFields["DATE_REGISTER"]);
213 if (
214 isset($arFields["PERSONAL_BIRTHDAY"])
215 && $arFields["PERSONAL_BIRTHDAY"] != ''
216 && $FORMAT_DATE !== false
217 )
218 {
219 $arFields["PERSONAL_BIRTHDAY"] = $DB->FormatDate($arFields["PERSONAL_BIRTHDAY"], $FORMAT_DATE, FORMAT_DATE);
220 }
221
222 $arFields['EXTERNAL_AUTH_ID'] = "__controller";
223
224 $dbr_user = CUser::GetList('', '', [
225 "LOGIN_EQUAL_EXACT" => $arFields["LOGIN"],
226 "EXTERNAL_AUTH_ID" => "__controller",
227 ]);
228 if ($ar_user = $dbr_user->Fetch())
229 {
230 $USER_ID = $ar_user["ID"];
231
232 if (is_array($arFields["GROUPS_TO_ADD"]) && is_array($arFields["GROUPS_TO_DELETE"]))
233 {
234 $arFields["GROUP_ID"] = CUser::GetUserGroup($USER_ID);
235 foreach ($arFields["GROUPS_TO_DELETE"] as $group_id)
236 {
237 $group_id = CGroup::GetIDByCode($group_id);
238 if ($group_id > 0)
239 {
240 $p = array_search($group_id, $arFields["GROUP_ID"]);
241 if ($p !== false)
242 {
243 unset($arFields["GROUP_ID"][$p]);
244 }
245 }
246 }
247 foreach ($arFields["GROUPS_TO_ADD"] as $group_id)
248 {
249 $group_id = CGroup::GetIDByCode($group_id);
250 if ($group_id > 0)
251 {
252 $arFields["GROUP_ID"][] = $group_id;
253 }
254 }
255 }
256 elseif (is_array($arFields["GROUP_ID"]))
257 {
258 $groups = $arFields["GROUP_ID"];
259 $arFields["GROUP_ID"] = [];
260 foreach ($groups as $group_id)
261 {
262 $group_id = CGroup::GetIDByCode($group_id);
263 if ($group_id > 0)
264 {
265 $arFields["GROUP_ID"][] = $group_id;
266 }
267 }
268 }
269
270 if (!$oUser->Update($USER_ID, $arFields))
271 {
272 return false;
273 }
274 }
275 else
276 {
277 $arFields["LID"] = SITE_ID;
278 if (is_array($arFields["GROUP_ID"]))
279 {
280 $groups = $arFields["GROUP_ID"];
281 $arFields["GROUP_ID"] = [];
282 foreach ($groups as $group_id)
283 {
284 $group_id = CGroup::GetIDByCode($group_id);
285 if ($group_id > 0)
286 {
287 $arFields["GROUP_ID"][] = $group_id;
288 }
289 }
290 }
291
292 $USER_ID = $oUser->Add($arFields);
293 }
294
295 return $USER_ID;
296 }
297
298 public static function AuthorizeAdmin($arParams = [])
299 {
300 global $USER;
301
302 if ($arParams["ID"] > 0)
303 {
304 $ADMIN_ID = $arParams["ID"];
305 }
306 else
307 {
308 unset($arParams["GROUP_ID"]);
310 }
311
312 if ($ADMIN_ID > 0)
313 {
314 CUser::SetUserGroup($ADMIN_ID, [1]);
315
317 ->setUserId($ADMIN_ID)
318 ->setMethod(Method::Controller)
319 ;
320 $USER->Authorize($context);
321 $USER->SetControllerAdmin();
322
323 return $ADMIN_ID;
324 }
325
326 return false;
327 }
328
329 public static function AuthorizeUser($arParams = [])
330 {
331 global $USER;
332
334 if ($USER_ID > 0)
335 {
337 ->setUserId($USER_ID)
338 ->setMethod(Method::Controller)
339 ;
340 $USER->Authorize($context);
341 return $USER_ID;
342 }
343
344 return false;
345 }
346
347 public static function OnExternalAuthList()
348 {
349 $arResult = [
350 [
351 "ID" => "__controller",
352 "NAME" => GetMessage("MAIN_CMEMBER_AUTH_TYPE"),
353 ],
354 ];
355
356 return $arResult;
357 }
358
359 public static function PrepareUserInfo($arUser)
360 {
361 $arFields = [
362 "ID",
363 "LOGIN",
364 "NAME",
365 "LAST_NAME",
366 "EMAIL",
367 "PERSONAL_PROFESSION",
368 "PERSONAL_WWW",
369 "PERSONAL_ICQ",
370 "PERSONAL_GENDER",
371 "PERSONAL_BIRTHDAY",
372 "PERSONAL_PHONE",
373 "PERSONAL_FAX",
374 "PERSONAL_MOBILE",
375 "PERSONAL_PAGER",
376 "PERSONAL_STREET",
377 "PERSONAL_MAILBOX",
378 "PERSONAL_CITY",
379 "PERSONAL_STATE",
380 "PERSONAL_ZIP",
381 "PERSONAL_COUNTRY",
382 "PERSONAL_NOTES",
383 "WORK_COMPANY",
384 "WORK_DEPARTMENT",
385 "WORK_POSITION",
386 "WORK_WWW",
387 "WORK_PHONE",
388 "WORK_FAX",
389 "WORK_PAGER",
390 "WORK_STREET",
391 "WORK_MAILBOX",
392 "WORK_CITY",
393 "WORK_STATE",
394 "WORK_ZIP",
395 "WORK_COUNTRY",
396 "WORK_PROFILE",
397 "WORK_NOTES",
398 ];
399
400 $arSaveUser = [];
401 foreach ($arFields as $key)
402 {
403 $arSaveUser[$key] = $arUser[$key];
404 }
405
406 return $arSaveUser;
407 }
408
409 public static function SendMessage($name, $status = 'Y', $description = '')
410 {
411 // send to controller
412 $arVars =
413 [
414 "NAME" => $name,
415 "STATUS" => $status,
416 "DESCRIPTION" => $description,
417 ];
418
419 $oRequest = new CControllerClientRequestTo("log", $arVars);
420 if (!($oResponse = $oRequest->SendWithCheck()))
421 {
422 return false;
423 }
424
425 if (!$oResponse->OK())
426 {
427 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR2") . ": " . $oResponse->text);
428 $GLOBALS["APPLICATION"]->ThrowException($e);
429 return false;
430 }
431 return null;
432 }
433
434 public static function InitTicket($controller_url)
435 {
436 // generating own member_id and temporary ticket
437 $member_id = "m" . Random::getString(31);
438 COption::SetOptionString("main", "controller_member_id", $member_id);
439
440 $member_secret_id = "m" . Random::getString(31);
441 COption::SetOptionString("main", "controller_member_secret_id", $member_secret_id);
442
443 $ticket_id = "m" . Random::getString(31);
444 COption::SetOptionString("main", "controller_ticket", time() . "|" . $ticket_id . "|" . $controller_url);
445 COption::SetOptionString("main", "controller_url", $controller_url);
446
447 return [$member_id, $member_secret_id, $ticket_id];
448 }
449
450 public static function JoinToControllerEx($controller_url, $controller_login, $controller_password, $arMemberParams = [])
451 {
452 if (COption::GetOptionString("main", "controller_member", "N") == "Y")
453 {
454 return false;
455 }
456
457 if ($arMemberParams["URL"] == '')
458 {
459 $arMemberParams["URL"] = $_SERVER['HTTP_HOST'];
460 }
461
462 [, $member_secret_id, $ticket_id] = CControllerClient::InitTicket($controller_url);
463
464 // send to controller
465 $arVars =
466 [
467 "member_secret_id" => $member_secret_id,
468 "ticket_id" => $ticket_id,
469 "admin_login" => $controller_login,
470 "admin_password" => $controller_password,
471 "url" => $arMemberParams["URL"],
472 "name" => $arMemberParams["NAME"],
473 "contact_person" => $arMemberParams["CONTACT_PERSON"],
474 "email" => $arMemberParams["EMAIL"],
475 "shared_kernel" => ($arMemberParams["SHARED_KERNEL"] ? "Y" : "N"),
476 ];
477
478 if ($arMemberParams["CONTROLLER_GROUP"] > 0)
479 {
480 $arVars['group_id'] = $arMemberParams["CONTROLLER_GROUP"];
481 }
482
483 $oRequest = new CControllerClientRequestTo("join", $arVars);
484 if (!($oResponse = $oRequest->Send()))
485 {
486 return false;
487 }
488
489 if (!$oResponse->OK())
490 {
491 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR3") . ": " . $oResponse->text);
492 $GLOBALS["APPLICATION"]->ThrowException($e);
493 return false;
494 }
495
496 COption::SetOptionString("main", "controller_member", "Y");
497
498 global $USER;
499 $USER->UpdateSessionData($USER->getContext());
500
501 return true;
502 }
503
504 public static function JoinToController($controller_url, $controller_login, $controller_password, $site_url = false, $controller_group = false, $site_name = false, $bSharedKernel = false)
505 {
506 $arMemberParams = [
507 "URL" => $site_url,
508 "NAME" => $site_name,
509 "SHARED_KERNEL" => $bSharedKernel,
510 "CONTROLLER_GROUP" => $controller_group,
511 ];
512
513 return CControllerClient::JoinToControllerEx($controller_url, $controller_login, $controller_password, $arMemberParams);
514 }
515
516 public static function RemoveFromController($controller_login, $controller_password)
517 {
518 if (COption::GetOptionString("main", "controller_member", "N") != "Y")
519 {
520 return false;
521 }
522
523 // send to controller
524 $arVars =
525 [
526 "admin_login" => $controller_login,
527 "admin_password" => $controller_password,
528 ];
529
530 $oRequest = new CControllerClientRequestTo("remove", $arVars);
531 if (!($oResponse = $oRequest->SendWithCheck()))
532 {
533 return false;
534 }
535
536 if (!$oResponse->OK())
537 {
538 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR4") . ": " . $oResponse->text);
539 $GLOBALS["APPLICATION"]->ThrowException($e);
540 return false;
541 }
542
543 COption::SetOptionString("main", "controller_member", "N");
544 return true;
545 }
546
547 public static function UpdateCounters()
548 {
549 if (COption::GetOptionString("main", "controller_member", "N") != "Y")
550 {
551 //remove this agent when disconnected from the controller
552 return "";
553 }
554 else
555 {
556 $oRequest = new CControllerClientRequestTo("update_counters");
557 $oResponse = $oRequest->SendWithCheck();
558
559 if (!$oResponse)
560 {
561 throw new \Bitrix\Main\SystemException("CControllerClient::UpdateCounters: unknown error");
562 }
563 elseif (!$oResponse->OK())
564 {
565 throw new \Bitrix\Main\SystemException("CControllerClient::UpdateCounters: " . $oResponse->text);
566 }
567
568 return "CControllerClient::UpdateCounters();";
569 }
570 }
571
572 public static function ExecuteEvent($eventName, $arParams = [])
573 {
574 global $APPLICATION;
575 if (COption::GetOptionString("main", "controller_member", "N") != "Y")
576 {
577 return null;
578 }
579 else
580 {
581 $APPLICATION->ResetException();
582 $oRequest = new CControllerClientRequestTo("execute_event", [
583 "event_name" => $eventName,
584 "parameters" => $arParams,
585 ]);
586 $oResponse = $oRequest->SendWithCheck();
587
588 if (!$oResponse || !$oResponse->OK())
589 {
590 $e = $APPLICATION ? $APPLICATION->GetException() : false;
591 $errorMessage = is_object($e) ? ' ' . $e->GetString() : '';
592 if ($oResponse)
593 {
594 $errorMessage .= ' http headers: [' . $oResponse->httpHeaders . ']';
595 if ($oResponse->text)
596 {
597 $errorMessage .= ' http body: [' . substr($oResponse->text, 0, 200) . ']';
598 }
599 }
600 else
601 {
602 $errorMessage .= ' unknown error';
603 }
604 trigger_error('CControllerClient::ExecuteEvent(' . $eventName . '):' . $errorMessage, E_USER_WARNING);
605 }
606
607 return $oResponse->arParameters['result'];
608 }
609 }
610 public static function Unlink()
611 {
612 $disconnect_command = COption::GetOptionString("main", "~controller_disconnect_command", "");
613 if ($disconnect_command <> '')
614 {
615 eval($disconnect_command);
616 }
617 COption::SetOptionString("main", "controller_member", "N");
618 }
619
620 public static function GetBackup($bRefresh = false)
621 {
622 static $arCachedData;
623 if (!isset($arCachedData) || $bRefresh)
624 {
625 $arCachedData = unserialize(COption::GetOptionString("main", "~controller_backup", ""), ['allowed_classes' => false]);
626 }
627
628 return $arCachedData;
629 }
630
631 public static function SetBackup($arBackup)
632 {
633 COption::SetOptionString("main", "~controller_backup", serialize($arBackup));
635 }
636
637 public static function SetOptionString($module_id, $option_id, $value)
638 {
639 $arBackup = CControllerClient::GetBackup();
640 if (!is_set($arBackup["options"][$module_id], $option_id))
641 {
642 $arBackup["options"][$module_id][$option_id] = COption::GetOptionString($module_id, $option_id, "");
644 }
645 COption::SetOptionString($module_id, $option_id, $value);
646 }
647
648 public static function RestoreOption($module_id, $option_id)
649 {
650 $arBackup = CControllerClient::GetBackup();
651 if (is_set($arBackup["options"][$module_id], $option_id))
652 {
653 COption::SetOptionString($module_id, $option_id, $arBackup["options"][$module_id][$option_id]);
654 unset($arBackup["options"][$module_id][$option_id]);
656 return true;
657 }
658 return false;
659 }
660
661 public static function SetModules($arModules)
662 {
663 $arInstalled = [];
664 $arm = CModule::_GetCache();
665 foreach ($arm as $module_id => $tr)
666 {
667 $arInstalled[] = $module_id;
668 }
669 $arBackup = CControllerClient::GetBackup();
670 if (!isset($arBackup["modules"]))
671 {
672 $arBackup["modules"] = $arInstalled;
674 }
675
676 foreach ($arModules as $module_id => $status)
677 {
678 if (!($oModule = CModule::CreateModuleObject($module_id)))
679 {
680 continue;
681 }
682
683 if ($status == "Y" && !in_array($module_id, $arInstalled))
684 {
685 if (!method_exists($oModule, "InstallDB") || $oModule->InstallDB() === false)
686 {
687 $oModule->Add();
688 }
689 }
690 elseif ($status == "N" && in_array($module_id, $arInstalled))
691 {
692 $oModule->Remove();
693 }
694 }
695
696 return true;
697 }
698
699 public static function RestoreModules()
700 {
701 $arBackup = CControllerClient::GetBackup();
702 if (isset($arBackup["modules"]))
703 {
704 $oModule = new CModule();
705 $arWasInstalled = $arBackup["modules"];
706
707 $arNowInstalled = [];
708 $arm = CModule::_GetCache();
709 foreach ($arm as $module_id => $tr)
710 {
711 $arNowInstalled[] = $module_id;
712 }
713
714 foreach ($arNowInstalled as $module_id)
715 {
716 if (!in_array($module_id, $arWasInstalled))
717 {
718 $oModule->MODULE_ID = $module_id;
719 $oModule->Remove();
720 }
721 else
722 {
723 unset($arWasInstalled[array_search($module_id, $arWasInstalled)]);
724 }
725 }
726
727 foreach ($arWasInstalled as $module_id)
728 {
729 $oModule->MODULE_ID = $module_id;
730 $oModule->Add();
731 }
732
733 unset($arBackup["modules"]);
735 }
736 }
737
738 public static function RestoreGroupSecurity($group_code, $arModules)
739 {
740 if (($group_id = CGroup::GetIDByCode($group_code)) <= 0)
741 {
742 return false;
743 }
744
745 $arBackup = CControllerClient::GetBackup();
746 $old_settings = $arBackup["security"][$group_code];
747 if (!isset($old_settings))
748 {
749 return null;
750 }
751
752 foreach ($old_settings as $module_id => $level)
753 {
754 if (!in_array($module_id, $arModules))
755 {
756 continue;
757 }
758
759 CGroup::SetModulePermission($group_id, $module_id, $level);
760 unset($arBackup["security"][$group_code][$module_id]);
761 }
762
764
765 return null;
766 }
767
768 public static function SetTaskSecurity($task_id, $module_id, $arOperations, $letter = '')
769 {
770 $ID = 0;
771 $dbr_task = CTask::GetList([], ['NAME' => $task_id, 'MODULE_ID' => $module_id, "BINDING" => 'module']);
772 if ($ar_task = $dbr_task->Fetch())
773 {
774 if ($ar_task['SYS'] == 'Y')
775 {
776 return false;
777 }
778 $ID = $ar_task['ID'];
779 }
780
781 $arFields = [
782 "NAME" => $task_id,
783 "LETTER" => $letter,
784 "BINDING" => 'module',
785 "MODULE_ID" => $module_id,
786 ];
787
788 if ($ID > 0)
789 {
791 }
792 else
793 {
795 $res = ($ID > 0);
796 if ($res)
797 {
798 $arBackup = CControllerClient::GetBackup();
799 $arBackup['security_task'][] = $ID;
801 }
802 }
803
804 if ($res)
805 {
806 CTask::SetOperations($ID, $arOperations, true);
807 }
808 return null;
809 }
810
811 public static function SetGroupSecurity($group_code, $arPermissions, $arSubGroups = false)
812 {
813 if (($group_id = CGroup::GetIDByCode($group_code)) <= 0)
814 {
815 return false;
816 }
817
818 $arBackup = CControllerClient::GetBackup();
819 foreach ($arPermissions as $module_id => $level)
820 {
821 if (!is_set($arBackup["security"][$group_code], $module_id))
822 {
823 $arBackup["security"][$group_code][$module_id] = CGroup::GetModulePermission($group_id, $module_id);
824 }
825
826 CGroup::SetModulePermission($group_id, $module_id, $level);
827 }
828
829 if (is_array($arSubGroups))
830 {
831 $arSubordGroupID = [];
832 foreach ($arSubGroups as $sub_group_id)
833 {
834 $sub_group_id = CGroup::GetIDByCode($sub_group_id);
835 if ($sub_group_id > 0)
836 {
837 $arSubordGroupID[] = $sub_group_id;
838 }
839 }
840
841 if (!is_set($arBackup["security_subord_groups"], $group_code))
842 {
843 $arBackup["security_subord_groups"][$group_code] = CGroup::GetSubordinateGroups($group_id);
844 }
845
846 CGroup::SetSubordinateGroups($group_id, $arSubordGroupID);
847 }
848
850
851 return null;
852 }
853
854 public static function RestoreSecurity($arExcludeGroups = [])
855 {
856 $arBackup = CControllerClient::GetBackup();
857 if (!is_array($arBackup))
858 {
859 return true;
860 }
861
862 if (is_array($arBackup["security"]))
863 {
864 foreach ($arBackup["security"] as $group_code => $perms)
865 {
866 if (in_array($group_code, $arExcludeGroups))
867 {
868 continue;
869 }
870
871 if (($group_id = CGroup::GetIDByCode($group_code)) > 0)
872 {
873 foreach ($perms as $module_id => $level)
874 {
875 CGroup::SetModulePermission($group_id, $module_id, $level);
876 }
877
878 if (isset($arBackup["security_subord_groups"][$group_code]))
879 {
880 CGroup::SetSubordinateGroups($group_id, $arBackup["security_subord_groups"][$group_code]);
881 }
882 }
883 unset($arBackup["security"][$group_code]);
884 unset($arBackup["security_subord_groups"][$group_code]);
885 }
886
887 if (empty($arBackup["security"]))
888 {
889 unset($arBackup["security"]);
890 }
891
893 }
894
895 return true;
896 }
897
898 public static function RestoreAll()
899 {
900 $arBackup = CControllerClient::GetBackup();
901 if (!is_array($arBackup))
902 {
903 return true;
904 }
905
906 if (is_array($arBackup["options"]))
907 {
908 foreach ($arBackup["options"] as $module_id => $options)
909 {
910 foreach ($options as $option_id => $option_value)
911 {
912 COption::SetOptionString($module_id, $option_id, $option_value);
913 }
914 }
915 }
918 if (is_array($arBackup['security_task']))
919 {
920 foreach ($arBackup['security_task'] as $task_id)
921 {
922 CTask::Delete($task_id);
923 }
924 }
926 return true;
927 }
928
929 public static function GetInstalledOptions($module_id)
930 {
932 $arOptions = $arOptions["options"][$module_id] ?? [];
933 return $arOptions;
934 }
935
936 public static function RunCommand($command, $oRequest, $oResponse)
937 {
938 global $APPLICATION, $USER, $DB;
939 return eval($command);
940 }
941}
942
949{
950 public $debug_const = '';
951 public $debug_file_const = '';
957 var $hash;
960
966 public function isDebugEnabled()
967 {
968 if (
969 $this->debug_const
970 && defined($this->debug_const)
971 && constant($this->debug_const) === true
972 )
973 {
974 return true;
975 }
976 else
977 {
978 return false;
979 }
980 }
981
991 public function getDebugLogDirectory()
992 {
993 if ($this->debug_file_const && defined($this->debug_file_const))
994 {
995 return (string)constant($this->debug_file_const);
996 }
997 else
998 {
999 return $_SERVER['DOCUMENT_ROOT'] . '/bitrix/controller_logs/';
1000 }
1001 }
1002
1009 public function getDebugLogFileName()
1010 {
1011 if ($this->session_id)
1012 {
1013 return $this->session_id . ".log";
1014 }
1015 else
1016 {
1017 return "gen_" . Random::getString(32) . ".log";
1018 }
1019 }
1020
1031 public function Debug($sText)
1032 {
1033 if (!$this->isDebugEnabled())
1034 {
1035 return;
1036 }
1037
1039
1040 ignore_user_abort(true);
1041
1043 file_put_contents($filename, date("Y-m-d H:i:s") . " - " . (is_array($sText) ? print_r($sText, true) : $sText) . "\n----------\n", FILE_APPEND | LOCK_EX);
1044
1045 ignore_user_abort(false);
1046 }
1047
1057 protected function unpackParameters($parameters, $encoding = '')
1058 {
1059 if (CheckSerializedData($parameters))
1060 {
1061 $arParameters = unserialize($parameters, ['allowed_classes' => false]);
1062 if ($encoding)
1063 {
1064 if (is_array($arParameters) && array_key_exists("file", $arParameters))
1065 {
1066 $file = $arParameters["file"];
1067 unset($arParameters["file"]);
1068 $this->_decode($arParameters, $encoding, SITE_CHARSET);
1069 $arParameters["file"] = $file;
1070 }
1071 else
1072 {
1073 $this->_decode($arParameters, $encoding, SITE_CHARSET);
1074 }
1075 }
1076 return $arParameters;
1077 }
1078 return null;
1079 }
1080
1090 protected function _decode(&$arParameters, $encodingFrom, $encodingTo)
1091 {
1093 }
1094
1102 public function Check()
1103 {
1104 global $APPLICATION;
1105
1106 $hash = implode("|", func_get_args());
1107 $md5hash = md5($hash);
1108
1109 if ($md5hash != $this->hash)
1110 {
1111 if (is_object($APPLICATION))
1112 {
1113 $e = new CApplicationException("Hash check failed: hash(" . $hash . ")=" . $md5hash . " != " . $this->hash);
1114 $APPLICATION->ThrowException($e);
1115 }
1116 return false;
1117 }
1118
1119 return true;
1120 }
1121
1130 function Sign()
1131 {
1132 $hash = implode("|", func_get_args());
1133 $this->hash = md5($hash);
1134 return $this->hash;
1135 }
1136}
1137
1139// Базовый класс для классов типа Request:
1140//
1141// Для использования на контроллере:
1142// CControllerServerRequestTo - Класс для отправки запроса клиенту
1143// CControllerServerRequestFrom - Класс для получения запроса от клиента
1144//
1145// Для использования на клиенте:
1146// CControllerClientRequestTo - Класс для отправки запроса на сервер
1147// CControllerClientRequestFrom - Класс для получения запроса от сервера
1150{
1152 protected $hostname = '';
1154 //Для работы в классах получающих результаты (CControllerClientRequestFrom, CControllerServerRequestFrom):
1156
1157 // заполняет объект переменными, пришедшими в $_REQUEST
1158 public function InitFromRequest()
1159 {
1160 $this->member_id = $_REQUEST['member_id'];
1161 $this->session_id = $_REQUEST['session_id'];
1162 $this->operation = $_REQUEST['operation'];
1163
1164 if (isset($_REQUEST['version']))
1165 {
1166 $this->version = $_REQUEST['version'];
1167 }
1168
1169 if (isset($_REQUEST['encoding']))
1170 {
1171 $this->encoding = $_REQUEST['encoding'];
1172 }
1173
1174 if (isset($_REQUEST['parameters']))
1175 {
1176 $this->strParameters = base64_decode($_REQUEST['parameters']);
1177 $arParameters = $this->unpackParameters($this->strParameters, $_REQUEST['encoding'] ?? '');
1178 if ($arParameters)
1179 {
1180 $this->arParameters = $arParameters;
1181 }
1182 }
1183 $this->hash = $_REQUEST['hash'];
1184 }
1185
1192 public function Check()
1193 {
1194 return parent::Check($this->operation, $this->strParameters, $this->secret_id);
1195 }
1196
1202 public function Sign()
1203 {
1204 parent::Sign($this->operation, serialize($this->arParameters), $this->secret_id);
1205 }
1206
1212 public function Internal()
1213 {
1214 return !empty($_POST);
1215 }
1216
1218 // Для работы в классах отправляющих запросы (CControllerClientRequestTo, CControllerServerRequestTo):
1220
1226 public function MakeRequestString()
1227 {
1228 $result = "operation=" . $this->operation .
1229 "&version=" . $this->version .
1230 "&session_id=" . $this->session_id .
1231 "&member_id=" . urlencode($this->member_id) .
1232 "&encoding=" . urlencode(SITE_CHARSET);
1233
1234 if (is_array($this->arParameters))
1235 {
1236 $result .= "&parameters=" . urlencode(base64_encode(serialize($this->arParameters)));
1237 }
1238
1239 $this->Sign();
1240 $result .= "&hash=" . urlencode($this->hash);
1241
1242 return $result;
1243 }
1244
1251 public function RedirectRequest($url)
1252 {
1253 if (mb_strpos($url, "?") > 0)
1254 {
1255 $url .= '&';
1256 }
1257 else
1258 {
1259 $url .= '?';
1260 }
1261
1262 $url .= $this->MakeRequestString();
1263
1264 if ($this->isDebugEnabled())
1265 {
1266 $this->Debug([
1267 __FILE__ . ":" . __LINE__,
1268 "Request by redirect",
1269 "url" => $url,
1270 "Packet" => $this,
1271 ]);
1272 }
1273
1274 LocalRedirect($url, true);
1275 }
1276
1284 public function Send($url = "", $page = "")
1285 {
1286 global $APPLICATION;
1287
1288 $server_port = 80;
1289 $server_name = mb_strtolower(trim($url, "/ \r\n\t"));
1290 if (str_starts_with($server_name, 'http://'))
1291 {
1292 $server_name = substr($server_name, 7);
1293 }
1294 elseif (str_starts_with($server_name, 'https://'))
1295 {
1296 $server_name = substr($server_name, 8);
1297 $server_port = 443;
1298 }
1299
1300 if (preg_match('/.+:([0-9]+)$/', $server_name, $matches))
1301 {
1302 $server_port = $matches[1];
1303 $server_name = substr($server_name, 0, 0 - strlen($server_port) - 1);
1304 }
1305
1306 $proxy_url = CPageOption::GetOptionString("main", "controller_proxy_url");
1307 $proxy_port = CPageOption::GetOptionString("main", "controller_proxy_port");
1308 $bUseProxy = ($proxy_url <> '' && $proxy_port <> '');
1309 if (!$bUseProxy)
1310 {
1311 $proxy_url = COption::GetOptionString("main", "controller_proxy_url", "");
1312 $proxy_port = COption::GetOptionString("main", "controller_proxy_port", "");
1313 $bUseProxy = ($proxy_url <> '' && $proxy_port <> '');
1314 }
1315
1316 // соединяемся с удаленным сервером
1317 if ($bUseProxy)
1318 {
1319 $proxy_port = intval($proxy_port);
1320 if ($proxy_port <= 0)
1321 {
1322 $proxy_port = 80;
1323 }
1324
1325 $requestIP = $proxy_url;
1326 $requestPort = $proxy_port;
1327 }
1328 elseif ($this->hostname)
1329 {
1330 $requestIP = $this->hostname;
1331 $requestPort = $server_port;
1332 }
1333 else
1334 {
1335 $requestIP = $server_name;
1336 $requestPort = $server_port;
1337 }
1338
1339 $conn = @fsockopen(($requestPort == 443 ? 'ssl://' : '') . $requestIP, $requestPort, $errno, $errstr, 30);
1340 if (!$conn)
1341 {
1342 if ($this->isDebugEnabled())
1343 {
1344 $this->Debug([
1345 __FILE__ . ":" . __LINE__,
1346 "We can't send request to the $server_name:$server_port from member#" . $this->member_id,
1347 "errno" => $errno,
1348 "errstr" => $errstr,
1349 "Packet" => $this,
1350 ]);
1351 }
1352
1353 if (is_object($APPLICATION))
1354 {
1355 $strError = GetMessage("MAIN_CMEMBER_ERR5") . $server_name . ":" . $server_port . " (" . $errstr . ")";
1356 $e = new CApplicationException(htmlspecialcharsex($strError));
1357 $APPLICATION->ThrowException($e);
1358 }
1359
1360 return false;
1361 }
1362
1363 $strVars = $this->MakeRequestString();
1364
1365 if ($bUseProxy)
1366 {
1367 $strRequest = "POST http://" . $server_name . ":" . $server_port . $page . " HTTP/1.0\r\n";
1368
1369 $proxy_user = COption::GetOptionString("main", "controller_proxy_user", "");
1370 $proxy_password = COption::GetOptionString("main", "controller_proxy_password", "");
1371 if ($proxy_user <> '')
1372 {
1373 $strRequest .= "Proxy-Authorization: Basic " . base64_encode($proxy_user . ":" . $proxy_password) . "\r\n";
1374 }
1375 }
1376 else
1377 {
1378 $strRequest = "POST " . $page . " HTTP/1.0\r\n";
1379 }
1380 $strRequest .= "User-Agent: BitrixControllerMember\r\n";
1381 $strRequest .= "Accept: */*\r\n";
1382 $strRequest .= "Host: " . $server_name . "\r\n";
1383 $strRequest .= "Accept-Language: en\r\n";
1384 $strRequest .= "Content-type: application/x-www-form-urlencoded\r\n";
1385 $strRequest .= "Content-length: " . mb_strlen($strVars) . "\r\n\r\n";
1386 $strRequest .= $strVars . "\r\n";
1387
1388 if ($this->isDebugEnabled())
1389 {
1390 $this->Debug([
1391 __FILE__ . ":" . __LINE__,
1392 "We send request to the $server_name:$server_port from member#" . $this->member_id,
1393 "strVars" => $strVars,
1394 "Packet" => $this,
1395 ]);
1396 }
1397
1398 fputs($conn, $strRequest);
1399
1400 $header = '';
1401 while (($line = fgets($conn, 4096)) && $line != "\r\n")
1402 {
1403 $header .= $line;
1404 }
1405
1406 $result = '';
1407 while ($line = fread($conn, 4096))
1408 {
1409 $result .= $line;
1410 }
1411
1412 fclose($conn);
1413
1414 $packet_result = new __CControllerPacketResponse();
1415 $packet_result->httpHeaders = $header;
1416 $packet_result->secret_id = $this->secret_id;
1417 $packet_result->ParseResult($result);
1418
1419 if ($this->isDebugEnabled())
1420 {
1421 $this->Debug([
1422 __FILE__ . ":" . __LINE__,
1423 "We get response from $server_name:$server_port to member#" . $packet_result->member_id,
1424 "secret_id" => $this->secret_id,
1425 "result" => $result,
1426 "Packet security check" => ($packet_result->Check() ? "passed" : "failed"),
1427 "Packet" => $packet_result,
1428 ]);
1429 }
1430
1431 return $packet_result;
1432 }
1433}
1434
1436// Базовый класс для классов типа Response:
1437//
1438// Для использования на контроллере:
1439// CControllerServerResponseFrom - Класс для получения ответа клиента на сервере
1440// CControllerServerResponseTo - Класс для отправки результатов выполнения запроса назад на клиента
1441//
1442// Для использования на клиенте:
1443// CControllerClientResponseFrom - Класс для получения ответа контроллера на клиенте
1444// CControllerClientResponseTo - Класс для отправки результатов выполнения запроса назад на контроллер
1447{
1449 public $status;
1450 public $text;
1451
1452 function _InitFromRequest($oPacket, $arExclude = ['operation', 'arParameters'])
1453 {
1454 if (is_object($oPacket))
1455 {
1456 $vars = get_object_vars($oPacket);
1457 foreach ($vars as $name => $value)
1458 {
1459 if (!in_array($name, $arExclude))
1460 {
1461 $this->$name = $value;
1462 }
1463 }
1464 }
1465 }
1466
1468 // Методы для работы в классах принимающих результат (CControllerServerResponseFrom, CControllerClientResponseFrom):
1470
1477 function Check()
1478 {
1479 return parent::Check($this->status, $this->text, $this->strParameters, $this->secret_id);
1480 }
1481
1487 function Sign()
1488 {
1489 parent::Sign($this->status, $this->text, serialize($this->arParameters), $this->secret_id);
1490 }
1491
1492 // Возвращает успешно ли выполнился запрос по статус его ответа
1493 function OK()
1494 {
1495 return (str_starts_with($this->status, "2"));
1496 }
1497
1498 // Разбирает строку ответа по полям объекта
1500 {
1501 $ar_result = [];
1502 $pairs = explode('&', trim($result, " \n\r\t"));
1503 foreach ($pairs as $pair)
1504 {
1505 [$name, $value] = explode('=', $pair, 2);
1506 $ar_result[$name] = $value;
1507 }
1508
1509 $this->session_id = urldecode($ar_result['session_id']);
1510 $this->member_id = urldecode($ar_result['member_id']);
1511 $this->hash = urldecode($ar_result['hash']);
1512 $this->status = urldecode($ar_result['status']);
1513 $this->text = urldecode($ar_result['text']);
1514
1515 if (isset($ar_result['encoding']))
1516 {
1517 $this->encoding = urldecode($ar_result['encoding']);
1518 }
1519
1520 $this->strParameters = base64_decode(urldecode($ar_result['parameters']));
1521 $arParameters = $this->unpackParameters($this->strParameters, $_REQUEST['encoding'] ?? '');
1522 if ($arParameters)
1523 {
1524 $this->arParameters = $arParameters;
1525 if (isset($ar_result['encoding']))
1526 {
1527 if ($this->text)
1528 {
1529 $this->text = \Bitrix\Main\Text\Encoding::convertEncoding($this->text, $this->encoding, SITE_CHARSET);
1530 }
1531 }
1532 }
1533
1534 $this->version = $ar_result['version'];
1535
1536 if (
1537 $this->status == ''
1538 && $this->text == ''
1539 && $this->member_id == ''
1540 )
1541 {
1542 $this->status = "479";
1543 $this->text = GetMessage("MAIN_CMEMBER_ERR7") . " " . mb_substr($result, 0, 1000);
1544 }
1545 }
1546
1547
1549 // Базовые методы для использования в классах отправляющих результат (CControllerServerResponseTo, CControllerClientResponseTo):
1551
1552 // возвращает отформатированную строку ответа в формате понятном для приема на сервере, с подписью
1553 function GetResponseBody($log = false)
1554 {
1555 $result = "status=" . urlencode($this->status) .
1556 "&text=" . urlencode($this->text) .
1557 "&version=" . urlencode($this->version) .
1558 "&session_id=" . urlencode($this->session_id) .
1559 "&member_id=" . urlencode($this->member_id) .
1560 "&encoding=" . urlencode(SITE_CHARSET);
1561
1562 $result .= "&parameters=" . urlencode(base64_encode(serialize($this->arParameters)));
1563
1564 $this->Sign();
1565 $result .= "&hash=" . urlencode($this->hash);
1566
1567 if ($log && $this->isDebugEnabled())
1568 {
1569 $this->Debug([
1570 __FILE__ . ":" . __LINE__,
1571 "We send errored response back",
1572 "result" => $result,
1573 "Packet" => $this,
1574 ]);
1575 }
1576
1577 return $result;
1578 }
1579
1580 // отправляет ответ обратно
1581 function Send()
1582 {
1583 if ($this->isDebugEnabled())
1584 {
1585 $this->Debug([
1586 __FILE__ . ":" . __LINE__,
1587 "We send response back",
1588 "response body" => $this->GetResponseBody(),
1589 "Packet" => $this,
1590 ]);
1591 }
1592
1593 echo $this->GetResponseBody();
1594 }
1595}
1596
1597// Класс для отправки запроса на сервер
1599{
1600 var $debug_const = "CONTROLLER_CLIENT_DEBUG";
1601 var $debug_file_const = "CONTROLLER_CLIENT_LOG_DIR";
1602
1603 public function __construct($operation, $arParameters = [])
1604 {
1605 $this->member_id = COption::GetOptionString("main", "controller_member_id", "");
1606 $this->secret_id = COption::GetOptionString("main", "controller_member_secret_id", "");
1607 $this->operation = $operation;
1608 $this->arParameters = $arParameters;
1609 $this->session_id = Random::getString(32);
1610 }
1611
1612 function SendWithCheck($page = "/bitrix/admin/controller_ws.php")
1613 {
1614 $oResponse = $this->Send("", $page);
1615 if ($oResponse === false)
1616 {
1617 return false;
1618 }
1619
1620 if (!$oResponse->Check())
1621 {
1622 if (is_object($GLOBALS["APPLICATION"]))
1623 {
1624 $e = new CApplicationException(GetMessage("MAIN_CMEMBER_ERR6"));
1625 $GLOBALS["APPLICATION"]->ThrowException($e);
1626 }
1627 return false;
1628 }
1629
1630 return $oResponse;
1631 }
1632
1633 public function Send($url = "", $page = "/bitrix/admin/controller_ws.php")
1634 {
1635 $this->Sign();
1636 $oResponsePacket = parent::Send(COption::GetOptionString("main", "controller_url", ""), $page);
1637 if ($oResponsePacket === false)
1638 {
1639 return false;
1640 }
1641
1642 $oResponse = new CControllerClientResponseFrom($oResponsePacket);
1643 return $oResponse;
1644 }
1645}
1646
1647// Класс получения результата на клиенте (от контроллера)
1649{
1650 var $debug_const = "CONTROLLER_CLIENT_DEBUG";
1651 var $debug_file_const = "CONTROLLER_CLIENT_LOG_DIR";
1652
1653 public function __construct($oPacket)
1654 {
1655 $this->_InitFromRequest($oPacket, []);
1656 }
1657}
1658
1660{
1661 var $debug_const = "CONTROLLER_CLIENT_DEBUG";
1662 var $debug_file_const = "CONTROLLER_CLIENT_LOG_DIR";
1663
1664 public function __construct()
1665 {
1666 $this->InitFromRequest();
1667 $this->Debug([
1668 "Request received from controller",
1669 "check" => ($this->Check() ? 'checked' : 'check failed'),
1670 "Packet" => $this,
1671 ]);
1672 }
1673
1674 function Check()
1675 {
1676 $member_id = COption::GetOptionString("main", "controller_member_id", "");
1677 if ($member_id == '' || $member_id != $this->member_id)
1678 {
1679 $e = new CApplicationException("Bad member_id: ((get)" . $member_id . "!=(own)" . $this->member_id . ")");
1680 $GLOBALS["APPLICATION"]->ThrowException($e);
1681
1682 return false;
1683 }
1684
1685 $member_secret_id = COption::GetOptionString("main", "controller_member_secret_id", "");
1686 $this->secret_id = $member_secret_id;
1687
1688 return parent::Check();
1689 }
1690}
1691
1692// Класс для отсылки ответа на сервер
1694{
1695 var $debug_const = "CONTROLLER_CLIENT_DEBUG";
1696 var $debug_file_const = "CONTROLLER_CLIENT_LOG_DIR";
1697
1698 public function __construct($oPacket = false)
1699 {
1700 $this->_InitFromRequest($oPacket);
1701 }
1702}
1703
1705{
1706 public static function PackFileArchive($path)
1707 {
1708 include_once(__DIR__ . '/tar_gz.php');
1709
1710 if (file_exists($path))
1711 {
1712 $path = realpath($path);
1713
1714 $arcname = CTempFile::GetFileName(Random::getString(32) . '.tar.gz');
1715 CheckDirPath($arcname);
1716 $ob = new CArchiver($arcname);
1717
1718 $rem_path = dirname($path);
1719
1720 if ($ob->Add([$path], false, $rem_path))
1721 {
1722 return $arcname;
1723 }
1724 }
1725
1726 return false;
1727 }
1728
1729 public static function UnpackFileArchive($strfile, $path_to)
1730 {
1731 global $APPLICATION;
1732 $res = true;
1733
1734 $arcname = CTempFile::GetFileName(Random::getString(32) . '.tar.gz');
1735 CheckDirPath($arcname);
1736
1737 if (file_put_contents($arcname, $strfile) !== false)
1738 {
1739 include_once(__DIR__ . '/tar_gz.php');
1740 $ob = new CArchiver($arcname);
1741
1742 CheckDirPath($_SERVER['DOCUMENT_ROOT'] . $path_to);
1743 $res = $ob->extractFiles($_SERVER['DOCUMENT_ROOT'] . $path_to);
1744
1745 if (!$res && is_object($APPLICATION))
1746 {
1747 $arErrors = $ob->GetErrors();
1748 if (!empty($arErrors))
1749 {
1750 $strError = "";
1751 foreach ($arErrors as $error)
1752 {
1753 $strError .= $error[1] . "<br>";
1754 }
1755
1757 $APPLICATION->ThrowException($e);
1758 }
1759 }
1760 }
1761
1762 return $res;
1763 }
1764}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
global $APPLICATION
Определения include.php:80
xml version
Определения yandex.php:67
$module_id
Определения options.php:6
$arResult
Определения generate_coupon.php:16
$login
Определения change_password.php:8
getDebugLogFileName()
Определения controller_member.php:1009
Debug($sText)
Определения controller_member.php:1031
unpackParameters($parameters, $encoding='')
Определения controller_member.php:1057
_decode(&$arParameters, $encodingFrom, $encodingTo)
Определения controller_member.php:1090
getDebugLogDirectory()
Определения controller_member.php:991
Send($url="", $page="")
Определения controller_member.php:1284
GetResponseBody($log=false)
Определения controller_member.php:1553
_InitFromRequest($oPacket, $arExclude=['operation', 'arParameters'])
Определения controller_member.php:1452
static getString($length, $caseSensitive=false)
Определения random.php:76
static convertEncoding($data, $charsetFrom, $charsetTo)
Определения encoding.php:17
static GetIDByCode($code)
Определения group.php:1502
static GetModulePermission($group_id, $module_id)
Определения group.php:1409
static SetSubordinateGroups($grId, $arSubGroups=false)
Определения group.php:1199
static SetModulePermission($group_id, $module_id, $permission)
Определения group.php:1434
static GetSubordinateGroups($grId)
Определения group.php:1161
static GetOptionString($module_id, $name, $def="", $site=false)
Определения pageoption.php:10
static Update($arFields, $ID)
Определения task.php:102
static Add($arFields)
Определения task.php:90
static SetOperations($ID, $arr, $bOpNames=false)
Определения task.php:254
static Delete($ID, $protect=true)
Определения task.php:168
static GetList($arOrder=['MODULE_ID'=> 'asc', 'LETTER'=> 'asc'], $arFilter=[])
Определения task.php:185
Определения tar_gz.php:13
static OnExternalLogin(&$arParams)
Определения controller_member.php:17
static SetGroupSecurity($group_code, $arPermissions, $arSubGroups=false)
Определения controller_member.php:811
static JoinToControllerEx($controller_url, $controller_login, $controller_password, $arMemberParams=[])
Определения controller_member.php:450
static SetBackup($arBackup)
Определения controller_member.php:631
static OnAfterUserLogin($arParams)
Определения controller_member.php:193
static JoinToController($controller_url, $controller_login, $controller_password, $site_url=false, $controller_group=false, $site_name=false, $bSharedKernel=false)
Определения controller_member.php:504
static SetModules($arModules)
Определения controller_member.php:661
static SetTaskSecurity($task_id, $module_id, $arOperations, $letter='')
Определения controller_member.php:768
static RemoveFromController($controller_login, $controller_password)
Определения controller_member.php:516
static Unlink()
Определения controller_member.php:610
static GetInstalledOptions($module_id)
Определения controller_member.php:929
static UpdateUser($arFields=[], $FORMAT_DATE=false)
Определения controller_member.php:202
static OnExternalAuthList()
Определения controller_member.php:347
static RestoreAll()
Определения controller_member.php:898
static InitTicket($controller_url)
Определения controller_member.php:434
static GetBackup($bRefresh=false)
Определения controller_member.php:620
static RestoreGroupSecurity($group_code, $arModules)
Определения controller_member.php:738
static ExecuteEvent($eventName, $arParams=[])
Определения controller_member.php:572
static RunCommand($command, $oRequest, $oResponse)
Определения controller_member.php:936
static SetOptionString($module_id, $option_id, $value)
Определения controller_member.php:637
static IsInCommonKernel()
Определения controller_member.php:11
static SendMessage($name, $status='Y', $description='')
Определения controller_member.php:409
static PrepareUserInfo($arUser)
Определения controller_member.php:359
static RestoreSecurity($arExcludeGroups=[])
Определения controller_member.php:854
static AuthorizeUser($arParams=[])
Определения controller_member.php:329
static UpdateCounters()
Определения controller_member.php:547
static AuthorizeAdmin($arParams=[])
Определения controller_member.php:298
static RestoreOption($module_id, $option_id)
Определения controller_member.php:648
static RestoreModules()
Определения controller_member.php:699
Send($url="", $page="/bitrix/admin/controller_ws.php")
Определения controller_member.php:1633
__construct($operation, $arParameters=[])
Определения controller_member.php:1603
SendWithCheck($page="/bitrix/admin/controller_ws.php")
Определения controller_member.php:1612
__construct($oPacket=false)
Определения controller_member.php:1698
static UnpackFileArchive($strfile, $path_to)
Определения controller_member.php:1729
static PackFileArchive($path)
Определения controller_member.php:1706
Определения module.php:15
Определения user.php:6037
$options
Определения commerceml2.php:49
$arFields
Определения dblapprove.php:5
$filename
Определения file_edit.php:47
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
$p
Определения group_list_element_edit.php:23
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$strError
Определения options_user_settings.php:4
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$context
Определения csv_new_setup.php:223
const SITE_CHARSET
Определения include.php:62
const FORMAT_DATE
Определения include.php:63
$groups
Определения options.php:30
$status
Определения session.php:10
$arOptions
Определения structure.php:223
CheckSerializedData($str, $max_depth=200)
Определения tools.php:4949
CheckDirPath($path)
Определения tools.php:2707
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
Определения tools.php:4005
$name
Определения menu_edit.php:35
@ Controller
Определения method.php:18
$password
Определения mysql_to_pgsql.php:34
$GLOBALS['____1690880296']
Определения license.php:1
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$page
Определения order_form.php:33
$matches
Определения index.php:22
const SITE_ID
Определения sonet_set_content_view.php:12
$error
Определения subscription_card_product.php:20
$url
Определения iframe.php:7
$site
Определения yandex_run.php:614