%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/lists.list.edit/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/lists.list.edit/component.php |
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); /** @global CMain $APPLICATION */ /** @global CUser $USER */ /** @global CDatabase $DB */ /** @var CBitrixComponent $this */ /** @var array $arParams */ /** @var array $arResult */ /** @var string $componentName */ /** @var string $componentPath */ /** @var string $componentTemplate */ /** @var string $parentComponentName */ /** @var string $parentComponentPath */ /** @var string $parentComponentTemplate */ $this->setFrameMode(false); /** @var CCacheManager $CACHE_MANAGER */ global $CACHE_MANAGER; if(!CModule::IncludeModule('lists')) { ShowError(GetMessage("CC_BLLE_MODULE_NOT_INSTALLED")); return; } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/admin_tools.php"); $APPLICATION->AddHeadScript('/bitrix/js/iblock/iblock_edit.js'); $lists_perm = CListPermissions::CheckAccess( $USER, $arParams["~IBLOCK_TYPE_ID"], $arParams["~IBLOCK_ID"] > 0? $arParams["~IBLOCK_ID"]: false, $arParams["~SOCNET_GROUP_ID"] ); if($lists_perm < 0) { switch($lists_perm) { case CListPermissions::WRONG_IBLOCK_TYPE: ShowError(GetMessage("CC_BLLE_WRONG_IBLOCK_TYPE")); return; case CListPermissions::WRONG_IBLOCK: ShowError(GetMessage("CC_BLLE_WRONG_IBLOCK")); return; case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED: ShowError(GetMessage("CC_BLLE_LISTS_FOR_SONET_GROUP_DISABLED")); return; default: ShowError(GetMessage("CC_BLLE_UNKNOWN_ERROR")); return; } } elseif( ( $arParams["~IBLOCK_ID"] > 0 && $lists_perm < CListPermissions::IS_ADMIN && !CIBlockRights::UserHasRightTo($arParams["~IBLOCK_ID"], $arParams["~IBLOCK_ID"], "iblock_edit") ) || ( $arParams["~IBLOCK_ID"] == 0 && $lists_perm < CListPermissions::IS_ADMIN ) ) { ShowError(GetMessage("CC_BLLE_ACCESS_DENIED")); return; } $arParams["CAN_EDIT"] = $lists_perm >= CListPermissions::IS_ADMIN || ( $arParams["~IBLOCK_ID"] > 0 && CIBlockRights::UserHasRightTo($arParams["~IBLOCK_ID"], $arParams["~IBLOCK_ID"], "iblock_edit") ) ; $bBizProc = CModule::IncludeModule('bizproc') && CBPRuntime::isFeatureEnabled(); $arIBlock = CIBlock::GetArrayByID(intval($arParams["~IBLOCK_ID"])); if($arIBlock) { $arResult["~IBLOCK"] = $arIBlock; $arResult["IBLOCK"] = htmlspecialcharsex($arIBlock); $arResult["IBLOCK_ID"] = $arIBlock["ID"]; } else { $arResult["IBLOCK"] = false; $arResult["IBLOCK_ID"] = false; } if(isset($arParams["SOCNET_GROUP_ID"]) && $arParams["SOCNET_GROUP_ID"] > 0) $arParams["SOCNET_GROUP_ID"] = intval($arParams["SOCNET_GROUP_ID"]); else $arParams["SOCNET_GROUP_ID"] = ""; $arResult["GRID_ID"] = "lists_fields"; $arResult["FORM_ID"] = "lists_list_edit"; $arResult["~LISTS_URL"] = str_replace( array("#list_id#", "#group_id#"), array("0", $arParams["SOCNET_GROUP_ID"]), $arParams["~LISTS_URL"] ); $arResult["LISTS_URL"] = htmlspecialcharsbx($arResult["~LISTS_URL"]); $arResult["~LIST_URL"] = CHTTP::urlAddParams(str_replace( array("#list_id#", "#section_id#", "#group_id#"), array($arResult["IBLOCK_ID"], "0", $arParams["SOCNET_GROUP_ID"]), $arParams["~LIST_URL"] ), array("list_section_id" => "")); $arResult["LIST_URL"] = htmlspecialcharsbx($arResult["~LIST_URL"]); $arResult["~LIST_EDIT_URL"] = str_replace( array("#list_id#", "#group_id#"), array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]), $arParams["~LIST_EDIT_URL"] ); $arResult["LIST_EDIT_URL"] = htmlspecialcharsbx($arResult["~LIST_EDIT_URL"]); $arResult["~LIST_FIELDS_URL"] = str_replace( array("#list_id#", "#group_id#"), array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]), $arParams["~LIST_FIELDS_URL"] ); $arResult["LIST_FIELDS_URL"] = htmlspecialcharsbx($arResult["~LIST_FIELDS_URL"]); //Assume there was no error $bVarsFromForm = false; //Form submitted if($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid()) { //When Save or Apply buttons was pressed if(isset($_POST["save"]) || isset($_POST["apply"])) { //Gather fields for update $arFields = array( "NAME" => $_POST["NAME"], "DESCRIPTION" => $_POST["DESCRIPTION"], "IBLOCK_TYPE_ID" => $arParams["~IBLOCK_TYPE_ID"], "SORT" => $_POST["SORT"], "WORKFLOW" => "N", "ELEMENTS_NAME" => $_POST["ELEMENTS_NAME"], "ELEMENT_NAME" => $_POST["ELEMENT_NAME"], "ELEMENT_ADD" => $_POST["ELEMENT_ADD"], "ELEMENT_EDIT" => $_POST["ELEMENT_EDIT"], "ELEMENT_DELETE" => $_POST["ELEMENT_DELETE"], "SECTIONS_NAME" => $_POST["SECTIONS_NAME"], "SECTION_NAME" => $_POST["SECTION_NAME"], "SECTION_ADD" => $_POST["SECTION_ADD"], "SECTION_EDIT" => $_POST["SECTION_EDIT"], "SECTION_DELETE" => $_POST["SECTION_DELETE"], ); if($arParams["SOCNET_GROUP_ID"]) $arFields["SOCNET_GROUP_ID"] = $arParams["SOCNET_GROUP_ID"]; if($bBizProc) $arFields["BIZPROC"] = $_POST["BIZPROC"]=="Y"? "Y": "N"; $arSites = array(SITE_ID); if($arIBlock) { $rsSite = CIBlock::GetSite($arIBlock["ID"]); while($ar = $rsSite->Fetch()) $arSites[] = $ar["SITE_ID"]; } $arFields["SITE_ID"] = $arSites; if(isset($_FILES["PICTURE"])) $arFields["PICTURE"] = $_FILES["PICTURE"]; if(isset($_POST["PICTURE_del"])) $arFields["PICTURE"]["del"] = "Y"; if(is_array($_POST["RIGHTS"])) $postRights = CIBlockRights::Post2Array($_POST["RIGHTS"]); else $postRights = array(); $rights = array(); if($arIBlock) { $RIGHTS_MODE = CIBlock::GetArrayByID($arIBlock["ID"], "RIGHTS_MODE"); if($RIGHTS_MODE != 'E') { $arIBlockPerms = CIBlock::GetGroupPermissions($arIBlock["ID"]); $i = 0; foreach($arIBlockPerms as $group_id => $letter) { if($letter > "W") $rights['n_'.($i++)] = array( "GROUP_CODE" => "G".$group_id, "IS_INHERITED" => "N", "TASK_ID" => CIBlockRights::LetterToTask($letter), ); } } else { $obIBlockRights = new CIBlockRights($arIBlock["ID"]); $rights = $obIBlockRights->GetRights(); } } //For existing iblock add rights to rule $arFields["RIGHTS_MODE"] = "E"; $arFields["RIGHTS"] = array(); foreach($rights as $rightId => $right) { if(array_key_exists($rightId, $postRights)) $arFields["RIGHTS"][$rightId] = $right; } foreach($postRights as $rightId => $right) $arFields["RIGHTS"][$rightId] = $right; //Update existing or add new $ob = new CIBlock; if($arIBlock) { $res = $ob->Update($arIBlock["ID"], $arFields); if($res) $res = $arIBlock["ID"]; } else { $res = $ob->Add($arFields); if($res) { $obList = new CList($res); $obList->AddField(array( "SORT" => 10, "NAME" => GetMessage("CC_BLLE_NAME_FIELD"), "IS_REQUIRED" => "Y", "MULTIPLE" => "N", "TYPE" => "NAME", "DEFAULT_VALUE" => "", )); $obList->Save(); } } if($res) { if ((strlen($arFields["SOCNET_GROUP_ID"]) > 0) && CModule::IncludeModule('socialnetwork')) { CSocNetGroup::SetLastActivity($arFields["SOCNET_GROUP_ID"]); } $list = new CList($res); $list->ActualizeDocumentAdminPage(str_replace( array("#list_id#", "#group_id#"), array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]), $arParams["LIST_ELEMENT_URL"] )); //Clear components cache $CACHE_MANAGER->ClearByTag("lists_list_".$res); $CACHE_MANAGER->ClearByTag("lists_list_any"); $CACHE_MANAGER->CleanDir("menu"); $tab_name = $arResult["FORM_ID"]."_active_tab"; //And go to proper page if($arIBlock) { $url = $arResult["LIST_URL"]; if(isset($_POST["apply"])) $url = $arResult["LIST_EDIT_URL"]; LocalRedirect(CHTTP::urlAddParams( $url, array($tab_name => $_POST[$tab_name]), array("skip_empty" => true, "encode" => true) )); } elseif(isset($_POST["save"])) { LocalRedirect($arResult["LISTS_URL"]); } else { LocalRedirect(CHTTP::urlAddParams(str_replace( array("#list_id#", "#group_id#"), array($res, $arParams["SOCNET_GROUP_ID"]), $arParams["LIST_EDIT_URL"] ), array($tab_name => $_POST[$tab_name]), array("skip_empty" => true, "encode" => true) )); } } else { ShowError($ob->LAST_ERROR); $bVarsFromForm = true; } } elseif(isset($_POST["action"]) && $_POST["action"]==="delete" && $arResult["IBLOCK_ID"]) { if(CIBlock::Delete($arResult["IBLOCK_ID"])) { //Clear components cache global $CACHE_MANAGER; $CACHE_MANAGER->ClearByTag("lists_list_".$arResult["IBLOCK_ID"]); $CACHE_MANAGER->ClearByTag("lists_list_any"); $CACHE_MANAGER->CleanDir("menu"); } LocalRedirect($arResult["~LISTS_URL"]); } elseif(isset($_POST["action"]) && $_POST["action"]==="migrate" && $arResult["IBLOCK_ID"]) { if($arParams["IBLOCK_TYPE_ID"] != COption::GetOptionString("lists", "livefeed_iblock_type_id")) { if(CModule::includeModule('bizproc') && CBPRuntime::isFeatureEnabled()) { \Bitrix\Lists\Importer::migrateList($arResult["IBLOCK_ID"]); CLists::deleteListsUrl($arResult["IBLOCK_ID"]); $processesUrl = COption::GetOptionString('lists', 'livefeed_url'); $listElementUrl = str_replace($arParams["LISTS_URL"], $processesUrl, $arParams["LIST_ELEMENT_URL"]); $list = new CList($arResult["IBLOCK_ID"]); $list->ActualizeDocumentAdminPage(str_replace( array("#list_id#", "#group_id#"), array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]), $listElementUrl )); $path = rtrim(SITE_DIR, '/'); LocalRedirect($path.$processesUrl); } } LocalRedirect($arResult["~LISTS_URL"]); } else { //Go to lists page LocalRedirect($arResult["~LISTS_URL"]); } } $data = array(); if($arParams["IBLOCK_TYPE_ID"] == COption::GetOptionString("lists", "livefeed_iblock_type_id")) $typeTranslation = '_PROCESS'; else $typeTranslation = ''; if($bVarsFromForm) {//There was an error so display form values $data["ID"] = $arIBlock? $arIBlock["ID"]: ""; $data["NAME"] = $_POST["NAME"]; $data["DESCRIPTION"] = $_POST["DESCRIPTION"]; $data["SORT"] = $_POST["SORT"]; if($bBizProc) $data["BIZPROC"] = $_POST["BIZPROC"]; $data["PICTURE"] = $arIBlock? $arIBlock["PICTURE"]: ""; $data["ELEMENTS_NAME"] = $_POST["ELEMENTS_NAME"]; $data["ELEMENT_NAME"] = $_POST["ELEMENT_NAME"]; $data["ELEMENT_ADD"] = $_POST["ELEMENT_ADD"]; $data["ELEMENT_EDIT"] = $_POST["ELEMENT_EDIT"]; $data["ELEMENT_DELETE"] = $_POST["ELEMENT_DELETE"]; $data["SECTIONS_NAME"] = $_POST["SECTIONS_NAME"]; $data["SECTION_NAME"] = $_POST["SECTION_NAME"]; $data["SECTION_ADD"] = $_POST["SECTION_ADD"]; $data["SECTION_EDIT"] = $_POST["SECTION_EDIT"]; $data["SECTION_DELETE"] = $_POST["SECTION_DELETE"]; } elseif($arIBlock) {//Edit existing iblock $data["ID"] = $arIBlock["ID"]; $data["NAME"] = $arIBlock["NAME"]; $data["DESCRIPTION"] = $arIBlock["DESCRIPTION"]; $data["SORT"] = $arIBlock["SORT"]; if($bBizProc) $data["BIZPROC"] = $arIBlock["BIZPROC"]; $data["PICTURE"] = $arIBlock["PICTURE"]; $data["ELEMENTS_NAME"] = $arIBlock["ELEMENTS_NAME"]; $data["ELEMENT_NAME"] = $arIBlock["ELEMENT_NAME"]; $data["ELEMENT_ADD"] = $arIBlock["ELEMENT_ADD"]; $data["ELEMENT_EDIT"] = $arIBlock["ELEMENT_EDIT"]; $data["ELEMENT_DELETE"] = $arIBlock["ELEMENT_DELETE"]; $data["SECTIONS_NAME"] = $arIBlock["SECTIONS_NAME"]; $data["SECTION_NAME"] = $arIBlock["SECTION_NAME"]; $data["SECTION_ADD"] = $arIBlock["SECTION_ADD"]; $data["SECTION_EDIT"] = $arIBlock["SECTION_EDIT"]; $data["SECTION_DELETE"] = $arIBlock["SECTION_DELETE"]; } else {//New one $data["ID"] = ""; $data["NAME"] = GetMessage("CC_BLLE_FIELD_NAME_DEFAULT".$typeTranslation); $data["SORT"] = 500; if($bBizProc) $data["BIZPROC"] = "Y"; $data["PICTURE"] = ""; $arMessages = CIBlock::GetMessages(0, $arParams["~IBLOCK_TYPE_ID"]); $data["ELEMENTS_NAME"] = $arMessages["ELEMENTS_NAME"]; $data["ELEMENT_NAME"] = $arMessages["ELEMENT_NAME"]; $data["ELEMENT_ADD"] = $arMessages["ELEMENT_ADD"]; $data["ELEMENT_EDIT"] = $arMessages["ELEMENT_EDIT"]; $data["ELEMENT_DELETE"] = $arMessages["ELEMENT_DELETE"]; $data["SECTIONS_NAME"] = $arMessages["SECTIONS_NAME"]; $data["SECTION_NAME"] = $arMessages["SECTION_NAME"]; $data["SECTION_ADD"] = $arMessages["SECTION_ADD"]; $data["SECTION_EDIT"] = $arMessages["SECTION_EDIT"]; $data["SECTION_DELETE"] = $arMessages["SECTION_DELETE"]; } $arResult["FORM_DATA"] = array(); foreach($data as $key => $value) { $arResult["FORM_DATA"][$key] = htmlspecialcharsbx($value); $arResult["FORM_DATA"]["~".$key] = $value; } if($arResult["IBLOCK_ID"] > 0) $RIGHTS_MODE = CIBlock::GetArrayByID($arResult["IBLOCK_ID"], "RIGHTS_MODE"); elseif($arParams["SOCNET_GROUP_ID"]) $RIGHTS_MODE = 'S'; else $RIGHTS_MODE = 'E'; $arResult["RIGHTS"] = array(); if($RIGHTS_MODE != 'E') { $i = 0; if($arParams["SOCNET_GROUP_ID"]) { $arSocnetPerm = CLists::GetSocnetPermission($arResult["IBLOCK_ID"]); foreach($arSocnetPerm as $role => $permission) { if($permission > "W") $permission = "W"; switch($role) { case "A": case "E": case "K": $arResult["RIGHTS"]['n'.($i++)] = array( "GROUP_CODE" => "SG".$arParams["SOCNET_GROUP_ID"]."_".$role, "IS_INHERITED" => "N", "TASK_ID" => CIBlockRights::LetterToTask($permission), ); break; case "L": $arResult["RIGHTS"]['n'.($i++)] = array( "GROUP_CODE" => "AU", "IS_INHERITED" => "N", "TASK_ID" => CIBlockRights::LetterToTask($permission), ); break; case "N": $arResult["RIGHTS"]['n'.($i++)] = array( "GROUP_CODE" => "G2", "IS_INHERITED" => "N", "TASK_ID" => CIBlockRights::LetterToTask($permission), ); break; } } } else { $arIBlockPerms = CIBlock::GetGroupPermissions($arResult["IBLOCK_ID"]); foreach($arIBlockPerms as $group_id => $letter) $arResult["RIGHTS"]['n'.($i++)] = array( "GROUP_CODE" => "G".$group_id, "IS_INHERITED" => "N", "TASK_ID" => CIBlockRights::LetterToTask($letter), ); } } elseif($arResult["IBLOCK_ID"] > 0) { $obIBlockRights = new CIBlockRights($arResult["IBLOCK_ID"]); $arResult["RIGHTS"] = $obIBlockRights->GetRights(array("count_overwrited" => true)); } $arResult["TASKS"] = CIBlockRights::GetRightsList(); $arResult['RAND_STRING'] = $this->randString(); $this->IncludeComponentTemplate(); if($arIBlock) $APPLICATION->SetTitle(GetMessage("CC_BLLE_TITLE_EDIT".$typeTranslation, array("#NAME#" => $arResult["IBLOCK"]["NAME"]))); else $APPLICATION->SetTitle(GetMessage("CC_BLLE_TITLE_NEW".$typeTranslation)); if($arResult["IBLOCK_ID"]) $APPLICATION->AddChainItem($arResult["IBLOCK"]["NAME"], $arResult["~LIST_URL"]); $APPLICATION->AddChainItem(GetMessage("CC_BLLE_CHAIN_EDIT"), $arResult["~LIST_EDIT_URL"]); ?>