123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * holds the PMA_List_Database class
- *
- * @package PhpMyAdmin
- */
- if (! defined('PHPMYADMIN')) {
- exit;
- }
- /**
- * the list base class
- */
- require_once './libraries/List.class.php';
- /**
- * handles database lists
- *
- * <code>
- * $PMA_List_Database = new PMA_List_Database($userlink);
- * </code>
- *
- * @todo this object should be attached to the PMA_Server object
- *
- * @package PhpMyAdmin
- * @since phpMyAdmin 2.9.10
- */
- class PMA_List_Database extends PMA_List
- {
- /**
- * @var mixed database link resource|object to be used
- * @access protected
- */
- protected $db_link = null;
- /**
- * @var mixed user database link resource|object
- * @access protected
- */
- protected $db_link_user = null;
- /**
- * @var boolean whether we can retrieve the list of databases
- * @access protected
- */
- protected $can_retrieve_databases = true;
- /**
- * Constructor
- *
- * @param mixed $db_link_user user database link resource|object
- */
- public function __construct($db_link_user = null)
- {
- $this->db_link = $db_link_user;
- $this->db_link_user = $db_link_user;
- parent::__construct();
- $this->build();
- }
- /**
- * checks if the configuration wants to hide some databases
- *
- * @return void
- */
- protected function checkHideDatabase()
- {
- if (empty($GLOBALS['cfg']['Server']['hide_db'])) {
- return;
- }
- foreach ($this->getArrayCopy() as $key => $db) {
- if (preg_match('/' . $GLOBALS['cfg']['Server']['hide_db'] . '/', $db)) {
- $this->offsetUnset($key);
- }
- }
- }
- /**
- * retrieves database list from server
- *
- * @param string $like_db_name usually a db_name containing wildcards
- *
- * @return array
- */
- protected function retrieve($like_db_name = null)
- {
- if (! $this->can_retrieve_databases) {
- return array();
- }
- $command = "SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`"
- . " WHERE TRUE";
- if (null !== $like_db_name) {
- $command .= " AND `SCHEMA_NAME` LIKE '" . $like_db_name . "'";
- }
- $database_list = $GLOBALS['dbi']->fetchResult(
- $command, null, null, $this->db_link
- );
- $GLOBALS['dbi']->getError();
- if ($GLOBALS['errno'] !== 0) {
- $this->can_retrieve_databases = false;
- }
- if ($GLOBALS['cfg']['NaturalOrder']) {
- natsort($database_list);
- } else {
- // need to sort anyway, otherwise information_schema
- // goes at the top
- sort($database_list);
- }
- return $database_list;
- }
- /**
- * builds up the list
- *
- * @return void
- */
- public function build()
- {
- if (! $this->checkOnlyDatabase()) {
- $items = $this->retrieve();
- $this->exchangeArray($items);
- }
- $this->checkHideDatabase();
- }
- /**
- * checks the only_db configuration
- *
- * @return boolean false if there is no only_db, otherwise true
- */
- protected function checkOnlyDatabase()
- {
- if (is_string($GLOBALS['cfg']['Server']['only_db'])
- && strlen($GLOBALS['cfg']['Server']['only_db'])
- ) {
- $GLOBALS['cfg']['Server']['only_db'] = array(
- $GLOBALS['cfg']['Server']['only_db']
- );
- }
- if (! is_array($GLOBALS['cfg']['Server']['only_db'])) {
- return false;
- }
- $items = array();
- foreach ($GLOBALS['cfg']['Server']['only_db'] as $each_only_db) {
- // check if the db name contains wildcard,
- // thus containing not escaped _ or %
- if (! preg_match('/(^|[^\\\\])(_|%)/', $each_only_db)) {
- // ... not contains wildcard
- $items[] = PMA_Util::unescapeMysqlWildcards($each_only_db);
- continue;
- }
- if ($this->can_retrieve_databases) {
- $items = array_merge($items, $this->retrieve($each_only_db));
- continue;
- }
- }
- $this->exchangeArray($items);
- return true;
- }
- /**
- * returns default item
- *
- * @return string default item
- */
- public function getDefault()
- {
- if (strlen($GLOBALS['db'])) {
- return $GLOBALS['db'];
- }
- return $this->getEmpty();
- }
- }
- ?>
|