%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/perfmon/admin/ |
Current File : //home/bitrix/www/bitrix/modules/perfmon/admin/perfmon_table.php |
<? define("ADMIN_MODULE_NAME", "perfmon"); define("PERFMON_STOP", true); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); /** @global CMain $APPLICATION */ /** @global CDatabase $DB */ /** @global CUser $USER */ require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php"); IncludeModuleLangFile(__FILE__); $table_name = $_REQUEST["table_name"]; $obTable = new CPerfomanceTable; $obTable->Init($table_name); $RIGHT = $APPLICATION->GetGroupRight("perfmon"); if ($RIGHT == "D" || !$obTable->IsExists()) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); if ( $_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["ajax_tooltip"]) && $_GET["ajax_tooltip"] === "y" && isset($_GET["find_type"]) && isset($_GET["find"]) && check_bitrix_sessid() ) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); $rsData = $obTable->GetList(array("*"), array("=".$_GET["find_type"] => $_GET["find"])); $arData = $rsData->Fetch(); if ($arData) { ?> <table class="list"><? ?> <tr> <td align="left" colspan="2"><b><? echo htmlspecialcharsEx($table_name) ?></b></td></tr><? foreach ($arData as $key => $value) { ?> <tr> <td align="left"><? echo htmlspecialcharsEx($key) ?></td> <td align="left"> <? echo htmlspecialcharsEx($value) ?></td></tr><? } ?></table><? } else { ?>no data found<? } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); } $arFieldsEx = $obTable->GetTableFields(false, true); $arFields = array(); foreach ($arFieldsEx as $FIELD_NAME => $FIELD_INFO) $arFields[$FIELD_NAME] = $FIELD_INFO["type"]; $arUniqueIndexes = $obTable->GetUniqueIndexes(); $sTableID = "tbl_perfmon_table".md5($table_name); $oSort = new CAdminSorting($sTableID, "ID", "asc"); $lAdmin = new CAdminList($sTableID, $oSort); if ($lAdmin->GroupAction() && $RIGHT >= "W") { switch ($_REQUEST['action']) { case "delete": //Gather columns from request $arRowPK = 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) { $strSql = "delete from ".$table_name." WHERE 1=1 "; foreach ($arRowPK as $column => $value) { if (strlen($value)) $strSql .= " AND ".$column."='".$DB->ForSQL($value)."'"; else $strSql .= " AND (".$column."='".$DB->ForSQL($value)."' or ".$column." is null)"; } $DB->Query($strSql); break; } } } break; } } $FilterArr = array( "find", "find_type", ); foreach ($arFields as $FIELD_NAME => $FIELD_TYPE) { if ($FIELD_TYPE != "unknown") $FilterArr[] = "find_".$FIELD_NAME; } $lAdmin->InitFilter($FilterArr); $arFilter = array(); foreach ($arFields as $FIELD_NAME => $FIELD_TYPE) { $filterValue = null; if ($FIELD_TYPE != "unknown") { if ( isset($find_type) && $find_type == $FIELD_NAME && isset($find) && strlen($find) ) { $filterValue = $find; } elseif ( isset($GLOBALS["find_".$FIELD_NAME]) && strlen($GLOBALS["find_".$FIELD_NAME]) ) { $filterValue = $GLOBALS["find_".$FIELD_NAME]; } else { } } if (isset($filterValue)) { $op = CSQLWhere::MakeOperation($filterValue); if ($filterValue === $op["FIELD"]) $op["OPERATOR"] = "%="; else $op["OPERATOR"] = substr($filterValue, 0, strlen($filterValue) - strlen($op["FIELD"])); if ($op["OPERATION"] === "B" || $op["OPERATION"] === "NB") $op["FIELD"] = array_map('trim', explode(",", $op["FIELD"], 2)); elseif ($op["OPERATION"] === "IN" || $op["OPERATION"] === "NIN") $op["FIELD"] = array_map('trim', explode(",", $op["FIELD"])); $arFilter[$op["OPERATOR"].$FIELD_NAME] = $op["FIELD"] === "NULL"? false: $op["FIELD"]; } } $arHeaders = array(); foreach ($arFields as $FIELD_NAME => $FIELD_TYPE) { $arHeaders[$FIELD_NAME] = array( "id" => $FIELD_NAME, "content" => $FIELD_NAME, "sort" => $arFieldsEx[$FIELD_NAME]["sortable"]? $FIELD_NAME: "", "default" => true, ); if ($FIELD_TYPE == "int" || $FIELD_TYPE == "datetime" || $FIELD_TYPE == "date" || $FIELD_TYPE == "double") $arHeaders[$FIELD_NAME]["align"] = "right"; } $lAdmin->AddHeaders($arHeaders); $bDelete = false; $arPKColumns = array(); $arSelectedFields = $lAdmin->GetVisibleHeaderColumns(); if (!is_array($arSelectedFields) || (count($arSelectedFields) < 1)) { $arSelectedFields = array( "*", ); $bDelete = count($arUniqueIndexes) > 0; $arPKColumns = array_shift($arUniqueIndexes); } else { foreach ($arUniqueIndexes as $arIndexColumns) { $arMissed = array_diff($arIndexColumns, $arSelectedFields); if (count($arMissed) == 0) { $bDelete = true; $arPKColumns = $arIndexColumns; break; } } } $bDelete = $bDelete && $RIGHT >= "W"; $obSchema = new CPerfomanceSchema; $arChildren = $obSchema->GetChildren($table_name); $arParents = $obSchema->GetParents($table_name); CTimeZone::Disable(); $rsData = $obTable->GetList($arSelectedFields, $arFilter, array($by => $order), array("nPageSize" => CAdminResult::GetNavSize($sTableID))); CTimeZone::Enable(); function TableExists($tableName) { global $DB; static $cache = array(); if (!isset($cache[$tableName])) { $cache[$tableName] = $DB->TableExists($tableName); } return $tableName; } $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("PERFMON_TABLE_PAGE"))); $precision = ini_get('precision') >= 0? ini_get('precision'): 2; $max_display_url = COption::GetOptionInt("perfmon", "max_display_url"); while ($arRes = $rsData->Fetch()): $row =& $lAdmin->AddRow($arRes["ID"], $arRes); $arRowPK = array(); foreach ($arFields as $FIELD_NAME => $FIELD_TYPE) { if (strlen($arRes[$FIELD_NAME]) > 0) { if ($FIELD_TYPE == "int") { $val = perfmon_NumberFormat($arRes[$FIELD_NAME], 0); } elseif ($FIELD_TYPE == "double") { $val = htmlspecialcharsEx($arRes[$FIELD_NAME]); } elseif ($FIELD_TYPE == "datetime") { $val = str_replace(" ", " ", $arRes["FULL_".$FIELD_NAME]); } elseif ($FIELD_TYPE == "date") { $val = str_replace(" ", " ", $arRes["SHORT_".$FIELD_NAME]); } else { $val = htmlspecialcharsbx($arRes[$FIELD_NAME]); } if (array_key_exists($FIELD_NAME, $arParents) && TableExists($arParents[$FIELD_NAME]["PARENT_TABLE"])) $val = '<a onmouseover="addTimer(this)" onmouseout="removeTimer(this)" href="perfmon_table.php?set_filter=Y&table_name='.$arParents[$FIELD_NAME]["PARENT_TABLE"].'&find='.urlencode($arRes[$FIELD_NAME]).'&find_type='.$arParents[$FIELD_NAME]["PARENT_COLUMN"].'">'.$val.'</a>'; $row->AddViewField($FIELD_NAME, $val); } if ($bDelete && in_array($FIELD_NAME, $arPKColumns)) { $arRowPK[] = urlencode("pk[".$FIELD_NAME."]")."=".urlencode($arRes[$FIELD_NAME]); } } $arActions = array(); if ($bDelete && (count($arPKColumns) == count($arRowPK))) { $arActions[] = array( "ICON" => "edit", "DEFAULT" => true, "TEXT" => GetMessage("MAIN_EDIT"), "ACTION" => $lAdmin->ActionRedirect("perfmon_row_edit.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name)."&".implode("&", $arRowPK)), ); $arActions[] = array( "ICON" => "delete", "DEFAULT" => false, "TEXT" => GetMessage("MAIN_DELETE"), "ACTION" => $lAdmin->ActionDoGroup($arRes["ID"], "delete", "table_name=".urlencode($table_name)."&".implode("&", $arRowPK)), ); } if (count($arChildren)) { $arActions[] = array("SEPARATOR" => true); foreach ($arChildren as $arChild) { if (TableExists($arChild["CHILD_TABLE"])) { $arActions[] = array( "ICON" => "", "DEFAULT" => false, "TEXT" => $arChild["CHILD_TABLE"].".".$arChild["CHILD_COLUMN"]." = ".$arChild["PARENT_COLUMN"], "ACTION" => $lAdmin->ActionRedirect("perfmon_table.php?set_filter=Y&table_name=".$arChild["CHILD_TABLE"]."&find=".urlencode($arRes[$arChild["PARENT_COLUMN"]])."&find_type=".$arChild["CHILD_COLUMN"]), ); } } } if (count($arActions)) $row->AddActions($arActions); endwhile; $lAdmin->AddFooter( array( array( "title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value" => $rsData->SelectedRowsCount(), ), ) ); $aContext = array(); $sLastTables = CUserOptions::GetOption("perfmon", "last_tables", ""); if (strlen($sLastTables) > 0) $arLastTables = array_flip(explode(",", $sLastTables)); else $arLastTables = array(); unset($arLastTables[strtolower($table_name)]); $arLastTables[strtolower($table_name)] = true; if (count($arLastTables) > 10) array_shift($arLastTables); CUserOptions::SetOption("perfmon", "last_tables", implode(",", array_keys($arLastTables))); unset($arLastTables[$table_name]); if (count($arLastTables) > 0) { $ar = array( "MENU" => array(), ); ksort($arLastTables); foreach ($arLastTables as $table => $flag) { if (TableExists($table)) $ar["MENU"][] = array( "TEXT" => $table, "ACTION" => $lAdmin->ActionRedirect("perfmon_table.php?table_name=".$table), ); else unset($arLastTables[$table]); } $ar["TEXT"] = GetMessage("PERFMON_TABLE_RECENTLY_BROWSED", array("#COUNT#" => count($arLastTables))); $aContext[] = $ar; } if ($bDelete) { foreach ($arFieldsEx as $Field => $arField) { if ($arField["increment"]) { foreach ($arUniqueIndexes as $arIndexColumns) { $arMissed = array_diff($arIndexColumns, array($Field)); if (count($arMissed) == 0) { $aContext[] = array( "TEXT" => GetMessage("MAIN_ADD"), "LINK" => "/bitrix/admin/perfmon_row_edit.php?lang=".LANGUAGE_ID."&table_name=".urlencode($table_name), "ICON" => "btn_new", ); break; } } } } } $lAdmin->AddAdminContextMenu($aContext); $lAdmin->CheckListMode(); $APPLICATION->SetTitle(GetMessage("PERFMON_TABLE_ALT_TITLE", array("#TABLE_NAME#" => $table_name))); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $arFilter = array(); foreach ($arFields as $FIELD_NAME => $FIELD_TYPE) if ($FIELD_TYPE != "unknown") $arFilter[$FIELD_NAME] = $FIELD_NAME; $oFilter = new CAdminFilter($sTableID."_filter", $arFilter); CJSCore::Init(array("ajax", "popup")); ?> <script> var toolTipCache = new Array; function drawTooltip(result, _this) { if (!_this) _this = this; _this.toolTip = BX.PopupWindowManager.create( 'table_tooltip_' + (parseInt(Math.random() * 100000)), _this, { autoHide: true, closeIcon: true, closeByEsc: true, content: result } ); _this.toolTip.show(); toolTipCache[_this.href] = result; } function sendRequest() { if (this.toolTip) this.toolTip.show(); else if (toolTipCache[this.href]) drawTooltip(toolTipCache[this.href], this); else BX.ajax.get( this.href + '&sessid=' + BX.message('bitrix_sessid') + '&ajax_tooltip=y', BX.proxy(drawTooltip, this) ); } function addTimer(p_href) { p_href.timerID = setTimeout(BX.proxy(sendRequest, p_href), 1000); } function removeTimer(p_href) { if (p_href.timerID) { clearTimeout(p_href.timerID); p_href.timerID = null; } } </script> <form name="find_form" id="find_form" method="get" action="<? echo $APPLICATION->GetCurPage(); ?>"> <input type="hidden" value="<? echo htmlspecialcharsbx($table_name) ?>" name="table_name"> <? $oFilter->Begin(); ?> <tr onmouseover="BX.hint(BX('find_form'), '<ul>' + '<li>= Identical' + '</li>' + '<li>&gt; Greater' + '</li>' + '<li>&gt;= Greater' + ' or ' + 'Equal' + '</li>' + '<li>&lt; Less' + '</li>' + '<li>&lt;= Less' + ' or ' + 'Equal' + '</li>' + '<li>% Substring' + '</li>' + '<li>? Logic' + '</li>' + '<li>&gt;&lt;MIN,MAX Between' + '</li>' + '<li>&#64;N1,N2,...,NN IN' + '</li>' + '<li>NULL Empty' + '</li>' + '<li>! Negate any of above' + '</li>' + '</ul>' + '')"> <td><b><?=GetMessage("PERFMON_TABLE_FIND")?>:</b></td> <td> <input type="text" size="25" name="find" value="<? echo htmlspecialcharsbx($find) ?>" title="<?=GetMessage("PERFMON_TABLE_FIND")?>"> <? $arr = array( "reference" => array_keys($arFilter), "reference_id" => array_keys($arFilter), ); echo SelectBoxFromArray("find_type", $arr, $find_type, "", ""); ?> </td> </tr> <? foreach ($arFields as $FIELD_NAME => $FIELD_TYPE): ?> <? if ($FIELD_TYPE != "unknown"): ?> <tr> <td><? echo htmlspecialcharsbx($FIELD_NAME) ?></td> <td><input type="text" name="find_<? echo htmlspecialcharsbx($FIELD_NAME) ?>" size="47" value="<? echo htmlspecialcharsbx(${"find_".$FIELD_NAME}) ?>"></td> </tr> <? endif ?> <? endforeach ?> <? $oFilter->Buttons(array( "table_id" => $sTableID, "url" => $APPLICATION->GetCurPage(), "form" => "find_form", )); $oFilter->End(); ?> </form> <? $lAdmin->DisplayList(); ?> <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); ?>