• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/group.php
  • Класс: CAllGroup
  • Вызов: CAllGroup::Update
public function Update($ID, $arFields)
{
	/** @global CMain $APPLICATION */
	global $DB, $APPLICATION, $CACHE_MANAGER;

	$ID = intval($ID);

	if(!$this->CheckFields($arFields, $ID))
		return false;

	foreach(GetModuleEvents("main", "OnBeforeGroupUpdate", true) as $arEvent)
	{
		$bEventRes = ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
		if($bEventRes===false)
		{
			if($err = $APPLICATION->GetException())
				$this->LAST_ERROR .= $err->GetString()."
"; else $this->LAST_ERROR .= "Unknown error in OnBeforeGroupUpdate handler."."
"; return false; } } if($ID<=2) unset($arFields["ACTIVE"]); if(is_set($arFields, "ACTIVE") && $arFields["ACTIVE"]!="Y") $arFields["ACTIVE"]="N"; $strUpdate = $DB->PrepareUpdate("b_group", $arFields); if(!is_set($arFields, "TIMESTAMP_X")) $strUpdate .= ", TIMESTAMP_X = ".$DB->GetNowFunction(); $strSql = "UPDATE b_group SET $strUpdate WHERE ID=".$ID; if(is_set($arFields, "SECURITY_POLICY")) { if(COption::GetOptionString("main", "event_log_group_policy", "N") === "Y") { //get old security policy $aPrevPolicy = array(); $res = $DB->Query("SELECT SECURITY_POLICY FROM b_group WHERE ID=".$ID); if(($res_arr = $res->Fetch()) && $res_arr["SECURITY_POLICY"] <> '') $aPrevPolicy = unserialize($res_arr["SECURITY_POLICY"], ['allowed_classes' => false]); //compare with new one $aNewPolicy = array(); if($arFields["SECURITY_POLICY"] <> '') $aNewPolicy = unserialize($arFields["SECURITY_POLICY"], ['allowed_classes' => false]); $aDiff = array_diff_assoc($aNewPolicy, $aPrevPolicy); if(empty($aDiff)) $aDiff = array_diff_assoc($aPrevPolicy, $aNewPolicy); if(!empty($aDiff)) CEventLog::Log("SECURITY", "GROUP_POLICY_CHANGED", "main", $ID, print_r($aPrevPolicy, true)." => ".print_r($aNewPolicy, true)); } $DB->QueryBind($strSql, array("SECURITY_POLICY"=>$arFields["SECURITY_POLICY"]), false); } else { $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); } if(is_set($arFields, "USER_ID") && is_array($arFields["USER_ID"])) { $log = (COption::GetOptionString("main", "event_log_user_groups", "N") === "Y"); if($log) { //remember users in the group $aPrevUsers = array(); $res = $DB->Query("SELECT USER_ID FROM b_user_group WHERE GROUP_ID=".$ID.($ID=="1"?" AND USER_ID<>1":"")); while($res_arr = $res->Fetch()) $aPrevUsers[] = $res_arr["USER_ID"]; } $DB->Query("DELETE FROM b_user_group WHERE GROUP_ID=".$ID.($ID=="1"?" AND USER_ID<>1":"")); $arUsers = $arFields["USER_ID"]; $arTmp = array(); foreach($arUsers as $user) { if(!is_array($user)) $user = array("USER_ID" => $user); $user_id = intval($user["USER_ID"]); if( $user_id > 0 && !isset($arTmp[$user_id]) && ($ID != 1 || $user_id != 1) ) { $arInsert = $DB->PrepareInsert("b_user_group", $user); $strSql = " INSERT INTO b_user_group ( GROUP_ID, ".$arInsert[0]." ) VALUES ( ".$ID.", ".$arInsert[1]." ) "; $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); $arTmp[$user_id] = true; } } $aNewUsers = array_keys($arTmp); CUser::clearUserGroupCache(); if($log) { /** @noinspection PhpUndefinedVariableInspection */ foreach($aPrevUsers as $user_id) { if(!in_array($user_id, $aNewUsers)) { $UserName = ''; $rsUser = CUser::GetByID($user_id); if($arUser = $rsUser->GetNext()) $UserName = ($arUser["NAME"] != "" || $arUser["LAST_NAME"] != "") ? trim($arUser["NAME"]." ".$arUser["LAST_NAME"]) : $arUser["LOGIN"]; $res_log = array( "groups" => "-(".$ID.")", "user" => $UserName ); CEventLog::Log("SECURITY", "USER_GROUP_CHANGED", "main", $user_id, serialize($res_log)); } } foreach($aNewUsers as $user_id) { if(!in_array($user_id, $aPrevUsers)) { $UserName = ''; $rsUser = CUser::GetByID($user_id); if($arUser = $rsUser->GetNext()) $UserName = ($arUser["NAME"] != "" || $arUser["LAST_NAME"] != "") ? trim($arUser["NAME"]." ".$arUser["LAST_NAME"]) : $arUser["LOGIN"]; $res_log = array( "groups" => "+(".$ID.")", "user" => $UserName ); CEventLog::Log("SECURITY", "USER_GROUP_CHANGED", "main", $user_id, serialize($res_log)); } } } } foreach (GetModuleEvents("main", "OnAfterGroupUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, array($ID, &$arFields)); if (defined("CACHED_b_group") && CACHED_b_group !== false) $CACHE_MANAGER->CleanDir("b_group"); ModuleGroupTable::cleanCache(); return true; }