use Bitrix\Main\Loader; define("ADMIN_MODULE_NAME", "perfmon"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); /** @global CMain $APPLICATION */ /** @global CDatabase $DB */ /** @global CUser $USER */ IncludeModuleLangFile(__FILE__); if (!Loader::includeModule('perfmon')) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $message = new CAdminMessage(GetMessage("PERFMON_ROW_EDIT_MODULE_ERROR")); echo $message->Show(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $hasTokenizer = function_exists('token_get_all'); $isAdmin = $USER->CanDoOperation('edit_php'); $RIGHT = $APPLICATION->GetGroupRight("perfmon"); if ($RIGHT <= "D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); function var_import_r($tokens, &$pos, &$result) { while (isset($tokens[$pos])) { if ($tokens[$pos][0] === T_STRING) $uc = mb_strtoupper($tokens[$pos][1]); else $uc = ""; if ($uc === "NULL" || $uc === "TRUE" || $uc === "FALSE") { $result = eval("return ".$tokens[$pos][1].";"); $pos++; } elseif ($tokens[$pos][0] === T_LNUMBER || $tokens[$pos][0] === T_DNUMBER || $tokens[$pos][0] === T_CONSTANT_ENCAPSED_STRING) { $result = eval("return ".$tokens[$pos][1].";"); $pos++; } elseif ($tokens[$pos][0] === T_ARRAY) { $pos++; while (isset($tokens[$pos]) && $tokens[$pos][0] === T_WHITESPACE) $pos++; if ($tokens[$pos][0] !== "(") return; else $pos++; $result = array(); while (true) { while (isset($tokens[$pos]) && $tokens[$pos][0] === T_WHITESPACE) $pos++; if ($tokens[$pos][0] === ")") break; $key = null; var_import_r($tokens, $pos, $key); while (isset($tokens[$pos]) && $tokens[$pos][0] === T_WHITESPACE) $pos++; if ($tokens[$pos][0] === "," || $tokens[$pos][0] === ")") { $result[] = $key; $pos++; continue; } if ($tokens[$pos][0] !== T_DOUBLE_ARROW) return; else $pos++; while (isset($tokens[$pos]) && $tokens[$pos][0] === T_WHITESPACE) $pos++; $value = null; var_import_r($tokens, $pos, $value); while (isset($tokens[$pos]) && $tokens[$pos][0] === T_WHITESPACE) $pos++; if ($tokens[$pos][0] === "," || $tokens[$pos][0] === ")") $result[$key] = $value; if ($tokens[$pos][0] === ",") $pos++; } $pos++; } else { return; } } } function var_import($str) { $tokens = token_get_all(" ".trim($str)); $pos = 2; $result = null; var_import_r($tokens, $pos, $result); return $result; } if ($_SERVER["REQUEST_METHOD"] === "POST" && check_bitrix_sessid() && $isAdmin && $_REQUEST["action"] === "unserialize") { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); CUtil::JSPostUnescape(); echo var_export(unserialize($_POST["data"], array('allowed_classes' => false)), true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); die(); } if ($_SERVER["REQUEST_METHOD"] === "POST" && check_bitrix_sessid() && $isAdmin && $_REQUEST["action"] === "serialize") { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); CUtil::JSPostUnescape(); echo serialize(var_import($_POST["data"])); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); die(); } if ($_SERVER["REQUEST_METHOD"] === "POST" && check_bitrix_sessid() && $isAdmin && $_REQUEST["action"] === "base64decode") { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); CUtil::JSPostUnescape(); echo base64_decode($_POST["data"]); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); die(); } if ($_SERVER["REQUEST_METHOD"] === "POST" && check_bitrix_sessid() && $isAdmin && $_REQUEST["action"] === "base64encode") { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); CUtil::JSPostUnescape(); echo base64_encode($_POST["data"]); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); die(); } $table_name = $_REQUEST["table_name"]; $obTable = new CPerfomanceTable; $obTable->Init($table_name); if (!$obTable->IsExists()) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $message = new CAdminMessage(GetMessage("PERFMON_ROW_EDIT_TABLE_ERROR", array( "#TABLE_NAME#" => htmlspecialcharsbx($table_name), ))); echo $message->Show(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $arUniqueIndexes = $obTable->GetUniqueIndexes(); $arFields = $obTable->GetTableFields(false, true); $arFilter = array(); $strWhere = ""; $bNewRow = false; $arRowPK = isset($_REQUEST["pk"]) && is_array($_REQUEST["pk"])? $_REQUEST["pk"]: array(); if (count($arRowPK)) { foreach ($arUniqueIndexes as $arIndexColumns) { $arMissed = array_diff($arIndexColumns, array_keys($arRowPK)); if (count($arMissed) == 0) { $strWhere = "WHERE 1 = 1"; foreach ($arRowPK as $column => $value) { $arFilter["=".$column] = $value; if ($value != "") $strWhere .= " AND ".$column." = '".$DB->ForSQL($value)."'"; else $strWhere .= " AND (".$column." = '' OR ".$column." IS NULL)"; } break; } } } if (!isset($_REQUEST["pk"]) && !empty($arUniqueIndexes)) { foreach ($arFields as $Field => $arField) { if ($arField["increment"]) { foreach ($arUniqueIndexes as $arIndexColumns) { $arMissed = array_diff($arIndexColumns, array($Field)); if (count($arMissed) == 0) { $bNewRow = true; break; } } } } } if (empty($arFilter) && !$bNewRow) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $message = new CAdminMessage(GetMessage("PERFMON_ROW_EDIT_PK_ERROR")); echo $message->Show(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } if ($bNewRow) { $arRecord = array(); foreach ($arFields as $Field => $arField) { $arRecord[$Field] = $arField["default"]; } } else { CTimeZone::Disable(); $rsRecord = $obTable->GetList(array_keys($arFields), $arFilter, array()); CTimeZone::Enable(); $arRecord = $rsRecord->Fetch(); } if (!$arRecord) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $message = new CAdminMessage(GetMessage("PERFMON_ROW_EDIT_NOT_FOUND")); echo $message->Show(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $obSchema = new CPerfomanceSchema; $arChildren = $obSchema->GetChildren($table_name); $arParents = $obSchema->GetParents($table_name); $aTabs = array( array( "DIV" => "edit", "TAB" => GetMessage("PERFMON_ROW_EDIT_TAB"), "ICON" => "main_user_edit", "TITLE" => GetMessage("PERFMON_ROW_EDIT_TAB_TITLE", array("#TABLE_NAME#" => $table_name)), ), array( "DIV" => "cache", "TAB" => GetMessage("PERFMON_ROW_CACHE_TAB"), "ICON" => "main_user_edit", "TITLE" => GetMessage("PERFMON_ROW_CACHE_TAB_TITLE"), ), ); $tabControl = new CAdminTabControl("tabControl_".ToLower($table_name), $aTabs); $bVarsFromForm = false; $strError = ''; if ($_SERVER["REQUEST_METHOD"] === "POST" && check_bitrix_sessid() && $isAdmin) { CTimeZone::Disable(); if (isset($_REQUEST["delete"]) && $_REQUEST["delete"] != "") { if (!$bNewRow) { $res = $DB->Query(" delete from ".CPerfomanceTable::escapeTable($table_name)." ".$strWhere." ", true); if ($res) { LocalRedirect("perfmon_table.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name)); } else { $strError = $DB->GetErrorMessage(); } } $bVarsFromForm = true; } elseif ($bNewRow) { $arToInsert = array(); foreach ($arFields as $Field => $arField) { if (!in_array($Field, $arIndexColumns)) { if (isset($_POST["mark_".$Field."_"]) && $_POST["mark_".$Field."_"] === "Y") $arToInsert[$Field] = var_import($_POST[$Field]); elseif (isset($_POST[$Field]) && $_POST[$Field] <> '') $arToInsert[$Field] = $_POST[$Field]; else $arToInsert[$Field] = false; } } $res = $DB->Add($table_name, $arToInsert, array(), "", true); if (!$res) { $bVarsFromForm = true; $strError = $DB->GetErrorMessage(); } } else { $arToUpdate = array(); foreach ($arFields as $Field => $arField) { if (!in_array($Field, $arIndexColumns)) { if (isset($_POST["mark_".$Field."_"]) && $_POST["mark_".$Field."_"] === "Y") $arToUpdate[$Field] = serialize(var_import($_POST[$Field])); elseif (isset($_POST[$Field]) && $_POST[$Field] <> '') $arToUpdate[$Field] = $_POST[$Field]; else $arToUpdate[$Field] = false; } } $strUpdate = $DB->PrepareUpdate($table_name, $arToUpdate); if($strUpdate <> '') { $res = $DB->Query(" update ".CPerfomanceTable::escapeTable($table_name)." set ".$strUpdate." ".$strWhere." ", true); if(!$res) { $bVarsFromForm = true; $strError = $DB->GetErrorMessage(); } } else { $res = true; } } CTimeZone::Enable(); if ($res) { if ($_POST["clear_managed_cache"] === "Y") { $CACHE_MANAGER->CleanAll(); $stackCacheManager->CleanAll(); } if ($_POST["apply"] != "") { $s = ""; if ($bNewRow) { foreach ($arIndexColumns as $Field) $s = "&".urlencode("pk[".$Field."]")."=".urlencode($res); } LocalRedirect($APPLICATION->GetCurPageParam()."&".$tabControl->ActiveTabParam().$s); } else { LocalRedirect("perfmon_table.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name)); } } } $APPLICATION->SetTitle(GetMessage("PERFMON_ROW_EDIT_TITLE", array("#TABLE_NAME#" => $table_name))); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $aMenu = array( array( "TEXT" => $table_name, "TITLE" => GetMessage("PERFMON_ROW_EDIT_MENU_LIST_TITLE"), "LINK" => "perfmon_table.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name), "ICON" => "btn_list", ) ); if(!$bNewRow) { $aMenu[] = array( "TEXT" => GetMessage("PERFMON_ROW_EDIT_MENU_DELETE"), "TITLE" => GetMessage("PERFMON_ROW_EDIT_MENU_DELETE_TITLE"), "LINK" => "javascript:jsDelete('editform', '".GetMessage("PERFMON_ROW_EDIT_MENU_DELETE_CONF")."')", "ICON" => "btn_delete", ); } $context = new CAdminContextMenu($aMenu); $context->Show(); if ($strError) { $message = new CAdminMessage(array( "MESSAGE" => GetMessage("admin_lib_error"), "DETAILS" => $strError, "TYPE" => "ERROR", )); echo $message->Show(); } ?>
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); ?>