diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 67dd3212d3..e1adc3e39e 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2832,56 +2832,34 @@ function view_warned_users(&$users, &$user_count, $limit = 0, $offset = 0, $limi /** * Get database size -* Currently only mysql and mssql are supported */ function get_database_size() { - global $db, $user, $table_prefix; + global $db, $user; $database_size = false; - // This code is heavily influenced by a similar routine in phpMyAdmin 2.2.0 switch ($db->get_sql_layer()) { case 'mysqli': - $sql = 'SELECT VERSION() AS mysql_version'; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + $mysql_engine = ['MyISAM', 'InnoDB', 'Aria']; - if ($row) + $db_name = $db->get_db_name(); + + $sql = 'SHOW TABLE STATUS + FROM ' . $db_name; + $result = $db->sql_query($sql, 7200); + + while ($row = $db->sql_fetchrow($result)) { - $version = $row['mysql_version']; - - if (preg_match('#(3\.23|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria)#', $version)) + if (isset($row['Engine']) && in_array($row['Engine'], $mysql_engine)) { - $db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria#', $version)) ? "`{$db->get_db_name()}`" : $db->get_db_name(); - - $sql = 'SHOW TABLE STATUS - FROM ' . $db_name; - $result = $db->sql_query($sql, 7200); - - $database_size = 0; - while ($row = $db->sql_fetchrow($result)) - { - if ((isset($row['Type']) && $row['Type'] != 'MRG_MyISAM') || (isset($row['Engine']) && ($row['Engine'] == 'MyISAM' || $row['Engine'] == 'InnoDB' || $row['Engine'] == 'Aria'))) - { - if ($table_prefix != '') - { - if (strpos($row['Name'], $table_prefix) !== false) - { - $database_size += $row['Data_length'] + $row['Index_length']; - } - } - else - { - $database_size += $row['Data_length'] + $row['Index_length']; - } - } - } - $db->sql_freeresult($result); + $database_size += $row['Data_length'] + $row['Index_length']; } } + + $db->sql_freeresult($result); + break; case 'sqlite3': diff --git a/tests/functional/acp_main_test.php b/tests/functional/acp_main_test.php new file mode 100644 index 0000000000..d392102e1a --- /dev/null +++ b/tests/functional/acp_main_test.php @@ -0,0 +1,31 @@ + +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +/** +* @group functional +*/ +class phpbb_functional_acp_main_test extends phpbb_functional_test_case +{ + public function test_acp_database_size() + { + $this->add_lang(['acp/common', 'acp/board']); + $this->login(); + $this->admin_login(); + + $crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid); + $this->assertContainsLang('WELCOME_PHPBB', $this->get_content()); + $this->assertContainsLang('ADMIN_INTRO', $this->get_content()); + $this->assertContainsLang('DATABASE_SIZE', $crawler->filter('tbody > tr')->eq(2)->filter('td[class="tabled"]')->eq(0)->text()); + $this->assertNotContainsLang('NOT_AVAILABLE', $crawler->filter('tbody > tr')->eq(2)->filter('td[class="tabled"]')->eq(1)->text()); + } +}