50 $encryptionType = EncryptionType::tryFrom((
int)$this->arFields[
'CONNECTION_TYPE']) ?? EncryptionType::None;
51 $port = (int)$this->arFields[
'PORT'] > 0 ? (
int)$this->arFields[
'PORT'] : $encryptionType->port();
52 $host = str_starts_with($this->arFields[
'SERVER'],
'ldap://') || str_starts_with($this->arFields[
'SERVER'],
'ldaps://')
53 ? $this->arFields[
'SERVER']
54 : $encryptionType->scheme() .
'://' . $this->arFields[
'SERVER'];
56 if ($this->conn = @ldap_connect(
"$host:$port"))
58 $ldapOptTimelimit = isset($this->arFields[
"LDAP_OPT_TIMELIMIT"]) ? (int)$this->arFields[
"LDAP_OPT_TIMELIMIT"] : 100;
59 $ldapOptTimeout = isset($this->arFields[
"LDAP_OPT_TIMEOUT"]) ? (int)$this->arFields[
"LDAP_OPT_TIMEOUT"] : 5;
60 $ldapOptNetworkTimeout = isset($this->arFields[
"LDAP_OPT_NETWORK_TIMEOUT"]) ? (int)$this->arFields[
"LDAP_OPT_NETWORK_TIMEOUT"] : 5;
62 @ldap_set_option($this->conn, LDAP_OPT_PROTOCOL_VERSION, 3);
63 @ldap_set_option($this->conn, LDAP_OPT_REFERRALS, 0);
64 @ldap_set_option($this->conn, LDAP_OPT_SIZELIMIT, COption::GetOptionInt(
"ldap",
"group_limit", 0));
65 @ldap_set_option($this->conn, LDAP_OPT_TIMELIMIT, $ldapOptTimelimit);
66 @ldap_set_option($this->conn, LDAP_OPT_TIMEOUT, $ldapOptTimeout);
67 @ldap_set_option($this->conn, LDAP_OPT_NETWORK_TIMEOUT, $ldapOptNetworkTimeout);
69 $login = $this->arFields[
"~ADMIN_LOGIN"] ?? $this->arFields[
"ADMIN_LOGIN"];
70 $pass = $this->arFields[
"~ADMIN_PASSWORD"] ?? $this->arFields[
"ADMIN_PASSWORD"];
84 if($this->arFields[
"ADMIN_LOGIN"] ==
'')
88 ($this->arFields[
"~ADMIN_LOGIN"] ?? $this->arFields[
"ADMIN_LOGIN"]),
89 ($this->arFields[
"~ADMIN_PASSWORD"] ?? $this->arFields[
"ADMIN_PASSWORD"])
103 if(intval($this->arFields[
"CONNECTION_TYPE"]) === EncryptionType::Tls->value)
120 if($this->isTlsStarted)
123 if(!@ldap_start_tls($this->conn))
129 $this->isTlsStarted =
true;
135 ldap_close($this->conn);
143 $values = $this->
_RootDSE(
'namingcontexts');
146 $values = $this->
_RootDSE(
'namingContexts');
154 unset($values[
'count']);
165 $sr = ldap_read($this->conn,
'',
'objectClass=*', Array($filtr));
171 $entry = ldap_first_entry($this->conn, $sr);
173 $attributes = ldap_get_attributes($this->conn, $entry);
176 if ($attributes[
'count'] > 0)
177 $values = @ldap_get_values_len($this->conn, $entry, $filtr);
183 if(is_array($values) && $values[
'count']==1)
188 unset($values[
'count']);
197 if($this->arFields[
'BASE_DN'] ==
'')
200 $arBaseDNs = explode(
";", $this->arFields[
'BASE_DN']);
204 foreach($arBaseDNs as $BaseDN)
206 $BaseDN = trim($BaseDN);
210 $defaultMaxPageSizeAD = 1000;
211 $pageSize = isset($this->arFields[
'MAX_PAGE_SIZE']) && intval($this->arFields[
'MAX_PAGE_SIZE'] > 0) ? intval($this->arFields[
'MAX_PAGE_SIZE']) : $defaultMaxPageSizeAD;
217 $searchControls =
null;
221 [
'oid' => LDAP_CONTROL_PAGEDRESULTS,
'value' => [
'size' =>
$pageSize,
'cookie' => $cookie]],
250 $cookie = $controls[LDAP_CONTROL_PAGEDRESULTS][
'value'][
'cookie'] ??
'';
253 $entry = ldap_first_entry($this->conn, $sr);
265 $attributes = ldap_get_attributes($this->conn, $entry);
267 for($j=0; $j<$attributes[
'count']; $j++)
269 $values = @ldap_get_values_len($this->conn, $entry, $attributes[$j]);
271 if($values ===
false)
274 $bPhotoAttr = in_array($attributes[$j], self::$PHOTO_ATTRIBS);
275 $info[
$i][mb_strtolower($attributes[$j])] = $bPhotoAttr ? $values : $this->
WorkAttr($values);
279 $info[
$i][
'dn'] = ldap_get_dn($this->conn, $entry);
284 while($entry = ldap_next_entry($this->conn, $entry));
292 }
while($cookie !==
null && $cookie !=
'');
309 $field = $this->arFields[
"~" . $fieldName] ?? $this->arFields[$fieldName];
310 $field = mb_strtolower($field);
312 if(!in_array($field, $attrArray))
313 $attrArray[] = $field;
321 $group_filter = $this->arFields[
'GROUP_FILTER'];
322 if(trim($group_filter) <>
'' && mb_substr(trim($group_filter), 0, 1) !=
'(')
323 $group_filter =
'('.trim($group_filter).
')';
324 $query =
'(&'.$group_filter.$query.
')';
326 if (!array_key_exists(
$query, $this->groupsLists))
330 $arGroupAttr =
array(
331 "name",
"cn",
"gidNumber",
"description",
"memberof",
332 "primarygrouptoken",
"primarygroupid",
"samaccountname",
336 foreach(
array(
"GROUP_ID_ATTR",
"GROUP_NAME_ATTR",
"GROUP_MEMBERS_ATTR") as $fieldName)
339 if ($this->arFields[
'USER_GROUP_ACCESSORY'] ==
'Y')
340 $arGroupAttr = $this->
setFieldAsAttr($arGroupAttr,
"USER_GROUP_ATTR");
348 $group_id_attr = mb_strtolower($this->arFields[
'GROUP_ID_ATTR']);
350 if(
is_set($this->arFields,
'GROUP_NAME_ATTR'))
351 $group_name_attr = mb_strtolower($this->arFields[
'GROUP_NAME_ATTR']);
353 $group_name_attr =
false;
355 foreach ($arGroupsTmp as $grp)
357 $grp[
'ID'] = $grp[$group_id_attr];
359 if ($group_name_attr &&
is_set($grp, $group_name_attr))
360 $grp[
'NAME'] = $grp[$group_name_attr];
368 return $this->groupsLists[
$query];
382 if(!ApplicationPasswordTable::isPassword(
$password))
387 $externalUserId = static::OnFindExternalUser(
$login);
389 if($externalUserId <= 0)
394 return ApplicationPasswordTable::findPassword($externalUserId,
$password, $isPasswordOriginal) !==
false;
401 if(!function_exists(
"ldap_connect"))
406 $login = (string)$arArgs[
"LOGIN"];
414 $isPasswordOriginal = isset($arArgs[
"PASSWORD_ORIGINAL"]) && $arArgs[
"PASSWORD_ORIGINAL"] ===
"Y";
416 if(static::isApplicationPassword(
$login,
$password, $isPasswordOriginal))
422 $prefix = mb_strpos(
$login,
"\\");
424 if($prefix===
false && COption::GetOptionString(
"ldap",
"ntlm_auth_without_prefix",
"Y") !==
"Y")
442 foreach(
GetModuleEvents(
"ldap",
"OnBeforeUserLogin",
true) as $arEvent)
448 $arArgs[
'RESULT_MESSAGE'] = [
"MESSAGE"=>$err->GetString().
"<br>",
"TYPE"=>
"ERROR"];
453 $arArgs[
'RESULT_MESSAGE'] = [
"MESSAGE"=>
"Unknown error".
"<br>",
"TYPE"=>
"ERROR"];
467 $otp = (string)($arArgs[
"OTP"] ??
'');
477 while($xLDAP =
$dbRes->GetNextServer())
479 if($xLDAP->Connect())
498 (COption::GetOptionString(
"ldap",
"add_user_when_auth",
"Y") ===
"Y")
501 $xLDAP->Disconnect();
505 $arArgs[
"STORE_PASSWORD"] =
"N";
509 if(\
Bitrix\Ldap\Limit::isUserLimitExceeded())
517 $xLDAP->Disconnect();
526 public function FindUser($LOGIN, $PASSWORD =
false)
528 $login_field = $LOGIN;
529 $password_field = $PASSWORD;
533 $user_filter =
"(&".$this->arFields[
"~USER_FILTER"].
"(".$this->arFields[
"~USER_ID_ATTR"].
"=".$this->
specialchars($login_field).
"))";
534 $dbLdapUsers = $this->
Query($user_filter);
538 if($arLdapUser = $dbLdapUsers->Fetch())
540 if($PASSWORD !==
false)
542 $user_dn = $arLdapUser[
'dn'];
544 if (!$this->
Bind($user_dn, $password_field))
562 if(!isset($this->arFields[
"FIELD_MAP"][$fieldName]))
565 $attr = $this->arFields[
"FIELD_MAP"][$fieldName];
569 if(is_array(
$arRes[$fieldName]))
571 if(
$arRes[$fieldName][
"MULTIPLE"]==
"Y")
573 if (is_array($arLdapUser[mb_strtolower($attr)]))
574 $result = array_values($arLdapUser[mb_strtolower($attr)]);
578 else if (!empty($arLdapUser[mb_strtolower($attr)]))
579 $result = $arLdapUser[mb_strtolower($attr)];
580 else if (!empty(
$arRes[$fieldName][
'SETTINGS'][
'DEFAULT_VALUE']))
582 if (is_array(
$arRes[$fieldName][
'SETTINGS'][
'DEFAULT_VALUE']))
584 if (!empty(
$arRes[$fieldName][
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE']))
585 $result =
$arRes[$fieldName][
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE'];
592 elseif(preg_match(
"/(.*)&([0-9]+)/", $attr, $arMatch))
594 if(intval($arLdapUser[mb_strtolower($arMatch[1])]) & intval($arMatch[2]))
599 elseif ($fieldName ==
"PERSONAL_PHOTO")
601 if($arLdapUser[mb_strtolower($attr)] ==
"")
609 $tmpDir = CTempFile::GetDirectoryName();
612 $fname =
"ad_".rand().
".".$fExt;
614 if(!file_put_contents($tmpDir.$fname,$arLdapUser[mb_strtolower($attr)][0]))
619 "type" => CFile::GetContentType($tmpDir.$fname),
620 "tmp_name" => $tmpDir.$fname
624 $result = $arLdapUser[mb_strtolower($attr)];
650 $prefix = mb_strpos(
$login,
"\\");
652 if($prefix ===
false && COption::GetOptionString(
"ldap",
"ntlm_auth_without_prefix",
"Y") !==
"Y")
667 while($serv = $dbServ->GetNextServer())
671 if($arLdapUser = $serv->FindUser(
$login))
675 (COption::GetOptionString(
"ldap",
"add_user_when_auth",
"Y") ===
"Y")
698 'DN' => $arLdapUser[
'dn'],
699 'LOGIN' => $arLdapUser[mb_strtolower($this->arFields[
'~USER_ID_ATTR'])],
700 'EXTERNAL_AUTH_ID' =>
'LDAP#'.$this->arFields[
'ID'],
701 'LDAP_GROUPS' => $arLdapUser[mb_strtolower($this->arFields[
'~USER_GROUP_ATTR'])],
706 foreach($this->arFields[
"FIELD_MAP"] as $userField=>$attr)
711 while($arEvent = $db_events->Fetch())
724 if (empty(
$arFields[
'UF_DEPARTMENT']) && isModuleInstalled(
'intranet')
725 && $this->arFields[
'IMPORT_STRUCT'] && $this->arFields[
'IMPORT_STRUCT']==
'Y')
728 $username = $arLdapUser[$this->arFields[
'USER_ID_ATTR']];
729 if ($arDepartment = $this->
GetDepartmentIdForADUser($arLdapUser[$this->arFields[
'USER_DEPARTMENT_ATTR']],$arLdapUser[$this->arFields[
'USER_MANAGER_ATTR']],$username,$departmentCache))
732 if ($departmentCache)
733 $departmentCache[$username] = $arDepartment;
739 $arFields[
'UF_DEPARTMENT'] = $arDepartment;
752 $primarygroupid_name_attr =
'primarygroupid';
753 $primarygrouptoken_name_attr =
'primarygrouptoken';
755 $groupMemberAttr =
null;
758 if ($this->arFields[
'USER_GROUP_ACCESSORY'] ==
'Y')
760 $primarygroupid_name_attr = mb_strtolower($this->arFields[
'GROUP_ID_ATTR']);
761 $primarygrouptoken_name_attr = mb_strtolower($this->arFields[
'USER_GROUP_ATTR']);
762 $userIdAttr = mb_strtolower($this->arFields[
'USER_ID_ATTR']);
763 $groupMemberAttr = mb_strtolower($this->arFields[
'GROUP_MEMBERS_ATTR']);
768 if (!is_array($arAllGroups) ||
count($arAllGroups) <= 0)
771 $arGroup = reset($arAllGroups);
775 if(in_array($arGroup[
'ID'],
$arFields[
'LDAP_GROUPS']))
779 (
is_set($arLdapUser, $primarygroupid_name_attr)
780 && $arGroup[$primarygrouptoken_name_attr] == $arLdapUser[$primarygroupid_name_attr]
783 ($this->arFields[
'USER_GROUP_ACCESSORY'] ==
'Y'
784 &&
is_set($arGroup, $groupMemberAttr)
786 (is_array($arGroup[$groupMemberAttr])
787 && in_array($arLdapUser[$userIdAttr], $arGroup[$groupMemberAttr])
790 $arLdapUser[$userIdAttr] == $arGroup[$groupMemberAttr]
796 $arFields[
'LDAP_GROUPS'][] = $arGroup[
'ID'];
797 if ($this->arFields[
'USER_GROUP_ACCESSORY'] ==
'N')
801 while ($arGroup = next($arAllGroups));
816 if ($names && isset($names[$username]))
822 $departmentCached = $cache[$username];
824 if ($departmentCached)
825 return $departmentCached;
836 $iblockId=COption::GetOptionInt(
"intranet",
"iblock_structure",
false);
844 $names[$username] =
true;
846 $arManagerDep =
null;
847 $mgrDepartment =
null;
852 preg_match(
'/^((CN|uid)=.*?)(\,){1}([^\,])*(=){1}/i', $managerDN,
$matches);
856 if (is_array($userArr) &&
count($userArr) > 0)
858 foreach($userArr as $possibleManager)
860 if(!isset($possibleManager[
'dn']) || $managerDN != $possibleManager[
'dn'])
866 $mgrDepartment = $possibleManager[$this->arFields[
'USER_DEPARTMENT_ATTR']];
867 if ($mgrDepartment && trim($mgrDepartment)!=
'')
870 $mgrManagerDN = $possibleManager[$this->arFields[
'USER_MANAGER_ATTR']];
871 $mgrUserName = $possibleManager[$this->arFields[
'USER_ID_ATTR']];
874 if ($cache && $arManagerDep)
875 $cache[$mgrUserName] = $arManagerDep;
883 'IS_HEAD' => ($this->arFields[
'SET_DEPARTMENT_HEAD'] ==
'Y')
889 if ($department && trim($department)!=
'' && ($mgrDepartment!=$department))
892 $parentSectionId = $arManagerDep[
'ID'];
907 if ($department && trim($department)!=
'')
909 $parentSectionId = $this->arFields[
'ROOT_DEPARTMENT'];
917 if ($this->arFields[
'STRUCT_HAVE_DEFAULT'] && $this->arFields[
'STRUCT_HAVE_DEFAULT'] ==
"Y")
920 $department = $this->arFields[
'DEFAULT_DEPARTMENT_NAME'];
921 if ($department && trim($department)!=
'')
924 $parentSectionId = $this->arFields[
'ROOT_DEPARTMENT'];
929 return array(
'ID' => $this->arFields[
'ROOT_DEPARTMENT']);
940 if (!$department || trim($department)==
'')
949 ($parentSectionId >= 0 ? $parentSectionId :
false),
950 Array(
"left_margin" =>
"asc"),
952 Array(
'NAME' => $department)
955 $departmentId =
false;
956 if($arItem = $dbExistingSections->GetNext())
957 $departmentId = $arItem[
'ID'];
961 $arNewSectFields = Array(
964 "NAME" => $department
966 if ($parentSectionId>=0)
967 $arNewSectFields[
"IBLOCK_SECTION_ID"] = $parentSectionId;
969 $departmentId = $bs->Add($arNewSectFields);
978 if (!empty($arElement[
'UF_HEAD'][
'VALUE']))
1001 if(!is_array($value))
1002 $value =
array($value);
1003 foreach($value as $group)
1007 $temp .=
'('.$this->arFields[
'USER_GROUP_ATTR'].
'='.$this->
specialchars($group).
')';
1009 $query .=
'(|'.$temp.
')';
1014 $user_filter = $this->arFields[
'USER_FILTER'];
1015 if(trim($user_filter) <>
'' && mb_substr(trim($user_filter), 0, 1) !=
'(')
1016 $user_filter =
'('.trim($user_filter).
')';
1017 $query =
'(&'.$user_filter.$query.
')';
1024 $user_filter = $this->arFields[
'USER_FILTER'];
1026 if(trim($user_filter) <>
'' && mb_substr(trim($user_filter), 0, 1) !=
'(')
1028 $user_filter =
'('.trim($user_filter).
')';
1031 $query =
'(&'.$user_filter.
'('.$cn.
'))';
1037 $from = Array(
"\\",
',',
'+',
'"',
'<',
'>',
';',
"\n",
"\r",
'=',
'*');
1038 $to = Array(
'\5C',
'\2C',
'\2B',
'\22',
'\3C',
'\3E',
'\3B',
'\0A',
'\0D',
'\3D',
'\*');
1039 return str_replace($from, $to,
$str);
1046 while($arLDAP = $db_ldap_serv->Fetch())
1049 'ID' =>
'LDAP#'.$arLDAP[
'ID'],
1050 'NAME' => $arLDAP[
'NAME']
1060 if(
$USER->IsAuthorized())
1063 if(!array_key_exists(
"AUTH_TYPE",
$_SERVER) || (
$_SERVER[
"AUTH_TYPE"] !=
"NTLM" &&
$_SERVER[
"AUTH_TYPE"] !=
"Negotiate"))
1066 $ntlm_varname = trim(COption::GetOptionString(
'ldap',
'ntlm_varname',
'REMOTE_USER'));
1067 $LOGIN = isset(
$_SERVER[$ntlm_varname]) ? (string)
$_SERVER[$ntlm_varname] :
'';
1073 if(($pos = mb_strpos($LOGIN,
"\\")) !==
false)
1075 $DOMAIN = mb_substr($LOGIN, 0, $pos);
1076 $LOGIN = mb_substr($LOGIN, $pos + 1);
1078 elseif(
$_SERVER[
"AUTH_TYPE"] ==
"Negotiate" && (($pos = mb_strpos($LOGIN,
"@")) !==
false))
1080 $DOMAIN = mb_substr($LOGIN, $pos + 1);
1081 $LOGIN = mb_substr($LOGIN, 0, $pos);
1084 $arFilterServer =
array(
'ACTIVE' =>
'Y');
1088 $arFilterServer[
'CODE'] = $DOMAIN;
1092 $DEF_DOMAIN_ID = COption::GetOptionInt(
'ldap',
'ntlm_default_server', 0);
1093 if($DEF_DOMAIN_ID > 0)
1094 $arFilterServer[
'ID'] = $DEF_DOMAIN_ID;
1102 while($xLDAP = $db_ldap_serv->GetNextServer())
1104 if($xLDAP->Connect())
1106 if($arLdapUser = $xLDAP->FindUser($LOGIN))
1108 $ID = $xLDAP->SetUser($arLdapUser, (COption::GetOptionString(
"ldap",
"add_user_when_auth",
"Y")==
"Y"));
1113 $xLDAP->Disconnect();
1118 $xLDAP->Disconnect();
1134 if(!$arFindGroups || $arFindGroups==
'')
1137 if(!is_array($arFindGroups))
1138 $arFindGroups = Array($arFindGroups);
1140 foreach($arFindGroups as $group_id)
1142 if(in_array($group_id, $arUserGroups))
1145 $arUserGroups[] = $group_id;
1146 $this->
GetAllMemberOf($arAllGroups[$group_id][
"memberof"], $arUserGroups, $arAllGroups);
1154 if(!is_array($this->arGroupMaps))
1156 $this->arGroupMaps =
array();
1157 $rsCorellations =
$DB->Query(
"SELECT LDAP_GROUP_ID, GROUP_ID FROM b_ldap_group WHERE LDAP_SERVER_ID=".intval($this->arFields[
'ID']));
1159 while ($arCorellation = $rsCorellations->Fetch())
1161 if(!is_array($this->arGroupMaps[$arCorellation[
"LDAP_GROUP_ID"]]))
1162 $this->arGroupMaps[$arCorellation[
"LDAP_GROUP_ID"]] =
array();
1164 $this->arGroupMaps[$arCorellation[
"LDAP_GROUP_ID"]][] = $arCorellation[
"GROUP_ID"];
1174 if(!isset($arLdapUser[
"PERSONAL_PHOTO"]))
1178 $arUser =
$dbRes->Fetch();
1180 if(!isset($arUser[
"PERSONAL_PHOTO"]))
1183 if($arLdapUser[
"PERSONAL_PHOTO"] ==
"")
1184 $arLdapUser[
"PERSONAL_PHOTO"][
"del"] =
"Y";
1186 $arLdapUser[
"PERSONAL_PHOTO"][
"old_file"] = $arUser[
"PERSONAL_PHOTO"];
1192 public function SetUser($arLdapUser, $bAddNew =
true)
1200 if(!is_object(
$USER))
1209 $isHead = $arLdapUser[
'UF_DEPARTMENT'][
'IS_HEAD'];
1211 $arLdapUser[
'UF_DEPARTMENT'] =
array($arLdapUser[
'UF_DEPARTMENT'][
'ID']);
1214 if(isset($arLdapUser[
"ID"]))
1216 $ID = intval($arLdapUser[
"ID"]);
1224 $res = CUser::GetList(
1226 array(
'LOGIN_EQUAL_EXACT' => $arLdapUser[
'LOGIN']),
1227 array(
'FIELDS' =>
array(
'ID',
'EXTERNAL_AUTH_ID',
'ACTIVE'))
1232 if(
$ar_res[
'EXTERNAL_AUTH_ID'] == $arLdapUser[
'EXTERNAL_AUTH_ID'])
1234 $bitrixUserId =
$ar_res[
'ID'];
1235 $userActive =
$ar_res[
'ACTIVE'];
1240 $bAddNew = ($bAddNew && COption::GetOptionString(
"ldap",
"ldap_create_duplicate_login_user",
'Y') ==
'Y');
1244 if($bitrixUserId <= 0 && $ldapUserID <= 0)
1246 if($bAddNew && !\
Bitrix\Ldap\Limit::isUserLimitExceeded())
1248 if($arLdapUser[
"EMAIL"] ==
'')
1250 $arLdapUser[
"EMAIL"] = COption::GetOptionString(
"ldap",
"default_email",
'no@email.test');
1253 $arLdapUser[
'PASSWORD'] = (string)(
new Password());
1263 $ID = ($ldapUserID > 1 ? $ldapUserID : $bitrixUserId);
1267 if(isset($arLdapUser[
'ACTIVE']) && $userActive == $arLdapUser[
'ACTIVE'])
1268 unset($arLdapUser[
'ACTIVE']);
1290 $arUserLdapGroups = Array();
1292 $this->
GetAllMemberOf($arLdapUser[
'LDAP_GROUPS'], $arUserLdapGroups, $arLdapGroups);
1295 $arUserBitrixGroups =
$USER->GetUserGroup(
$ID);
1296 $arUserBitrixGroupsNew =
array();
1298 $prevGroups = $arUserBitrixGroups;
1301 foreach(
$arGroupMaps as $fromLdapGroup=>$arToUserGroups)
1303 foreach($arToUserGroups as $toUserGroup)
1305 if ((
$k = array_search($toUserGroup, $arUserBitrixGroups)) !==
false)
1307 unset($arUserBitrixGroups[
$k]);
1311 if (in_array($fromLdapGroup, $arUserLdapGroups))
1313 $arUserBitrixGroupsNew[] = $toUserGroup;
1317 $arUserBitrixGroups = array_merge($arUserBitrixGroups, array_unique($arUserBitrixGroupsNew));
1318 sort($arUserBitrixGroups);
1320 if($arUserBitrixGroups <> $prevGroups)
1322 $USER->SetUserGroup(
$ID, $arUserBitrixGroups);
1341 $ldapError = ldap_error($this->conn);
1343 if($ldapError <>
'')
1344 $result =
"\nldap_error: '".$ldapError.
"'\nldap_errno: '".ldap_errno($this->conn).
"'";
1353 "LDAP_USER_LIMIT_EXCEEDED" => Loc::getMessage(
"LDAP_USER_LIMIT_EXCEEDED_EVENT_TYPE"),
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getUserLimitNotifyMessage()
static isApplicationPassword(string $login, string $password, bool $isPasswordOriginal)
GetAllMemberOf($arFindGroups, &$arUserGroups, $arAllGroups)
__construct($arFields=[])
FindUser($LOGIN, $PASSWORD=false)
getLdapValueByBitrixFieldName($fieldName, $arLdapUser)
setFieldAsAttr(array $attrArray, $fieldName)
GetUserList($arFilter=Array())
Query($str='(ObjectClass=*)', $fields=false)
const CONNECTION_TYPE_SIMPLE
GetDepartmentIdForADUser($department, $managerDN, $username, &$cache=FALSE, $iblockId=FALSE, $names=FALSE)
static OnUserLogin(&$arArgs)
GetGroupListArray($query='')
static OnExternalAuthList()
GetUserFields($arLdapUser, &$departmentCache=FALSE)
static PrepareUserPhoto($uid, &$arLdapUser)
const CONNECTION_TYPE_TLS
QueryArray($str='(ObjectClass=*)', $fields=false)
const CONNECTION_TYPE_SSL
static OnFindExternalUser($login)
SetUser($arLdapUser, $bAddNew=true)
static onEventLogGetAuditTypes()
getLastErrorDescription()
static GetList($arOrder=Array(), $arFilter=Array())
static SetDepartmentHead($userId, $sectionId)
static isLdapPaginationAviable()
static GetImgTypeBySignature($signature)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
GetIBlockSectionList($IBLOCK, $SECT_ID=false, $arOrder=array("left_margin"=>"asc"), $cnt=0, $arFilter=array())
$_SERVER["DOCUMENT_ROOT"]
if($NS['step']==6) if( $NS[ 'step']==7) if(COption::GetOptionInt('main', 'disk_space', 0) > 0) $info
ExecuteModuleEventEx($arEvent, $arParams=[])
IsModuleInstalled($module_id)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']