• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/controllergroup.php
  • Класс: CControllerGroupSettings
  • Вызов: CControllerGroupSettings::GeneratePHPInstall
static function GeneratePHPInstall($arValues)
{
	$str = '';
	$arDefValues = $arValues["default"]["options"];
	$arInfo = CControllerGroupSettings::GetData();

	if (isset($arValues["default"]["modules"]))
	{
		$vArr = '';
		foreach ($arInfo as $module_id => $arProp)
		{
			if ($module_id == 'main')
				continue;

			if (in_array($module_id, $arValues["default"]["modules"]))
				$vArr .= '"'.$module_id.'"=>"Y", ';
			else
				$vArr .= '"'.$module_id.'"=>"N", ';
		}
		$str .= 'CControllerClient::SetModules(Array('.$vArr.'));'."rn";
	}
	else
		$str .= 'CControllerClient::RestoreModules();'."rn";

	foreach ($arInfo as $mname => $arProp)
	{
		if (!is_array($arProp["options"]) || count($arProp["options"]) <= 0)
			continue;
		$arOptions = $arProp["options"];
		foreach ($arOptions as $id => $arOptionParams)
		{
			if (isset($arDefValues[$mname][$id]))
				$str .= 'CControllerClient::SetOptionString("'.EscapePHPString($mname).'", "'.EscapePHPString($id).'", "'.EscapePHPString($arDefValues[$mname][$id]).'");'."rn";
			elseif (mb_substr($id, 0, 2) != '__')
				$str .= 'CControllerClient::RestoreOption("'.EscapePHPString($mname).'", "'.EscapePHPString($id).'");'."rn";
		}
	}

	$arSecurity = $arValues["default"]["security"];
	if ($arSecurity["limit_admin"] == "Y")
		$str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "Y");'."rn";
	else
		$str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "N");'."rn";

	$arGroups = Array();
	$arUniqTasks = Array();
	if (is_array($arSecurity["groups"]))
	{
		foreach ($arSecurity["groups"] as $group_id => $arPermissions)
		{
			$arDefinedPermissions = Array();
			$arUnDefinedPermissions = Array();
			$bSubOrdGroups = false;
			foreach ($arInfo as $module_id => $arProp)
			{
				if (isset($arPermissions[$module_id]))
				{
					$arDefinedPermissions[$module_id] = $arPermissions[$module_id];

					$task_id = $arPermissions[$module_id];

					if (mb_strlen($task_id) > 1 && (!is_array($arUniqTasks[$module_id]) || !in_array($task_id, $arUniqTasks[$module_id])))
					{
						$arUniqTasks[$module_id][] = $task_id;
						$dbr_task = CTask::GetList(Array(), Array('NAME' => $task_id, 'MODULE_ID' => $module_id, "BINDING" => 'module'));
						if ($ar_task = $dbr_task->Fetch())
						{
							if ($module_id == 'main' || $ar_task['SYS'] != 'Y')
							{
								$arOperations = CTask::GetOperations($ar_task["ID"], true);

								if ($ar_task['SYS'] != 'Y')
								{
									$str .= 'CControllerClient::SetTaskSecurity('.CControllerGroupSettings::__PHPToString($task_id).', '.CControllerGroupSettings::__PHPToString($module_id).', '.CControllerGroupSettings::__PHPToString($arOperations).', '.CControllerGroupSettings::__PHPToString($ar_task["LETTER"]).');'."rn";
								}

								if ($module_id == 'main' && in_array('edit_subordinate_users', $arOperations))
								{
									$bSubOrdGroups = true;
								}
							}
						}
					}
				}
				else
					$arUnDefinedPermissions[] = $module_id;
			}

			$str .= 'CControllerClient::RestoreGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arUnDefinedPermissions).');'."rn";

			if ($bSubOrdGroups)
			{
				$arSGroupsTmp = preg_split("/[rn,;]+/", $arSecurity["subord_groups"][$group_id]);
				$arSGroups = array();
				foreach ($arSGroupsTmp as $sGroupTmp)
				{
					$sGroupTmp = trim($sGroupTmp);
					if ($sGroupTmp != '')
						$arSGroups[] = $sGroupTmp;
				}

				$str .= 'CControllerClient::SetGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arDefinedPermissions).', '.CControllerGroupSettings::__PHPToString($arSGroups).');'."rn";
			}
			else
				$str .= 'CControllerClient::SetGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arDefinedPermissions).');'."rn";

			$arGroups[] = $group_id;
		}
	}

	$str .= 'CControllerClient::RestoreSecurity('.CControllerGroupSettings::__PHPToString($arGroups).');'."rn";

	$arThirdSettings = CControllerGroupSettings::Get3rdPartyOptions();
	/** @var IControllerGroupOption $obOption */
	foreach ($arThirdSettings as $obOption)
	{
		$str .= $obOption->GetOptionPHPCode($arValues);
	}

	return $str;
}