Your IP : 3.144.37.229
<?
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 (!CModule::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 = 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"]), 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();
}
$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]) && strlen($_POST[$Field]) > 0)
$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]) && strlen($_POST[$Field]) > 0)
$arToUpdate[$Field] = $_POST[$Field];
else
$arToUpdate[$Field] = false;
}
}
$strUpdate = $DB->PrepareUpdate($table_name, $arToUpdate);
if (strlen($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();
}
?>
<script>
function jsDelete(form_id, message)
{
var _form = document.getElementById(form_id);
var _flag = document.getElementById('delete');
if(_form && _flag)
{
if(confirm(message))
{
_flag.value = 'y';
_form.submit();
}
}
}
function AdjustHeight()
{
var TEXTS = BX.findChildren(BX('editform'), {tag: /^(textarea)$/i}, true);
if (TEXTS)
{
for (var i = 0; i < TEXTS.length; i++)
{
var TEXT = TEXTS[i];
if (TEXT.scrollHeight > TEXT.clientHeight)
{
var dy = TEXT.offsetHeight - TEXT.clientHeight;
var newHeight = TEXT.scrollHeight + dy;
TEXT.style.height = newHeight + 'px';
}
}
}
}
function editAsSerialize(button, Field, mark)
{
var textArea = BX(Field);
var markHidden = BX(mark);
if (textArea && markHidden)
{
var action = (button.value == 'unserialize' ? 'unserialize' : 'serialize');
var url = 'perfmon_row_edit.php?lang=<?echo LANGUAGE_ID?>&<?echo bitrix_sessid_get()?>&action=' + action;
BX.showWait();
BX.ajax.post(
url,
{data: textArea.value},
function (result)
{
BX.closeWait();
if (result.length > 0)
{
textArea.value = result;
if (action == 'unserialize')
{
markHidden.value = 'Y';
button.value = 'serialize';
}
else
{
markHidden.value = '';
button.value = 'unserialize';
}
AdjustHeight();
}
}
);
}
}
BX.ready(function ()
{
AdjustHeight();
});
</script>
<form method="POST" action="<? echo $APPLICATION->GetCurPageParam() ?>" enctype="multipart/form-data" name="editform" id="editform">
<?
$tabControl->Begin();
$tabControl->BeginNextTab();
foreach ($arFields as $Field => $arField)
{
if (
(
$arField["type"] === "string"
|| $arField["type"] === "int"
)
&& array_key_exists($Field, $arParents)
&& $DB->TableExists($arParents[$Field]["PARENT_TABLE"])
)
{
$rs = $DB->Query(
$DB->TopSql("
select distinct ".$arParents[$Field]["PARENT_COLUMN"]."
from ".$arParents[$Field]["PARENT_TABLE"]."
order by 1
", 21)
);
$arSelect = array(
"REFERENCE" => array(),
"REFERENCE_ID" => array(),
);
while ($ar = $rs->Fetch())
{
$arSelect["REFERENCE"][] = $ar[$arParents[$Field]["PARENT_COLUMN"]];
$arSelect["REFERENCE_ID"][] = $ar[$arParents[$Field]["PARENT_COLUMN"]];
}
if (count($arSelect["REFERENCE"]) < 21)
{
$arFields[$Field]["SELECT"] = $arSelect;
}
///TODO lookup window
}
///TODO visual editor for FIELD FIELD_TYPE couple
}
foreach ($arFields as $Field => $arField)
{
$trClass = $arField["nullable"]? "": "adm-detail-required-field";
?><tr class="<?echo $trClass?>"><?
if (in_array($Field, $arIndexColumns))
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><? echo htmlspecialcharsex($value); ?></td>
<?
}
elseif ($arField["type"] === "datetime")
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord["FULL_".$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><? echo CAdminCalendar::CalendarDate($Field, $value, 20, true) ?>
<?
}
elseif ($arField["type"] === "date")
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord["SHORT_".$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><? echo CAdminCalendar::CalendarDate($Field, $value, 10, false) ?>
<?
}
elseif (isset($arField["SELECT"]))
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><?
echo SelectBoxFromArray($Field, $arField["SELECT"], $value, $arField["nullable"]? "(null)": "");
?></td>
<?
}
elseif (
$arField["type"] === "string"
&& $arField["length"] == 1
&& ($arField["default"] === "Y" || $arField["default"] === "N")
&& ($arRecord[$Field] === "Y" || $arRecord[$Field] === "N")
&& !$arField["nullable"]
)
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%"><label
for="<? echo htmlspecialcharsbx($Field) ?>"
><? echo htmlspecialcharsbx($Field) ?></label>:
</td>
<td width="60%"><input
type="hidden"
name="<? echo htmlspecialcharsbx($Field) ?>"
value="N"
><input
type="checkbox"
name="<? echo htmlspecialcharsbx($Field) ?>"
id="<? echo htmlspecialcharsbx($Field) ?>"
value="Y"
<? if ($value === "Y")
echo 'checked="checked"' ?>
></td>
<?
}
elseif (
$arField["type"] === "string"
&& $arField["length"] > 0
&& $arField["length"] <= 100
)
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><input
type="text"
maxsize="<? echo $arField["length"] ?>"
size="<? echo min($arField["length"], 35) ?>"
name="<? echo htmlspecialcharsbx($Field) ?>"
value="<? echo htmlspecialcharsbx($value) ?>"
></td>
<?
}
elseif (
$arField["type"] === "string"
)
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%" class="adm-detail-valign-top"
style="padding-top:14px"><? echo htmlspecialcharsbx($Field) ?>:
</td>
<td width="60%"><textarea
style="width:100%"
rows="1"
name="<? echo htmlspecialcharsbx($Field) ?>"
id="<? echo htmlspecialcharsbx($Field) ?>"
><? echo htmlspecialcharsex($value) ?></textarea>
<input
type="hidden"
value=""
name="<? echo htmlspecialcharsbx("mark_".$Field."_") ?>"
id="<? echo htmlspecialcharsbx("mark_".$Field."_") ?>"
>
<?if ($hasTokenizer):?>
<input
type="button"
value="unserialize"
onclick="<? echo htmlspecialcharsbx("editAsSerialize(this, '".CUtil::JSEscape($Field)."', 'mark_".CUtil::JSEscape($Field)."_');") ?>"/>
<?endif;?>
</td>
<?
}
elseif (
$arField["type"] === "int"
|| $arField["type"] === "double"
)
{
$value = $bVarsFromForm? $_REQUEST[$Field]: $arRecord[$Field];
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%"><input
type="text"
maxsize="20"
size="15"
name="<? echo htmlspecialcharsbx($Field) ?>"
value="<? echo htmlspecialcharsbx($value) ?>"
></td>
<?
}
else
{
?>
<td width="40%"><? echo htmlspecialcharsbx($Field) ?>:</td>
<td width="60%">UNSUPPORTED DATA TYPE</td>
<?
}
?></tr><?
}
$tabControl->BeginNextTab();
?>
<tr>
<td width="40%"><label
for="clear_managed_cache"
><? echo GetMessage("PERFMON_ROW_CACHE_CLEAR") ?></label>:
</td>
<td width="60%"><input
type="checkbox"
name="clear_managed_cache"
id="clear_managed_cache"
value="Y"
></td>
</tr>
<?
?>
<? echo bitrix_sessid_post(); ?>
<input type="hidden" name="lang" value="<? echo LANGUAGE_ID ?>">
<input type="hidden" name="delete" id="delete" value="">
<?
$tabControl->Buttons(
array(
"disabled" => !$isAdmin,
"back_url" => "perfmon_table.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name),
)
);
$tabControl->End();
?>
</form>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>