Server IP : 85.214.239.14 / Your IP : 18.118.137.13 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /var/www/wordpress/phpMyAdmin/libraries/classes/Navigation/ |
Upload File : |
<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * This class is responsible for instantiating * the various components of the navigation panel * * @package PhpMyAdmin-navigation */ declare(strict_types=1); namespace PhpMyAdmin\Navigation; use PhpMyAdmin\Config\PageSettings; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Relation; use PhpMyAdmin\Response; use PhpMyAdmin\Sanitize; use PhpMyAdmin\Server\Select; use PhpMyAdmin\Template; use PhpMyAdmin\Url; use PhpMyAdmin\Util; /** * The navigation panel - displays server, db and table selection tree * * @package PhpMyAdmin-Navigation */ class Navigation { /** * @var Template */ private $template; /** * @var Relation */ private $relation; /** * @var DatabaseInterface */ private $dbi; /** * @var NavigationTree */ private $tree; /** * Navigation constructor. * @param Template $template Template instance * @param Relation $relation Relation instance * @param DatabaseInterface $dbi DatabaseInterface instance */ public function __construct($template, $relation, $dbi) { $this->template = $template; $this->relation = $relation; $this->dbi = $dbi; $this->tree = new NavigationTree($this->template, $this->dbi); } /** * Renders the navigation tree, or part of it * * @return string The navigation tree */ public function getDisplay(): string { global $cfg; $logo = [ 'is_displayed' => $cfg['NavigationDisplayLogo'], 'has_link' => false, 'link' => '#', 'attributes' => ' target="_blank" rel="noopener noreferrer"', 'source' => '', ]; $response = Response::getInstance(); if (! $response->isAjax()) { $logo['source'] = $this->getLogoSource(); $logo['has_link'] = (string) $cfg['NavigationLogoLink'] !== ''; $logo['link'] = trim((string) $cfg['NavigationLogoLink']); if (! Sanitize::checkLink($logo['link'], true)) { $logo['link'] = 'index.php'; } if ($cfg['NavigationLogoLinkWindow'] === 'main') { if (empty(parse_url($logo['link'], PHP_URL_HOST))) { $hasStartChar = strpos($logo['link'], '?'); $logo['link'] .= Url::getCommon( [], is_bool($hasStartChar) ? '?' : Url::getArgSeparator() ); } $logo['attributes'] = ''; } if ($cfg['NavigationDisplayServers'] && count($cfg['Servers']) > 1) { $serverSelect = Select::render(true, true); } if (! defined('PMA_DISABLE_NAVI_SETTINGS')) { $navigationSettings = PageSettings::getNaviSettings(); } } if (! $response->isAjax() || ! empty($_POST['full']) || ! empty($_POST['reload']) ) { if ($cfg['ShowDatabasesNavigationAsTree']) { // provide database tree in navigation $navRender = $this->tree->renderState(); } else { // provide legacy pre-4.0 navigation $navRender = $this->tree->renderDbSelect(); } } else { $navRender = $this->tree->renderPath(); } return $this->template->render('navigation/main', [ 'is_ajax' => $response->isAjax(), 'logo' => $logo, 'is_synced' => $cfg['NavigationLinkWithMainPanel'], 'is_highlighted' => $cfg['NavigationTreePointerEnable'], 'is_autoexpanded' => $cfg['NavigationTreeAutoexpandSingleDb'], 'server' => $GLOBALS['server'], 'auth_type' => $cfg['Server']['auth_type'], 'is_servers_displayed' => $cfg['NavigationDisplayServers'], 'servers' => $cfg['Servers'], 'server_select' => $serverSelect ?? '', 'navigation_tree' => $navRender, 'is_navigation_settings_enabled' => ! defined('PMA_DISABLE_NAVI_SETTINGS'), 'navigation_settings' => $navigationSettings ?? '', 'is_drag_drop_import_enabled' => $cfg['enable_drag_drop_import'] === true, ]); } /** * Add an item of navigation tree to the hidden items list in PMA database. * * @param string $itemName name of the navigation tree item * @param string $itemType type of the navigation tree item * @param string $dbName database name * @param string $tableName table name if applicable * * @return void */ public function hideNavigationItem( $itemName, $itemType, $dbName, $tableName = null ) { $navTable = Util::backquote($GLOBALS['cfgRelation']['db']) . "." . Util::backquote($GLOBALS['cfgRelation']['navigationhiding']); $sqlQuery = "INSERT INTO " . $navTable . "(`username`, `item_name`, `item_type`, `db_name`, `table_name`)" . " VALUES (" . "'" . $this->dbi->escapeString($GLOBALS['cfg']['Server']['user']) . "'," . "'" . $this->dbi->escapeString($itemName) . "'," . "'" . $this->dbi->escapeString($itemType) . "'," . "'" . $this->dbi->escapeString($dbName) . "'," . "'" . (! empty($tableName) ? $this->dbi->escapeString($tableName) : "" ) . "')"; $this->relation->queryAsControlUser($sqlQuery, false); } /** * Remove a hidden item of navigation tree from the * list of hidden items in PMA database. * * @param string $itemName name of the navigation tree item * @param string $itemType type of the navigation tree item * @param string $dbName database name * @param string $tableName table name if applicable * * @return void */ public function unhideNavigationItem( $itemName, $itemType, $dbName, $tableName = null ) { $navTable = Util::backquote($GLOBALS['cfgRelation']['db']) . "." . Util::backquote($GLOBALS['cfgRelation']['navigationhiding']); $sqlQuery = "DELETE FROM " . $navTable . " WHERE" . " `username`='" . $this->dbi->escapeString($GLOBALS['cfg']['Server']['user']) . "'" . " AND `item_name`='" . $this->dbi->escapeString($itemName) . "'" . " AND `item_type`='" . $this->dbi->escapeString($itemType) . "'" . " AND `db_name`='" . $this->dbi->escapeString($dbName) . "'" . (! empty($tableName) ? " AND `table_name`='" . $this->dbi->escapeString($tableName) . "'" : "" ); $this->relation->queryAsControlUser($sqlQuery, false); } /** * Returns HTML for the dialog to show hidden navigation items. * * @param string $database database name * @param string $itemType type of the items to include * @param string $table table name * * @return string HTML for the dialog to show hidden navigation items */ public function getItemUnhideDialog($database, $itemType = null, $table = null) { $hidden = $this->getHiddenItems($database, $table); $typeMap = [ 'group' => __('Groups:'), 'event' => __('Events:'), 'function' => __('Functions:'), 'procedure' => __('Procedures:'), 'table' => __('Tables:'), 'view' => __('Views:'), ]; return $this->template->render('navigation/item_unhide_dialog', [ 'database' => $database, 'table' => $table, 'hidden' => $hidden, 'types' => $typeMap, 'item_type' => $itemType, ]); } /** * @param string $database Database name * @param string|null $table Table name * @return array */ private function getHiddenItems(string $database, ?string $table): array { $navTable = Util::backquote($GLOBALS['cfgRelation']['db']) . "." . Util::backquote($GLOBALS['cfgRelation']['navigationhiding']); $sqlQuery = "SELECT `item_name`, `item_type` FROM " . $navTable . " WHERE `username`='" . $this->dbi->escapeString($GLOBALS['cfg']['Server']['user']) . "'" . " AND `db_name`='" . $this->dbi->escapeString($database) . "'" . " AND `table_name`='" . (! empty($table) ? $this->dbi->escapeString($table) : '') . "'"; $result = $this->relation->queryAsControlUser($sqlQuery, false); $hidden = []; if ($result) { while ($row = $this->dbi->fetchArray($result)) { $type = $row['item_type']; if (! isset($hidden[$type])) { $hidden[$type] = []; } $hidden[$type][] = $row['item_name']; } } $this->dbi->freeResult($result); return $hidden; } /** * @return string Logo source */ private function getLogoSource(): string { global $pmaThemeImage; if (isset($pmaThemeImage) && @file_exists($pmaThemeImage . 'logo_left.png')) { return $pmaThemeImage . 'logo_left.png'; } elseif (isset($pmaThemeImage) && @file_exists($pmaThemeImage . 'pma_logo2.png')) { return $pmaThemeImage . 'pma_logo2.png'; } return ''; } }