%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/controller/classes/general/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/controller/classes/general/controllergroup.php |
<?php require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/admin_tools.php"); IncludeModuleLangFile(__FILE__); class CControllerGroup { public static function CheckDefaultUpdate() { $dbr_groups = CControllerGroup::GetList(Array(), Array("<UPDATE_PERIOD" => 0)); while ($ar_group = $dbr_groups->Fetch()) CControllerGroup::SetGroupSettings($ar_group["ID"]); return "CControllerGroup::CheckDefaultUpdate();"; } public static function CheckFields(&$arFields, $ID = false) { $arMsg = Array(); if ($ID > 0) unset($arFields["ID"]); global $DB; if (($ID === false || is_set($arFields, "NAME")) && strlen($arFields["NAME"]) <= 0) $arMsg[] = array("id" => "NAME", "text" => GetMessage("CTRLR_GRP_ERR_NAME")); if (isset($arFields["UPDATE_PERIOD"]) && ($arFields["UPDATE_PERIOD"] < 0 || trim($arFields["UPDATE_PERIOD"]) == '')) $arFields["UPDATE_PERIOD"] = -1; if (count($arMsg) > 0) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } global $USER; if (!is_set($arFields, "MODIFIED_BY") && is_object($USER)) $arFields["MODIFIED_BY"] = $USER->GetID(); if ($ID === false && !is_set($arFields, "CREATED_BY") && is_object($USER)) $arFields["CREATED_BY"] = $USER->GetID(); if ($ID === false && !is_set($arFields, "DATE_CREATE")) $arFields["~DATE_CREATE"] = $DB->CurrentTimeFunction(); return true; } public static function Add($arFields) { global $DB, $USER_FIELD_MANAGER; if (!CControllerGroup::CheckFields($arFields)) return false; if (!$USER_FIELD_MANAGER->CheckFields("CONTROLLER_GROUP", 0, $arFields)) return false; unset($arFields["TIMESTAMP_X"]); unset($arFields["~TIMESTAMP_X"]); $ID = $DB->Add("b_controller_group", $arFields, array("DESCRIPTION", "INSTALL_INFO", "UNINSTALL_INFO", "INSTALL_PHP", "UNINSTALL_PHP")); $USER_FIELD_MANAGER->Update("CONTROLLER_GROUP", $ID, $arFields); if (isset($arFields["UPDATE_PERIOD"])) CControllerGroup::__UpdateAgentPeriod($ID, $arFields["UPDATE_PERIOD"]); if (isset($arFields["COUNTER_UPDATE_PERIOD"])) CControllerGroup::__CounterUpdateAgentPeriod($ID, $arFields["COUNTER_UPDATE_PERIOD"]); return $ID; } public static function Update($ID, $arFields) { global $DB, $USER_FIELD_MANAGER; if (!CControllerGroup::CheckFields($arFields, $ID)) return false; if (!$USER_FIELD_MANAGER->CheckFields("CONTROLLER_GROUP", $ID, $arFields)) return false; if (isset($arFields["UPDATE_PERIOD"]) || isset($arFields["COUNTER_UPDATE_PERIOD"])) { $dbr_group = CControllerGroup::GetByID($ID); $ar_group = $dbr_group->Fetch(); if (isset($arFields["UPDATE_PERIOD"]) && $ar_group["UPDATE_PERIOD"] != $arFields["UPDATE_PERIOD"]) CControllerGroup::__UpdateAgentPeriod($ID, $arFields["UPDATE_PERIOD"]); if (isset($arFields["COUNTER_UPDATE_PERIOD"]) && $ar_group["COUNTER_UPDATE_PERIOD"] != $arFields["COUNTER_UPDATE_PERIOD"]) CControllerGroup::__CounterUpdateAgentPeriod($ID, $arFields["COUNTER_UPDATE_PERIOD"]); } unset($arFields["TIMESTAMP_X"]); $arFields["~TIMESTAMP_X"] = $DB->CurrentTimeFunction(); $arUpdateBinds = array(); $strUpdate = $DB->PrepareUpdateBind("b_controller_group", $arFields, "", false, $arUpdateBinds); $strSql = "UPDATE b_controller_group SET ".$strUpdate." WHERE ID=".intval($ID); $arBinds = array(); foreach ($arUpdateBinds as $field_id) $arBinds[$field_id] = $arFields[$field_id]; $res = $DB->QueryBind($strSql, $arBinds); if ($res) { $USER_FIELD_MANAGER->Update("CONTROLLER_GROUP", $ID, $arFields); } if (!$res) return false; else return true; } public static function __UpdateAgentPeriod($group_id, $time) { $group_id = intval($group_id); $time = intval($time); CAgent::RemoveAgent("CControllerGroup::__UpdateSettingsAgent(".$group_id.");", "controller"); if ($time > 0) CAgent::AddAgent("CControllerGroup::__UpdateSettingsAgent(".$group_id.");", "controller", "N", $time * 60); } public static function __CounterUpdateAgentPeriod($group_id, $time) { $group_id = intval($group_id); $time = intval($time); CAgent::RemoveAgent("CControllerGroup::__UpdateCountersAgent(".$group_id.");", "controller"); if ($time > 0) CAgent::AddAgent("CControllerGroup::__UpdateCountersAgent(".$group_id.");", "controller", "N", $time * 60); } public static function Delete($ID) { global $DB, $USER_FIELD_MANAGER; $ID = intval($ID); if ($ID == 1) { $e = new CApplicationException(GetMessage("CTRL_GRP_DEL_ERR_DEF")); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } $dbres = $DB->Query("SELECT COUNT('x') as C FROM b_controller_member WHERE CONTROLLER_GROUP_ID=".$ID); $arres = $dbres->Fetch(); if ($arres["C"] > 0) { $e = new CApplicationException(GetMessage("CTRLR_GRP_DEL_ERR")); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } $USER_FIELD_MANAGER->Delete("CONTROLLER_GROUP", $ID); $DB->Query("DELETE FROM b_controller_counter_group WHERE CONTROLLER_GROUP_ID = ".$ID); $DB->Query("DELETE FROM b_controller_group WHERE ID=".$ID); return true; } public static function GetList($arOrder = Array(), $arFilter = Array(), $arSelect = Array()) { global $DB; $obUserFieldsSql = new CUserTypeSQL; $obUserFieldsSql->SetEntity("CONTROLLER_GROUP", "G.ID"); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); static $arFields = array( "ID" => array( "FIELD_NAME" => "G.ID", "FIELD_TYPE" => "int", ), "NAME" => array( "FIELD_NAME" => "G.NAME", "FIELD_TYPE" => "string", ), "TIMESTAMP_X" => array( "FIELD_NAME" => "G.TIMESTAMP_X", "FIELD_TYPE" => "datetime", ), "MODIFIED_BY" => array( "FIELD_NAME" => "G.MODIFIED_BY", "FIELD_TYPE" => "int", ), "UPDATE_PERIOD" => array( "FIELD_NAME" => "G.UPDATE_PERIOD", "FIELD_TYPE" => "int", ), "MODIFIED_BY_USER" => array( "FIELD_TYPE" => "string", ), "DATE_CREATE" => array( "FIELD_NAME" => "G.DATE_CREATE", "FIELD_TYPE" => "datetime", ), "CREATED_BY" => array( "FIELD_NAME" => "G.CREATED_BY", "FIELD_TYPE" => "int", ), "CREATED_BY_USER" => array( "FIELD_TYPE" => "string", ), "TRIAL_PERIOD" => array( "FIELD_NAME" => "G.TRIAL_PERIOD", "FIELD_TYPE" => "int", ), "COUNTER_UPDATE_PERIOD" => array( "FIELD_NAME" => "G.COUNTER_UPDATE_PERIOD", "FIELD_TYPE" => "int", ), "CHECK_COUNTER_FREE_SPACE" => array( "FIELD_NAME" => "G.CHECK_COUNTER_FREE_SPACE", "FIELD_TYPE" => "string", ), "CHECK_COUNTER_SITES" => array( "FIELD_NAME" => "G.CHECK_COUNTER_SITES", "FIELD_TYPE" => "string", ), "CHECK_COUNTER_USERS" => array( "FIELD_NAME" => "G.CHECK_COUNTER_USERS", "FIELD_TYPE" => "string", ), "CHECK_COUNTER_LAST_AUTH" => array( "FIELD_NAME" => "G.CHECK_COUNTER_LAST_AUTH", "FIELD_TYPE" => "string", ), ); $arFields["MODIFIED_BY_USER"]["FIELD_NAME"] = $DB->Concat("UM.LOGIN", "UM.NAME", "UM.LAST_NAME"); $arFields["CREATED_BY_USER"]["FIELD_NAME"] = $DB->Concat("UC.LOGIN", "UC.NAME", "UC.LAST_NAME"); $obWhere = new CSQLWhere; $obWhere->SetFields($arFields); $arFilterNew = Array(); foreach ($arFilter as $k => $value) if (strlen($value) > 0 || $value === false) $arFilterNew[$k] = $value; $strWhere = "1 = 1"; $r = $obWhere->GetQuery($arFilterNew); if (strlen($r) > 0) $strWhere .= " AND (".$r.") "; $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) $strWhere .= " AND (".$r.") "; $strSql = " SELECT ".($obUserFieldsSql->GetDistinct()? "DISTINCT": "")." G.* ,UC.LOGIN as CREATED_BY_LOGIN ,UC.NAME as CREATED_BY_NAME ,UC.LAST_NAME as CREATED_BY_LAST_NAME ,UM.LOGIN as MODIFIED_BY_LOGIN ,UM.NAME as MODIFIED_BY_NAME ,UM.LAST_NAME as MODIFIED_BY_LAST_NAME ,".$DB->DateToCharFunction("G.TIMESTAMP_X")." as TIMESTAMP_X ,".$DB->DateToCharFunction("G.DATE_CREATE")." as DATE_CREATE ".$obUserFieldsSql->GetSelect()." FROM b_controller_group G LEFT JOIN b_user UC ON UC.ID=G.CREATED_BY LEFT JOIN b_user UM ON UM.ID=G.MODIFIED_BY ".$obWhere->GetJoins()." ".$obUserFieldsSql->GetJoin("G.ID")." WHERE ".$strWhere." ".CControllerAgent::_OrderBy($arOrder, $arFields, $obUserFieldsSql)." "; $dbr = $DB->Query($strSql); $dbr->is_filtered = (strlen($strWhere) > 0); return $dbr; } public static function GetByID($ID) { return CControllerGroup::GetList(Array(), Array("ID" => intval($ID))); } public static function GetGroupSettings($group_id) { $dbr_group = CControllerGroup::GetByID($group_id); if ($ar_group = $dbr_group->Fetch()) { $arSettings = unserialize($ar_group["INSTALL_INFO"]); $strCommand = CControllerGroupSettings::GeneratePHPInstall($arSettings); return $strCommand.$ar_group["INSTALL_PHP"]; } return false; } public static function RunCommand($group_id, $php_script, $arParameters = Array()) { global $DB; $group_id = intval($group_id); if ($php_script == 'COUNTERS_UPDATE' || $php_script == 'SET_SETTINGS' || $php_script == 'UPDATE') { $task_id = $php_script; $php_script = ""; } else { $task_id = 'REMOTE_COMMAND'; } $arUpdateFields = array( "~DATE_CREATE" => $DB->CurrentTimeFunction(), "INIT_EXECUTE" => (strlen($php_script)? $php_script: false), "INIT_EXECUTE_PARAMS" => (count($arParameters)? serialize($arParameters): false), ); $arUpdateBinds = array(); $strUpdate = " UPDATE b_controller_task SET ".$DB->PrepareUpdateBind("b_controller_task", $arUpdateFields, "", false, $arUpdateBinds)." WHERE CONTROLLER_MEMBER_ID = #'MID'# AND TASK_ID = '$task_id' AND DATE_EXECUTE IS NULL "; $arInsertFields = array( "~DATE_CREATE" => $DB->CurrentTimeFunction(), "TASK_ID" => $task_id, "INIT_EXECUTE" => (strlen($php_script)? $php_script: false), "INIT_EXECUTE_PARAMS" => (count($arParameters)? serialize($arParameters): false), "DATE_EXECUTE" => false, ); $strSql = "SELECT M.ID FROM b_controller_member M WHERE M.CONTROLLER_GROUP_ID=".$group_id." AND M.ACTIVE = 'Y'"; $rsMembers = $DB->Query($strSql); while ($arMember = $rsMembers->Fetch()) { $arBinds = array(); foreach ($arUpdateBinds as $field_id) $arBinds[$field_id] = $arUpdateFields[$field_id]; $rsUpdate = $DB->QueryBind(str_replace("#'MID'#", $arMember["ID"], $strUpdate), $arBinds); if ($rsUpdate->AffectedRowsCount() <= 0) { $arInsertFields["CONTROLLER_MEMBER_ID"] = $arMember["ID"]; $DB->Add("b_controller_task", $arInsertFields, array("INIT_EXECUTE", "INIT_EXECUTE_PARAMS")); } } } public static function __UpdateCountersAgent($group_id) { CControllerGroup::UpdateCounters($group_id); return "CControllerGroup::__UpdateCountersAgent(".$group_id.");"; } public static function UpdateCounters($group_id) { CControllerGroup::RunCommand($group_id, 'COUNTERS_UPDATE'); } public static function __UpdateSettingsAgent($group_id) { CControllerGroup::SetGroupSettings($group_id); return "CControllerGroup::__UpdateSettingsAgent(".$group_id.");"; } public static function SetGroupSettings($group_id) { CControllerGroup::RunCommand($group_id, 'SET_SETTINGS'); } public static function SiteUpdate($group_id) { CControllerGroup::RunCommand($group_id, 'UPDATE'); } } class CControllerGroupSettings { public static function GetData() { $arModules = Array( "main" => Array( "name" => GetMessage("CTRLR_GRP_SET_MAIN_NAME"), "options" => Array( "component_cache_on" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_CACHE"), "N", Array("checkbox", "Y")), "error_reporting" => Array( GetMessage("CTRLR_GRP_SET_MAIN_OPT_ERRREP"), 85, Array("selectbox", Array( "85" => GetMessage("CTRLR_GRP_SET_MAIN_OPT_ERRREP_1"), "2039" => GetMessage("CTRLR_GRP_SET_MAIN_OPT_ERRREP_2"), "0" => GetMessage("CTRLR_GRP_SET_MAIN_OPT_ERRREP_3") ) ) ), "all_bcc" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_EMAIL"), "", Array("text", 30)), "disk_space" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_QUOTA"), "", Array("text", 30)), "__registration" => GetMessage("CTRLR_GRP_SET_MAIN_OPT_REG"), "new_user_registration" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_CANREG"), "N", Array("checkbox", "Y")), "store_password" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_STORE_AUTH"), "Y", Array("checkbox", "Y")), "captcha_registration" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_CAPTCHA"), "N", Array("checkbox", "Y")), "auth_comp2" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_C2_0"), "N", Array("checkbox", "Y")), "auth_controller_prefix" => Array(GetMessage("CTRLR_GRP_SET_MAIN_PREFIX"), "controller", Array("text", "30")), "auth_controller_sso" => Array(GetMessage("CTRLR_GRP_SET_MAIN_AUTH_REM"), "N", Array("checkbox", "Y")), "__updates" => GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD"), "update_site" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_SER"), "", Array("text", 30)), "update_site_proxy_addr" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_PROXY"), "", Array("text", 30)), "update_site_proxy_port" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_PROXY_PORT"), "", Array("text", 30)), "update_site_proxy_user" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_PROXY_NAME"), "", Array("text", 30)), "update_site_proxy_pass" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_PROXY_PASS"), "", Array("text", 30)), "strong_update_check" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_STRONG"), "Y", Array("checkbox", "Y")), "stable_versions_only" => Array(GetMessage("CTRLR_GRP_SET_MAIN_OPT_UPD_STABLE"), "Y", Array("checkbox", "Y")), ), ), "fileman" => Array( "name" => GetMessage("CTRLR_GRP_SET_FILEMAN"), "options" => Array( "~allowed_components" => Array(GetMessage("CTRLR_GRP_SET_FILEMAN_OPT_AV_COMP"), "", Array("textarea", 5, 30)), ), ), "advertising" => Array("name" => GetMessage("CTRLR_GRP_SET_ADVERTISING")), "bitrix24" => Array("name" => GetMessage("CTRLR_GRP_SET_BITRIX24")), "bizproc" => Array("name" => GetMessage("CTRLR_GRP_SET_BIZPROC")), "bizprocdesigner" => Array("name" => GetMessage("CTRLR_GRP_SET_BIZPROCDESIGNER")), "blog" => Array("name" => GetMessage("CTRLR_GRP_SET_BLOG")), "calendar" => Array("name" => GetMessage("CTRLR_GRP_SET_CALENDAR")), "catalog" => Array("name" => GetMessage("CTRLR_GRP_SET_CATALOG")), "clouds" => Array("name" => GetMessage("CTRLR_GRP_SET_CLOUDS")), "cluster" => Array("name" => GetMessage("CTRLR_GRP_SET_CLUSTER")), "compression" => Array("name" => GetMessage("CTRLR_GRP_SET_COMPRESSION")), "controller" => Array("name" => GetMessage("CTRLR_GRP_SET_CONTROLLER")), "crm" => Array("name" => GetMessage("CTRLR_GRP_SET_CRM")), "currency" => Array("name" => GetMessage("CTRLR_GRP_SET_CURRENCY")), "dav" => Array("name" => GetMessage("CTRLR_GRP_SET_DAV")), "extranet" => Array("name" => GetMessage("CTRLR_GRP_SET_EXTRANET")), "form" => Array("name" => GetMessage("CTRLR_GRP_SET_FORM")), "forum" => Array("name" => GetMessage("CTRLR_GRP_SET_FORUM")), "iblock" => Array("name" => GetMessage("CTRLR_GRP_SET_IBLOCK")), "idea" => Array("name" => GetMessage("CTRLR_GRP_SET_IDEA")), "intranet" => Array("name" => GetMessage("CTRLR_GRP_SET_INTRANET")), "ldap" => Array("name" => GetMessage("CTRLR_GRP_SET_LDAP")), "learning" => Array("name" => GetMessage("CTRLR_GRP_SET_LEARNING")), "lists" => Array("name" => GetMessage("CTRLR_GRP_SET_LISTS")), "mail" => Array("name" => GetMessage("CTRLR_GRP_SET_MAIL")), "meeting" => Array("name" => GetMessage("CTRLR_GRP_SET_MEETING")), "perfmon" => Array("name" => GetMessage("CTRLR_GRP_SET_PERFMON")), "photogallery" => Array("name" => GetMessage("CTRLR_GRP_SET_PHOTOGALLERY")), "report" => Array("name" => GetMessage("CTRLR_GRP_SET_REPORT")), "sale" => Array("name" => GetMessage("CTRLR_GRP_SET_SALE")), "search" => Array("name" => GetMessage("CTRLR_GRP_SET_SEARCH")), "security" => Array("name" => GetMessage("CTRLR_GRP_SET_SECURITY")), "seo" => Array("name" => GetMessage("CTRLR_GRP_SET_SEO")), "socialnetwork" => Array("name" => GetMessage("CTRLR_GRP_SET_SOCIALNETWORK")), "socialservices" => Array("name" => GetMessage("CTRLR_GRP_SET_SOCIALSERVICES")), "statistic" => Array("name" => GetMessage("CTRLR_GRP_SET_STATISTIC")), "subscribe" => Array("name" => GetMessage("CTRLR_GRP_SET_SUBSCRIBE")), "support" => Array("name" => GetMessage("CTRLR_GRP_SET_SUPPORT")), "tasks" => Array("name" => GetMessage("CTRLR_GRP_SET_TASKS")), "timeman" => Array("name" => GetMessage("CTRLR_GRP_SET_TIMEMAN")), "translate" => Array("name" => GetMessage("CTRLR_GRP_SET_TRANSLATE")), "video" => Array("name" => GetMessage("CTRLR_GRP_SET_VIDEO")), "videomost" => Array("name" => GetMessage("CTRLR_GRP_SET_VIDEOMOST")), "videoport" => Array("name" => GetMessage("CTRLR_GRP_SET_VIDEOPORT")), "vote" => Array("name" => GetMessage("CTRLR_GRP_SET_VOTE")), "webdav" => Array("name" => GetMessage("CTRLR_GRP_SET_WEBDAV")), "webservice" => Array("name" => GetMessage("CTRLR_GRP_SET_WEBSERVICE")), "wiki" => Array("name" => GetMessage("CTRLR_GRP_SET_WIKI")), "workflow" => Array("name" => GetMessage("CTRLR_GRP_SET_WORKFLOW")), "xdimport" => Array("name" => GetMessage("CTRLR_GRP_SET_XDIMPORT")), "xmpp" => Array("name" => GetMessage("CTRLR_GRP_SET_XMPP")), ); sortByColumn($arModules, "name"); return $arModules; } public static function GetModules() { $arInfo = CControllerGroupSettings::GetData(); $arModules = Array(); foreach ($arInfo as $mname => $arProp) { $arModules[$mname] = $arProp["name"]; } return $arModules; } public static function GenerateInput($id, $arInfo, $curVal = false, $context = 'default') { $res = '<input type="checkbox" id="'.htmlspecialcharsbx('ACT_'.$id).'" '.($curVal === false? '': 'checked').' name="'.htmlspecialcharsbx('OPTIONS['.$context.']['.$id.']').'" value="Y" title="'.GetMessage("CTRLR_GRP_REASSIGN"). '" onclick="'.htmlspecialcharsbx('document.getElementById(\''.CUtil::addslashes($id).'\').disabled=!this.checked;if(this.checked)document.getElementById(\''.CUtil::addslashes($id).'\').focus();').'">'; if ($curVal === false) $strDis = ' disabled '; else $strDis = ''; $arInput = $arInfo[2]; if ($arInput[0] == 'checkbox') { $res .= '<select name="'.htmlspecialcharsbx('OPTIONS['.$context.']['.$id.']').'" id="'.htmlspecialcharsbx($id).'"'.$strDis.'>'. '<option value="N">'.GetMessage("CTRLR_GRP_OPT_NO").'</option>'. '<option value="Y"'.($curVal !== false && $curVal == 'Y'? ' selected': '').'>'.GetMessage("CTRLR_GRP_OPT_YES").'</option>'. '</select>'; } elseif ($arInput[0] == 'text') { $res .= '<input type="text" name="'.htmlspecialcharsbx('OPTIONS['.$context.']['.$id.']').'" '.$strDis.'id="'.htmlspecialcharsbx($id). '" size="'.htmlspecialcharsbx($arInput[1]).'" value="'.htmlspecialcharsbx($curVal === false? $arInput[2]: $curVal).'">'; } elseif ($arInput[0] == 'selectbox') { $res .= '<select name="'.htmlspecialcharsbx('OPTIONS['.$context.']['.$id.']').'" '.$strDis.'id="'.htmlspecialcharsbx($id).'">'; foreach ($arInput[1] as $enum_id => $enum_value) { $res .= '<option value="'.htmlspecialcharsbx($enum_id).'"'. ($curVal !== false && $curVal == $enum_id? ' selected': ''). '>'.htmlspecialcharsEx($enum_value).'</option>'; } $res .= '</select>'; } elseif ($arInput[0] == "textarea") { $res .= '<br><textarea rows="'.htmlspecialcharsbx($arInput[1]).'" cols="'.htmlspecialcharsbx($arInput[2]).'" name="'.htmlspecialcharsbx('OPTIONS['.$context.']['.$id.']').'" '.$strDis.' id="'.htmlspecialcharsbx($id).'">'.htmlspecialcharsbx($curVal === false? $arInput[3]: $curVal).'</textarea>'; } return $res; } /** * @return array[]IControllerGroupOption */ public static function Get3rdPartyOptions() { $arResult = array(); foreach (GetModuleEvents("controller", "OnGetGroupSettings", true) as $arEvent) { $Object = ExecuteModuleEventEx($arEvent); if (is_object($Object)) $arResult[] = $Object; } return $arResult; } public 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.'));'."\r\n"; } else $str .= 'CControllerClient::RestoreModules();'."\r\n"; 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]).'");'."\r\n"; elseif (substr($id, 0, 2) != '__') $str .= 'CControllerClient::RestoreOption("'.EscapePHPString($mname).'", "'.EscapePHPString($id).'");'."\r\n"; } } $arSecurity = $arValues["default"]["security"]; if ($arSecurity["limit_admin"] == "Y") $str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "Y");'."\r\n"; else $str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "N");'."\r\n"; $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 (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"]).');'."\r\n"; } 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).');'."\r\n"; if ($bSubOrdGroups) { $arSGroupsTmp = preg_split("/[\r\n,;]+/", $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).');'."\r\n"; } else $str .= 'CControllerClient::SetGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arDefinedPermissions).');'."\r\n"; $arGroups[] = $group_id; } } $str .= 'CControllerClient::RestoreSecurity('.CControllerGroupSettings::__PHPToString($arGroups).');'."\r\n"; $arThirdSettings = CControllerGroupSettings::Get3rdPartyOptions(); /** @var IControllerGroupOption $obOption */ foreach ($arThirdSettings as $obOption) { $str .= $obOption->GetOptionPHPCode($arValues); } return $str; } protected static function __PHPToString($arData) { if (is_array($arData)) { if ($arData == array_values($arData)) { foreach ($arData as $key => $value) $arData[$key] = CControllerGroupSettings::__PHPToString($value); $res = "Array(".implode(", ", $arData).")"; } else { $res = "Array("; foreach ($arData as $key => $value) { $res .= '"'.EscapePHPString($key).'" => '; $res .= CControllerGroupSettings::__PHPToString($value).", "; } $res .= ")"; } return $res; } else return '"'.EscapePHPString($arData).'"'; } function SetGroupSettings() { } } class IControllerGroupOption { var $id = 'UNDEFINED'; function GetName() { return GetMessage("CTRLR_GRP_SETTINGS")." ".$this->id; } function GetIcon() { return "controller_group_edit"; } function GetTitle() { return GetMessage("CTRLR_GRP_SETTINGS_TITLE"); } function GetOptionArray() { return Array(); } function GetOptionPHPCode($arAllValues) { $arValues = $arAllValues[$this->id]; $arOptions = $this->GetOptionArray(); $str = ""; foreach ($arOptions as $id => $arOptionParams) { if (isset($arValues[$id])) $str .= 'CControllerClient::SetOptionString("'.EscapePHPString($this->id).'", "'.EscapePHPString($id).'", "'.EscapePHPString($arValues[$id]).'");'."\r\n"; elseif (substr($id, 0, 2) != '__') $str .= 'CControllerClient::RestoreOption("'.EscapePHPString($this->id).'", "'.EscapePHPString($id).'");'."\r\n"; } return $str; } }