diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /hugo/libraries/RecentTable.class.php | |
Diffstat (limited to 'hugo/libraries/RecentTable.class.php')
| -rw-r--r-- | hugo/libraries/RecentTable.class.php | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/hugo/libraries/RecentTable.class.php b/hugo/libraries/RecentTable.class.php new file mode 100644 index 0000000..fef7508 --- /dev/null +++ b/hugo/libraries/RecentTable.class.php @@ -0,0 +1,214 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * + * @package PhpMyAdmin + */ + +if (! defined('PHPMYADMIN')) { + exit; +} + +require_once './libraries/Message.class.php'; + +/** + * Handles the recently used tables. + * + * @TODO Change the release version in table pma_recent + * (#recent in documentation) + * + * @package PhpMyAdmin + */ +class PMA_RecentTable +{ + /** + * Defines the internal PMA table which contains recent tables. + * + * @access private + * @var string + */ + private $_pmaTable; + + /** + * Reference to session variable containing recently used tables. + * + * @access public + * @var array + */ + public $tables; + + /** + * PMA_RecentTable instance. + * + * @var PMA_RecentTable + */ + private static $_instance; + + public function __construct() + { + if (strlen($GLOBALS['cfg']['Server']['pmadb']) + && strlen($GLOBALS['cfg']['Server']['recent']) + ) { + $this->_pmaTable + = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . "." + . PMA_Util::backquote($GLOBALS['cfg']['Server']['recent']); + } + $server_id = $GLOBALS['server']; + if (! isset($_SESSION['tmp_user_values']['recent_tables'][$server_id])) { + $_SESSION['tmp_user_values']['recent_tables'][$server_id] + = isset($this->_pmaTable) ? $this->getFromDb() : array(); + } + $this->tables =& $_SESSION['tmp_user_values']['recent_tables'][$server_id]; + } + + /** + * Returns class instance. + * + * @return PMA_RecentTable + */ + public static function getInstance() + { + if (is_null(self::$_instance)) { + self::$_instance = new PMA_RecentTable(); + } + return self::$_instance; + } + + /** + * Returns recently used tables from phpMyAdmin database. + * + * @return array + */ + public function getFromDb() + { + // Read from phpMyAdmin database, if recent tables is not in session + $sql_query + = " SELECT `tables` FROM " . $this->_pmaTable . + " WHERE `username` = '" . $GLOBALS['cfg']['Server']['user'] . "'"; + + $return = array(); + $result = PMA_queryAsControlUser($sql_query, false); + if ($result) { + $row = PMA_DBI_fetch_array($result); + if (isset($row[0])) { + $return = json_decode($row[0], true); + } + } + return $return; + } + + /** + * Save recent tables into phpMyAdmin database. + * + * @return true|PMA_Message + */ + public function saveToDb() + { + $username = $GLOBALS['cfg']['Server']['user']; + $sql_query + = " REPLACE INTO " . $this->_pmaTable . " (`username`, `tables`)" . + " VALUES ('" . $username . "', '" + . PMA_Util::sqlAddSlashes( + json_encode($this->tables) + ) . "')"; + + $success = PMA_DBI_try_query($sql_query, $GLOBALS['controllink']); + + if (! $success) { + $message = PMA_Message::error(__('Could not save recent table')); + $message->addMessage('<br /><br />'); + $message->addMessage( + PMA_Message::rawError(PMA_DBI_getError($GLOBALS['controllink'])) + ); + return $message; + } + return true; + } + + /** + * Trim recent table according to the NumRecentTables configuration. + * + * @return boolean True if trimming occurred + */ + public function trim() + { + $max = max($GLOBALS['cfg']['NumRecentTables'], 0); + $trimming_occured = count($this->tables) > $max; + while (count($this->tables) > $max) { + array_pop($this->tables); + } + return $trimming_occured; + } + + /** + * Return options for HTML select. + * + * @return string + */ + public function getHtmlSelectOption() + { + // trim and save, in case where the configuration is changed + if ($this->trim() && isset($this->_pmaTable)) { + $this->saveToDb(); + } + + $html = '<option value="">(' . __('Recent tables') . ') ...</option>'; + if (count($this->tables)) { + foreach ($this->tables as $table) { + $html .= '<option value="' + . htmlspecialchars(json_encode($table)) . '">' + . htmlspecialchars( + '`' . $table['db'] . '`.`' . $table['table'] . '`' + ) + . '</option>'; + } + } else { + $html .= '<option value="">' + . __('There are no recent tables') + . '</option>'; + } + return $html; + } + + /** + * Return HTML select. + * + * @return string + */ + public function getHtmlSelect() + { + $html = '<select name="selected_recent_table" id="recentTable">'; + $html .= $this->getHtmlSelectOption(); + $html .= '</select>'; + + return $html; + } + + /** + * Add recently used tables. + * + * @param string $db database name where the table is located + * @param string $table table name + * + * @return true|PMA_Message True if success, PMA_Message if not + */ + public function add($db, $table) + { + $table_arr = array(); + $table_arr['db'] = $db; + $table_arr['table'] = $table; + + // add only if this is new table + if (! isset($this->tables[0]) || $this->tables[0] != $table_arr) { + array_unshift($this->tables, $table_arr); + $this->tables = array_merge(array_unique($this->tables, SORT_REGULAR)); + $this->trim(); + if (isset($this->_pmaTable)) { + return $this->saveToDb(); + } + } + return true; + } + +} +?> |
