From 66f2e4a2dc1c94f17d287c87a458cfe3e9863223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 22 May 2018 22:46:41 -0300 Subject: [PATCH] Remove $dbi global from Database classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- db_designer.php | 4 +- db_qbe.php | 2 +- db_search.php | 2 +- libraries/classes/Database/Designer.php | 18 ++- .../classes/Database/Designer/Common.php | 122 ++++++++++-------- libraries/classes/Database/Qbe.php | 32 +++-- libraries/classes/Database/Search.php | 22 +++- libraries/classes/Dbi/DbiDummy.php | 2 +- test/classes/Database/Designer/CommonTest.php | 10 +- test/classes/Database/DesignerTest.php | 10 +- test/classes/Database/QbeTest.php | 6 +- test/classes/Database/SearchTest.php | 4 +- 12 files changed, 142 insertions(+), 92 deletions(-) diff --git a/db_designer.php b/db_designer.php index caa8e3a68b..c555dec1d1 100644 --- a/db_designer.php +++ b/db_designer.php @@ -15,8 +15,8 @@ require_once 'libraries/common.inc.php'; $response = Response::getInstance(); -$databaseDesigner = new Designer(); -$designerCommon = new Common(); +$databaseDesigner = new Designer($GLOBALS['dbi']); +$designerCommon = new Common($GLOBALS['dbi']); if (isset($_REQUEST['dialog'])) { diff --git a/db_qbe.php b/db_qbe.php index 94ea207133..a3359065c9 100644 --- a/db_qbe.php +++ b/db_qbe.php @@ -138,7 +138,7 @@ if ($message_to_display) { unset($message_to_display); // create new qbe search instance -$db_qbe = new Qbe($GLOBALS['db'], $savedSearchList, $savedSearch); +$db_qbe = new Qbe($GLOBALS['dbi'], $GLOBALS['db'], $savedSearchList, $savedSearch); $url = 'db_designer.php' . Url::getCommon( array_merge( diff --git a/db_search.php b/db_search.php index 5c611a50d4..e0ab1d0e08 100644 --- a/db_search.php +++ b/db_search.php @@ -37,7 +37,7 @@ $url_query .= '&goto=db_search.php'; $url_params['goto'] = 'db_search.php'; // Create a database search instance -$db_search = new Search($GLOBALS['db']); +$db_search = new Search($GLOBALS['dbi'], $GLOBALS['db']); // Display top links if we are not in an Ajax request if (! $response->isAjax()) { diff --git a/libraries/classes/Database/Designer.php b/libraries/classes/Database/Designer.php index c0cec8f68c..eab6605a7e 100644 --- a/libraries/classes/Database/Designer.php +++ b/libraries/classes/Database/Designer.php @@ -24,16 +24,24 @@ use PhpMyAdmin\Util; */ class Designer { + /** + * @var DatabaseInterface + */ + private $dbi; + /** * @var Relation $relation */ private $relation; /** - * Constructor + * Designer constructor. + * + * @param DatabaseInterface $dbi DatabaseInterface object */ - public function __construct() + public function __construct(DatabaseInterface $dbi) { + $this->dbi = $dbi; $this->relation = new Relation(); } @@ -86,7 +94,7 @@ class Designer $page_query = "SELECT `page_nr`, `page_descr` FROM " . Util::backquote($cfgRelation['db']) . "." . Util::backquote($cfgRelation['pdf_pages']) - . " WHERE db_name = '" . $GLOBALS['dbi']->escapeString($db) . "'" + . " WHERE db_name = '" . $this->dbi->escapeString($db) . "'" . " ORDER BY `page_descr`"; $page_rs = $this->relation->queryAsControlUser( $page_query, @@ -95,7 +103,7 @@ class Designer ); $result = []; - while ($curr_page = $GLOBALS['dbi']->fetchAssoc($page_rs)) { + while ($curr_page = $this->dbi->fetchAssoc($page_rs)) { $result[intval($curr_page['page_nr'])] = $curr_page['page_descr']; } return $result; @@ -202,7 +210,7 @@ class Designer . ' WHERE ' . Util::backquote('username') . ' = "' . $GLOBALS['cfg']['Server']['user'] . '";'; - $result = $GLOBALS['dbi']->fetchSingleRow($query); + $result = $this->dbi->fetchSingleRow($query); $params = json_decode($result['settings_data'], true); } diff --git a/libraries/classes/Database/Designer/Common.php b/libraries/classes/Database/Designer/Common.php index 51903ce0a1..12a3a3bf9b 100644 --- a/libraries/classes/Database/Designer/Common.php +++ b/libraries/classes/Database/Designer/Common.php @@ -28,10 +28,18 @@ class Common private $relation; /** - * Constructor + * @var \PhpMyAdmin\DatabaseInterface */ - public function __construct() + private $dbi; + + /** + * Common constructor. + * + * @param DatabaseInterface $dbi DatabaseInterface object + */ + public function __construct(DatabaseInterface $dbi) { + $this->dbi = $dbi; $this->relation = new Relation(); } @@ -48,9 +56,9 @@ class Common $GLOBALS['designer']['OWNER'] = array(); $GLOBALS['designer']['TABLE_NAME_SMALL'] = array(); - $tables = $GLOBALS['dbi']->getTablesFull($GLOBALS['db']); + $tables = $this->dbi->getTablesFull($GLOBALS['db']); // seems to be needed later - $GLOBALS['dbi']->selectDb($GLOBALS['db']); + $this->dbi->selectDb($GLOBALS['db']); $i = 0; foreach ($tables as $one_table) { $GLOBALS['designer']['TABLE_NAME'][$i] @@ -98,11 +106,11 @@ class Common */ public function getColumnsInfo() { - $GLOBALS['dbi']->selectDb($GLOBALS['db']); + $this->dbi->selectDb($GLOBALS['db']); $tab_column = array(); for ($i = 0, $cnt = count($GLOBALS['designer']["TABLE_NAME"]); $i < $cnt; $i++) { - $fields_rs = $GLOBALS['dbi']->query( - $GLOBALS['dbi']->getColumnsSql( + $fields_rs = $this->dbi->query( + $this->dbi->getColumnsSql( $GLOBALS['db'], $GLOBALS['designer_url']["TABLE_NAME_SMALL"][$i], null, @@ -113,7 +121,7 @@ class Common ); $tbl_name_i = $GLOBALS['designer']['TABLE_NAME'][$i]; $j = 0; - while ($row = $GLOBALS['dbi']->fetchAssoc($fields_rs)) { + while ($row = $this->dbi->fetchAssoc($fields_rs)) { $tab_column[$tbl_name_i]['COLUMN_ID'][$j] = $j; $tab_column[$tbl_name_i]['COLUMN_NAME'][$j] = $row['Field']; $tab_column[$tbl_name_i]['TYPE'][$j] = $row['Type']; @@ -131,16 +139,16 @@ class Common */ public function getScriptContr() { - $GLOBALS['dbi']->selectDb($GLOBALS['db']); + $this->dbi->selectDb($GLOBALS['db']); $con = array(); $con["C_NAME"] = array(); $i = 0; - $alltab_rs = $GLOBALS['dbi']->query( + $alltab_rs = $this->dbi->query( 'SHOW TABLES FROM ' . Util::backquote($GLOBALS['db']), DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_STORE ); - while ($val = @$GLOBALS['dbi']->fetchRow($alltab_rs)) { + while ($val = @$this->dbi->fetchRow($alltab_rs)) { $row = $this->relation->getForeigners($GLOBALS['db'], $val[0], '', 'internal'); if ($row !== false) { @@ -280,7 +288,7 @@ class Common . "." . Util::backquote($cfgRelation['table_coords']) . " WHERE pdf_page_number = " . intval($pg); - $tab_pos = $GLOBALS['dbi']->fetchResult( + $tab_pos = $this->dbi->fetchResult( $query, 'name', null, @@ -308,7 +316,7 @@ class Common . " FROM " . Util::backquote($cfgRelation['db']) . "." . Util::backquote($cfgRelation['pdf_pages']) . " WHERE " . Util::backquote('page_nr') . " = " . intval($pg); - $page_name = $GLOBALS['dbi']->fetchResult( + $page_name = $this->dbi->fetchResult( $query, null, null, @@ -369,10 +377,10 @@ class Common $query = "SELECT `page_nr`" . " FROM " . Util::backquote($cfgRelation['db']) . "." . Util::backquote($cfgRelation['pdf_pages']) - . " WHERE `db_name` = '" . $GLOBALS['dbi']->escapeString($db) . "'" - . " AND `page_descr` = '" . $GLOBALS['dbi']->escapeString($db) . "'"; + . " WHERE `db_name` = '" . $this->dbi->escapeString($db) . "'" + . " AND `page_descr` = '" . $this->dbi->escapeString($db) . "'"; - $default_page_no = $GLOBALS['dbi']->fetchResult( + $default_page_no = $this->dbi->fetchResult( $query, null, null, @@ -410,9 +418,9 @@ class Common $query = "SELECT MIN(`page_nr`)" . " FROM " . Util::backquote($cfgRelation['db']) . "." . Util::backquote($cfgRelation['pdf_pages']) - . " WHERE `db_name` = '" . $GLOBALS['dbi']->escapeString($db) . "'"; + . " WHERE `db_name` = '" . $this->dbi->escapeString($db) . "'"; - $min_page_no = $GLOBALS['dbi']->fetchResult( + $min_page_no = $this->dbi->fetchResult( $query, null, null, @@ -467,9 +475,9 @@ class Common . "." . Util::backquote( $GLOBALS['cfgRelation']['table_coords'] ) - . " WHERE `db_name` = '" . $GLOBALS['dbi']->escapeString($_REQUEST['db']) + . " WHERE `db_name` = '" . $this->dbi->escapeString($_REQUEST['db']) . "'" - . " AND `pdf_page_number` = '" . $GLOBALS['dbi']->escapeString($pg) + . " AND `pdf_page_number` = '" . $this->dbi->escapeString($pg) . "'"; $res = $this->relation->queryAsControlUser( @@ -493,11 +501,11 @@ class Common . Util::backquote($GLOBALS['cfgRelation']['table_coords']) . " (`db_name`, `table_name`, `pdf_page_number`, `x`, `y`)" . " VALUES (" - . "'" . $GLOBALS['dbi']->escapeString($DB) . "', " - . "'" . $GLOBALS['dbi']->escapeString($TAB) . "', " - . "'" . $GLOBALS['dbi']->escapeString($pg) . "', " - . "'" . $GLOBALS['dbi']->escapeString($_REQUEST['t_x'][$key]) . "', " - . "'" . $GLOBALS['dbi']->escapeString($_REQUEST['t_y'][$key]) . "')"; + . "'" . $this->dbi->escapeString($DB) . "', " + . "'" . $this->dbi->escapeString($TAB) . "', " + . "'" . $this->dbi->escapeString($pg) . "', " + . "'" . $this->dbi->escapeString($_REQUEST['t_x'][$key]) . "', " + . "'" . $this->dbi->escapeString($_REQUEST['t_y'][$key]) . "')"; $res = $this->relation->queryAsControlUser( $query, true, DatabaseInterface::QUERY_STORE @@ -523,7 +531,7 @@ class Common return false; } - $upd_query = new Table($table, $db, $GLOBALS['dbi']); + $upd_query = new Table($table, $db, $this->dbi); $upd_query->updateDisplayField($field, $cfgRelation); return true; @@ -546,9 +554,9 @@ class Common */ public function addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update, $DB1, $DB2) { - $tables = $GLOBALS['dbi']->getTablesFull($DB1, $T1); + $tables = $this->dbi->getTablesFull($DB1, $T1); $type_T1 = mb_strtoupper($tables[$T1]['ENGINE']); - $tables = $GLOBALS['dbi']->getTablesFull($DB2, $T2); + $tables = $this->dbi->getTablesFull($DB2, $T2); $type_T2 = mb_strtoupper($tables[$T2]['ENGINE']); // native foreign key @@ -567,28 +575,28 @@ class Common // note: in InnoDB, the index does not requires to be on a PRIMARY // or UNIQUE key // improve: check all other requirements for InnoDB relations - $result = $GLOBALS['dbi']->query( + $result = $this->dbi->query( 'SHOW INDEX FROM ' . Util::backquote($DB1) . '.' . Util::backquote($T1) . ';' ); // will be use to emphasis prim. keys in the table view $index_array1 = array(); - while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { + while ($row = $this->dbi->fetchAssoc($result)) { $index_array1[$row['Column_name']] = 1; } - $GLOBALS['dbi']->freeResult($result); + $this->dbi->freeResult($result); - $result = $GLOBALS['dbi']->query( + $result = $this->dbi->query( 'SHOW INDEX FROM ' . Util::backquote($DB2) . '.' . Util::backquote($T2) . ';' ); // will be used to emphasis prim. keys in the table view $index_array2 = array(); - while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { + while ($row = $this->dbi->fetchAssoc($result)) { $index_array2[$row['Column_name']] = 1; } - $GLOBALS['dbi']->freeResult($result); + $this->dbi->freeResult($result); if (! empty($index_array1[$F1]) && ! empty($index_array2[$F2])) { $upd_query = 'ALTER TABLE ' . Util::backquote($DB2) @@ -607,11 +615,11 @@ class Common $upd_query .= ' ON UPDATE ' . $on_update; } $upd_query .= ';'; - if ($GLOBALS['dbi']->tryQuery($upd_query)) { + if ($this->dbi->tryQuery($upd_query)) { return array(true, __('FOREIGN KEY relationship has been added.')); } - $error = $GLOBALS['dbi']->getError(); + $error = $this->dbi->getError(); return array( false, __('Error: FOREIGN KEY relationship could not be added!') @@ -637,19 +645,19 @@ class Common . "(master_db, master_table, master_field, " . "foreign_db, foreign_table, foreign_field)" . " values(" - . "'" . $GLOBALS['dbi']->escapeString($DB2) . "', " - . "'" . $GLOBALS['dbi']->escapeString($T2) . "', " - . "'" . $GLOBALS['dbi']->escapeString($F2) . "', " - . "'" . $GLOBALS['dbi']->escapeString($DB1) . "', " - . "'" . $GLOBALS['dbi']->escapeString($T1) . "', " - . "'" . $GLOBALS['dbi']->escapeString($F1) . "')"; + . "'" . $this->dbi->escapeString($DB2) . "', " + . "'" . $this->dbi->escapeString($T2) . "', " + . "'" . $this->dbi->escapeString($F2) . "', " + . "'" . $this->dbi->escapeString($DB1) . "', " + . "'" . $this->dbi->escapeString($T1) . "', " + . "'" . $this->dbi->escapeString($F1) . "')"; if ($this->relation->queryAsControlUser($q, false, DatabaseInterface::QUERY_STORE) ) { return array(true, __('Internal relationship has been added.')); } - $error = $GLOBALS['dbi']->getError(DatabaseInterface::CONNECT_CONTROL); + $error = $this->dbi->getError(DatabaseInterface::CONNECT_CONTROL); return array( false, __('Error: Internal relationship could not be added!') @@ -672,9 +680,9 @@ class Common list($DB1, $T1) = explode(".", $T1); list($DB2, $T2) = explode(".", $T2); - $tables = $GLOBALS['dbi']->getTablesFull($DB1, $T1); + $tables = $this->dbi->getTablesFull($DB1, $T1); $type_T1 = mb_strtoupper($tables[$T1]['ENGINE']); - $tables = $GLOBALS['dbi']->getTablesFull($DB2, $T2); + $tables = $this->dbi->getTablesFull($DB2, $T2); $type_T2 = mb_strtoupper($tables[$T2]['ENGINE']); if (Util::isForeignKeySupported($type_T1) @@ -689,11 +697,11 @@ class Common $upd_query = 'ALTER TABLE ' . Util::backquote($DB2) . '.' . Util::backquote($T2) . ' DROP FOREIGN KEY ' . Util::backquote($foreigner['constraint']) . ';'; - if ($GLOBALS['dbi']->query($upd_query)) { + if ($this->dbi->query($upd_query)) { return array(true, __('FOREIGN KEY relationship has been removed.')); } - $error = $GLOBALS['dbi']->getError(); + $error = $this->dbi->getError(); return array( false, __('Error: FOREIGN KEY relationship could not be removed!') @@ -706,12 +714,12 @@ class Common $delete_query = "DELETE FROM " . Util::backquote($GLOBALS['cfgRelation']['db']) . "." . $GLOBALS['cfgRelation']['relation'] . " WHERE " - . "master_db = '" . $GLOBALS['dbi']->escapeString($DB2) . "'" - . " AND master_table = '" . $GLOBALS['dbi']->escapeString($T2) . "'" - . " AND master_field = '" . $GLOBALS['dbi']->escapeString($F2) . "'" - . " AND foreign_db = '" . $GLOBALS['dbi']->escapeString($DB1) . "'" - . " AND foreign_table = '" . $GLOBALS['dbi']->escapeString($T1) . "'" - . " AND foreign_field = '" . $GLOBALS['dbi']->escapeString($F1) . "'"; + . "master_db = '" . $this->dbi->escapeString($DB2) . "'" + . " AND master_table = '" . $this->dbi->escapeString($T2) . "'" + . " AND master_field = '" . $this->dbi->escapeString($F2) . "'" + . " AND foreign_db = '" . $this->dbi->escapeString($DB1) . "'" + . " AND foreign_table = '" . $this->dbi->escapeString($T1) . "'" + . " AND foreign_field = '" . $this->dbi->escapeString($F1) . "'"; $result = $this->relation->queryAsControlUser( $delete_query, @@ -720,7 +728,7 @@ class Common ); if (!$result) { - $error = $GLOBALS['dbi']->getError(DatabaseInterface::CONNECT_CONTROL); + $error = $this->dbi->getError(DatabaseInterface::CONNECT_CONTROL); return array( false, __('Error: Internal relationship could not be removed!') . "
" . $error @@ -754,9 +762,9 @@ class Common . " FROM " . Util::backquote($cfgDesigner['db']) . "." . Util::backquote($cfgDesigner['table']) . " WHERE username = '" - . $GLOBALS['dbi']->escapeString($cfgDesigner['user']) . "';"; + . $this->dbi->escapeString($cfgDesigner['user']) . "';"; - $orig_data = $GLOBALS['dbi']->fetchSingleRow( + $orig_data = $this->dbi->fetchSingleRow( $orig_data_query, 'ASSOC', DatabaseInterface::CONNECT_CONTROL ); @@ -770,7 +778,7 @@ class Common . "." . Util::backquote($cfgDesigner['table']) . " SET settings_data = '" . $orig_data . "'" . " WHERE username = '" - . $GLOBALS['dbi']->escapeString($cfgDesigner['user']) . "';"; + . $this->dbi->escapeString($cfgDesigner['user']) . "';"; $success = $this->relation->queryAsControlUser($save_query); } else { diff --git a/libraries/classes/Database/Qbe.php b/libraries/classes/Database/Qbe.php index 7c03cb5019..07fd9d0e87 100644 --- a/libraries/classes/Database/Qbe.php +++ b/libraries/classes/Database/Qbe.php @@ -11,6 +11,7 @@ namespace PhpMyAdmin\Database; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Message; use PhpMyAdmin\Relation; use PhpMyAdmin\Table; use PhpMyAdmin\Template; @@ -219,14 +220,21 @@ class Qbe */ private $relation; + /** + * @var DatabaseInterface + */ + public $dbi; + /** * Public Constructor * - * @param string $dbname Database name - * @param array $savedSearchList List of saved searches - * @param SavedSearches $currentSearch Current search id + * @param DatabaseInterface $dbi DatabaseInterface object + * @param string $dbname Database name + * @param array $savedSearchList List of saved searches + * @param SavedSearches $currentSearch Current search id */ public function __construct( + $dbi, $dbname, array $savedSearchList = array(), $currentSearch = null @@ -234,11 +242,13 @@ class Qbe $this->_db = $dbname; $this->_savedSearchList = $savedSearchList; $this->_currentSearch = $currentSearch; + $this->relation = new Relation(); + $this->dbi = $dbi; + $this->_loadCriterias(); // Sets criteria parameters $this->_setSearchParams(); $this->_setCriteriaTablesAndColumns(); - $this->relation = new Relation(); } /** @@ -332,19 +342,19 @@ class Qbe $this->_criteriaTables[$each_table] = ' selected="selected"'; } } // end if - $all_tables = $GLOBALS['dbi']->query( + $all_tables = $this->dbi->query( 'SHOW TABLES FROM ' . Util::backquote($this->_db) . ';', DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_STORE ); - $all_tables_count = $GLOBALS['dbi']->numRows($all_tables); + $all_tables_count = $this->dbi->numRows($all_tables); if (0 == $all_tables_count) { Message::error(__('No tables found in database.'))->display(); exit; } // The tables list gets from MySQL - while (list($table) = $GLOBALS['dbi']->fetchRow($all_tables)) { - $columns = $GLOBALS['dbi']->getColumns($this->_db, $table); + while (list($table) = $this->dbi->fetchRow($all_tables)) { + $columns = $this->dbi->getColumns($this->_db, $table); if (empty($this->_criteriaTables[$table]) && ! empty($_REQUEST['TableList']) @@ -370,7 +380,7 @@ class Qbe } // end foreach } // end if } // end while - $GLOBALS['dbi']->freeResult($all_tables); + $this->dbi->freeResult($all_tables); // sets the largest width found $this->_realwidth = $this->_form_column_width . 'ex'; @@ -1286,7 +1296,7 @@ class Qbe $index_columns = array(); foreach ($search_tables as $table) { - $indexes = $GLOBALS['dbi']->getTableIndexes($this->_db, $table); + $indexes = $this->dbi->getTableIndexes($this->_db, $table); foreach ($indexes as $index) { $column = $table . '.' . $index['Column_name']; if (isset($search_columns[$column])) { @@ -1325,7 +1335,7 @@ class Qbe private function _getLeftJoinColumnCandidates(array $search_tables, array $search_columns, array $where_clause_columns ) { - $GLOBALS['dbi']->selectDb($this->_db); + $this->dbi->selectDb($this->_db); // Get unique columns and index columns $indexes = $this->_getIndexes( diff --git a/libraries/classes/Database/Search.php b/libraries/classes/Database/Search.php index 903dbed300..fa2f17fe78 100644 --- a/libraries/classes/Database/Search.php +++ b/libraries/classes/Database/Search.php @@ -9,6 +9,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Database; +use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Template; use PhpMyAdmin\Util; @@ -83,14 +84,21 @@ class Search */ private $criteriaColumnName; + /** + * @var DatabaseInterface + */ + private $dbi; + /** * Public Constructor * - * @param string $db Database name + * @param DatabaseInterface $dbi DatabaseInterface object + * @param string $db Database name */ - public function __construct($db) + public function __construct(DatabaseInterface $dbi, $db) { $this->db = $db; + $this->dbi = $dbi; $this->searchTypes = array( '1' => __('at least one of the words'), '2' => __('all of the words'), @@ -109,7 +117,7 @@ class Search */ private function setSearchParams() { - $this->tablesNamesOnly = $GLOBALS['dbi']->getTables($this->db); + $this->tablesNamesOnly = $this->dbi->getTables($this->db); if (empty($_REQUEST['criteriaSearchType']) || ! is_string($_REQUEST['criteriaSearchType']) @@ -151,7 +159,7 @@ class Search ) { unset($this->criteriaColumnName); } else { - $this->criteriaColumnName = $GLOBALS['dbi']->escapeString( + $this->criteriaColumnName = $this->dbi->escapeString( $_REQUEST['criteriaColumnName'] ); } @@ -207,7 +215,7 @@ class Search private function getWhereClause($table) { // Columns to select - $allColumns = $GLOBALS['dbi']->getColumns($GLOBALS['db'], $table); + $allColumns = $this->dbi->getColumns($GLOBALS['db'], $table); $likeClauses = array(); // Based on search type, decide like/regex & '%'/'' $like_or_regex = (($this->criteriaSearchType == 5) ? 'REGEXP' : 'LIKE'); @@ -215,7 +223,7 @@ class Search // For "as regular expression" (search option 5), LIKE won't be used // Usage example: If user is searching for a literal $ in a regexp search, // he should enter \$ as the value. - $criteriaSearchStringEscaped = $GLOBALS['dbi']->escapeString( + $criteriaSearchStringEscaped = $this->dbi->escapeString( $this->criteriaSearchString ); // Extract search words or pattern @@ -275,7 +283,7 @@ class Search // Gets the SQL statements $newSearchSqls = $this->getSearchSqls($eachTable); // Executes the "COUNT" statement - $resultCount = intval($GLOBALS['dbi']->fetchValue( + $resultCount = intval($this->dbi->fetchValue( $newSearchSqls['select_count'] )); $resultTotal += $resultCount; diff --git a/libraries/classes/Dbi/DbiDummy.php b/libraries/classes/Dbi/DbiDummy.php index 2614b26a0f..f45dddcf01 100644 --- a/libraries/classes/Dbi/DbiDummy.php +++ b/libraries/classes/Dbi/DbiDummy.php @@ -127,7 +127,7 @@ class DbiDummy implements DbiExtension public function fetchAny($result) { $query_data = &$this->getQueryData($result); - if ($query_data['pos'] >= count($query_data['result'])) { + if ($query_data['pos'] >= count((array) $query_data['result'])) { return false; } $ret = $query_data['result'][$query_data['pos']]; diff --git a/test/classes/Database/Designer/CommonTest.php b/test/classes/Database/Designer/CommonTest.php index 75c919ea23..bf802a62e6 100644 --- a/test/classes/Database/Designer/CommonTest.php +++ b/test/classes/Database/Designer/CommonTest.php @@ -44,7 +44,6 @@ class CommonTest extends TestCase ) ) ); - $this->designerCommon = new Common(); } /** @@ -80,6 +79,8 @@ class CommonTest extends TestCase ); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); + $this->designerCommon->getTablePositions($pg); } @@ -112,6 +113,8 @@ class CommonTest extends TestCase ->will($this->returnValue(array($pageName))); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); + $result = $this->designerCommon->getPageName($pg); $this->assertEquals($pageName, $result); @@ -140,6 +143,7 @@ class CommonTest extends TestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); $result = $this->designerCommon->deletePage($pg); $this->assertEquals(true, $result); @@ -176,6 +180,7 @@ class CommonTest extends TestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); $result = $this->designerCommon->getDefaultPage($db); $this->assertEquals($default_pg, $result); @@ -210,6 +215,7 @@ class CommonTest extends TestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); $result = $this->designerCommon->getDefaultPage($db); $this->assertEquals(-1, $result); @@ -245,6 +251,7 @@ class CommonTest extends TestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); $result = $this->designerCommon->getLoadingPage($db); $this->assertEquals($default_pg, $result); @@ -274,6 +281,7 @@ class CommonTest extends TestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->designerCommon = new Common($GLOBALS['dbi']); $result = $this->designerCommon->getLoadingPage($db); $this->assertEquals($first_pg, $result); diff --git a/test/classes/Database/DesignerTest.php b/test/classes/Database/DesignerTest.php index a2476faf6e..1985eafcff 100644 --- a/test/classes/Database/DesignerTest.php +++ b/test/classes/Database/DesignerTest.php @@ -50,8 +50,6 @@ class DesignerTest extends TestCase ], ' PMA_token ' => 'token' ]; - - $this->designer = new Designer(); } /** @@ -103,6 +101,8 @@ class DesignerTest extends TestCase $db = 'db'; $this->_mockDatabaseInteraction($db); + $this->designer = new Designer($GLOBALS['dbi']); + $method = new ReflectionMethod(Designer::class, 'getPageIdsAndNames'); $method->setAccessible(true); $result = $method->invokeArgs($this->designer, [$db]); @@ -127,6 +127,8 @@ class DesignerTest extends TestCase $operation = 'edit'; $this->_mockDatabaseInteraction($db); + $this->designer = new Designer($GLOBALS['dbi']); + $result = $this->designer->getHtmlForEditOrDeletePages($db, $operation); $this->assertContains( '', @@ -153,6 +155,8 @@ class DesignerTest extends TestCase $db = 'db'; $this->_mockDatabaseInteraction($db); + $this->designer = new Designer($GLOBALS['dbi']); + $result = $this->designer->getHtmlForPageSaveAs($db); $this->assertContains( '', @@ -193,6 +197,8 @@ class DesignerTest extends TestCase $db = 'db'; $page = 2; + $this->designer = new Designer($GLOBALS['dbi']); + $result = $this->designer->getHtmlForSchemaExport($db, $page); // export type $this->assertContains( diff --git a/test/classes/Database/QbeTest.php b/test/classes/Database/QbeTest.php index b99dbcd5b5..12aad29d5c 100644 --- a/test/classes/Database/QbeTest.php +++ b/test/classes/Database/QbeTest.php @@ -9,6 +9,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Database; use PhpMyAdmin\Database\Qbe; +use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Tests\PmaTestCase; use ReflectionClass; @@ -33,11 +34,11 @@ class QbeTest extends PmaTestCase */ protected function setUp() { - $this->object = new Qbe('pma_test'); + $this->object = new Qbe($GLOBALS['dbi'], 'pma_test'); $GLOBALS['server'] = 0; $GLOBALS['db'] = 'pma_test'; //mock DBI - $dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface') + $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -58,6 +59,7 @@ class QbeTest extends PmaTestCase ->will($this->returnValue(array())); $GLOBALS['dbi'] = $dbi; + $this->object->dbi = $dbi; } /** diff --git a/test/classes/Database/SearchTest.php b/test/classes/Database/SearchTest.php index 1b67fd73ba..0b11e15e0b 100644 --- a/test/classes/Database/SearchTest.php +++ b/test/classes/Database/SearchTest.php @@ -34,7 +34,6 @@ class SearchTest extends PmaTestCase */ protected function setUp() { - $this->object = new Search('pma_test'); $GLOBALS['server'] = 0; $GLOBALS['db'] = 'pma'; @@ -56,6 +55,7 @@ class SearchTest extends PmaTestCase ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; + $this->object = new Search($dbi, 'pma_test'); } /** @@ -101,7 +101,7 @@ class SearchTest extends PmaTestCase $_REQUEST['criteriaSearchType'] = $type; $_REQUEST['criteriaSearchString'] = 'search string'; - $this->object = new Search('pma_test'); + $this->object = new Search($GLOBALS['dbi'], 'pma_test'); $this->assertEquals( $expected, $this->callProtectedFunction(