############################################## # Bitrix Site Manager # # Copyright (c) 2002-2015 Bitrix # # http://www.bitrixsoft.com # # mailto:admin@bitrixsoft.com # ############################################## /** * @global CMain $APPLICATION * @global CUser $USER * @global CDatabase $DB */ use Bitrix\Main\Authentication\Policy; require_once(__DIR__."/../include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/prolog.php"); define("HELP_FILE", "users/group_edit.php"); ClearVars(); if (!$USER->CanDoOperation('view_groups')) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); IncludeModuleLangFile(__FILE__); $asset = \Bitrix\Main\Page\Asset::getInstance(); $asset->addJs('/bitrix/js/main/gp.js'); $strError = ""; $ID = intval($_REQUEST['ID'] ?? 0); $COPY_ID = intval($_REQUEST["COPY_ID"] ?? 0); if($COPY_ID > 0) $ID = $COPY_ID; $modules = CModule::GetList(); $arModules = array(); while ($mr = $modules->Fetch()) $arModules[] = $mr["ID"]; $arSites = array(); $rsSites = CSite::GetList("sort", "asc", array("ACTIVE" => "Y")); while ($arSite = $rsSites->GetNext()) { $arSites["reference_id"][] = $arSite["ID"]; $arSites["reference"][] = "[".$arSite["ID"]."] ".$arSite["NAME"]; } $USER_COUNT = CUser::GetCount(); $USER_COUNT_MAX = 25; $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("MAIN_TAB"), "ICON" => "group_edit", "TITLE" => GetMessage("MAIN_TAB_TITLE")), array("DIV" => "edit2", "TAB" => GetMessage("TAB_2"), "ICON" => "group_edit", "TITLE" => GetMessage('MUG_POLICY_TITLE')), ); if($ID!=1 || $COPY_ID>0 || (COption::GetOptionString("main", "controller_member", "N") == "Y" && COption::GetOptionString("main", "~controller_limited_admin", "N") == "Y")) { $aTabs[] = array("DIV" => "edit3", "TAB" => GetMessage("TAB_3"), "ICON" => "group_edit", "TITLE" => GetMessage("MODULE_RIGHTS")); } $tabControl = new CAdminTabControl("tabControl", $aTabs); if($_SERVER["REQUEST_METHOD"] == "POST" && ($_REQUEST["save"] <> '' || $_REQUEST["apply"] <> '') && $USER->CanDoOperation('edit_groups') && check_bitrix_sessid()) { if($ID <= 2 && $ID != 0) $ACTIVE = "Y"; $group = new CGroup; $arGroupPolicy = array(); foreach (new Policy\RulesCollection() as $key => $value) { $curVal = ${"gp_".$key}; $curValParent = ${"gp_".$key."_parent"}; if ($curValParent != "Y") $arGroupPolicy[$key] = $curVal; } $arFields = array( "ACTIVE" => $_POST["ACTIVE"], "C_SORT" => $_POST["C_SORT"], "NAME" => $_POST["NAME"], "DESCRIPTION" => $_POST["DESCRIPTION"], "STRING_ID" => $_POST["STRING_ID"], "SECURITY_POLICY" => serialize($arGroupPolicy) ); if ($USER_COUNT <= $USER_COUNT_MAX) { $USER_ID_NUMBER = intval($_REQUEST["USER_ID_NUMBER"]); $USER_ID = array(); $ind = -1; for ($i = 0; $i <= $USER_ID_NUMBER; $i++) { if (${"USER_ID_ACT_".$i} == "Y") { $ind++; $USER_ID[$ind]["USER_ID"] = intval(${"USER_ID_".$i}); $USER_ID[$ind]["DATE_ACTIVE_FROM"] = ${"USER_ID_FROM_".$i}; $USER_ID[$ind]["DATE_ACTIVE_TO"] = ${"USER_ID_TO_".$i}; } } if ($ID == 1 && $COPY_ID<=0) { $ind++; $USER_ID[$ind]["USER_ID"] = 1; $USER_ID[$ind]["DATE_ACTIVE_FROM"] = false; $USER_ID[$ind]["DATE_ACTIVE_TO"] = false; } $arFields["USER_ID"] = $USER_ID; } if($ID>0 && $COPY_ID<=0) $res = $group->Update($ID, $arFields); else { $ID = $group->Add($arFields); $res = ($ID>0); $new="Y"; } $strError .= $group->LAST_ERROR; if ($strError == '') { if (intval($ID) != 1 || (COption::GetOptionString("main", "controller_member", "N") == "Y" && COption::GetOptionString("main", "~controller_limited_admin", "N") == "Y")) { // set per module rights $arTasks = array(); foreach ($arModules as $MID) { $moduleName = str_replace(".", "_", $MID); if(isset(${"TASKS_".$moduleName})) { $arTasks[$MID] = ${"TASKS_".$moduleName}; $rt = CTask::GetLetter($arTasks[$MID]); } else { $rt = array(); if (isset(${"RIGHTS_".$moduleName})) $rt = ${"RIGHTS_".$moduleName}; $st = array(); if (isset(${"SITES_".$moduleName})) $st = ${"SITES_".$moduleName}; $APPLICATION->DelGroupRight($MID, array($ID), false); foreach($arSites["reference_id"] as $site_id_tmp) { $APPLICATION->DelGroupRight($MID, array($ID), $site_id_tmp); } } if (!empty($rt) && is_array($rt)) { foreach ($rt as $i => $right) { if ($right <> '' && $right != "NOT_REF") { $APPLICATION->SetGroupRight($MID, $ID, $right, (array_key_exists($i, $st) && $st[$i] <> '' && $st[$i] != "NOT_REF" ? $st[$i] : false)); } } } elseif(!is_array($rt) && $rt <> '' && $rt != "NOT_REF") $APPLICATION->SetGroupRight($MID, $ID, $rt, false); } $arTasksModules = CTask::GetTasksInModules(false, false, 'module'); $nID = COperation::GetIDByName('edit_subordinate_users'); $nID2 = COperation::GetIDByName('view_subordinate_users'); $arTaskIds = $arTasksModules['main']; $handle_subord = false; $l = count($arTaskIds); for ($i = 0; $i < $l; $i++) { if ($arTaskIds[$i]['ID'] == $arTasks['main']) { $arOpInTask = CTask::GetOperations($arTaskIds[$i]['ID']); if (in_array($nID, $arOpInTask) || in_array($nID2, $arOpInTask)) $handle_subord = true; break; } } if ($handle_subord) { $arSubordinateGroups = (isset($_POST['subordinate_groups'])) ? $_POST['subordinate_groups'] : array(); CGroup::SetSubordinateGroups($ID, $arSubordinateGroups); } else { CGroup::SetSubordinateGroups($ID); } $old_arTasks = CGroup::GetTasks($ID, true); if (!empty(array_diff($old_arTasks, $arTasks)) || !empty(array_diff($arTasks, $old_arTasks))) CGroup::SetTasks($ID, $arTasks); } if($USER->CanDoOperation('edit_groups') && $_REQUEST["save"] <> '') LocalRedirect("group_admin.php?lang=".LANGUAGE_ID); elseif($USER->CanDoOperation('edit_groups') && $_REQUEST["apply"] <> '') LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&ID=".$ID."&".$tabControl->ActiveTabParam()); elseif($new == "Y") LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&ID=".$ID."&".$tabControl->ActiveTabParam()); } } $str_USER_ID = array(); $z = CGroup::GetByID($ID, "N"); if($z->ExtractFields("str_")) { if($USER_COUNT <= $USER_COUNT_MAX && $ID <> 2) { $dbUserGroup = CGroup::GetGroupUserEx($ID); while ($arUserGroup = $dbUserGroup->Fetch()) { $str_USER_ID[intval($arUserGroup["USER_ID"])]["DATE_ACTIVE_FROM"] = $arUserGroup["DATE_ACTIVE_FROM"]; $str_USER_ID[intval($arUserGroup["USER_ID"])]["DATE_ACTIVE_TO"] = $arUserGroup["DATE_ACTIVE_TO"]; } } } else { $ID=0; $str_ACTIVE="Y"; $str_C_SORT = 100; } if ($strError <> '') { $DB->InitTableVarsForEdit("b_group", "", "str_"); $USER_ID_NUMBER = intval($_REQUEST["USER_ID_NUMBER"]); $str_USER_ID = array(); for ($i = 0; $i <= $USER_ID_NUMBER; $i++) { if (${"USER_ID_ACT_".$i} == "Y") { $str_USER_ID[intval(${"USER_ID_".$i})]["DATE_ACTIVE_FROM"] = ${"USER_ID_FROM_".$i}; $str_USER_ID[intval(${"USER_ID_".$i})]["DATE_ACTIVE_TO"] = ${"USER_ID_TO_".$i}; } } } if($ID <= 0 || $COPY_ID > 0) $APPLICATION->SetTitle(GetMessage("NEW_GROUP_TITLE")); elseif($USER->CanDoOperation('edit_groups')) $APPLICATION->SetTitle(GetMessage("EDIT_GROUP_TITLE", array("#ID#" => $ID))); else $APPLICATION->SetTitle(GetMessage("EDIT_GROUP_TITLE_VIEW", array("#ID#" => $ID))); require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php"); $aMenu = array( array( "TEXT" => GetMessage("RECORD_LIST"), "TITLE" => GetMessage("RECORD_LIST_TITLE"), "LINK" => "/bitrix/admin/group_admin.php?lang=".LANGUAGE_ID."&set_default=Y", "ICON" => "btn_list" ) ); if($USER->CanDoOperation('edit_groups')) { if(intval($ID)>0 && $COPY_ID<=0) { $aMenu[] = array("SEPARATOR"=>"Y"); $aMenu[] = array( "TEXT" => GetMessage("MAIN_NEW_RECORD"), "TITLE" => GetMessage("MAIN_NEW_RECORD_TITLE"), "LINK" => "/bitrix/admin/group_edit.php?lang=".LANGUAGE_ID, "ICON" => "btn_new" ); if($ID>1) { $aMenu[] = array( "TEXT" => GetMessage("MAIN_COPY_RECORD"), "TITLE" => GetMessage("MAIN_COPY_RECORD_TITLE"), "LINK" => "/bitrix/admin/group_edit.php?lang=".LANGUAGE_ID."©_ID=".$ID, "ICON" => "btn_copy" ); } if($ID>2) { $aMenu[] = array( "TEXT" => GetMessage("MAIN_DELETE_RECORD"), "TITLE" => GetMessage("MAIN_DELETE_RECORD_TITLE"), "LINK" => "javascript:if(confirm('".CUtil::JSEscape(GetMessage("MAIN_DELETE_RECORD_CONF"))."')) window.location='/bitrix/admin/group_admin.php?ID=".$ID."&action=delete&lang=".LANGUAGE_ID."&".bitrix_sessid_get()."';", "ICON" => "btn_delete" ); } } } $context = new CAdminContextMenu($aMenu); $context->Show(); ?>