relation = new Relation();
$this->_tableType = $type;
$server_id = $GLOBALS['server'];
if (! isset($_SESSION['tmpval'][$this->_tableType . '_tables'][$server_id])
) {
$_SESSION['tmpval'][$this->_tableType . '_tables'][$server_id]
= $this->_getPmaTable() ? $this->getFromDb() : array();
}
$this->_tables
=& $_SESSION['tmpval'][$this->_tableType . '_tables'][$server_id];
}
/**
* Returns class instance.
*
* @param string $type the table type
*
* @return RecentFavoriteTable
*/
public static function getInstance($type)
{
if (! array_key_exists($type, self::$_instances)) {
self::$_instances[$type] = new RecentFavoriteTable($type);
}
return self::$_instances[$type];
}
/**
* Returns the recent/favorite tables array
*
* @return array
*/
public function getTables()
{
return $this->_tables;
}
/**
* Returns recently used tables or favorite 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->_getPmaTable() .
" WHERE `username` = '" . $GLOBALS['dbi']->escapeString($GLOBALS['cfg']['Server']['user']) . "'";
$return = array();
$result = $this->relation->queryAsControlUser($sql_query, false);
if ($result) {
$row = $GLOBALS['dbi']->fetchArray($result);
if (isset($row[0])) {
$return = json_decode($row[0], true);
}
}
return $return;
}
/**
* Save recent/favorite tables into phpMyAdmin database.
*
* @return true|Message
*/
public function saveToDb()
{
$username = $GLOBALS['cfg']['Server']['user'];
$sql_query
= " REPLACE INTO " . $this->_getPmaTable() . " (`username`, `tables`)" .
" VALUES ('" . $GLOBALS['dbi']->escapeString($username) . "', '"
. $GLOBALS['dbi']->escapeString(
json_encode($this->_tables)
) . "')";
$success = $GLOBALS['dbi']->tryQuery($sql_query, DatabaseInterface::CONNECT_CONTROL);
if (! $success) {
$error_msg = '';
switch ($this->_tableType) {
case 'recent':
$error_msg = __('Could not save recent table!');
break;
case 'favorite':
$error_msg = __('Could not save favorite table!');
break;
}
$message = Message::error($error_msg);
$message->addMessage(
Message::rawError(
$GLOBALS['dbi']->getError(DatabaseInterface::CONNECT_CONTROL)
),
'
'
);
return $message;
}
return true;
}
/**
* Trim recent.favorite table according to the
* NumRecentTables/NumFavoriteTables configuration.
*
* @return boolean True if trimming occurred
*/
public function trim()
{
$max = max(
$GLOBALS['cfg']['Num' . ucfirst($this->_tableType) . 'Tables'], 0
);
$trimming_occurred = count($this->_tables) > $max;
while (count($this->_tables) > $max) {
array_pop($this->_tables);
}
return $trimming_occurred;
}
/**
* Return HTML ul.
*
* @return string
*/
public function getHtmlList()
{
$html = '';
if (count($this->_tables)) {
if ($this->_tableType == 'recent') {
foreach ($this->_tables as $table) {
$html .= '