Вход Регистрация
Файл: Tools/phpmyadmin/libraries/RecentTable.class.php
Строк: 168
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 *
 * @package PhpMyAdmin
 */

require_once './libraries/Message.class.php';

/**
 * Handles the recently used tables.
 *
 * @TODO Change the release version in table pma_recent (#recent in Documentation.html)
 *
 * @package PhpMyAdmin
 */
class PMA_RecentTable
{
    
/**
     * Defines the internal PMA table which contains recent tables.
     *
     * @access  private
     * @var string
     */
    
private $pma_table;

    
/**
     * 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->pma_table PMA_backquote($GLOBALS['cfg']['Server']['pmadb']) .".".
                               
PMA_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->pma_table) ? $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->pma_table .
            
" WHERE `username` = '" $GLOBALS['cfg']['Server']['user'] . "'";

        
$row PMA_DBI_fetch_array(PMA_query_as_controluser($sql_query));
        if (isset(
$row[0])) {
            return 
json_decode($row[0], true);
        } else {
            return array();
        }
    }

    
/**
     * Save recent tables into phpMyAdmin database.
     *
     *
     * @return true|PMA_Message
     */
    
public function saveToDb()
    {
        
$username $GLOBALS['cfg']['Server']['user'];
        
$sql_query
            
" REPLACE INTO " $this->pma_table " (`username`, `tables`)" .
            
" VALUES ('" $username "', '" PMA_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 LeftRecentTable configuration.
     *
     * @return boolean True if trimming occurred
     */
    
public function trim()
    {
        
$max max($GLOBALS['cfg']['LeftRecentTable'], 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->pma_table)) {
            
$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  '<input type="hidden" name="goto" id="LeftDefaultTabTable" value="' .
                         
htmlspecialchars($GLOBALS['cfg']['LeftDefaultTabTable']) . '" />';
        
$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->tablesSORT_REGULAR));
            
$this->trim();
            if (isset(
$this->pma_table)) {
                return 
$this->saveToDb();
            }
        }
        return 
true;
    }

}
?>
Онлайн: 1
Реклама