Merge pull request #13677 from mauriciofauth/functions
Refactor some function calls to static method calls
This commit is contained in:
commit
653f685b9a
@ -22,7 +22,6 @@ if (isset($_REQUEST['dialog'])) {
|
||||
} else if ($_REQUEST['dialog'] == 'save_as') {
|
||||
$html = Designer::getHtmlForPageSaveAs($GLOBALS['db']);
|
||||
} else if ($_REQUEST['dialog'] == 'export') {
|
||||
include_once 'libraries/plugin_interface.lib.php';
|
||||
$html = Designer::getHtmlForSchemaExport(
|
||||
$GLOBALS['db'], $_REQUEST['selected_page']
|
||||
);
|
||||
|
||||
@ -5,8 +5,9 @@
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\DbMultiTableQuery;
|
||||
use PhpMyAdmin\ParseAnalyze;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Sql;
|
||||
|
||||
require_once 'libraries/common.inc.php';
|
||||
@ -14,12 +15,11 @@ require_once 'libraries/common.inc.php';
|
||||
if (isset($_REQUEST['sql_query'])) {
|
||||
$sql_query = $_REQUEST['sql_query'];
|
||||
$db = $_REQUEST['db'];
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
$table_from_sql
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
|
||||
extract($analyzed_sql_results);
|
||||
$goto = 'db_multi_table_query.php';
|
||||
|
||||
@ -15,8 +15,10 @@ use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Display\CreateTable;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\Export\ExportSql;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\RelationCleanup;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
@ -75,10 +77,9 @@ if (strlen($GLOBALS['db']) > 0
|
||||
|
||||
$tables_full = $GLOBALS['dbi']->getTablesFull($GLOBALS['db']);
|
||||
|
||||
include_once "libraries/plugin_interface.lib.php";
|
||||
// remove all foreign key constraints, otherwise we can get errors
|
||||
/* @var $export_sql_plugin ExportSql */
|
||||
$export_sql_plugin = PMA_getPlugin(
|
||||
$export_sql_plugin = Plugins::getPlugin(
|
||||
"export",
|
||||
"sql",
|
||||
'libraries/classes/Plugins/Export/',
|
||||
@ -133,8 +134,7 @@ if (strlen($GLOBALS['db']) > 0
|
||||
/**
|
||||
* cleanup pmadb stuff for this db
|
||||
*/
|
||||
include_once 'libraries/relation_cleanup.lib.php';
|
||||
PMA_relationsCleanupDatabase($GLOBALS['db']);
|
||||
RelationCleanup::database($GLOBALS['db']);
|
||||
|
||||
// if someday the RENAME DATABASE reappears, do not DROP
|
||||
$local_query = 'DROP DATABASE '
|
||||
|
||||
@ -6,9 +6,10 @@
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/error_report.lib.php';
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
|
||||
if (!isset($_REQUEST['exception_type'])
|
||||
||!in_array($_REQUEST['exception_type'], array('js', 'php'))
|
||||
@ -114,7 +115,7 @@ if (isset($_REQUEST['send_error_report'])
|
||||
if (isset($_REQUEST['always_send'])
|
||||
&& $_REQUEST['always_send'] === "true"
|
||||
) {
|
||||
PMA_persistOption("SendErrorReports", "always", "ask");
|
||||
UserPreferences::persistOption("SendErrorReports", "always", "ask");
|
||||
}
|
||||
}
|
||||
} elseif (! empty($_REQUEST['get_settings'])) {
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Encoding;
|
||||
use PhpMyAdmin\Export;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\ExportPlugin;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Sanitize;
|
||||
@ -26,7 +27,6 @@ if (isset($_POST['output_format']) && $_POST['output_format'] == 'sendit') {
|
||||
define('PMA_BYPASS_GET_INSTANCE', 1);
|
||||
}
|
||||
include_once 'libraries/common.inc.php';
|
||||
include_once 'libraries/plugin_interface.lib.php';
|
||||
|
||||
//check if it's the GET request to check export time out
|
||||
if (isset($_GET['check_time_out'])) {
|
||||
@ -181,7 +181,7 @@ $what = Core::securePath($_POST['what']);
|
||||
|
||||
// export class instance, not array of properties, as before
|
||||
/* @var $export_plugin ExportPlugin */
|
||||
$export_plugin = PMA_getPlugin(
|
||||
$export_plugin = Plugins::getPlugin(
|
||||
"export",
|
||||
$what,
|
||||
'libraries/classes/Plugins/Export/',
|
||||
|
||||
13
import.php
13
import.php
@ -11,6 +11,8 @@ use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Encoding;
|
||||
use PhpMyAdmin\File;
|
||||
use PhpMyAdmin\Import;
|
||||
use PhpMyAdmin\ParseAnalyze;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\ImportPlugin;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Sql;
|
||||
@ -514,10 +516,8 @@ if (! $error && isset($_POST['skip'])) {
|
||||
$sql_data = array('valid_sql' => array(), 'valid_queries' => 0);
|
||||
|
||||
if (! $error) {
|
||||
// Check for file existence
|
||||
include_once "libraries/plugin_interface.lib.php";
|
||||
/* @var $import_plugin ImportPlugin */
|
||||
$import_plugin = PMA_getPlugin(
|
||||
$import_plugin = Plugins::getPlugin(
|
||||
"import",
|
||||
$format,
|
||||
'libraries/classes/Plugins/Import/',
|
||||
@ -637,13 +637,11 @@ if (isset($message)) {
|
||||
// can choke on it so avoid parsing)
|
||||
$sqlLength = mb_strlen($sql_query);
|
||||
if ($sqlLength <= $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) {
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
$table_from_sql
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
// @todo: possibly refactor
|
||||
extract($analyzed_sql_results);
|
||||
|
||||
@ -675,12 +673,11 @@ if ($go_sql) {
|
||||
foreach ($sql_queries as $sql_query) {
|
||||
|
||||
// parse sql query
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
$table_from_sql
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
// @todo: possibly refactor
|
||||
extract($analyzed_sql_results);
|
||||
|
||||
|
||||
117
index.php
117
index.php
@ -5,8 +5,8 @@
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Charsets;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Display\GitRevision;
|
||||
use PhpMyAdmin\LanguageManager;
|
||||
@ -15,8 +15,10 @@ use PhpMyAdmin\RecentFavoriteTable;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Sanitize;
|
||||
use PhpMyAdmin\Server\Select;
|
||||
use PhpMyAdmin\ThemeManager;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* Gets some core libraries and displays a top message if required
|
||||
@ -68,11 +70,11 @@ if (isset($_REQUEST['ajax_request']) && ! empty($_REQUEST['access_time'])) {
|
||||
if (! empty($_REQUEST['db'])) {
|
||||
$page = null;
|
||||
if (! empty($_REQUEST['table'])) {
|
||||
$page = PhpMyAdmin\Util::getScriptNameForOption(
|
||||
$page = Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabTable'], 'table'
|
||||
);
|
||||
} else {
|
||||
$page = PhpMyAdmin\Util::getScriptNameForOption(
|
||||
$page = Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabDatabase'], 'database'
|
||||
);
|
||||
}
|
||||
@ -107,7 +109,7 @@ $show_query = '1';
|
||||
|
||||
// Any message to display?
|
||||
if (! empty($message)) {
|
||||
echo PhpMyAdmin\Util::getMessage($message);
|
||||
echo Util::getMessage($message);
|
||||
unset($message);
|
||||
}
|
||||
if (isset($_SESSION['partial_logout'])) {
|
||||
@ -182,9 +184,8 @@ if ($server > 0 || count($cfg['Servers']) > 1
|
||||
|| ($server == 0 && count($cfg['Servers']) == 1)))
|
||||
) {
|
||||
echo '<li id="li_select_server" class="no_bullets" >';
|
||||
include_once 'libraries/select_server.lib.php';
|
||||
echo PhpMyAdmin\Util::getImage('s_host.png') , " "
|
||||
, PMA_selectServer(true, true);
|
||||
echo Util::getImage('s_host.png') , " "
|
||||
, Select::render(true, true);
|
||||
echo '</li>';
|
||||
}
|
||||
|
||||
@ -198,8 +199,8 @@ if ($server > 0 || count($cfg['Servers']) > 1
|
||||
if ($cfg['Server']['auth_type'] != 'config') {
|
||||
if ($cfg['ShowChgPassword']) {
|
||||
$conditional_class = 'ajax';
|
||||
PMA_printListItem(
|
||||
PhpMyAdmin\Util::getImage('s_passwd.png') . " " . __(
|
||||
Core::printListItem(
|
||||
Util::getImage('s_passwd.png') . " " . __(
|
||||
'Change password'
|
||||
),
|
||||
'li_change_password',
|
||||
@ -216,10 +217,10 @@ if ($server > 0 || count($cfg['Servers']) > 1
|
||||
echo ' <form method="post" action="index.php">' , "\n"
|
||||
. Url::getHiddenInputs(null, null, 4, 'collation_connection')
|
||||
. ' <label for="select_collation_connection">' . "\n"
|
||||
. ' ' . PhpMyAdmin\Util::getImage('s_asci.png')
|
||||
. ' ' . Util::getImage('s_asci.png')
|
||||
. " " . __('Server connection collation') . "\n"
|
||||
// put the doc link in the form so that it appears on the same line
|
||||
. PhpMyAdmin\Util::showMySQLDocu('Charset-connection')
|
||||
. Util::showMySQLDocu('Charset-connection')
|
||||
. ': ' . "\n"
|
||||
. ' </label>' . "\n"
|
||||
|
||||
@ -246,7 +247,7 @@ $language_manager = LanguageManager::getInstance();
|
||||
if (empty($cfg['Lang']) && $language_manager->hasChoice()) {
|
||||
echo '<li id="li_select_lang" class="no_bullets">';
|
||||
|
||||
echo PhpMyAdmin\Util::getImage('s_lang.png') , " "
|
||||
echo Util::getImage('s_lang.png') , " "
|
||||
, $language_manager->getSelectorDisplay();
|
||||
echo '</li>';
|
||||
}
|
||||
@ -255,12 +256,12 @@ if (empty($cfg['Lang']) && $language_manager->hasChoice()) {
|
||||
|
||||
if ($GLOBALS['cfg']['ThemeManager']) {
|
||||
echo '<li id="li_select_theme" class="no_bullets">';
|
||||
echo PhpMyAdmin\Util::getImage('s_theme.png') , " "
|
||||
echo Util::getImage('s_theme.png') , " "
|
||||
, ThemeManager::getInstance()->getHtmlSelectBox();
|
||||
echo '</li>';
|
||||
}
|
||||
echo '<li id="li_select_fontsize">';
|
||||
echo PhpMyAdmin\Config::getFontsizeForm();
|
||||
echo Config::getFontsizeForm();
|
||||
echo '</li>';
|
||||
|
||||
echo '</ul>';
|
||||
@ -269,8 +270,8 @@ echo '</ul>';
|
||||
|
||||
if ($server > 0) {
|
||||
echo '<ul>';
|
||||
PMA_printListItem(
|
||||
PhpMyAdmin\Util::getImage('b_tblops.png') . " " . __(
|
||||
Core::printListItem(
|
||||
Util::getImage('b_tblops.png') . " " . __(
|
||||
'More settings'
|
||||
),
|
||||
'li_user_preferences',
|
||||
@ -295,29 +296,29 @@ if ($server > 0 && $GLOBALS['cfg']['ShowServerInfo']) {
|
||||
echo '<div class="group">';
|
||||
echo '<h2>' , __('Database server') , '</h2>';
|
||||
echo '<ul>' , "\n";
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Server:') . ' ' . $server_info,
|
||||
'li_server_info'
|
||||
);
|
||||
PMA_printListItem(
|
||||
__('Server type:') . ' ' . PhpMyAdmin\Util::getServerType(),
|
||||
Core::printListItem(
|
||||
__('Server type:') . ' ' . Util::getServerType(),
|
||||
'li_server_type'
|
||||
);
|
||||
PMA_printListItem(
|
||||
__('Server connection:') . ' ' . PhpMyAdmin\Util::getServerSSL(),
|
||||
Core::printListItem(
|
||||
__('Server connection:') . ' ' . Util::getServerSSL(),
|
||||
'li_server_type'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Server version:')
|
||||
. ' '
|
||||
. $GLOBALS['dbi']->getVersionString() . ' - ' . $GLOBALS['dbi']->getVersionComment(),
|
||||
'li_server_version'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Protocol version:') . ' ' . $GLOBALS['dbi']->getProtoInfo(),
|
||||
'li_mysql_proto'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('User:') . ' ' . htmlspecialchars($mysql_cur_user_and_host),
|
||||
'li_user_info'
|
||||
);
|
||||
@ -339,35 +340,35 @@ if ($GLOBALS['cfg']['ShowServerInfo'] || $GLOBALS['cfg']['ShowPhpInfo']) {
|
||||
echo '<h2>' , __('Web server') , '</h2>';
|
||||
echo '<ul>';
|
||||
if ($GLOBALS['cfg']['ShowServerInfo']) {
|
||||
PMA_printListItem($_SERVER['SERVER_SOFTWARE'], 'li_web_server_software');
|
||||
Core::printListItem($_SERVER['SERVER_SOFTWARE'], 'li_web_server_software');
|
||||
|
||||
if ($server > 0) {
|
||||
$client_version_str = $GLOBALS['dbi']->getClientInfo();
|
||||
if (preg_match('#\d+\.\d+\.\d+#', $client_version_str)) {
|
||||
$client_version_str = 'libmysql - ' . $client_version_str;
|
||||
}
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Database client version:') . ' ' . $client_version_str,
|
||||
'li_mysql_client_version'
|
||||
);
|
||||
|
||||
$php_ext_string = __('PHP extension:') . ' ';
|
||||
|
||||
$extensions = PhpMyAdmin\Util::listPHPExtensions();
|
||||
$extensions = Util::listPHPExtensions();
|
||||
|
||||
foreach ($extensions as $extension) {
|
||||
$php_ext_string .= ' ' . $extension
|
||||
. PhpMyAdmin\Util::showPHPDocu('book.' . $extension . '.php');
|
||||
. Util::showPHPDocu('book.' . $extension . '.php');
|
||||
}
|
||||
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
$php_ext_string,
|
||||
'li_used_php_extension'
|
||||
);
|
||||
|
||||
$php_version_string = __('PHP version:') . ' ' . phpversion();
|
||||
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
$php_version_string,
|
||||
'li_used_php_version'
|
||||
);
|
||||
@ -375,7 +376,7 @@ if ($GLOBALS['cfg']['ShowServerInfo'] || $GLOBALS['cfg']['ShowPhpInfo']) {
|
||||
}
|
||||
|
||||
if ($cfg['ShowPhpInfo']) {
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Show PHP information'),
|
||||
'li_phpinfo',
|
||||
'phpinfo.php' . $common_url_query,
|
||||
@ -394,7 +395,7 @@ $class = null;
|
||||
if ($GLOBALS['cfg']['VersionCheck']) {
|
||||
$class = 'jsversioncheck';
|
||||
}
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Version information:') . ' <span class="version">' . PMA_VERSION . '</span>',
|
||||
'li_pma_version',
|
||||
null,
|
||||
@ -403,44 +404,44 @@ PMA_printListItem(
|
||||
null,
|
||||
$class
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Documentation'),
|
||||
'li_pma_docs',
|
||||
PhpMyAdmin\Util::getDocuLink('index'),
|
||||
Util::getDocuLink('index'),
|
||||
null,
|
||||
'_blank'
|
||||
);
|
||||
|
||||
// does not work if no target specified, don't know why
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Official Homepage'),
|
||||
'li_pma_homepage',
|
||||
Core::linkURL('https://www.phpmyadmin.net/'),
|
||||
null,
|
||||
'_blank'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Contribute'),
|
||||
'li_pma_contribute',
|
||||
Core::linkURL('https://www.phpmyadmin.net/contribute/'),
|
||||
null,
|
||||
'_blank'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Get support'),
|
||||
'li_pma_support',
|
||||
Core::linkURL('https://www.phpmyadmin.net/support/'),
|
||||
null,
|
||||
'_blank'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('List of changes'),
|
||||
'li_pma_changes',
|
||||
'changelog.php' . Url::getCommon(),
|
||||
null,
|
||||
'_blank'
|
||||
);
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('License'),
|
||||
'li_pma_license',
|
||||
'license.php' . Url::getCommon(),
|
||||
@ -573,7 +574,7 @@ if ($server > 0) {
|
||||
. 'to set it up there.'
|
||||
);
|
||||
}
|
||||
$msg = PhpMyAdmin\Message::notice($msg_text);
|
||||
$msg = Message::notice($msg_text);
|
||||
$msg->addParamHtml('<a href="./chk_rel.php' . $common_url_query . '">');
|
||||
$msg->addParamHtml('</a>');
|
||||
/* Show error if user has configured something, notice elsewhere */
|
||||
@ -638,39 +639,3 @@ if (@file_exists('libraries/language_stats.inc.php')) {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* prints list item for main page
|
||||
*
|
||||
* @param string $name displayed text
|
||||
* @param string $listId id, used for css styles
|
||||
* @param string $url make item as link with $url as target
|
||||
* @param string $mysql_help_page display a link to MySQL's manual
|
||||
* @param string $target special target for $url
|
||||
* @param string $a_id id for the anchor,
|
||||
* used for jQuery to hook in functions
|
||||
* @param string $class class for the li element
|
||||
* @param string $a_class class for the anchor element
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_printListItem($name, $listId = null, $url = null,
|
||||
$mysql_help_page = null, $target = null, $a_id = null, $class = null,
|
||||
$a_class = null
|
||||
) {
|
||||
echo PhpMyAdmin\Template::get('list/item')
|
||||
->render(
|
||||
array(
|
||||
'content' => $name,
|
||||
'id' => $listId,
|
||||
'class' => $class,
|
||||
'url' => array(
|
||||
'href' => $url,
|
||||
'target' => $target,
|
||||
'id' => $a_id,
|
||||
'class' => $a_class,
|
||||
),
|
||||
'mysql_help_page' => $mysql_help_page,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -13,6 +13,7 @@ use PhpMyAdmin\Error;
|
||||
use PhpMyAdmin\LanguageManager;
|
||||
use PhpMyAdmin\ThemeManager;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
@ -907,11 +908,9 @@ class Config
|
||||
if (! isset($_SESSION['cache'][$cache_key]['userprefs'])
|
||||
|| $_SESSION['cache'][$cache_key]['config_mtime'] < $config_mtime
|
||||
) {
|
||||
// load required libraries
|
||||
include_once './libraries/user_preferences.lib.php';
|
||||
$prefs = PMA_loadUserprefs();
|
||||
$prefs = UserPreferences::load();
|
||||
$_SESSION['cache'][$cache_key]['userprefs']
|
||||
= PMA_applyUserprefs($prefs['config_data']);
|
||||
= UserPreferences::apply($prefs['config_data']);
|
||||
$_SESSION['cache'][$cache_key]['userprefs_mtime'] = $prefs['mtime'];
|
||||
$_SESSION['cache'][$cache_key]['userprefs_type'] = $prefs['type'];
|
||||
$_SESSION['cache'][$cache_key]['config_mtime'] = $config_mtime;
|
||||
@ -1032,11 +1031,10 @@ class Config
|
||||
// use permanent user preferences if possible
|
||||
$prefs_type = $this->get('user_preferences');
|
||||
if ($prefs_type) {
|
||||
include_once './libraries/user_preferences.lib.php';
|
||||
if ($default_value === null) {
|
||||
$default_value = Core::arrayRead($cfg_path, $this->default);
|
||||
}
|
||||
PMA_persistOption($cfg_path, $new_cfg_value, $default_value);
|
||||
UserPreferences::persistOption($cfg_path, $new_cfg_value, $default_value);
|
||||
}
|
||||
if ($prefs_type != 'db' && $cookie_name) {
|
||||
// fall back to cookies
|
||||
|
||||
@ -13,8 +13,7 @@ use PhpMyAdmin\Config\Forms\Page\PageFormList;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Response;
|
||||
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
|
||||
/**
|
||||
* Page-related settings
|
||||
@ -71,7 +70,7 @@ class PageSettings
|
||||
$this->_groupName = $formGroupName;
|
||||
|
||||
$cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings);
|
||||
PMA_userprefsPageInit($cf);
|
||||
UserPreferences::pageInit($cf);
|
||||
|
||||
$form_display = new $form_class($cf);
|
||||
|
||||
@ -100,7 +99,7 @@ class PageSettings
|
||||
{
|
||||
if ($form_display->process(false) && !$form_display->hasErrors()) {
|
||||
// save settings
|
||||
$result = PMA_saveUserprefs($cf->getConfigArray());
|
||||
$result = UserPreferences::save($cf->getConfigArray());
|
||||
if ($result === true) {
|
||||
// reload page
|
||||
$response = Response::getInstance();
|
||||
|
||||
@ -14,6 +14,7 @@ use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\CreateAddField;
|
||||
use PhpMyAdmin\Index;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\ParseAnalyze;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\SqlParser\Context;
|
||||
@ -793,11 +794,10 @@ class TableStructureController extends TableController
|
||||
|
||||
// Parse and analyze the query
|
||||
$db = &$this->db;
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
// @todo: possibly refactor
|
||||
extract($analyzed_sql_results);
|
||||
|
||||
|
||||
@ -1179,4 +1179,40 @@ class Core
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* prints list item for main page
|
||||
*
|
||||
* @param string $name displayed text
|
||||
* @param string $listId id, used for css styles
|
||||
* @param string $url make item as link with $url as target
|
||||
* @param string $mysql_help_page display a link to MySQL's manual
|
||||
* @param string $target special target for $url
|
||||
* @param string $a_id id for the anchor,
|
||||
* used for jQuery to hook in functions
|
||||
* @param string $class class for the li element
|
||||
* @param string $a_class class for the anchor element
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function printListItem($name, $listId = null, $url = null,
|
||||
$mysql_help_page = null, $target = null, $a_id = null, $class = null,
|
||||
$a_class = null
|
||||
) {
|
||||
echo Template::get('list/item')
|
||||
->render(
|
||||
array(
|
||||
'content' => $name,
|
||||
'id' => $listId,
|
||||
'class' => $class,
|
||||
'url' => array(
|
||||
'href' => $url,
|
||||
'target' => $target,
|
||||
'id' => $a_id,
|
||||
'class' => $a_class,
|
||||
),
|
||||
'mysql_help_page' => $mysql_help_page,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ namespace PhpMyAdmin\Database;
|
||||
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\SchemaPlugin;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Template;
|
||||
@ -114,7 +115,7 @@ class Designer
|
||||
{
|
||||
/* Scan for schema plugins */
|
||||
/* @var $export_list SchemaPlugin[] */
|
||||
$export_list = PMA_getPlugins(
|
||||
$export_list = Plugins::getPlugins(
|
||||
"schema",
|
||||
'libraries/classes/Plugins/Schema/',
|
||||
null
|
||||
|
||||
@ -10,6 +10,7 @@ namespace PhpMyAdmin\Display;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Encoding;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\ExportPlugin;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Response;
|
||||
@ -371,7 +372,7 @@ class Export
|
||||
{
|
||||
$html = '<div class="exportoptions" id="format">';
|
||||
$html .= '<h3>' . __('Format:') . '</h3>';
|
||||
$html .= PMA_pluginGetChoice('Export', 'what', $export_list, 'format');
|
||||
$html .= Plugins::getChoice('Export', 'what', $export_list, 'format');
|
||||
$html .= '</div>';
|
||||
return $html;
|
||||
}
|
||||
@ -393,7 +394,7 @@ class Export
|
||||
. 'and ignore the options for other formats.'
|
||||
);
|
||||
$html .= '</p>';
|
||||
$html .= PMA_pluginGetOptions('Export', $export_list);
|
||||
$html .= Plugins::getOptions('Export', $export_list);
|
||||
$html .= '</div>';
|
||||
|
||||
if (Encoding::canConvertKanji()) {
|
||||
@ -1002,11 +1003,9 @@ class Export
|
||||
$GLOBALS['single_table'] = $_REQUEST['single_table'];
|
||||
}
|
||||
|
||||
include_once './libraries/plugin_interface.lib.php';
|
||||
|
||||
/* Scan for plugins */
|
||||
/* @var $export_list ExportPlugin[] */
|
||||
$export_list = PMA_getPlugins(
|
||||
$export_list = Plugins::getPlugins(
|
||||
"export",
|
||||
'libraries/classes/Plugins/Export/',
|
||||
array(
|
||||
|
||||
@ -69,7 +69,7 @@ class GitRevision
|
||||
|
||||
$committer = $GLOBALS['PMA_Config']->get('PMA_VERSION_GIT_COMMITTER');
|
||||
$author = $GLOBALS['PMA_Config']->get('PMA_VERSION_GIT_AUTHOR');
|
||||
PMA_printListItem(
|
||||
Core::printListItem(
|
||||
__('Git revision:') . ' '
|
||||
. $branch . ',<br /> '
|
||||
. sprintf(
|
||||
|
||||
@ -12,6 +12,7 @@ use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Display\ImportAjax;
|
||||
use PhpMyAdmin\Encoding;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\ImportPlugin;
|
||||
use PhpMyAdmin\Sanitize;
|
||||
use PhpMyAdmin\Url;
|
||||
@ -308,7 +309,7 @@ class Import
|
||||
$html .= ' <div class="formelementrow">';
|
||||
$html .= ' <input type="checkbox" name="allow_interrupt" value="yes"';
|
||||
$html .= ' id="checkbox_allow_interrupt" '
|
||||
. PMA_pluginCheckboxCheck('Import', 'allow_interrupt') . '/>';
|
||||
. Plugins::checkboxCheck('Import', 'allow_interrupt') . '/>';
|
||||
$html .= ' <label for="checkbox_allow_interrupt">'
|
||||
. __(
|
||||
'Allow the interruption of an import in case the script detects '
|
||||
@ -325,7 +326,7 @@ class Import
|
||||
)
|
||||
. '</label>';
|
||||
$html .= ' <input type="number" name="skip_queries" value="'
|
||||
. PMA_pluginGetDefault('Import', 'skip_queries')
|
||||
. Plugins::getDefault('Import', 'skip_queries')
|
||||
. '" id="text_skip_queries" min="0" />';
|
||||
$html .= ' </div>';
|
||||
|
||||
@ -334,7 +335,7 @@ class Import
|
||||
// do not show the Skip dialog to avoid the risk of someone
|
||||
// entering a value here that would interfere with "skip"
|
||||
$html .= ' <input type="hidden" name="skip_queries" value="'
|
||||
. PMA_pluginGetDefault('Import', 'skip_queries')
|
||||
. Plugins::getDefault('Import', 'skip_queries')
|
||||
. '" id="text_skip_queries" />';
|
||||
}
|
||||
|
||||
@ -371,7 +372,7 @@ class Import
|
||||
{
|
||||
$html = ' <div class="importoptions">';
|
||||
$html .= ' <h3>' . __('Format:') . '</h3>';
|
||||
$html .= PMA_pluginGetChoice('Import', 'format', $import_list);
|
||||
$html .= Plugins::getChoice('Import', 'format', $import_list);
|
||||
$html .= ' <div id="import_notification"></div>';
|
||||
$html .= ' </div>';
|
||||
|
||||
@ -380,7 +381,7 @@ class Import
|
||||
$html .= ' <p class="no_js_msg" id="scroll_to_options_msg">'
|
||||
. 'Scroll down to fill in the options for the selected format '
|
||||
. 'and ignore the options for other formats.</p>';
|
||||
$html .= PMA_pluginGetOptions('Import', $import_list);
|
||||
$html .= Plugins::getOptions('Import', $import_list);
|
||||
$html .= ' </div>';
|
||||
$html .= ' <div class="clearfloat"></div>';
|
||||
|
||||
@ -650,7 +651,6 @@ class Import
|
||||
public static function getImportDisplay($import_type, $db, $table, $max_upload_size)
|
||||
{
|
||||
global $SESSION_KEY;
|
||||
include_once './libraries/plugin_interface.lib.php';
|
||||
|
||||
list(
|
||||
$SESSION_KEY,
|
||||
@ -659,7 +659,7 @@ class Import
|
||||
|
||||
/* Scan for plugins */
|
||||
/* @var $import_list ImportPlugin[] */
|
||||
$import_list = PMA_getPlugins(
|
||||
$import_list = Plugins::getPlugins(
|
||||
"import",
|
||||
'libraries/classes/Plugins/Import/',
|
||||
$import_type
|
||||
|
||||
@ -547,18 +547,6 @@ class File
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo
|
||||
* get registered plugins for file compression
|
||||
|
||||
foreach (PMA_getPlugins($type = 'compression') as $plugin) {
|
||||
if ($plugin['classname']::canHandle($this->getName())) {
|
||||
$this->setCompressionPlugin($plugin);
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
$this->_compression = Util::getCompressionMimeType($file);
|
||||
return $this->_compression;
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ use PhpMyAdmin\RecentFavoriteTable;
|
||||
use PhpMyAdmin\Sanitize;
|
||||
use PhpMyAdmin\Scripts;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
@ -436,8 +437,7 @@ class Header
|
||||
$retval .= Config::renderHeader();
|
||||
// offer to load user preferences from localStorage
|
||||
if ($this->_userprefsOfferImport) {
|
||||
include_once './libraries/user_preferences.lib.php';
|
||||
$retval .= PMA_userprefsAutoloadGetHeader();
|
||||
$retval .= UserPreferences::autoloadGetHeader();
|
||||
}
|
||||
// pass configuration for hint tooltip display
|
||||
// (to be used by PMA_tooltip() in js/functions.js)
|
||||
|
||||
310
libraries/classes/IpAllowDeny.php
Normal file
310
libraries/classes/IpAllowDeny.php
Normal file
@ -0,0 +1,310 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* This library is used with the server IP allow/deny host authentication
|
||||
* feature
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
|
||||
require_once './libraries/hash.lib.php';
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\IpAllowDeny class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class IpAllowDeny
|
||||
{
|
||||
/**
|
||||
* Matches for IPv4 or IPv6 addresses
|
||||
*
|
||||
* @param string $testRange string of IP range to match
|
||||
* @param string $ipToTest string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public static function ipMaskTest($testRange, $ipToTest)
|
||||
{
|
||||
if (mb_strpos($testRange, ':') > -1
|
||||
|| mb_strpos($ipToTest, ':') > -1
|
||||
) {
|
||||
// assume IPv6
|
||||
$result = self::ipv6MaskTest($testRange, $ipToTest);
|
||||
} else {
|
||||
$result = self::ipv4MaskTest($testRange, $ipToTest);
|
||||
}
|
||||
|
||||
return $result;
|
||||
} // end of the "self::ipMaskTest()" function
|
||||
|
||||
/**
|
||||
* Based on IP Pattern Matcher
|
||||
* Originally by J.Adams <jna@retina.net>
|
||||
* Found on <https://secure.php.net/manual/en/function.ip2long.php>
|
||||
* Modified for phpMyAdmin
|
||||
*
|
||||
* Matches:
|
||||
* xxx.xxx.xxx.xxx (exact)
|
||||
* xxx.xxx.xxx.[yyy-zzz] (range)
|
||||
* xxx.xxx.xxx.xxx/nn (CIDR)
|
||||
*
|
||||
* Does not match:
|
||||
* xxx.xxx.xxx.xx[yyy-zzz] (range, partial octets not supported)
|
||||
*
|
||||
* @param string $testRange string of IP range to match
|
||||
* @param string $ipToTest string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public static function ipv4MaskTest($testRange, $ipToTest)
|
||||
{
|
||||
$result = true;
|
||||
$match = preg_match(
|
||||
'|([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/([0-9]+)|',
|
||||
$testRange,
|
||||
$regs
|
||||
);
|
||||
if ($match) {
|
||||
// performs a mask match
|
||||
$ipl = ip2long($ipToTest);
|
||||
$rangel = ip2long(
|
||||
$regs[1] . '.' . $regs[2] . '.' . $regs[3] . '.' . $regs[4]
|
||||
);
|
||||
|
||||
$maskl = 0;
|
||||
|
||||
for ($i = 0; $i < 31; $i++) {
|
||||
if ($i < $regs[5] - 1) {
|
||||
$maskl = $maskl + pow(2, (30 - $i));
|
||||
} // end if
|
||||
} // end for
|
||||
|
||||
if (($maskl & $rangel) == ($maskl & $ipl)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// range based
|
||||
$maskocts = explode('.', $testRange);
|
||||
$ipocts = explode('.', $ipToTest);
|
||||
|
||||
// perform a range match
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
if (preg_match('|\[([0-9]+)\-([0-9]+)\]|', $maskocts[$i], $regs)) {
|
||||
if (($ipocts[$i] > $regs[2]) || ($ipocts[$i] < $regs[1])) {
|
||||
$result = false;
|
||||
} // end if
|
||||
} else {
|
||||
if ($maskocts[$i] <> $ipocts[$i]) {
|
||||
$result = false;
|
||||
} // end if
|
||||
} // end if/else
|
||||
} //end for
|
||||
|
||||
return $result;
|
||||
} // end of the "self::ipv4MaskTest()" function
|
||||
|
||||
/**
|
||||
* IPv6 matcher
|
||||
* CIDR section taken from https://stackoverflow.com/a/10086404
|
||||
* Modified for phpMyAdmin
|
||||
*
|
||||
* Matches:
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||||
* (exact)
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz]
|
||||
* (range, only at end of IP - no subnets)
|
||||
* xxxx:xxxx:xxxx:xxxx/nn
|
||||
* (CIDR)
|
||||
*
|
||||
* Does not match:
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz]
|
||||
* (range, partial octets not supported)
|
||||
*
|
||||
* @param string $test_range string of IP range to match
|
||||
* @param string $ip_to_test string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public static function ipv6MaskTest($test_range, $ip_to_test)
|
||||
{
|
||||
$result = true;
|
||||
|
||||
// convert to lowercase for easier comparison
|
||||
$test_range = mb_strtolower($test_range);
|
||||
$ip_to_test = mb_strtolower($ip_to_test);
|
||||
|
||||
$is_cidr = mb_strpos($test_range, '/') > -1;
|
||||
$is_range = mb_strpos($test_range, '[') > -1;
|
||||
$is_single = ! $is_cidr && ! $is_range;
|
||||
|
||||
$ip_hex = bin2hex(inet_pton($ip_to_test));
|
||||
|
||||
if ($is_single) {
|
||||
$range_hex = bin2hex(inet_pton($test_range));
|
||||
$result = hash_equals($ip_hex, $range_hex);
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($is_range) {
|
||||
// what range do we operate on?
|
||||
$range_match = array();
|
||||
$match = preg_match(
|
||||
'/\[([0-9a-f]+)\-([0-9a-f]+)\]/', $test_range, $range_match
|
||||
);
|
||||
if ($match) {
|
||||
$range_start = $range_match[1];
|
||||
$range_end = $range_match[2];
|
||||
|
||||
// get the first and last allowed IPs
|
||||
$first_ip = str_replace($range_match[0], $range_start, $test_range);
|
||||
$first_hex = bin2hex(inet_pton($first_ip));
|
||||
$last_ip = str_replace($range_match[0], $range_end, $test_range);
|
||||
$last_hex = bin2hex(inet_pton($last_ip));
|
||||
|
||||
// check if the IP to test is within the range
|
||||
$result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($is_cidr) {
|
||||
// Split in address and prefix length
|
||||
list($first_ip, $subnet) = explode('/', $test_range);
|
||||
|
||||
// Parse the address into a binary string
|
||||
$first_bin = inet_pton($first_ip);
|
||||
$first_hex = bin2hex($first_bin);
|
||||
|
||||
$flexbits = 128 - $subnet;
|
||||
|
||||
// Build the hexadecimal string of the last address
|
||||
$last_hex = $first_hex;
|
||||
|
||||
$pos = 31;
|
||||
while ($flexbits > 0) {
|
||||
// Get the character at this position
|
||||
$orig = mb_substr($last_hex, $pos, 1);
|
||||
|
||||
// Convert it to an integer
|
||||
$origval = hexdec($orig);
|
||||
|
||||
// OR it with (2^flexbits)-1, with flexbits limited to 4 at a time
|
||||
$newval = $origval | (pow(2, min(4, $flexbits)) - 1);
|
||||
|
||||
// Convert it back to a hexadecimal character
|
||||
$new = dechex($newval);
|
||||
|
||||
// And put that character back in the string
|
||||
$last_hex = substr_replace($last_hex, $new, $pos, 1);
|
||||
|
||||
// We processed one nibble, move to previous position
|
||||
$flexbits -= 4;
|
||||
--$pos;
|
||||
}
|
||||
|
||||
// check if the IP to test is within the range
|
||||
$result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
|
||||
}
|
||||
|
||||
return $result;
|
||||
} // end of the "self::ipv6MaskTest()" function
|
||||
|
||||
/**
|
||||
* Runs through IP Allow/Deny rules the use of it below for more information
|
||||
*
|
||||
* @param string $type 'allow' | 'deny' type of rule to match
|
||||
*
|
||||
* @return bool Whether rule has matched
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @see Core::getIp()
|
||||
*/
|
||||
public static function allowDeny($type)
|
||||
{
|
||||
global $cfg;
|
||||
|
||||
// Grabs true IP of the user and returns if it can't be found
|
||||
$remote_ip = Core::getIp();
|
||||
if (empty($remote_ip)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// copy username
|
||||
$username = $cfg['Server']['user'];
|
||||
|
||||
// copy rule database
|
||||
if (isset($cfg['Server']['AllowDeny']['rules'])) {
|
||||
$rules = $cfg['Server']['AllowDeny']['rules'];
|
||||
if (! is_array($rules)) {
|
||||
$rules = array();
|
||||
}
|
||||
} else {
|
||||
$rules = array();
|
||||
}
|
||||
|
||||
// lookup table for some name shortcuts
|
||||
$shortcuts = array(
|
||||
'all' => '0.0.0.0/0',
|
||||
'localhost' => '127.0.0.1/8'
|
||||
);
|
||||
|
||||
// Provide some useful shortcuts if server gives us address:
|
||||
if (Core::getenv('SERVER_ADDR')) {
|
||||
$shortcuts['localnetA'] = Core::getenv('SERVER_ADDR') . '/8';
|
||||
$shortcuts['localnetB'] = Core::getenv('SERVER_ADDR') . '/16';
|
||||
$shortcuts['localnetC'] = Core::getenv('SERVER_ADDR') . '/24';
|
||||
}
|
||||
|
||||
foreach ($rules as $rule) {
|
||||
// extract rule data
|
||||
$rule_data = explode(' ', $rule);
|
||||
|
||||
// check for rule type
|
||||
if ($rule_data[0] != $type) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check for username
|
||||
if (($rule_data[1] != '%') //wildcarded first
|
||||
&& (! hash_equals($rule_data[1], $username))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check if the config file has the full string with an extra
|
||||
// 'from' in it and if it does, just discard it
|
||||
if ($rule_data[2] == 'from') {
|
||||
$rule_data[2] = $rule_data[3];
|
||||
}
|
||||
|
||||
// Handle shortcuts with above array
|
||||
if (isset($shortcuts[$rule_data[2]])) {
|
||||
$rule_data[2] = $shortcuts[$rule_data[2]];
|
||||
}
|
||||
|
||||
// Add code for host lookups here
|
||||
// Excluded for the moment
|
||||
|
||||
// Do the actual matching now
|
||||
if (self::ipMaskTest($rule_data[2], $remote_ip)) {
|
||||
return true;
|
||||
}
|
||||
} // end while
|
||||
|
||||
return false;
|
||||
} // end of the "self::allowDeny()" function
|
||||
}
|
||||
39
libraries/classes/Mime.php
Normal file
39
libraries/classes/Mime.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* MIME detection code.
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
* @todo Maybe we could try to use fileinfo module if loaded
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\Mime class;
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class Mime
|
||||
{
|
||||
/**
|
||||
* Tries to detect MIME type of content.
|
||||
*
|
||||
* @param string &$test First few bytes of content to use for detection
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function detect(&$test)
|
||||
{
|
||||
$len = mb_strlen($test);
|
||||
if ($len >= 2 && $test[0] == chr(0xff) && $test[1] == chr(0xd8)) {
|
||||
return 'image/jpeg';
|
||||
}
|
||||
if ($len >= 3 && substr($test, 0, 3) == 'GIF') {
|
||||
return 'image/gif';
|
||||
}
|
||||
if ($len >= 4 && mb_substr($test, 0, 4) == "\x89PNG") {
|
||||
return 'image/png';
|
||||
}
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
}
|
||||
587
libraries/classes/MultSubmits.php
Normal file
587
libraries/classes/MultSubmits.php
Normal file
@ -0,0 +1,587 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* functions for multi submit forms
|
||||
*
|
||||
* @usedby mult_submits.inc.php
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\RelationCleanup;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Table;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\MultSubmits class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class MultSubmits
|
||||
{
|
||||
/**
|
||||
* Gets url params
|
||||
*
|
||||
* @param string $what mult submit type
|
||||
* @param bool $reload is reload
|
||||
* @param string $action action type
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
* @param array $selected selected rows(table,db)
|
||||
* @param array $views table views
|
||||
* @param string $original_sql_query original sql query
|
||||
* @param string $original_url_query original url query
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getUrlParams(
|
||||
$what, $reload, $action, $db, $table, $selected, $views,
|
||||
$original_sql_query, $original_url_query
|
||||
) {
|
||||
$_url_params = array(
|
||||
'query_type' => $what,
|
||||
'reload' => (! empty($reload) ? 1 : 0),
|
||||
);
|
||||
if (mb_strpos(' ' . $action, 'db_') == 1) {
|
||||
$_url_params['db']= $db;
|
||||
} elseif (mb_strpos(' ' . $action, 'tbl_') == 1
|
||||
|| $what == 'row_delete'
|
||||
) {
|
||||
$_url_params['db']= $db;
|
||||
$_url_params['table']= $table;
|
||||
}
|
||||
foreach ($selected as $sval) {
|
||||
if ($what == 'row_delete') {
|
||||
$_url_params['selected'][] = 'DELETE FROM '
|
||||
. Util::backquote($table)
|
||||
. ' WHERE ' . $sval . ' LIMIT 1;';
|
||||
} else {
|
||||
$_url_params['selected'][] = $sval;
|
||||
}
|
||||
}
|
||||
if ($what == 'drop_tbl' && !empty($views)) {
|
||||
foreach ($views as $current) {
|
||||
$_url_params['views'][] = $current;
|
||||
}
|
||||
}
|
||||
if ($what == 'row_delete') {
|
||||
$_url_params['original_sql_query'] = $original_sql_query;
|
||||
if (! empty($original_url_query)) {
|
||||
$_url_params['original_url_query'] = $original_url_query;
|
||||
}
|
||||
}
|
||||
|
||||
return $_url_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds or execute queries for multiple elements, depending on $query_type
|
||||
*
|
||||
* @param string $query_type query type
|
||||
* @param array $selected selected tables
|
||||
* @param string $db db name
|
||||
* @param string $table table name
|
||||
* @param array $views table views
|
||||
* @param string $primary table primary
|
||||
* @param string $from_prefix from prefix original
|
||||
* @param string $to_prefix to prefix original
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function buildOrExecuteQueryForMulti(
|
||||
$query_type, $selected, $db, $table, $views, $primary,
|
||||
$from_prefix, $to_prefix
|
||||
) {
|
||||
$rebuild_database_list = false;
|
||||
$reload = null;
|
||||
$a_query = null;
|
||||
$sql_query = '';
|
||||
$sql_query_views = null;
|
||||
// whether to run query after each pass
|
||||
$run_parts = false;
|
||||
// whether to execute the query at the end (to display results)
|
||||
$execute_query_later = false;
|
||||
$result = null;
|
||||
|
||||
if ($query_type == 'drop_tbl') {
|
||||
$sql_query_views = '';
|
||||
}
|
||||
|
||||
$selected_cnt = count($selected);
|
||||
$deletes = false;
|
||||
$copy_tbl =false;
|
||||
|
||||
for ($i = 0; $i < $selected_cnt; $i++) {
|
||||
switch ($query_type) {
|
||||
case 'row_delete':
|
||||
$deletes = true;
|
||||
$a_query = $selected[$i];
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'drop_db':
|
||||
RelationCleanup::database($selected[$i]);
|
||||
$a_query = 'DROP DATABASE '
|
||||
. Util::backquote($selected[$i]);
|
||||
$reload = 1;
|
||||
$run_parts = true;
|
||||
$rebuild_database_list = true;
|
||||
break;
|
||||
|
||||
case 'drop_tbl':
|
||||
RelationCleanup::table($db, $selected[$i]);
|
||||
$current = $selected[$i];
|
||||
if (!empty($views) && in_array($current, $views)) {
|
||||
$sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ')
|
||||
. Util::backquote($current);
|
||||
} else {
|
||||
$sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ')
|
||||
. Util::backquote($current);
|
||||
}
|
||||
$reload = 1;
|
||||
break;
|
||||
|
||||
case 'check_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'optimize_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'analyze_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'checksum_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'CHECKSUM TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'repair_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'empty_tbl':
|
||||
$deletes = true;
|
||||
$a_query = 'TRUNCATE ';
|
||||
$a_query .= Util::backquote($selected[$i]);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'drop_fld':
|
||||
RelationCleanup::column($db, $table, $selected[$i]);
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
: ',')
|
||||
. ' DROP ' . Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ';' : '');
|
||||
break;
|
||||
|
||||
case 'primary_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. (empty($primary)
|
||||
? ''
|
||||
: ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'index_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD INDEX( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'unique_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD UNIQUE( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'spatial_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD SPATIAL( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'fulltext_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD FULLTEXT( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'add_prefix_tbl':
|
||||
$newtablename = $_POST['add_prefix'] . $selected[$i];
|
||||
// ADD PREFIX TO TABLE NAME
|
||||
$a_query = 'ALTER TABLE '
|
||||
. Util::backquote($selected[$i])
|
||||
. ' RENAME '
|
||||
. Util::backquote($newtablename);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'replace_prefix_tbl':
|
||||
$current = $selected[$i];
|
||||
$subFromPrefix = mb_substr(
|
||||
$current,
|
||||
0,
|
||||
mb_strlen($from_prefix)
|
||||
);
|
||||
if ($subFromPrefix == $from_prefix) {
|
||||
$newtablename = $to_prefix
|
||||
. mb_substr(
|
||||
$current,
|
||||
mb_strlen($from_prefix)
|
||||
);
|
||||
} else {
|
||||
$newtablename = $current;
|
||||
}
|
||||
// CHANGE PREFIX PATTERN
|
||||
$a_query = 'ALTER TABLE '
|
||||
. Util::backquote($selected[$i])
|
||||
. ' RENAME '
|
||||
. Util::backquote($newtablename);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'copy_tbl_change_prefix':
|
||||
$run_parts = true;
|
||||
$copy_tbl = true;
|
||||
|
||||
$current = $selected[$i];
|
||||
$newtablename = $to_prefix .
|
||||
mb_substr($current, mb_strlen($from_prefix));
|
||||
|
||||
// COPY TABLE AND CHANGE PREFIX PATTERN
|
||||
Table::moveCopy(
|
||||
$db, $current, $db, $newtablename,
|
||||
'data', false, 'one_table'
|
||||
);
|
||||
break;
|
||||
|
||||
case 'copy_tbl':
|
||||
$run_parts = true;
|
||||
$copy_tbl = true;
|
||||
Table::moveCopy($db, $selected[$i], $_POST['target_db'], $selected[$i], $_POST['what'], false, 'one_table');
|
||||
if (isset($_POST['adjust_privileges']) && !empty($_POST['adjust_privileges'])) {
|
||||
Operations::adjustPrivilegesCopyTable($db, $selected[$i], $_POST['target_db'], $selected[$i]);
|
||||
}
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
// All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
|
||||
// statements will be run at once below
|
||||
if ($run_parts && !$copy_tbl) {
|
||||
$sql_query .= $a_query . ';' . "\n";
|
||||
if ($query_type != 'drop_db') {
|
||||
$GLOBALS['dbi']->selectDb($db);
|
||||
}
|
||||
$result = $GLOBALS['dbi']->query($a_query);
|
||||
|
||||
if ($query_type == 'drop_db') {
|
||||
Transformations::clear($selected[$i]);
|
||||
} elseif ($query_type == 'drop_tbl') {
|
||||
Transformations::clear($db, $selected[$i]);
|
||||
} else if ($query_type == 'drop_fld') {
|
||||
Transformations::clear($db, $table, $selected[$i]);
|
||||
}
|
||||
} // end if
|
||||
} // end for
|
||||
|
||||
if ($deletes && ! empty($_REQUEST['pos'])) {
|
||||
$_REQUEST['pos'] = Sql::calculatePosForLastPage(
|
||||
$db, $table, isset($_REQUEST['pos']) ? $_REQUEST['pos'] : null
|
||||
);
|
||||
}
|
||||
|
||||
return array(
|
||||
$result, $rebuild_database_list, $reload,
|
||||
$run_parts, $execute_query_later, $sql_query, $sql_query_views
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for copy tables form
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getHtmlForCopyMultipleTables($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$databases_list = $GLOBALS['dblist']->databases;
|
||||
foreach ($databases_list as $key => $db_name)
|
||||
if ($db_name == $GLOBALS['db']){
|
||||
$databases_list->offsetUnset($key);
|
||||
break;
|
||||
}
|
||||
$html .= '<strong><label for="db_name_dropdown">' . __('Database') . ':</label></strong>';
|
||||
$html .= '<select id="db_name_dropdown" class="halfWidth" name="target_db" >'
|
||||
. $databases_list->getHtmlOptions(true, false)
|
||||
. '</select>';
|
||||
$html .= '<br><br>';
|
||||
$html .= '<strong><label>' . __('Options') . ':</label></strong><br>';
|
||||
$html .= '<input type="radio" id ="what_structure" value="structure" name="what"/>';
|
||||
$html .= '<label for="what_structure">' . __('Structure only') . '</label><br>';
|
||||
$html .= '<input type="radio" id ="what_data" value="data" name="what" checked="checked"/>';
|
||||
$html .= '<label for="what_data">' . __('Structure and data') . '</label><br>';
|
||||
$html .= '<input type="radio" id ="what_dataonly" value="dataonly" name="what"/>';
|
||||
$html .= '<label for="what_dataonly">' . __('Data only') . '</label><br><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_drop" value="1" name="drop_if_exists"/>';
|
||||
$html .= '<label for="checkbox_drop">' . __('Add DROP TABLE') . '</label><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_auto_increment_cp" value="1" name="sql_auto_increment"/>';
|
||||
$html .= '<label for="checkbox_auto_increment_cp">' . __('Add AUTO INCREMENT value') . '</label><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_constraints" value="1" name="sql_auto_increment" checked="checked"/>';
|
||||
$html .= '<label for="checkbox_constraints">' . __('Add constraints') . '</label><br><br>';
|
||||
$html .= '<input name="adjust_privileges" value="1" id="checkbox_adjust_privileges" checked="checked" type="checkbox"/>';
|
||||
$html .= '<label for="checkbox_adjust_privileges">' . __('Adjust privileges') . '<a href="./doc/html/faq.html#faq6-39" target="documentation"><img src="themes/dot.gif" title="Documentation" alt="Documentation" class="icon ic_b_help"></a></label>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for replace_prefix_tbl or copy_tbl_change_prefix
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getHtmlForReplacePrefixTable($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$html .= '<table>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('From') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="from_prefix" id="initialPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('To') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="to_prefix" id="newPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '</table>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for add_prefix_tbl
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getHtmlForAddPrefixTable($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$html .= '<table>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('Add prefix') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="add_prefix" id="txtPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '<tr>';
|
||||
$html .= '</table>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for other mult_submits actions
|
||||
*
|
||||
* @param string $what mult_submit type
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
* @param string $full_query full sql query string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getHtmlForOtherActions($what, $action, $_url_params, $full_query)
|
||||
{
|
||||
$html = '<form action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class="confirmation">';
|
||||
$html .= '<legend>';
|
||||
if ($what == 'drop_db') {
|
||||
$html .= __('You are about to DESTROY a complete database!') . ' ';
|
||||
}
|
||||
$html .= __('Do you really want to execute the following query?');
|
||||
$html .= '</legend>';
|
||||
$html .= '<code>' . $full_query . '</code>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<fieldset class="tblFooters">';
|
||||
// Display option to disable foreign key checks while dropping tables
|
||||
if ($what === 'drop_tbl' || $what === 'empty_tbl' || $what === 'row_delete') {
|
||||
$html .= '<div id="foreignkeychk">';
|
||||
$html .= Util::getFKCheckbox();
|
||||
$html .= '</div>';
|
||||
}
|
||||
$html .= '<input id="buttonYes" type="submit" name="mult_btn" value="'
|
||||
. __('Yes') . '" />';
|
||||
$html .= '<input id="buttonNo" type="submit" name="mult_btn" value="'
|
||||
. __('No') . '" />';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get query string from Selected
|
||||
*
|
||||
* @param string $what mult_submit type
|
||||
* @param string $table table name
|
||||
* @param array $selected the selected columns
|
||||
* @param array $views table views
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getQueryFromSelected($what, $table, $selected, $views)
|
||||
{
|
||||
$reload = false;
|
||||
$full_query_views = null;
|
||||
$full_query = '';
|
||||
|
||||
if ($what == 'drop_tbl') {
|
||||
$full_query_views = '';
|
||||
}
|
||||
|
||||
$selected_cnt = count($selected);
|
||||
$i = 0;
|
||||
foreach ($selected as $sval) {
|
||||
switch ($what) {
|
||||
case 'row_delete':
|
||||
$full_query .= 'DELETE FROM '
|
||||
. Util::backquote(htmlspecialchars($table))
|
||||
// Do not append a "LIMIT 1" clause here
|
||||
// (it's not binlog friendly).
|
||||
// We don't need the clause because the calling panel permits
|
||||
// this feature only when there is a unique index.
|
||||
. ' WHERE ' . htmlspecialchars($sval)
|
||||
. ';<br />';
|
||||
break;
|
||||
case 'drop_db':
|
||||
$full_query .= 'DROP DATABASE '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ';<br />';
|
||||
$reload = true;
|
||||
break;
|
||||
|
||||
case 'drop_tbl':
|
||||
$current = $sval;
|
||||
if (!empty($views) && in_array($current, $views)) {
|
||||
$full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ')
|
||||
. Util::backquote(htmlspecialchars($current));
|
||||
} else {
|
||||
$full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ')
|
||||
. Util::backquote(htmlspecialchars($current));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'empty_tbl':
|
||||
$full_query .= 'TRUNCATE ';
|
||||
$full_query .= Util::backquote(htmlspecialchars($sval))
|
||||
. ';<br />';
|
||||
break;
|
||||
|
||||
case 'primary_fld':
|
||||
if ($full_query == '') {
|
||||
$full_query .= 'ALTER TABLE '
|
||||
. Util::backquote(htmlspecialchars($table))
|
||||
. '<br /> DROP PRIMARY KEY,'
|
||||
. '<br /> ADD PRIMARY KEY('
|
||||
. '<br /> '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
} else {
|
||||
$full_query .= '<br /> '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
}
|
||||
if ($i == $selected_cnt-1) {
|
||||
$full_query = preg_replace('@,$@', ');<br />', $full_query);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'drop_fld':
|
||||
if ($full_query == '') {
|
||||
$full_query .= 'ALTER TABLE '
|
||||
. Util::backquote(htmlspecialchars($table));
|
||||
}
|
||||
$full_query .= '<br /> DROP '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
if ($i == $selected_cnt - 1) {
|
||||
$full_query = preg_replace('@,$@', ';<br />', $full_query);
|
||||
}
|
||||
break;
|
||||
} // end switch
|
||||
$i++;
|
||||
}
|
||||
|
||||
if ($what == 'drop_tbl') {
|
||||
if (!empty($full_query)) {
|
||||
$full_query .= ';<br />' . "\n";
|
||||
}
|
||||
if (!empty($full_query_views)) {
|
||||
$full_query .= $full_query_views . ';<br />' . "\n";
|
||||
}
|
||||
unset($full_query_views);
|
||||
}
|
||||
|
||||
$full_query_views = isset($full_query_views)? $full_query_views : null;
|
||||
|
||||
return array($full_query, $reload, $full_query_views);
|
||||
}
|
||||
}
|
||||
@ -8,6 +8,7 @@
|
||||
namespace PhpMyAdmin\Navigation;
|
||||
|
||||
use PhpMyAdmin\Sanitize;
|
||||
use PhpMyAdmin\Server\Select;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
@ -240,10 +241,9 @@ class NavigationHeader
|
||||
if ($GLOBALS['cfg']['NavigationDisplayServers']
|
||||
&& count($GLOBALS['cfg']['Servers']) > 1
|
||||
) {
|
||||
include_once './libraries/select_server.lib.php';
|
||||
$retval .= '<!-- SERVER CHOICE START -->';
|
||||
$retval .= '<div id="serverChoice">';
|
||||
$retval .= PMA_selectServer(true, true);
|
||||
$retval .= Select::render(true, true);
|
||||
$retval .= '</div>';
|
||||
$retval .= '<!-- SERVER CHOICE END -->';
|
||||
}
|
||||
|
||||
78
libraries/classes/ParseAnalyze.php
Normal file
78
libraries/classes/ParseAnalyze.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Parse and analyse a SQL query
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\SqlParser\Utils\Query;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\ParseAnalyze class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class ParseAnalyze
|
||||
{
|
||||
/**
|
||||
* Calls the parser on a query
|
||||
*
|
||||
* @param string $sql_query the query to parse
|
||||
* @param string $db the current database
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public static function sqlQuery($sql_query, $db)
|
||||
{
|
||||
// @todo: move to returned results (also in all the calling chain)
|
||||
$GLOBALS['unparsed_sql'] = $sql_query;
|
||||
|
||||
// Get details about the SQL query.
|
||||
$analyzed_sql_results = Query::getAll($sql_query);
|
||||
|
||||
extract($analyzed_sql_results);
|
||||
$table = '';
|
||||
|
||||
// If the targeted table (and database) are different than the ones that is
|
||||
// currently browsed, edit `$db` and `$table` to match them so other elements
|
||||
// (page headers, links, navigation panel) can be updated properly.
|
||||
if (!empty($analyzed_sql_results['select_tables'])) {
|
||||
|
||||
// Previous table and database name is stored to check if it changed.
|
||||
$prev_db = $db;
|
||||
|
||||
if (count($analyzed_sql_results['select_tables']) > 1) {
|
||||
|
||||
/**
|
||||
* @todo if there are more than one table name in the Select:
|
||||
* - do not extract the first table name
|
||||
* - do not show a table name in the page header
|
||||
* - do not display the sub-pages links)
|
||||
*/
|
||||
$table = '';
|
||||
} else {
|
||||
$table = $analyzed_sql_results['select_tables'][0][0];
|
||||
if (!empty($analyzed_sql_results['select_tables'][0][1])) {
|
||||
$db = $analyzed_sql_results['select_tables'][0][1];
|
||||
}
|
||||
}
|
||||
// There is no point checking if a reload is required if we already decided
|
||||
// to reload. Also, no reload is required for AJAX requests.
|
||||
$response = Response::getInstance();
|
||||
if (empty($reload) && ! $response->isAjax()) {
|
||||
// NOTE: Database names are case-insensitive.
|
||||
$reload = strcasecmp($db, $prev_db) != 0;
|
||||
}
|
||||
|
||||
// Updating the array.
|
||||
$analyzed_sql_results['reload'] = $reload;
|
||||
}
|
||||
|
||||
return array($analyzed_sql_results, $db, $table);
|
||||
}
|
||||
}
|
||||
584
libraries/classes/Plugins.php
Normal file
584
libraries/classes/Plugins.php
Normal file
@ -0,0 +1,584 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Generic plugin interface.
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Properties\Options\Groups\OptionsPropertySubgroup;
|
||||
use PhpMyAdmin\Properties\Options\OptionsPropertyItem;
|
||||
use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
|
||||
use PhpMyAdmin\Properties\Plugins\PluginPropertyItem;
|
||||
use PhpMyAdmin\Properties\Plugins\SchemaPluginProperties;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\Plugins class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class Plugins
|
||||
{
|
||||
/**
|
||||
* Includes and instantiates the specified plugin type for a certain format
|
||||
*
|
||||
* @param string $plugin_type the type of the plugin (import, export, etc)
|
||||
* @param string $plugin_format the format of the plugin (sql, xml, et )
|
||||
* @param string $plugins_dir directory with plugins
|
||||
* @param mixed $plugin_param parameter to plugin by which they can
|
||||
* decide whether they can work
|
||||
*
|
||||
* @return object|null new plugin instance
|
||||
*/
|
||||
public static function getPlugin(
|
||||
$plugin_type,
|
||||
$plugin_format,
|
||||
$plugins_dir,
|
||||
$plugin_param = false
|
||||
) {
|
||||
$GLOBALS['plugin_param'] = $plugin_param;
|
||||
$class_name = mb_strtoupper($plugin_type[0])
|
||||
. mb_strtolower(mb_substr($plugin_type, 1))
|
||||
. mb_strtoupper($plugin_format[0])
|
||||
. mb_strtolower(mb_substr($plugin_format, 1));
|
||||
$file = $class_name . ".php";
|
||||
if (is_file($plugins_dir . $file)) {
|
||||
//include_once $plugins_dir . $file;
|
||||
$fqnClass = 'PhpMyAdmin\\' . str_replace('/', '\\', mb_substr($plugins_dir, 18)) . $class_name;
|
||||
// check if class exists, could be caused by skip_import
|
||||
if (class_exists($fqnClass)) {
|
||||
return new $fqnClass;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads all plugin information from directory $plugins_dir
|
||||
*
|
||||
* @param string $plugin_type the type of the plugin (import, export, etc)
|
||||
* @param string $plugins_dir directory with plugins
|
||||
* @param mixed $plugin_param parameter to plugin by which they can
|
||||
* decide whether they can work
|
||||
*
|
||||
* @return array list of plugin instances
|
||||
*/
|
||||
public static function getPlugins($plugin_type, $plugins_dir, $plugin_param)
|
||||
{
|
||||
$GLOBALS['plugin_param'] = $plugin_param;
|
||||
/* Scan for plugins */
|
||||
$plugin_list = array();
|
||||
if (!($handle = @opendir($plugins_dir))) {
|
||||
return $plugin_list;
|
||||
}
|
||||
|
||||
$namespace = 'PhpMyAdmin\\' . str_replace('/', '\\', mb_substr($plugins_dir, 18));
|
||||
$class_type = mb_strtoupper($plugin_type[0], 'UTF-8')
|
||||
. mb_strtolower(mb_substr($plugin_type, 1), 'UTF-8');
|
||||
|
||||
$prefix_class_name = $namespace . $class_type;
|
||||
|
||||
while ($file = @readdir($handle)) {
|
||||
// In some situations, Mac OS creates a new file for each file
|
||||
// (for example ._csv.php) so the following regexp
|
||||
// matches a file which does not start with a dot but ends
|
||||
// with ".php"
|
||||
if (is_file($plugins_dir . $file)
|
||||
&& preg_match(
|
||||
'@^' . $class_type . '([^\.]+)\.php$@i',
|
||||
$file,
|
||||
$matches
|
||||
)
|
||||
) {
|
||||
$GLOBALS['skip_import'] = false;
|
||||
include_once $plugins_dir . $file;
|
||||
if (! $GLOBALS['skip_import']) {
|
||||
$class_name = $prefix_class_name . $matches[1];
|
||||
$plugin = new $class_name;
|
||||
if (null !== $plugin->getProperties()) {
|
||||
$plugin_list[] = $plugin;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
usort($plugin_list, function($cmp_name_1, $cmp_name_2) {
|
||||
return strcasecmp(
|
||||
$cmp_name_1->getProperties()->getText(),
|
||||
$cmp_name_2->getProperties()->getText()
|
||||
);
|
||||
});
|
||||
return $plugin_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns locale string for $name or $name if no locale is found
|
||||
*
|
||||
* @param string $name for local string
|
||||
*
|
||||
* @return string locale string for $name
|
||||
*/
|
||||
public static function getString($name)
|
||||
{
|
||||
return isset($GLOBALS[$name]) ? $GLOBALS[$name] : $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html input tag option 'checked' if plugin $opt
|
||||
* should be set by config or request
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $opt name of option
|
||||
*
|
||||
* @return string html input tag option 'checked'
|
||||
*/
|
||||
public static function checkboxCheck($section, $opt)
|
||||
{
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
if (isset($_GET[$opt])
|
||||
|| ! isset($_GET['repopulate'])
|
||||
&& ((! empty($GLOBALS['timeout_passed']) && isset($_REQUEST[$opt]))
|
||||
|| ! empty($GLOBALS['cfg'][$section][$opt]))
|
||||
) {
|
||||
return ' checked="checked"';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns default value for option $opt
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $opt name of option
|
||||
*
|
||||
* @return string default value for option $opt
|
||||
*/
|
||||
public static function getDefault($section, $opt)
|
||||
{
|
||||
if (isset($_GET[$opt])) {
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
return htmlspecialchars($_GET[$opt]);
|
||||
}
|
||||
|
||||
if (isset($GLOBALS['timeout_passed'])
|
||||
&& $GLOBALS['timeout_passed']
|
||||
&& isset($_REQUEST[$opt])
|
||||
) {
|
||||
return htmlspecialchars($_REQUEST[$opt]);
|
||||
}
|
||||
|
||||
if (!isset($GLOBALS['cfg'][$section][$opt])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$matches = array();
|
||||
/* Possibly replace localised texts */
|
||||
if (!preg_match_all(
|
||||
'/(str[A-Z][A-Za-z0-9]*)/',
|
||||
$GLOBALS['cfg'][$section][$opt],
|
||||
$matches
|
||||
)) {
|
||||
return htmlspecialchars($GLOBALS['cfg'][$section][$opt]);
|
||||
}
|
||||
|
||||
$val = $GLOBALS['cfg'][$section][$opt];
|
||||
foreach ($matches[0] as $match) {
|
||||
if (isset($GLOBALS[$match])) {
|
||||
$val = str_replace($match, $GLOBALS[$match], $val);
|
||||
}
|
||||
}
|
||||
return htmlspecialchars($val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html select form element for plugin choice
|
||||
* and hidden fields denoting whether each plugin must be exported as a file
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $name name of select element
|
||||
* @param array &$list array with plugin instances
|
||||
* @param string $cfgname name of config value, if none same as $name
|
||||
*
|
||||
* @return string html select tag
|
||||
*/
|
||||
public static function getChoice($section, $name, &$list, $cfgname = null)
|
||||
{
|
||||
if (! isset($cfgname)) {
|
||||
$cfgname = $name;
|
||||
}
|
||||
$ret = '<select id="plugins" name="' . $name . '">';
|
||||
$default = self::getDefault($section, $cfgname);
|
||||
$hidden = null;
|
||||
foreach ($list as $plugin) {
|
||||
$elem = explode('\\', get_class($plugin));
|
||||
$plugin_name = array_pop($elem);
|
||||
unset($elem);
|
||||
$plugin_name = mb_strtolower(
|
||||
mb_substr(
|
||||
$plugin_name,
|
||||
mb_strlen($section)
|
||||
)
|
||||
);
|
||||
$ret .= '<option';
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
if (isset($_GET[$name])
|
||||
&& $plugin_name == $_GET[$name]
|
||||
|| ! isset($_GET[$name])
|
||||
&& $plugin_name == $default
|
||||
) {
|
||||
$ret .= ' selected="selected"';
|
||||
}
|
||||
|
||||
/** @var PluginPropertyItem $properties */
|
||||
$properties = $plugin->getProperties();
|
||||
$text = null;
|
||||
if ($properties != null) {
|
||||
$text = $properties->getText();
|
||||
}
|
||||
$ret .= ' value="' . $plugin_name . '">'
|
||||
. self::getString($text)
|
||||
. '</option>' . "\n";
|
||||
|
||||
// Whether each plugin has to be saved as a file
|
||||
$hidden .= '<input type="hidden" id="force_file_' . $plugin_name
|
||||
. '" value="';
|
||||
/** @var ExportPluginProperties|SchemaPluginProperties $properties */
|
||||
$properties = $plugin->getProperties();
|
||||
if (! strcmp($section, 'Import')
|
||||
|| ($properties != null && $properties->getForceFile() != null)
|
||||
) {
|
||||
$hidden .= 'true';
|
||||
} else {
|
||||
$hidden .= 'false';
|
||||
}
|
||||
$hidden .= '" />' . "\n";
|
||||
}
|
||||
$ret .= '</select>' . "\n" . $hidden;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns single option in a list element
|
||||
*
|
||||
* @param string $section name of config section in $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $plugin_name unique plugin name
|
||||
* @param array|\PhpMyAdmin\Properties\PropertyItem &$propertyGroup options property main group instance
|
||||
* @param boolean $is_subgroup if this group is a subgroup
|
||||
*
|
||||
* @return string table row with option
|
||||
*/
|
||||
public static function getOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
&$propertyGroup,
|
||||
$is_subgroup = false
|
||||
) {
|
||||
$ret = "\n";
|
||||
|
||||
if (! $is_subgroup) {
|
||||
// for subgroup headers
|
||||
if (mb_strpos(get_class($propertyGroup), "PropertyItem")) {
|
||||
$properties = array($propertyGroup);
|
||||
} else {
|
||||
// for main groups
|
||||
$ret .= '<div class="export_sub_options" id="' . $plugin_name . '_'
|
||||
. $propertyGroup->getName() . '">';
|
||||
|
||||
if (method_exists($propertyGroup, 'getText')) {
|
||||
$text = $propertyGroup->getText();
|
||||
}
|
||||
|
||||
if ($text != null) {
|
||||
$ret .= '<h4>' . self::getString($text) . '</h4>';
|
||||
}
|
||||
$ret .= '<ul>';
|
||||
}
|
||||
}
|
||||
|
||||
if (! isset($properties)) {
|
||||
$not_subgroup_header = true;
|
||||
if (method_exists($propertyGroup, 'getProperties')) {
|
||||
$properties = $propertyGroup->getProperties();
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($properties)) {
|
||||
/** @var OptionsPropertySubgroup $propertyItem */
|
||||
foreach ($properties as $propertyItem) {
|
||||
$property_class = get_class($propertyItem);
|
||||
// if the property is a subgroup, we deal with it recursively
|
||||
if (mb_strpos($property_class, "Subgroup")) {
|
||||
// for subgroups
|
||||
// each subgroup can have a header, which may also be a form element
|
||||
/** @var OptionsPropertyItem $subgroup_header */
|
||||
$subgroup_header = $propertyItem->getSubgroupHeader();
|
||||
if (isset($subgroup_header)) {
|
||||
$ret .= self::getOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$subgroup_header
|
||||
);
|
||||
}
|
||||
|
||||
$ret .= '<li class="subgroup"><ul';
|
||||
if (isset($subgroup_header)) {
|
||||
$ret .= ' id="ul_' . $subgroup_header->getName() . '">';
|
||||
} else {
|
||||
$ret .= '>';
|
||||
}
|
||||
|
||||
$ret .= self::getOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$propertyItem,
|
||||
true
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// single property item
|
||||
$ret .= self::getHtmlForProperty(
|
||||
$section, $plugin_name, $propertyItem
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($is_subgroup) {
|
||||
// end subgroup
|
||||
$ret .= '</ul></li>';
|
||||
} else {
|
||||
// end main group
|
||||
if (! empty($not_subgroup_header)) {
|
||||
$ret .= '</ul></div>';
|
||||
}
|
||||
}
|
||||
|
||||
if (method_exists($propertyGroup, "getDoc")) {
|
||||
$doc = $propertyGroup->getDoc();
|
||||
if ($doc != null) {
|
||||
if (count($doc) == 3) {
|
||||
$ret .= PhpMyAdmin\Util::showMySQLDocu(
|
||||
$doc[1],
|
||||
false,
|
||||
$doc[2]
|
||||
);
|
||||
} elseif (count($doc) == 1) {
|
||||
$ret .= PhpMyAdmin\Util::showDocu('faq', $doc[0]);
|
||||
} else {
|
||||
$ret .= PhpMyAdmin\Util::showMySQLDocu(
|
||||
$doc[1]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the list element after $doc link is displayed
|
||||
if (isset($property_class)) {
|
||||
if ($property_class == 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem'
|
||||
) {
|
||||
$ret .= '</li>';
|
||||
}
|
||||
}
|
||||
$ret .= "\n";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get HTML for properties items
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $plugin_name unique plugin name
|
||||
* @param OptionsPropertyItem $propertyItem Property item
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getHtmlForProperty(
|
||||
$section, $plugin_name, $propertyItem
|
||||
) {
|
||||
$ret = null;
|
||||
$property_class = get_class($propertyItem);
|
||||
switch ($property_class) {
|
||||
case 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<input type="checkbox" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="something" id="checkbox_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' '
|
||||
. self::checkboxCheck(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
|
||||
if ($propertyItem->getForce() != null) {
|
||||
// Same code is also few lines lower, update both if needed
|
||||
$ret .= ' onclick="if (!this.checked && '
|
||||
. '(!document.getElementById(\'checkbox_' . $plugin_name
|
||||
. '_' . $propertyItem->getForce() . '\') '
|
||||
. '|| !document.getElementById(\'checkbox_'
|
||||
. $plugin_name . '_' . $propertyItem->getForce()
|
||||
. '\').checked)) '
|
||||
. 'return false; else return true;"';
|
||||
}
|
||||
$ret .= ' />';
|
||||
$ret .= '<label for="checkbox_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '">'
|
||||
. self::getString($propertyItem->getText()) . '</label>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem':
|
||||
echo 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem':
|
||||
$ret .= '<li><input type="hidden" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="' . self::getDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
)
|
||||
. '"' . ' /></li>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<p>' . self::getString($propertyItem->getText()) . '</p>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\RadioPropertyItem':
|
||||
$default = self::getDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
foreach ($propertyItem->getValues() as $key => $val) {
|
||||
$ret .= '<li><input type="radio" name="' . $plugin_name
|
||||
. '_' . $propertyItem->getName() . '" value="' . $key
|
||||
. '" id="radio_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '_' . $key . '"';
|
||||
if ($key == $default) {
|
||||
$ret .= ' checked="checked"';
|
||||
}
|
||||
$ret .= ' />' . '<label for="radio_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '_' . $key . '">'
|
||||
. self::getString($val) . '</label></li>';
|
||||
}
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<label for="select_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '" class="desc">'
|
||||
. self::getString($propertyItem->getText()) . '</label>';
|
||||
$ret .= '<select name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' id="select_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '">';
|
||||
$default = self::getDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
foreach ($propertyItem->getValues() as $key => $val) {
|
||||
$ret .= '<option value="' . $key . '"';
|
||||
if ($key == $default) {
|
||||
$ret .= ' selected="selected"';
|
||||
}
|
||||
$ret .= '>' . self::getString($val) . '</option>';
|
||||
}
|
||||
$ret .= '</select>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem':
|
||||
case 'PhpMyAdmin\Properties\Options\Items\NumberPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<label for="text_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '" class="desc">'
|
||||
. self::getString($propertyItem->getText()) . '</label>';
|
||||
$ret .= '<input type="text" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="' . self::getDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
) . '"'
|
||||
. ' id="text_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ($propertyItem->getSize() != null
|
||||
? ' size="' . $propertyItem->getSize() . '"'
|
||||
: '')
|
||||
. ($propertyItem->getLen() != null
|
||||
? ' maxlength="' . $propertyItem->getLen() . '"'
|
||||
: '')
|
||||
. ' />';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html div with editable options for plugin
|
||||
*
|
||||
* @param string $section name of config section in $GLOBALS['cfg'][$section]
|
||||
* @param array &$list array with plugin instances
|
||||
*
|
||||
* @return string html fieldset with plugin options
|
||||
*/
|
||||
public static function getOptions($section, &$list)
|
||||
{
|
||||
$ret = '';
|
||||
// Options for plugins that support them
|
||||
foreach ($list as $plugin) {
|
||||
$properties = $plugin->getProperties();
|
||||
if ($properties != null) {
|
||||
$text = $properties->getText();
|
||||
$options = $properties->getOptions();
|
||||
}
|
||||
|
||||
$elem = explode('\\', get_class($plugin));
|
||||
$plugin_name = array_pop($elem);
|
||||
unset($elem);
|
||||
$plugin_name = mb_strtolower(
|
||||
mb_substr(
|
||||
$plugin_name,
|
||||
mb_strlen($section)
|
||||
)
|
||||
);
|
||||
|
||||
$ret .= '<div id="' . $plugin_name
|
||||
. '_options" class="format_specific_options">';
|
||||
$ret .= '<h3>' . self::getString($text) . '</h3>';
|
||||
|
||||
$no_options = true;
|
||||
if (! is_null($options) && count($options) > 0) {
|
||||
foreach ($options->getProperties()
|
||||
as $propertyMainGroup
|
||||
) {
|
||||
// check for hidden properties
|
||||
$no_options = true;
|
||||
foreach ($propertyMainGroup->getProperties() as $propertyItem) {
|
||||
if (strcmp('PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem', get_class($propertyItem))) {
|
||||
$no_options = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$ret .= self::getOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$propertyMainGroup
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($no_options) {
|
||||
$ret .= '<p>' . __('This format has no options') . '</p>';
|
||||
}
|
||||
$ret .= '</div>';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
@ -10,6 +10,7 @@ namespace PhpMyAdmin\Plugins\Auth;
|
||||
|
||||
use PhpMyAdmin\Plugins\AuthenticationPlugin;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Server\Select;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
@ -161,10 +162,9 @@ class AuthenticationConfig extends AuthenticationPlugin
|
||||
</tr>' , "\n";
|
||||
if (count($GLOBALS['cfg']['Servers']) > 1) {
|
||||
// offer a chance to login to other servers if the current one failed
|
||||
include_once './libraries/select_server.lib.php';
|
||||
echo '<tr>' , "\n";
|
||||
echo ' <td>' , "\n";
|
||||
echo PMA_selectServer(true, true);
|
||||
echo Select::render(true, true);
|
||||
echo ' </td>' , "\n";
|
||||
echo '</tr>' , "\n";
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ use PhpMyAdmin\LanguageManager;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Plugins\AuthenticationPlugin;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Server\Select;
|
||||
use PhpMyAdmin\Session;
|
||||
use PhpMyAdmin\Util;
|
||||
use PhpMyAdmin\Url;
|
||||
@ -218,10 +219,7 @@ class AuthenticationCookie extends AuthenticationPlugin
|
||||
, 'elements[\'pma_servername\'].value = \'\'" ';
|
||||
}
|
||||
echo '>';
|
||||
|
||||
include_once './libraries/select_server.lib.php';
|
||||
echo PMA_selectServer(false, false);
|
||||
|
||||
echo Select::render(false, false);
|
||||
echo '</select></div>';
|
||||
} else {
|
||||
echo ' <input type="hidden" name="server" value="'
|
||||
|
||||
@ -34,7 +34,7 @@ use PhpMyAdmin\Relation;
|
||||
class SvgRelationSchema extends ExportRelationSchema
|
||||
{
|
||||
/**
|
||||
* @var \PhpMyAdmin\Plugins\Schema\Dia\TableStatsDia[]|TableStatsEps[]|TableStatsPdf[]|TableStatsSvg[]
|
||||
* @var PhpMyAdmin\Plugins\Schema\Dia\TableStatsDia[]|TableStatsEps[]|TableStatsPdf[]|TableStatsSvg[]
|
||||
*/
|
||||
private $_tables = array();
|
||||
/** @var RelationStatsDia[] Relations */
|
||||
|
||||
@ -807,10 +807,10 @@ class Relation
|
||||
) {
|
||||
if ($isInformationSchema) {
|
||||
$relations_key = 'information_schema_relations';
|
||||
include_once './libraries/information_schema_relations.lib.php';
|
||||
include_once './libraries/information_schema_relations.inc.php';
|
||||
} else {
|
||||
$relations_key = 'mysql_relations';
|
||||
include_once './libraries/mysql_relations.lib.php';
|
||||
include_once './libraries/mysql_relations.inc.php';
|
||||
}
|
||||
if (isset($GLOBALS[$relations_key][$table])) {
|
||||
foreach ($GLOBALS[$relations_key][$table] as $field => $relations) {
|
||||
|
||||
367
libraries/classes/RelationCleanup.php
Normal file
367
libraries/classes/RelationCleanup.php
Normal file
@ -0,0 +1,367 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Set of functions used for cleaning up phpMyAdmin tables
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\RelationCleanup class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class RelationCleanup
|
||||
{
|
||||
/**
|
||||
* Cleanup column related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
* @param string $column column name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function column($db, $table, $column)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND column_name = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND display_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND master_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND foreign_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND foreign_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup table related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function table($db, $table)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['pdfwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_coords'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND foreign_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['navigationhiding'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND (table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' OR (item_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND item_type = \'table\'))';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup database related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function database($db)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['bookmarkwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['bookmark'])
|
||||
. ' WHERE dbase = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['pdfwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['pdf_pages'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_coords'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \''
|
||||
. $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['navigationhiding'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['savedsearcheswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['savedsearches'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['centralcolumnswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. '.' . Util::backquote($cfgRelation['central_columns'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup user related relation stuff
|
||||
*
|
||||
* @param string $username username
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function user($username)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['bookmarkwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['bookmark'])
|
||||
. " WHERE `user` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['historywork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['history'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['recentwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['recent'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['favoritework']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['favorite'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['userconfigwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['userconfig'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['menuswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['users'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['navigationhiding'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['savedsearcheswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['savedsearches'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['designersettingswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. Util::backquote($cfgRelation['db'])
|
||||
. "." . Util::backquote($cfgRelation['designer_settings'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,7 @@ use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Display\ChangePassword;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\RelationCleanup;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Url;
|
||||
@ -4042,7 +4043,7 @@ class Privileges
|
||||
$queries[] = 'DROP USER \''
|
||||
. $GLOBALS['dbi']->escapeString($this_user)
|
||||
. '\'@\'' . $GLOBALS['dbi']->escapeString($this_host) . '\';';
|
||||
PMA_relationsCleanupUser($this_user);
|
||||
RelationCleanup::user($this_user);
|
||||
|
||||
if (isset($_REQUEST['drop_users_db'])) {
|
||||
$queries[] = 'DROP DATABASE IF EXISTS '
|
||||
|
||||
125
libraries/classes/Server/Select.php
Normal file
125
libraries/classes/Server/Select.php
Normal file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Code for displaying server selection
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin\Server;
|
||||
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\Server\Select class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class Select
|
||||
{
|
||||
/**
|
||||
* Renders the server selection in list or selectbox form, or option tags only
|
||||
*
|
||||
* @param boolean $not_only_options whether to include form tags or not
|
||||
* @param boolean $omit_fieldset whether to omit fieldset tag or not
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function render($not_only_options, $omit_fieldset)
|
||||
{
|
||||
$retval = '';
|
||||
|
||||
// Show as list?
|
||||
if ($not_only_options) {
|
||||
$list = $GLOBALS['cfg']['DisplayServersList'];
|
||||
$not_only_options =! $list;
|
||||
} else {
|
||||
$list = false;
|
||||
}
|
||||
|
||||
if ($not_only_options) {
|
||||
$retval .= '<form method="post" action="'
|
||||
. Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabServer'], 'server'
|
||||
)
|
||||
. '" class="disableAjax">';
|
||||
|
||||
if (! $omit_fieldset) {
|
||||
$retval .= '<fieldset>';
|
||||
}
|
||||
|
||||
$retval .= Url::getHiddenFields(array());
|
||||
$retval .= '<label for="select_server">'
|
||||
. __('Current server:') . '</label> ';
|
||||
|
||||
$retval .= '<select name="server" id="select_server" class="autosubmit">';
|
||||
$retval .= '<option value="">(' . __('Servers') . ') ...</option>' . "\n";
|
||||
} elseif ($list) {
|
||||
$retval .= __('Current server:') . '<br />';
|
||||
$retval .= '<ul id="list_server">';
|
||||
}
|
||||
|
||||
foreach ($GLOBALS['cfg']['Servers'] as $key => $server) {
|
||||
if (empty($server['host'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($GLOBALS['server']) && (int) $GLOBALS['server'] === (int) $key) {
|
||||
$selected = 1;
|
||||
} else {
|
||||
$selected = 0;
|
||||
}
|
||||
if (!empty($server['verbose'])) {
|
||||
$label = $server['verbose'];
|
||||
} else {
|
||||
$label = $server['host'];
|
||||
if (!empty($server['port'])) {
|
||||
$label .= ':' . $server['port'];
|
||||
}
|
||||
}
|
||||
if (! empty($server['only_db'])) {
|
||||
if (! is_array($server['only_db'])) {
|
||||
$label .= ' - ' . $server['only_db'];
|
||||
// try to avoid displaying a too wide selector
|
||||
} elseif (count($server['only_db']) < 4) {
|
||||
$label .= ' - ' . implode(', ', $server['only_db']);
|
||||
}
|
||||
}
|
||||
if (!empty($server['user']) && $server['auth_type'] == 'config') {
|
||||
$label .= ' (' . $server['user'] . ')';
|
||||
}
|
||||
|
||||
if ($list) {
|
||||
$retval .= '<li>';
|
||||
if ($selected) {
|
||||
$retval .= '<strong>' . htmlspecialchars($label) . '</strong>';
|
||||
} else {
|
||||
|
||||
$retval .= '<a class="disableAjax item" href="'
|
||||
. Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabServer'], 'server'
|
||||
)
|
||||
. Url::getCommon(array('server' => $key))
|
||||
. '" >' . htmlspecialchars($label) . '</a>';
|
||||
}
|
||||
$retval .= '</li>';
|
||||
} else {
|
||||
$retval .= '<option value="' . $key . '" '
|
||||
. ($selected ? ' selected="selected"' : '') . '>'
|
||||
. htmlspecialchars($label) . '</option>' . "\n";
|
||||
}
|
||||
} // end while
|
||||
|
||||
if ($not_only_options) {
|
||||
$retval .= '</select>';
|
||||
if (! $omit_fieldset) {
|
||||
$retval .= '</fieldset>';
|
||||
}
|
||||
$retval .= '</form>';
|
||||
} elseif ($list) {
|
||||
$retval .= '</ul>';
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
}
|
||||
@ -14,7 +14,9 @@ use PhpMyAdmin\Display\Results as DisplayResults;
|
||||
use PhpMyAdmin\Index;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\ParseAnalyze;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\RelationCleanup;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\SqlParser\Statements\AlterStatement;
|
||||
use PhpMyAdmin\SqlParser\Statements\DropStatement;
|
||||
@ -45,10 +47,7 @@ class Sql
|
||||
if (($db === null) && (!empty($GLOBALS['db']))) {
|
||||
$db = $GLOBALS['db'];
|
||||
}
|
||||
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
list($analyzed_sql_results,,) = PMA_parseAnalyze($sql_query, $db);
|
||||
|
||||
list($analyzed_sql_results,,) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
return $analyzed_sql_results;
|
||||
}
|
||||
|
||||
@ -1094,17 +1093,15 @@ EOT;
|
||||
*/
|
||||
public static function cleanupRelations($db, $table, $column, $purge)
|
||||
{
|
||||
include_once 'libraries/relation_cleanup.lib.php';
|
||||
|
||||
if (! empty($purge) && strlen($db) > 0) {
|
||||
if (strlen($table) > 0) {
|
||||
if (isset($column) && strlen($column) > 0) {
|
||||
PMA_relationsCleanupColumn($db, $table, $column);
|
||||
RelationCleanup::column($db, $table, $column);
|
||||
} else {
|
||||
PMA_relationsCleanupTable($db, $table);
|
||||
RelationCleanup::table($db, $table);
|
||||
}
|
||||
} else {
|
||||
PMA_relationsCleanupDatabase($db);
|
||||
RelationCleanup::database($db);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2064,12 +2061,11 @@ EOT;
|
||||
) {
|
||||
if ($analyzed_sql_results == null) {
|
||||
// Parse and analyze the query
|
||||
include_once 'libraries/parse_analyze.lib.php';
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
$table_from_sql
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
// @todo: possibly refactor
|
||||
extract($analyzed_sql_results);
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ namespace PhpMyAdmin;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Index;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\Export\ExportSql;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\SqlParser\Components\Expression;
|
||||
@ -908,15 +909,12 @@ class Table
|
||||
|
||||
// No table is created when this is a data-only operation.
|
||||
if ($what != 'dataonly') {
|
||||
|
||||
include_once "libraries/plugin_interface.lib.php";
|
||||
|
||||
/**
|
||||
* Instance used for exporting the current structure of the table.
|
||||
*
|
||||
* @var \PhpMyAdmin\Plugins\Export\ExportSql
|
||||
* @var PhpMyAdmin\Plugins\Export\ExportSql
|
||||
*/
|
||||
$export_sql_plugin = PMA_getPlugin(
|
||||
$export_sql_plugin = Plugins::getPlugin(
|
||||
"export",
|
||||
"sql",
|
||||
'libraries/classes/Plugins/Export/',
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\Export\ExportSql;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
@ -192,9 +193,8 @@ class Tracker
|
||||
}
|
||||
|
||||
// get Export SQL instance
|
||||
include_once "libraries/plugin_interface.lib.php";
|
||||
/* @var $export_sql_plugin \PhpMyAdmin\Plugins\Export\ExportSql */
|
||||
$export_sql_plugin = PMA_getPlugin(
|
||||
/* @var $export_sql_plugin PhpMyAdmin\Plugins\Export\ExportSql */
|
||||
$export_sql_plugin = Plugins::getPlugin(
|
||||
"export",
|
||||
"sql",
|
||||
'libraries/classes/Plugins/Export/',
|
||||
|
||||
262
libraries/classes/UserPreferences.php
Normal file
262
libraries/classes/UserPreferences.php
Normal file
@ -0,0 +1,262 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Functions for displaying user preferences pages
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
use PhpMyAdmin\Config\ConfigFile;
|
||||
use PhpMyAdmin\Config\Forms\User\UserFormList;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\UserPreferences class
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
class UserPreferences
|
||||
{
|
||||
/**
|
||||
* Common initialization for user preferences modification pages
|
||||
*
|
||||
* @param ConfigFile $cf Config file instance
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function pageInit(ConfigFile $cf)
|
||||
{
|
||||
$forms_all_keys = UserFormList::getFields();
|
||||
$cf->resetConfigData(); // start with a clean instance
|
||||
$cf->setAllowedKeys($forms_all_keys);
|
||||
$cf->setCfgUpdateReadMapping(
|
||||
array(
|
||||
'Server/hide_db' => 'Servers/1/hide_db',
|
||||
'Server/only_db' => 'Servers/1/only_db'
|
||||
)
|
||||
);
|
||||
$cf->updateWithGlobalConfig($GLOBALS['cfg']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads user preferences
|
||||
*
|
||||
* Returns an array:
|
||||
* * config_data - path => value pairs
|
||||
* * mtime - last modification time
|
||||
* * type - 'db' (config read from pmadb) or 'session' (read from user session)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function load()
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
if (! $cfgRelation['userconfigwork']) {
|
||||
// no pmadb table, use session storage
|
||||
if (! isset($_SESSION['userconfig'])) {
|
||||
$_SESSION['userconfig'] = array(
|
||||
'db' => array(),
|
||||
'ts' => time());
|
||||
}
|
||||
return array(
|
||||
'config_data' => $_SESSION['userconfig']['db'],
|
||||
'mtime' => $_SESSION['userconfig']['ts'],
|
||||
'type' => 'session');
|
||||
}
|
||||
// load configuration from pmadb
|
||||
$query_table = Util::backquote($cfgRelation['db']) . '.'
|
||||
. Util::backquote($cfgRelation['userconfig']);
|
||||
$query = 'SELECT `config_data`, UNIX_TIMESTAMP(`timevalue`) ts'
|
||||
. ' FROM ' . $query_table
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
$row = $GLOBALS['dbi']->fetchSingleRow($query, 'ASSOC', $GLOBALS['controllink']);
|
||||
|
||||
return array(
|
||||
'config_data' => $row ? (array)json_decode($row['config_data']) : array(),
|
||||
'mtime' => $row ? $row['ts'] : time(),
|
||||
'type' => 'db');
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves user preferences
|
||||
*
|
||||
* @param array $config_array configuration array
|
||||
*
|
||||
* @return true|PhpMyAdmin\Message
|
||||
*/
|
||||
public static function save(array $config_array)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
$server = isset($GLOBALS['server'])
|
||||
? $GLOBALS['server']
|
||||
: $GLOBALS['cfg']['ServerDefault'];
|
||||
$cache_key = 'server_' . $server;
|
||||
if (! $cfgRelation['userconfigwork']) {
|
||||
// no pmadb table, use session storage
|
||||
$_SESSION['userconfig'] = array(
|
||||
'db' => $config_array,
|
||||
'ts' => time());
|
||||
if (isset($_SESSION['cache'][$cache_key]['userprefs'])) {
|
||||
unset($_SESSION['cache'][$cache_key]['userprefs']);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// save configuration to pmadb
|
||||
$query_table = Util::backquote($cfgRelation['db']) . '.'
|
||||
. Util::backquote($cfgRelation['userconfig']);
|
||||
$query = 'SELECT `username` FROM ' . $query_table
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
|
||||
$has_config = $GLOBALS['dbi']->fetchValue(
|
||||
$query, 0, 0, $GLOBALS['controllink']
|
||||
);
|
||||
$config_data = json_encode($config_array);
|
||||
if ($has_config) {
|
||||
$query = 'UPDATE ' . $query_table
|
||||
. ' SET `timevalue` = NOW(), `config_data` = \''
|
||||
. $GLOBALS['dbi']->escapeString($config_data)
|
||||
. '\''
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
} else {
|
||||
$query = 'INSERT INTO ' . $query_table
|
||||
. ' (`username`, `timevalue`,`config_data`) '
|
||||
. 'VALUES (\''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user']) . '\', NOW(), '
|
||||
. '\'' . $GLOBALS['dbi']->escapeString($config_data) . '\')';
|
||||
}
|
||||
if (isset($_SESSION['cache'][$cache_key]['userprefs'])) {
|
||||
unset($_SESSION['cache'][$cache_key]['userprefs']);
|
||||
}
|
||||
if (!$GLOBALS['dbi']->tryQuery($query, $GLOBALS['controllink'])) {
|
||||
$message = Message::error(__('Could not save configuration'));
|
||||
$message->addMessage(
|
||||
Message::rawError(
|
||||
$GLOBALS['dbi']->getError($GLOBALS['controllink'])
|
||||
),
|
||||
'<br /><br />'
|
||||
);
|
||||
return $message;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a user preferences array filtered by $cfg['UserprefsDisallow']
|
||||
* (blacklist) and keys from user preferences form (whitelist)
|
||||
*
|
||||
* @param array $config_data path => value pairs
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function apply(array $config_data)
|
||||
{
|
||||
$cfg = array();
|
||||
$blacklist = array_flip($GLOBALS['cfg']['UserprefsDisallow']);
|
||||
$whitelist = array_flip(UserFormList::getFields());
|
||||
// whitelist some additional fields which are custom handled
|
||||
$whitelist['ThemeDefault'] = true;
|
||||
$whitelist['fontsize'] = true;
|
||||
$whitelist['lang'] = true;
|
||||
$whitelist['collation_connection'] = true;
|
||||
$whitelist['Server/hide_db'] = true;
|
||||
$whitelist['Server/only_db'] = true;
|
||||
foreach ($config_data as $path => $value) {
|
||||
if (! isset($whitelist[$path]) || isset($blacklist[$path])) {
|
||||
continue;
|
||||
}
|
||||
Core::arrayWrite($path, $cfg, $value);
|
||||
}
|
||||
return $cfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates one user preferences option (loads and saves to database).
|
||||
*
|
||||
* No validation is done!
|
||||
*
|
||||
* @param string $path configuration
|
||||
* @param mixed $value value
|
||||
* @param mixed $default_value default value
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function persistOption($path, $value, $default_value)
|
||||
{
|
||||
$prefs = self::load();
|
||||
if ($value === $default_value) {
|
||||
if (isset($prefs['config_data'][$path])) {
|
||||
unset($prefs['config_data'][$path]);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$prefs['config_data'][$path] = $value;
|
||||
}
|
||||
self::save($prefs['config_data']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirects after saving new user preferences
|
||||
*
|
||||
* @param string $file_name Filename
|
||||
* @param array $params URL parameters
|
||||
* @param string $hash Hash value
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function redirect($file_name,
|
||||
$params = null, $hash = null
|
||||
) {
|
||||
// redirect
|
||||
$url_params = array('saved' => 1);
|
||||
if (is_array($params)) {
|
||||
$url_params = array_merge($params, $url_params);
|
||||
}
|
||||
if ($hash) {
|
||||
$hash = '#' . urlencode($hash);
|
||||
}
|
||||
Core::sendHeaderLocation('./' . $file_name
|
||||
. Url::getCommonRaw($url_params) . $hash
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows form which allows to quickly load
|
||||
* settings stored in browser's local storage
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function autoloadGetHeader()
|
||||
{
|
||||
if (isset($_REQUEST['prefs_autoload'])
|
||||
&& $_REQUEST['prefs_autoload'] == 'hide'
|
||||
) {
|
||||
$_SESSION['userprefs_autoload'] = true;
|
||||
return '';
|
||||
}
|
||||
|
||||
$script_name = basename(basename($GLOBALS['PMA_PHP_SELF']));
|
||||
$return_url = $script_name . '?' . http_build_query($_GET, '', '&');
|
||||
|
||||
return Template::get('prefs_autoload')
|
||||
->render(
|
||||
array(
|
||||
'hidden_inputs' => Url::getHiddenInputs(),
|
||||
'return_url' => $return_url,
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -36,6 +36,7 @@ use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\DbList;
|
||||
use PhpMyAdmin\ErrorHandler;
|
||||
use PhpMyAdmin\IpAllowDeny;
|
||||
use PhpMyAdmin\LanguageManager;
|
||||
use PhpMyAdmin\Logging;
|
||||
use PhpMyAdmin\Message;
|
||||
@ -635,30 +636,24 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
if (isset($cfg['Server']['AllowDeny'])
|
||||
&& isset($cfg['Server']['AllowDeny']['order'])
|
||||
) {
|
||||
|
||||
/**
|
||||
* ip based access library
|
||||
*/
|
||||
include_once './libraries/ip_allow_deny.lib.php';
|
||||
|
||||
$allowDeny_forbidden = false; // default
|
||||
if ($cfg['Server']['AllowDeny']['order'] == 'allow,deny') {
|
||||
$allowDeny_forbidden = true;
|
||||
if (PMA_allowDeny('allow')) {
|
||||
if (IpAllowDeny::allowDeny('allow')) {
|
||||
$allowDeny_forbidden = false;
|
||||
}
|
||||
if (PMA_allowDeny('deny')) {
|
||||
if (IpAllowDeny::allowDeny('deny')) {
|
||||
$allowDeny_forbidden = true;
|
||||
}
|
||||
} elseif ($cfg['Server']['AllowDeny']['order'] == 'deny,allow') {
|
||||
if (PMA_allowDeny('deny')) {
|
||||
if (IpAllowDeny::allowDeny('deny')) {
|
||||
$allowDeny_forbidden = true;
|
||||
}
|
||||
if (PMA_allowDeny('allow')) {
|
||||
if (IpAllowDeny::allowDeny('allow')) {
|
||||
$allowDeny_forbidden = false;
|
||||
}
|
||||
} elseif ($cfg['Server']['AllowDeny']['order'] == 'explicit') {
|
||||
if (PMA_allowDeny('allow') && ! PMA_allowDeny('deny')) {
|
||||
if (IpAllowDeny::allowDeny('allow') && ! IpAllowDeny::allowDeny('deny')) {
|
||||
$allowDeny_forbidden = false;
|
||||
} else {
|
||||
$allowDeny_forbidden = true;
|
||||
|
||||
@ -1,303 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* This library is used with the server IP allow/deny host authentication
|
||||
* feature
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
require_once './libraries/hash.lib.php';
|
||||
|
||||
/**
|
||||
* Matches for IPv4 or IPv6 addresses
|
||||
*
|
||||
* @param string $testRange string of IP range to match
|
||||
* @param string $ipToTest string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function PMA_ipMaskTest($testRange, $ipToTest)
|
||||
{
|
||||
if (mb_strpos($testRange, ':') > -1
|
||||
|| mb_strpos($ipToTest, ':') > -1
|
||||
) {
|
||||
// assume IPv6
|
||||
$result = PMA_ipv6MaskTest($testRange, $ipToTest);
|
||||
} else {
|
||||
$result = PMA_ipv4MaskTest($testRange, $ipToTest);
|
||||
}
|
||||
|
||||
return $result;
|
||||
} // end of the "PMA_ipMaskTest()" function
|
||||
|
||||
|
||||
/**
|
||||
* Based on IP Pattern Matcher
|
||||
* Originally by J.Adams <jna@retina.net>
|
||||
* Found on <https://secure.php.net/manual/en/function.ip2long.php>
|
||||
* Modified for phpMyAdmin
|
||||
*
|
||||
* Matches:
|
||||
* xxx.xxx.xxx.xxx (exact)
|
||||
* xxx.xxx.xxx.[yyy-zzz] (range)
|
||||
* xxx.xxx.xxx.xxx/nn (CIDR)
|
||||
*
|
||||
* Does not match:
|
||||
* xxx.xxx.xxx.xx[yyy-zzz] (range, partial octets not supported)
|
||||
*
|
||||
* @param string $testRange string of IP range to match
|
||||
* @param string $ipToTest string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function PMA_ipv4MaskTest($testRange, $ipToTest)
|
||||
{
|
||||
$result = true;
|
||||
$match = preg_match(
|
||||
'|([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/([0-9]+)|',
|
||||
$testRange,
|
||||
$regs
|
||||
);
|
||||
if ($match) {
|
||||
// performs a mask match
|
||||
$ipl = ip2long($ipToTest);
|
||||
$rangel = ip2long(
|
||||
$regs[1] . '.' . $regs[2] . '.' . $regs[3] . '.' . $regs[4]
|
||||
);
|
||||
|
||||
$maskl = 0;
|
||||
|
||||
for ($i = 0; $i < 31; $i++) {
|
||||
if ($i < $regs[5] - 1) {
|
||||
$maskl = $maskl + pow(2, (30 - $i));
|
||||
} // end if
|
||||
} // end for
|
||||
|
||||
if (($maskl & $rangel) == ($maskl & $ipl)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// range based
|
||||
$maskocts = explode('.', $testRange);
|
||||
$ipocts = explode('.', $ipToTest);
|
||||
|
||||
// perform a range match
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
if (preg_match('|\[([0-9]+)\-([0-9]+)\]|', $maskocts[$i], $regs)) {
|
||||
if (($ipocts[$i] > $regs[2]) || ($ipocts[$i] < $regs[1])) {
|
||||
$result = false;
|
||||
} // end if
|
||||
} else {
|
||||
if ($maskocts[$i] <> $ipocts[$i]) {
|
||||
$result = false;
|
||||
} // end if
|
||||
} // end if/else
|
||||
} //end for
|
||||
|
||||
return $result;
|
||||
} // end of the "PMA_ipv4MaskTest()" function
|
||||
|
||||
|
||||
/**
|
||||
* IPv6 matcher
|
||||
* CIDR section taken from https://stackoverflow.com/a/10086404
|
||||
* Modified for phpMyAdmin
|
||||
*
|
||||
* Matches:
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||||
* (exact)
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz]
|
||||
* (range, only at end of IP - no subnets)
|
||||
* xxxx:xxxx:xxxx:xxxx/nn
|
||||
* (CIDR)
|
||||
*
|
||||
* Does not match:
|
||||
* xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz]
|
||||
* (range, partial octets not supported)
|
||||
*
|
||||
* @param string $test_range string of IP range to match
|
||||
* @param string $ip_to_test string of IP to test against range
|
||||
*
|
||||
* @return boolean whether the IP mask matches
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function PMA_ipv6MaskTest($test_range, $ip_to_test)
|
||||
{
|
||||
$result = true;
|
||||
|
||||
// convert to lowercase for easier comparison
|
||||
$test_range = mb_strtolower($test_range);
|
||||
$ip_to_test = mb_strtolower($ip_to_test);
|
||||
|
||||
$is_cidr = mb_strpos($test_range, '/') > -1;
|
||||
$is_range = mb_strpos($test_range, '[') > -1;
|
||||
$is_single = ! $is_cidr && ! $is_range;
|
||||
|
||||
$ip_hex = bin2hex(inet_pton($ip_to_test));
|
||||
|
||||
if ($is_single) {
|
||||
$range_hex = bin2hex(inet_pton($test_range));
|
||||
$result = hash_equals($ip_hex, $range_hex);
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($is_range) {
|
||||
// what range do we operate on?
|
||||
$range_match = array();
|
||||
$match = preg_match(
|
||||
'/\[([0-9a-f]+)\-([0-9a-f]+)\]/', $test_range, $range_match
|
||||
);
|
||||
if ($match) {
|
||||
$range_start = $range_match[1];
|
||||
$range_end = $range_match[2];
|
||||
|
||||
// get the first and last allowed IPs
|
||||
$first_ip = str_replace($range_match[0], $range_start, $test_range);
|
||||
$first_hex = bin2hex(inet_pton($first_ip));
|
||||
$last_ip = str_replace($range_match[0], $range_end, $test_range);
|
||||
$last_hex = bin2hex(inet_pton($last_ip));
|
||||
|
||||
// check if the IP to test is within the range
|
||||
$result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($is_cidr) {
|
||||
// Split in address and prefix length
|
||||
list($first_ip, $subnet) = explode('/', $test_range);
|
||||
|
||||
// Parse the address into a binary string
|
||||
$first_bin = inet_pton($first_ip);
|
||||
$first_hex = bin2hex($first_bin);
|
||||
|
||||
$flexbits = 128 - $subnet;
|
||||
|
||||
// Build the hexadecimal string of the last address
|
||||
$last_hex = $first_hex;
|
||||
|
||||
$pos = 31;
|
||||
while ($flexbits > 0) {
|
||||
// Get the character at this position
|
||||
$orig = mb_substr($last_hex, $pos, 1);
|
||||
|
||||
// Convert it to an integer
|
||||
$origval = hexdec($orig);
|
||||
|
||||
// OR it with (2^flexbits)-1, with flexbits limited to 4 at a time
|
||||
$newval = $origval | (pow(2, min(4, $flexbits)) - 1);
|
||||
|
||||
// Convert it back to a hexadecimal character
|
||||
$new = dechex($newval);
|
||||
|
||||
// And put that character back in the string
|
||||
$last_hex = substr_replace($last_hex, $new, $pos, 1);
|
||||
|
||||
// We processed one nibble, move to previous position
|
||||
$flexbits -= 4;
|
||||
--$pos;
|
||||
}
|
||||
|
||||
// check if the IP to test is within the range
|
||||
$result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
|
||||
}
|
||||
|
||||
return $result;
|
||||
} // end of the "PMA_ipv6MaskTest()" function
|
||||
|
||||
|
||||
/**
|
||||
* Runs through IP Allow/Deny rules the use of it below for more information
|
||||
*
|
||||
* @param string $type 'allow' | 'deny' type of rule to match
|
||||
*
|
||||
* @return bool Whether rule has matched
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @see Core::getIp()
|
||||
*/
|
||||
function PMA_allowDeny($type)
|
||||
{
|
||||
global $cfg;
|
||||
|
||||
// Grabs true IP of the user and returns if it can't be found
|
||||
$remote_ip = Core::getIp();
|
||||
if (empty($remote_ip)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// copy username
|
||||
$username = $cfg['Server']['user'];
|
||||
|
||||
// copy rule database
|
||||
if (isset($cfg['Server']['AllowDeny']['rules'])) {
|
||||
$rules = $cfg['Server']['AllowDeny']['rules'];
|
||||
if (! is_array($rules)) {
|
||||
$rules = array();
|
||||
}
|
||||
} else {
|
||||
$rules = array();
|
||||
}
|
||||
|
||||
// lookup table for some name shortcuts
|
||||
$shortcuts = array(
|
||||
'all' => '0.0.0.0/0',
|
||||
'localhost' => '127.0.0.1/8'
|
||||
);
|
||||
|
||||
// Provide some useful shortcuts if server gives us address:
|
||||
if (Core::getenv('SERVER_ADDR')) {
|
||||
$shortcuts['localnetA'] = Core::getenv('SERVER_ADDR') . '/8';
|
||||
$shortcuts['localnetB'] = Core::getenv('SERVER_ADDR') . '/16';
|
||||
$shortcuts['localnetC'] = Core::getenv('SERVER_ADDR') . '/24';
|
||||
}
|
||||
|
||||
foreach ($rules as $rule) {
|
||||
// extract rule data
|
||||
$rule_data = explode(' ', $rule);
|
||||
|
||||
// check for rule type
|
||||
if ($rule_data[0] != $type) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check for username
|
||||
if (($rule_data[1] != '%') //wildcarded first
|
||||
&& (! hash_equals($rule_data[1], $username))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check if the config file has the full string with an extra
|
||||
// 'from' in it and if it does, just discard it
|
||||
if ($rule_data[2] == 'from') {
|
||||
$rule_data[2] = $rule_data[3];
|
||||
}
|
||||
|
||||
// Handle shortcuts with above array
|
||||
if (isset($shortcuts[$rule_data[2]])) {
|
||||
$rule_data[2] = $shortcuts[$rule_data[2]];
|
||||
}
|
||||
|
||||
// Add code for host lookups here
|
||||
// Excluded for the moment
|
||||
|
||||
// Do the actual matching now
|
||||
if (PMA_ipMaskTest($rule_data[2], $remote_ip)) {
|
||||
return true;
|
||||
}
|
||||
} // end while
|
||||
|
||||
return false;
|
||||
} // end of the "PMA_AllowDeny()" function
|
||||
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* MIME detection code.
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
* @todo Maybe we could try to use fileinfo module if loaded
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tries to detect MIME type of content.
|
||||
*
|
||||
* @param string &$test First few bytes of content to use for detection
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_detectMIME(&$test)
|
||||
{
|
||||
$len = mb_strlen($test);
|
||||
if ($len >= 2 && $test[0] == chr(0xff) && $test[1] == chr(0xd8)) {
|
||||
return 'image/jpeg';
|
||||
}
|
||||
if ($len >= 3 && substr($test, 0, 3) == 'GIF') {
|
||||
return 'image/gif';
|
||||
}
|
||||
if ($len >= 4 && mb_substr($test, 0, 4) == "\x89PNG") {
|
||||
return 'image/png';
|
||||
}
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
use PhpMyAdmin\CentralColumns;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\MultSubmits;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Sql;
|
||||
|
||||
@ -15,8 +16,6 @@ if (! defined('PHPMYADMIN')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'libraries/mult_submits.lib.php';
|
||||
|
||||
$request_params = array(
|
||||
'clause_is_unique',
|
||||
'from_prefix',
|
||||
@ -92,17 +91,17 @@ if (! empty($submit_mult)
|
||||
case 'copy_tbl':
|
||||
$views = $GLOBALS['dbi']->getVirtualTables($db);
|
||||
list($full_query, $reload, $full_query_views)
|
||||
= PMA_getQueryFromSelected(
|
||||
= MultSubmits::getQueryFromSelected(
|
||||
$submit_mult, $table, $selected, $views
|
||||
);
|
||||
$_url_params = PMA_getUrlParams(
|
||||
$_url_params = MultSubmits::getUrlParams(
|
||||
$submit_mult, $reload, $action, $db, $table, $selected, $views,
|
||||
isset($original_sql_query)? $original_sql_query : null,
|
||||
isset($original_url_query)? $original_url_query : null
|
||||
);
|
||||
$response->disable();
|
||||
$response->addHTML(
|
||||
PMA_getHtmlForCopyMultipleTables($action, $_url_params)
|
||||
MultSubmits::getHtmlForCopyMultipleTables($action, $_url_params)
|
||||
);
|
||||
exit;
|
||||
case 'show_create':
|
||||
@ -180,12 +179,12 @@ if (!empty($submit_mult) && !empty($what)) {
|
||||
|
||||
// Builds the query
|
||||
list($full_query, $reload, $full_query_views)
|
||||
= PMA_getQueryFromSelected(
|
||||
= MultSubmits::getQueryFromSelected(
|
||||
$what, $table, $selected, $views
|
||||
);
|
||||
|
||||
// Displays the confirmation form
|
||||
$_url_params = PMA_getUrlParams(
|
||||
$_url_params = MultSubmits::getUrlParams(
|
||||
$what, $reload, $action, $db, $table, $selected, $views,
|
||||
isset($original_sql_query)? $original_sql_query : null,
|
||||
isset($original_url_query)? $original_url_query : null
|
||||
@ -195,14 +194,14 @@ if (!empty($submit_mult) && !empty($what)) {
|
||||
if ($what == 'replace_prefix_tbl' || $what == 'copy_tbl_change_prefix') {
|
||||
$response->disable();
|
||||
$response->addHTML(
|
||||
PMA_getHtmlForReplacePrefixTable($action, $_url_params)
|
||||
MultSubmits::getHtmlForReplacePrefixTable($action, $_url_params)
|
||||
);
|
||||
} elseif ($what == 'add_prefix_tbl') {
|
||||
$response->disable();
|
||||
$response->addHTML(PMA_getHtmlForAddPrefixTable($action, $_url_params));
|
||||
$response->addHTML(MultSubmits::getHtmlForAddPrefixTable($action, $_url_params));
|
||||
} else {
|
||||
$response->addHTML(
|
||||
PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query)
|
||||
MultSubmits::getHtmlForOtherActions($what, $action, $_url_params, $full_query)
|
||||
);
|
||||
}
|
||||
exit;
|
||||
@ -211,13 +210,6 @@ if (!empty($submit_mult) && !empty($what)) {
|
||||
/**
|
||||
* Executes the query - dropping rows, columns/fields, tables or dbs
|
||||
*/
|
||||
if ($query_type == 'drop_db'
|
||||
|| $query_type == 'drop_tbl'
|
||||
|| $query_type == 'drop_fld'
|
||||
) {
|
||||
include_once './libraries/relation_cleanup.lib.php';
|
||||
}
|
||||
|
||||
if ($query_type == 'primary_fld') {
|
||||
// Gets table primary key
|
||||
$GLOBALS['dbi']->selectDb($db);
|
||||
@ -244,7 +236,7 @@ if (!empty($submit_mult) && !empty($what)) {
|
||||
list(
|
||||
$result, $rebuild_database_list, $reload_ret,
|
||||
$run_parts, $execute_query_later, $sql_query, $sql_query_views
|
||||
) = PMA_buildOrExecuteQueryForMulti(
|
||||
) = MultSubmits::buildOrExecuteQueryForMulti(
|
||||
$query_type, $selected, $db, $table, $views,
|
||||
isset($primary) ? $primary : null,
|
||||
isset($from_prefix) ? $from_prefix : null,
|
||||
|
||||
@ -1,577 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* functions for multi submit forms
|
||||
*
|
||||
* @usedby mult_submits.inc.php
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Table;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* Gets url params
|
||||
*
|
||||
* @param string $what mult submit type
|
||||
* @param bool $reload is reload
|
||||
* @param string $action action type
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
* @param array $selected selected rows(table,db)
|
||||
* @param array $views table views
|
||||
* @param string $original_sql_query original sql query
|
||||
* @param string $original_url_query original url query
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_getUrlParams(
|
||||
$what, $reload, $action, $db, $table, $selected, $views,
|
||||
$original_sql_query, $original_url_query
|
||||
) {
|
||||
$_url_params = array(
|
||||
'query_type' => $what,
|
||||
'reload' => (! empty($reload) ? 1 : 0),
|
||||
);
|
||||
if (mb_strpos(' ' . $action, 'db_') == 1) {
|
||||
$_url_params['db']= $db;
|
||||
} elseif (mb_strpos(' ' . $action, 'tbl_') == 1
|
||||
|| $what == 'row_delete'
|
||||
) {
|
||||
$_url_params['db']= $db;
|
||||
$_url_params['table']= $table;
|
||||
}
|
||||
foreach ($selected as $sval) {
|
||||
if ($what == 'row_delete') {
|
||||
$_url_params['selected'][] = 'DELETE FROM '
|
||||
. Util::backquote($table)
|
||||
. ' WHERE ' . $sval . ' LIMIT 1;';
|
||||
} else {
|
||||
$_url_params['selected'][] = $sval;
|
||||
}
|
||||
}
|
||||
if ($what == 'drop_tbl' && !empty($views)) {
|
||||
foreach ($views as $current) {
|
||||
$_url_params['views'][] = $current;
|
||||
}
|
||||
}
|
||||
if ($what == 'row_delete') {
|
||||
$_url_params['original_sql_query'] = $original_sql_query;
|
||||
if (! empty($original_url_query)) {
|
||||
$_url_params['original_url_query'] = $original_url_query;
|
||||
}
|
||||
}
|
||||
|
||||
return $_url_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds or execute queries for multiple elements, depending on $query_type
|
||||
*
|
||||
* @param string $query_type query type
|
||||
* @param array $selected selected tables
|
||||
* @param string $db db name
|
||||
* @param string $table table name
|
||||
* @param array $views table views
|
||||
* @param string $primary table primary
|
||||
* @param string $from_prefix from prefix original
|
||||
* @param string $to_prefix to prefix original
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_buildOrExecuteQueryForMulti(
|
||||
$query_type, $selected, $db, $table, $views, $primary,
|
||||
$from_prefix, $to_prefix
|
||||
) {
|
||||
$rebuild_database_list = false;
|
||||
$reload = null;
|
||||
$a_query = null;
|
||||
$sql_query = '';
|
||||
$sql_query_views = null;
|
||||
// whether to run query after each pass
|
||||
$run_parts = false;
|
||||
// whether to execute the query at the end (to display results)
|
||||
$execute_query_later = false;
|
||||
$result = null;
|
||||
|
||||
if ($query_type == 'drop_tbl') {
|
||||
$sql_query_views = '';
|
||||
}
|
||||
|
||||
$selected_cnt = count($selected);
|
||||
$deletes = false;
|
||||
$copy_tbl =false;
|
||||
|
||||
for ($i = 0; $i < $selected_cnt; $i++) {
|
||||
switch ($query_type) {
|
||||
case 'row_delete':
|
||||
$deletes = true;
|
||||
$a_query = $selected[$i];
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'drop_db':
|
||||
PMA_relationsCleanupDatabase($selected[$i]);
|
||||
$a_query = 'DROP DATABASE '
|
||||
. Util::backquote($selected[$i]);
|
||||
$reload = 1;
|
||||
$run_parts = true;
|
||||
$rebuild_database_list = true;
|
||||
break;
|
||||
|
||||
case 'drop_tbl':
|
||||
PMA_relationsCleanupTable($db, $selected[$i]);
|
||||
$current = $selected[$i];
|
||||
if (!empty($views) && in_array($current, $views)) {
|
||||
$sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ')
|
||||
. Util::backquote($current);
|
||||
} else {
|
||||
$sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ')
|
||||
. Util::backquote($current);
|
||||
}
|
||||
$reload = 1;
|
||||
break;
|
||||
|
||||
case 'check_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'optimize_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'analyze_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'checksum_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'CHECKSUM TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'repair_tbl':
|
||||
$sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
|
||||
. Util::backquote($selected[$i]);
|
||||
$execute_query_later = true;
|
||||
break;
|
||||
|
||||
case 'empty_tbl':
|
||||
$deletes = true;
|
||||
$a_query = 'TRUNCATE ';
|
||||
$a_query .= Util::backquote($selected[$i]);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'drop_fld':
|
||||
PMA_relationsCleanupColumn($db, $table, $selected[$i]);
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
: ',')
|
||||
. ' DROP ' . Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ';' : '');
|
||||
break;
|
||||
|
||||
case 'primary_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. (empty($primary)
|
||||
? ''
|
||||
: ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'index_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD INDEX( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'unique_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD UNIQUE( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'spatial_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD SPATIAL( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'fulltext_fld':
|
||||
$sql_query .= (empty($sql_query)
|
||||
? 'ALTER TABLE ' . Util::backquote($table)
|
||||
. ' ADD FULLTEXT( '
|
||||
: ', ')
|
||||
. Util::backquote($selected[$i])
|
||||
. (($i == $selected_cnt-1) ? ');' : '');
|
||||
break;
|
||||
|
||||
case 'add_prefix_tbl':
|
||||
$newtablename = $_POST['add_prefix'] . $selected[$i];
|
||||
// ADD PREFIX TO TABLE NAME
|
||||
$a_query = 'ALTER TABLE '
|
||||
. Util::backquote($selected[$i])
|
||||
. ' RENAME '
|
||||
. Util::backquote($newtablename);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'replace_prefix_tbl':
|
||||
$current = $selected[$i];
|
||||
$subFromPrefix = mb_substr(
|
||||
$current,
|
||||
0,
|
||||
mb_strlen($from_prefix)
|
||||
);
|
||||
if ($subFromPrefix == $from_prefix) {
|
||||
$newtablename = $to_prefix
|
||||
. mb_substr(
|
||||
$current,
|
||||
mb_strlen($from_prefix)
|
||||
);
|
||||
} else {
|
||||
$newtablename = $current;
|
||||
}
|
||||
// CHANGE PREFIX PATTERN
|
||||
$a_query = 'ALTER TABLE '
|
||||
. Util::backquote($selected[$i])
|
||||
. ' RENAME '
|
||||
. Util::backquote($newtablename);
|
||||
$run_parts = true;
|
||||
break;
|
||||
|
||||
case 'copy_tbl_change_prefix':
|
||||
$run_parts = true;
|
||||
$copy_tbl = true;
|
||||
|
||||
$current = $selected[$i];
|
||||
$newtablename = $to_prefix .
|
||||
mb_substr($current, mb_strlen($from_prefix));
|
||||
|
||||
// COPY TABLE AND CHANGE PREFIX PATTERN
|
||||
Table::moveCopy(
|
||||
$db, $current, $db, $newtablename,
|
||||
'data', false, 'one_table'
|
||||
);
|
||||
break;
|
||||
|
||||
case 'copy_tbl':
|
||||
$run_parts = true;
|
||||
$copy_tbl = true;
|
||||
Table::moveCopy($db, $selected[$i], $_POST['target_db'], $selected[$i], $_POST['what'], false, 'one_table');
|
||||
if (isset($_POST['adjust_privileges']) && !empty($_POST['adjust_privileges'])) {
|
||||
Operations::adjustPrivilegesCopyTable($db, $selected[$i], $_POST['target_db'], $selected[$i]);
|
||||
}
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
// All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
|
||||
// statements will be run at once below
|
||||
if ($run_parts && !$copy_tbl) {
|
||||
$sql_query .= $a_query . ';' . "\n";
|
||||
if ($query_type != 'drop_db') {
|
||||
$GLOBALS['dbi']->selectDb($db);
|
||||
}
|
||||
$result = $GLOBALS['dbi']->query($a_query);
|
||||
|
||||
if ($query_type == 'drop_db') {
|
||||
Transformations::clear($selected[$i]);
|
||||
} elseif ($query_type == 'drop_tbl') {
|
||||
Transformations::clear($db, $selected[$i]);
|
||||
} else if ($query_type == 'drop_fld') {
|
||||
Transformations::clear($db, $table, $selected[$i]);
|
||||
}
|
||||
} // end if
|
||||
} // end for
|
||||
|
||||
if ($deletes && ! empty($_REQUEST['pos'])) {
|
||||
$_REQUEST['pos'] = Sql::calculatePosForLastPage(
|
||||
$db, $table, isset($_REQUEST['pos']) ? $_REQUEST['pos'] : null
|
||||
);
|
||||
}
|
||||
|
||||
return array(
|
||||
$result, $rebuild_database_list, $reload,
|
||||
$run_parts, $execute_query_later, $sql_query, $sql_query_views
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for copy tables form
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForCopyMultipleTables($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$databases_list = $GLOBALS['dblist']->databases;
|
||||
foreach ($databases_list as $key => $db_name)
|
||||
if ($db_name == $GLOBALS['db']){
|
||||
$databases_list->offsetUnset($key);
|
||||
break;
|
||||
}
|
||||
$html .= '<strong><label for="db_name_dropdown">' . __('Database') . ':</label></strong>';
|
||||
$html .= '<select id="db_name_dropdown" class="halfWidth" name="target_db" >'
|
||||
. $databases_list->getHtmlOptions(true, false)
|
||||
. '</select>';
|
||||
$html .= '<br><br>';
|
||||
$html .= '<strong><label>' . __('Options') . ':</label></strong><br>';
|
||||
$html .= '<input type="radio" id ="what_structure" value="structure" name="what"/>';
|
||||
$html .= '<label for="what_structure">' . __('Structure only') . '</label><br>';
|
||||
$html .= '<input type="radio" id ="what_data" value="data" name="what" checked="checked"/>';
|
||||
$html .= '<label for="what_data">' . __('Structure and data') . '</label><br>';
|
||||
$html .= '<input type="radio" id ="what_dataonly" value="dataonly" name="what"/>';
|
||||
$html .= '<label for="what_dataonly">' . __('Data only') . '</label><br><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_drop" value="1" name="drop_if_exists"/>';
|
||||
$html .= '<label for="checkbox_drop">' . __('Add DROP TABLE') . '</label><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_auto_increment_cp" value="1" name="sql_auto_increment"/>';
|
||||
$html .= '<label for="checkbox_auto_increment_cp">' . __('Add AUTO INCREMENT value') . '</label><br>';
|
||||
$html .= '<input type="checkbox" id="checkbox_constraints" value="1" name="sql_auto_increment" checked="checked"/>';
|
||||
$html .= '<label for="checkbox_constraints">' . __('Add constraints') . '</label><br><br>';
|
||||
$html .= '<input name="adjust_privileges" value="1" id="checkbox_adjust_privileges" checked="checked" type="checkbox"/>';
|
||||
$html .= '<label for="checkbox_adjust_privileges">' . __('Adjust privileges') . '<a href="./doc/html/faq.html#faq6-39" target="documentation"><img src="themes/dot.gif" title="Documentation" alt="Documentation" class="icon ic_b_help"></a></label>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for replace_prefix_tbl or copy_tbl_change_prefix
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForReplacePrefixTable($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$html .= '<table>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('From') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="from_prefix" id="initialPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('To') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="to_prefix" id="newPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '</table>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for add_prefix_tbl
|
||||
*
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForAddPrefixTable($action, $_url_params)
|
||||
{
|
||||
$html = '<form id="ajax_form" action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class = "input">';
|
||||
$html .= '<table>';
|
||||
$html .= '<tr>';
|
||||
$html .= '<td>' . __('Add prefix') . '</td>';
|
||||
$html .= '<td>';
|
||||
$html .= '<input type="text" name="add_prefix" id="txtPrefix" />';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
$html .= '<tr>';
|
||||
$html .= '</table>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<input type="hidden" name="mult_btn" value="' . __('Yes') . '" />';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets HTML for other mult_submits actions
|
||||
*
|
||||
* @param string $what mult_submit type
|
||||
* @param string $action action type
|
||||
* @param array $_url_params URL params
|
||||
* @param string $full_query full sql query string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query)
|
||||
{
|
||||
$html = '<form action="' . $action . '" method="post">';
|
||||
$html .= Url::getHiddenInputs($_url_params);
|
||||
$html .= '<fieldset class="confirmation">';
|
||||
$html .= '<legend>';
|
||||
if ($what == 'drop_db') {
|
||||
$html .= __('You are about to DESTROY a complete database!') . ' ';
|
||||
}
|
||||
$html .= __('Do you really want to execute the following query?');
|
||||
$html .= '</legend>';
|
||||
$html .= '<code>' . $full_query . '</code>';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '<fieldset class="tblFooters">';
|
||||
// Display option to disable foreign key checks while dropping tables
|
||||
if ($what === 'drop_tbl' || $what === 'empty_tbl' || $what === 'row_delete') {
|
||||
$html .= '<div id="foreignkeychk">';
|
||||
$html .= Util::getFKCheckbox();
|
||||
$html .= '</div>';
|
||||
}
|
||||
$html .= '<input id="buttonYes" type="submit" name="mult_btn" value="'
|
||||
. __('Yes') . '" />';
|
||||
$html .= '<input id="buttonNo" type="submit" name="mult_btn" value="'
|
||||
. __('No') . '" />';
|
||||
$html .= '</fieldset>';
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get query string from Selected
|
||||
*
|
||||
* @param string $what mult_submit type
|
||||
* @param string $table table name
|
||||
* @param array $selected the selected columns
|
||||
* @param array $views table views
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_getQueryFromSelected($what, $table, $selected, $views)
|
||||
{
|
||||
$reload = false;
|
||||
$full_query_views = null;
|
||||
$full_query = '';
|
||||
|
||||
if ($what == 'drop_tbl') {
|
||||
$full_query_views = '';
|
||||
}
|
||||
|
||||
$selected_cnt = count($selected);
|
||||
$i = 0;
|
||||
foreach ($selected as $sval) {
|
||||
switch ($what) {
|
||||
case 'row_delete':
|
||||
$full_query .= 'DELETE FROM '
|
||||
. Util::backquote(htmlspecialchars($table))
|
||||
// Do not append a "LIMIT 1" clause here
|
||||
// (it's not binlog friendly).
|
||||
// We don't need the clause because the calling panel permits
|
||||
// this feature only when there is a unique index.
|
||||
. ' WHERE ' . htmlspecialchars($sval)
|
||||
. ';<br />';
|
||||
break;
|
||||
case 'drop_db':
|
||||
$full_query .= 'DROP DATABASE '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ';<br />';
|
||||
$reload = true;
|
||||
break;
|
||||
|
||||
case 'drop_tbl':
|
||||
$current = $sval;
|
||||
if (!empty($views) && in_array($current, $views)) {
|
||||
$full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ')
|
||||
. Util::backquote(htmlspecialchars($current));
|
||||
} else {
|
||||
$full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ')
|
||||
. Util::backquote(htmlspecialchars($current));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'empty_tbl':
|
||||
$full_query .= 'TRUNCATE ';
|
||||
$full_query .= Util::backquote(htmlspecialchars($sval))
|
||||
. ';<br />';
|
||||
break;
|
||||
|
||||
case 'primary_fld':
|
||||
if ($full_query == '') {
|
||||
$full_query .= 'ALTER TABLE '
|
||||
. Util::backquote(htmlspecialchars($table))
|
||||
. '<br /> DROP PRIMARY KEY,'
|
||||
. '<br /> ADD PRIMARY KEY('
|
||||
. '<br /> '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
} else {
|
||||
$full_query .= '<br /> '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
}
|
||||
if ($i == $selected_cnt-1) {
|
||||
$full_query = preg_replace('@,$@', ');<br />', $full_query);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'drop_fld':
|
||||
if ($full_query == '') {
|
||||
$full_query .= 'ALTER TABLE '
|
||||
. Util::backquote(htmlspecialchars($table));
|
||||
}
|
||||
$full_query .= '<br /> DROP '
|
||||
. Util::backquote(htmlspecialchars($sval))
|
||||
. ',';
|
||||
if ($i == $selected_cnt - 1) {
|
||||
$full_query = preg_replace('@,$@', ';<br />', $full_query);
|
||||
}
|
||||
break;
|
||||
} // end switch
|
||||
$i++;
|
||||
}
|
||||
|
||||
if ($what == 'drop_tbl') {
|
||||
if (!empty($full_query)) {
|
||||
$full_query .= ';<br />' . "\n";
|
||||
}
|
||||
if (!empty($full_query_views)) {
|
||||
$full_query .= $full_query_views . ';<br />' . "\n";
|
||||
}
|
||||
unset($full_query_views);
|
||||
}
|
||||
|
||||
$full_query_views = isset($full_query_views)? $full_query_views : null;
|
||||
|
||||
return array($full_query, $reload, $full_query_views);
|
||||
}
|
||||
@ -1,71 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Parse and analyse a SQL query
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Response;
|
||||
|
||||
if (! defined('PHPMYADMIN')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the parser on a query
|
||||
*
|
||||
* @param string $sql_query the query to parse
|
||||
* @param string $db the current database
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function PMA_parseAnalyze($sql_query, $db)
|
||||
{
|
||||
// @todo: move to returned results (also in all the calling chain)
|
||||
$GLOBALS['unparsed_sql'] = $sql_query;
|
||||
|
||||
// Get details about the SQL query.
|
||||
$analyzed_sql_results = PhpMyAdmin\SqlParser\Utils\Query::getAll($sql_query);
|
||||
|
||||
extract($analyzed_sql_results);
|
||||
$table = '';
|
||||
|
||||
// If the targeted table (and database) are different than the ones that is
|
||||
// currently browsed, edit `$db` and `$table` to match them so other elements
|
||||
// (page headers, links, navigation panel) can be updated properly.
|
||||
if (!empty($analyzed_sql_results['select_tables'])) {
|
||||
|
||||
// Previous table and database name is stored to check if it changed.
|
||||
$prev_db = $db;
|
||||
|
||||
if (count($analyzed_sql_results['select_tables']) > 1) {
|
||||
|
||||
/**
|
||||
* @todo if there are more than one table name in the Select:
|
||||
* - do not extract the first table name
|
||||
* - do not show a table name in the page header
|
||||
* - do not display the sub-pages links)
|
||||
*/
|
||||
$table = '';
|
||||
} else {
|
||||
$table = $analyzed_sql_results['select_tables'][0][0];
|
||||
if (!empty($analyzed_sql_results['select_tables'][0][1])) {
|
||||
$db = $analyzed_sql_results['select_tables'][0][1];
|
||||
}
|
||||
}
|
||||
// There is no point checking if a reload is required if we already decided
|
||||
// to reload. Also, no reload is required for AJAX requests.
|
||||
$response = Response::getInstance();
|
||||
if (empty($reload) && ! $response->isAjax()) {
|
||||
// NOTE: Database names are case-insensitive.
|
||||
$reload = strcasecmp($db, $prev_db) != 0;
|
||||
}
|
||||
|
||||
// Updating the array.
|
||||
$analyzed_sql_results['reload'] = $reload;
|
||||
}
|
||||
|
||||
return array($analyzed_sql_results, $db, $table);
|
||||
}
|
||||
@ -1,583 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Generic plugin interface.
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Properties\Options\Groups\OptionsPropertySubgroup;
|
||||
use PhpMyAdmin\Properties\Options\OptionsPropertyItem;
|
||||
use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
|
||||
use PhpMyAdmin\Properties\Plugins\PluginPropertyItem;
|
||||
use PhpMyAdmin\Properties\Plugins\SchemaPluginProperties;
|
||||
|
||||
/**
|
||||
* Includes and instantiates the specified plugin type for a certain format
|
||||
*
|
||||
* @param string $plugin_type the type of the plugin (import, export, etc)
|
||||
* @param string $plugin_format the format of the plugin (sql, xml, et )
|
||||
* @param string $plugins_dir directory with plugins
|
||||
* @param mixed $plugin_param parameter to plugin by which they can
|
||||
* decide whether they can work
|
||||
*
|
||||
* @return object|null new plugin instance
|
||||
*/
|
||||
function PMA_getPlugin(
|
||||
$plugin_type,
|
||||
$plugin_format,
|
||||
$plugins_dir,
|
||||
$plugin_param = false
|
||||
) {
|
||||
$GLOBALS['plugin_param'] = $plugin_param;
|
||||
$class_name = mb_strtoupper($plugin_type[0])
|
||||
. mb_strtolower(mb_substr($plugin_type, 1))
|
||||
. mb_strtoupper($plugin_format[0])
|
||||
. mb_strtolower(mb_substr($plugin_format, 1));
|
||||
$file = $class_name . ".php";
|
||||
if (is_file($plugins_dir . $file)) {
|
||||
//include_once $plugins_dir . $file;
|
||||
$fqnClass = 'PhpMyAdmin\\' . str_replace('/', '\\', mb_substr($plugins_dir, 18)) . $class_name;
|
||||
// check if class exists, could be caused by skip_import
|
||||
if (class_exists($fqnClass)) {
|
||||
return new $fqnClass;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads all plugin information from directory $plugins_dir
|
||||
*
|
||||
* @param string $plugin_type the type of the plugin (import, export, etc)
|
||||
* @param string $plugins_dir directory with plugins
|
||||
* @param mixed $plugin_param parameter to plugin by which they can
|
||||
* decide whether they can work
|
||||
*
|
||||
* @return array list of plugin instances
|
||||
*/
|
||||
function PMA_getPlugins($plugin_type, $plugins_dir, $plugin_param)
|
||||
{
|
||||
$GLOBALS['plugin_param'] = $plugin_param;
|
||||
/* Scan for plugins */
|
||||
$plugin_list = array();
|
||||
if (!($handle = @opendir($plugins_dir))) {
|
||||
return $plugin_list;
|
||||
}
|
||||
|
||||
$namespace = 'PhpMyAdmin\\' . str_replace('/', '\\', mb_substr($plugins_dir, 18));
|
||||
$class_type = mb_strtoupper($plugin_type[0], 'UTF-8')
|
||||
. mb_strtolower(mb_substr($plugin_type, 1), 'UTF-8');
|
||||
|
||||
$prefix_class_name = $namespace . $class_type;
|
||||
|
||||
while ($file = @readdir($handle)) {
|
||||
// In some situations, Mac OS creates a new file for each file
|
||||
// (for example ._csv.php) so the following regexp
|
||||
// matches a file which does not start with a dot but ends
|
||||
// with ".php"
|
||||
if (is_file($plugins_dir . $file)
|
||||
&& preg_match(
|
||||
'@^' . $class_type . '([^\.]+)\.php$@i',
|
||||
$file,
|
||||
$matches
|
||||
)
|
||||
) {
|
||||
$GLOBALS['skip_import'] = false;
|
||||
include_once $plugins_dir . $file;
|
||||
if (! $GLOBALS['skip_import']) {
|
||||
$class_name = $prefix_class_name . $matches[1];
|
||||
$plugin = new $class_name;
|
||||
if (null !== $plugin->getProperties()) {
|
||||
$plugin_list[] = $plugin;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
usort($plugin_list, function($cmp_name_1, $cmp_name_2) {
|
||||
return strcasecmp(
|
||||
$cmp_name_1->getProperties()->getText(),
|
||||
$cmp_name_2->getProperties()->getText()
|
||||
);
|
||||
});
|
||||
return $plugin_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns locale string for $name or $name if no locale is found
|
||||
*
|
||||
* @param string $name for local string
|
||||
*
|
||||
* @return string locale string for $name
|
||||
*/
|
||||
function PMA_getString($name)
|
||||
{
|
||||
return isset($GLOBALS[$name]) ? $GLOBALS[$name] : $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html input tag option 'checked' if plugin $opt
|
||||
* should be set by config or request
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $opt name of option
|
||||
*
|
||||
* @return string html input tag option 'checked'
|
||||
*/
|
||||
function PMA_pluginCheckboxCheck($section, $opt)
|
||||
{
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
if (isset($_GET[$opt])
|
||||
|| ! isset($_GET['repopulate'])
|
||||
&& ((! empty($GLOBALS['timeout_passed']) && isset($_REQUEST[$opt]))
|
||||
|| ! empty($GLOBALS['cfg'][$section][$opt]))
|
||||
) {
|
||||
return ' checked="checked"';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns default value for option $opt
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $opt name of option
|
||||
*
|
||||
* @return string default value for option $opt
|
||||
*/
|
||||
function PMA_pluginGetDefault($section, $opt)
|
||||
{
|
||||
if (isset($_GET[$opt])) {
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
return htmlspecialchars($_GET[$opt]);
|
||||
}
|
||||
|
||||
if (isset($GLOBALS['timeout_passed'])
|
||||
&& $GLOBALS['timeout_passed']
|
||||
&& isset($_REQUEST[$opt])
|
||||
) {
|
||||
return htmlspecialchars($_REQUEST[$opt]);
|
||||
}
|
||||
|
||||
if (!isset($GLOBALS['cfg'][$section][$opt])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$matches = array();
|
||||
/* Possibly replace localised texts */
|
||||
if (!preg_match_all(
|
||||
'/(str[A-Z][A-Za-z0-9]*)/',
|
||||
$GLOBALS['cfg'][$section][$opt],
|
||||
$matches
|
||||
)) {
|
||||
return htmlspecialchars($GLOBALS['cfg'][$section][$opt]);
|
||||
}
|
||||
|
||||
$val = $GLOBALS['cfg'][$section][$opt];
|
||||
foreach ($matches[0] as $match) {
|
||||
if (isset($GLOBALS[$match])) {
|
||||
$val = str_replace($match, $GLOBALS[$match], $val);
|
||||
}
|
||||
}
|
||||
return htmlspecialchars($val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html select form element for plugin choice
|
||||
* and hidden fields denoting whether each plugin must be exported as a file
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $name name of select element
|
||||
* @param array &$list array with plugin instances
|
||||
* @param string $cfgname name of config value, if none same as $name
|
||||
*
|
||||
* @return string html select tag
|
||||
*/
|
||||
function PMA_pluginGetChoice($section, $name, &$list, $cfgname = null)
|
||||
{
|
||||
if (! isset($cfgname)) {
|
||||
$cfgname = $name;
|
||||
}
|
||||
$ret = '<select id="plugins" name="' . $name . '">';
|
||||
$default = PMA_pluginGetDefault($section, $cfgname);
|
||||
$hidden = null;
|
||||
foreach ($list as $plugin) {
|
||||
$elem = explode('\\', get_class($plugin));
|
||||
$plugin_name = array_pop($elem);
|
||||
unset($elem);
|
||||
$plugin_name = mb_strtolower(
|
||||
mb_substr(
|
||||
$plugin_name,
|
||||
mb_strlen($section)
|
||||
)
|
||||
);
|
||||
$ret .= '<option';
|
||||
// If the form is being repopulated using $_GET data, that is priority
|
||||
if (isset($_GET[$name])
|
||||
&& $plugin_name == $_GET[$name]
|
||||
|| ! isset($_GET[$name])
|
||||
&& $plugin_name == $default
|
||||
) {
|
||||
$ret .= ' selected="selected"';
|
||||
}
|
||||
|
||||
/** @var PluginPropertyItem $properties */
|
||||
$properties = $plugin->getProperties();
|
||||
$text = null;
|
||||
if ($properties != null) {
|
||||
$text = $properties->getText();
|
||||
}
|
||||
$ret .= ' value="' . $plugin_name . '">'
|
||||
. PMA_getString($text)
|
||||
. '</option>' . "\n";
|
||||
|
||||
// Whether each plugin has to be saved as a file
|
||||
$hidden .= '<input type="hidden" id="force_file_' . $plugin_name
|
||||
. '" value="';
|
||||
/** @var ExportPluginProperties|SchemaPluginProperties $properties */
|
||||
$properties = $plugin->getProperties();
|
||||
if (! strcmp($section, 'Import')
|
||||
|| ($properties != null && $properties->getForceFile() != null)
|
||||
) {
|
||||
$hidden .= 'true';
|
||||
} else {
|
||||
$hidden .= 'false';
|
||||
}
|
||||
$hidden .= '" />' . "\n";
|
||||
}
|
||||
$ret .= '</select>' . "\n" . $hidden;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns single option in a list element
|
||||
*
|
||||
* @param string $section name of config section in $GLOBALS['cfg'][$section] for plugin
|
||||
* config
|
||||
* section in
|
||||
* $GLOBALS['cfg'][$section]
|
||||
* for plugin
|
||||
* @param string $plugin_name unique plugin name
|
||||
* name
|
||||
* @param array|\PhpMyAdmin\Properties\PropertyItem &$propertyGroup options
|
||||
* property main
|
||||
* group
|
||||
* instance
|
||||
* @param boolean $is_subgroup if this group is a subgroup
|
||||
* is a subgroup
|
||||
*
|
||||
* @return string table row with option
|
||||
*/
|
||||
function PMA_pluginGetOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
&$propertyGroup,
|
||||
$is_subgroup = false
|
||||
) {
|
||||
$ret = "\n";
|
||||
|
||||
if (! $is_subgroup) {
|
||||
// for subgroup headers
|
||||
if (mb_strpos(get_class($propertyGroup), "PropertyItem")) {
|
||||
$properties = array($propertyGroup);
|
||||
} else {
|
||||
// for main groups
|
||||
$ret .= '<div class="export_sub_options" id="' . $plugin_name . '_'
|
||||
. $propertyGroup->getName() . '">';
|
||||
|
||||
if (method_exists($propertyGroup, 'getText')) {
|
||||
$text = $propertyGroup->getText();
|
||||
}
|
||||
|
||||
if ($text != null) {
|
||||
$ret .= '<h4>' . PMA_getString($text) . '</h4>';
|
||||
}
|
||||
$ret .= '<ul>';
|
||||
}
|
||||
}
|
||||
|
||||
if (! isset($properties)) {
|
||||
$not_subgroup_header = true;
|
||||
if (method_exists($propertyGroup, 'getProperties')) {
|
||||
$properties = $propertyGroup->getProperties();
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($properties)) {
|
||||
/** @var OptionsPropertySubgroup $propertyItem */
|
||||
foreach ($properties as $propertyItem) {
|
||||
$property_class = get_class($propertyItem);
|
||||
// if the property is a subgroup, we deal with it recursively
|
||||
if (mb_strpos($property_class, "Subgroup")) {
|
||||
// for subgroups
|
||||
// each subgroup can have a header, which may also be a form element
|
||||
/** @var OptionsPropertyItem $subgroup_header */
|
||||
$subgroup_header = $propertyItem->getSubgroupHeader();
|
||||
if (isset($subgroup_header)) {
|
||||
$ret .= PMA_pluginGetOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$subgroup_header
|
||||
);
|
||||
}
|
||||
|
||||
$ret .= '<li class="subgroup"><ul';
|
||||
if (isset($subgroup_header)) {
|
||||
$ret .= ' id="ul_' . $subgroup_header->getName() . '">';
|
||||
} else {
|
||||
$ret .= '>';
|
||||
}
|
||||
|
||||
$ret .= PMA_pluginGetOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$propertyItem,
|
||||
true
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// single property item
|
||||
$ret .= PMA_getHtmlForProperty(
|
||||
$section, $plugin_name, $propertyItem
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($is_subgroup) {
|
||||
// end subgroup
|
||||
$ret .= '</ul></li>';
|
||||
} else {
|
||||
// end main group
|
||||
if (! empty($not_subgroup_header)) {
|
||||
$ret .= '</ul></div>';
|
||||
}
|
||||
}
|
||||
|
||||
if (method_exists($propertyGroup, "getDoc")) {
|
||||
$doc = $propertyGroup->getDoc();
|
||||
if ($doc != null) {
|
||||
if (count($doc) == 3) {
|
||||
$ret .= PhpMyAdmin\Util::showMySQLDocu(
|
||||
$doc[1],
|
||||
false,
|
||||
$doc[2]
|
||||
);
|
||||
} elseif (count($doc) == 1) {
|
||||
$ret .= PhpMyAdmin\Util::showDocu('faq', $doc[0]);
|
||||
} else {
|
||||
$ret .= PhpMyAdmin\Util::showMySQLDocu(
|
||||
$doc[1]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the list element after $doc link is displayed
|
||||
if (isset($property_class)) {
|
||||
if ($property_class == 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem'
|
||||
|| $property_class == 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem'
|
||||
) {
|
||||
$ret .= '</li>';
|
||||
}
|
||||
}
|
||||
$ret .= "\n";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get HTML for properties items
|
||||
*
|
||||
* @param string $section name of config section in
|
||||
* $GLOBALS['cfg'][$section] for plugin
|
||||
* @param string $plugin_name unique plugin name
|
||||
* @param OptionsPropertyItem $propertyItem Property item
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForProperty(
|
||||
$section, $plugin_name, $propertyItem
|
||||
) {
|
||||
$ret = null;
|
||||
$property_class = get_class($propertyItem);
|
||||
switch ($property_class) {
|
||||
case 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<input type="checkbox" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="something" id="checkbox_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' '
|
||||
. PMA_pluginCheckboxCheck(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
|
||||
if ($propertyItem->getForce() != null) {
|
||||
// Same code is also few lines lower, update both if needed
|
||||
$ret .= ' onclick="if (!this.checked && '
|
||||
. '(!document.getElementById(\'checkbox_' . $plugin_name
|
||||
. '_' . $propertyItem->getForce() . '\') '
|
||||
. '|| !document.getElementById(\'checkbox_'
|
||||
. $plugin_name . '_' . $propertyItem->getForce()
|
||||
. '\').checked)) '
|
||||
. 'return false; else return true;"';
|
||||
}
|
||||
$ret .= ' />';
|
||||
$ret .= '<label for="checkbox_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '">'
|
||||
. PMA_getString($propertyItem->getText()) . '</label>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem':
|
||||
echo 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem':
|
||||
$ret .= '<li><input type="hidden" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="' . PMA_pluginGetDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
)
|
||||
. '"' . ' /></li>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<p>' . PMA_getString($propertyItem->getText()) . '</p>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\RadioPropertyItem':
|
||||
$default = PMA_pluginGetDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
foreach ($propertyItem->getValues() as $key => $val) {
|
||||
$ret .= '<li><input type="radio" name="' . $plugin_name
|
||||
. '_' . $propertyItem->getName() . '" value="' . $key
|
||||
. '" id="radio_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '_' . $key . '"';
|
||||
if ($key == $default) {
|
||||
$ret .= ' checked="checked"';
|
||||
}
|
||||
$ret .= ' />' . '<label for="radio_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '_' . $key . '">'
|
||||
. PMA_getString($val) . '</label></li>';
|
||||
}
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<label for="select_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '" class="desc">'
|
||||
. PMA_getString($propertyItem->getText()) . '</label>';
|
||||
$ret .= '<select name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' id="select_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '">';
|
||||
$default = PMA_pluginGetDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
);
|
||||
foreach ($propertyItem->getValues() as $key => $val) {
|
||||
$ret .= '<option value="' . $key . '"';
|
||||
if ($key == $default) {
|
||||
$ret .= ' selected="selected"';
|
||||
}
|
||||
$ret .= '>' . PMA_getString($val) . '</option>';
|
||||
}
|
||||
$ret .= '</select>';
|
||||
break;
|
||||
case 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem':
|
||||
case 'PhpMyAdmin\Properties\Options\Items\NumberPropertyItem':
|
||||
$ret .= '<li>' . "\n";
|
||||
$ret .= '<label for="text_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '" class="desc">'
|
||||
. PMA_getString($propertyItem->getText()) . '</label>';
|
||||
$ret .= '<input type="text" name="' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ' value="' . PMA_pluginGetDefault(
|
||||
$section,
|
||||
$plugin_name . '_' . $propertyItem->getName()
|
||||
) . '"'
|
||||
. ' id="text_' . $plugin_name . '_'
|
||||
. $propertyItem->getName() . '"'
|
||||
. ($propertyItem->getSize() != null
|
||||
? ' size="' . $propertyItem->getSize() . '"'
|
||||
: '')
|
||||
. ($propertyItem->getLen() != null
|
||||
? ' maxlength="' . $propertyItem->getLen() . '"'
|
||||
: '')
|
||||
. ' />';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns html div with editable options for plugin
|
||||
*
|
||||
* @param string $section name of config section in $GLOBALS['cfg'][$section]
|
||||
* @param array &$list array with plugin instances
|
||||
*
|
||||
* @return string html fieldset with plugin options
|
||||
*/
|
||||
function PMA_pluginGetOptions($section, &$list)
|
||||
{
|
||||
$ret = '';
|
||||
// Options for plugins that support them
|
||||
foreach ($list as $plugin) {
|
||||
$properties = $plugin->getProperties();
|
||||
if ($properties != null) {
|
||||
$text = $properties->getText();
|
||||
$options = $properties->getOptions();
|
||||
}
|
||||
|
||||
$elem = explode('\\', get_class($plugin));
|
||||
$plugin_name = array_pop($elem);
|
||||
unset($elem);
|
||||
$plugin_name = mb_strtolower(
|
||||
mb_substr(
|
||||
$plugin_name,
|
||||
mb_strlen($section)
|
||||
)
|
||||
);
|
||||
|
||||
$ret .= '<div id="' . $plugin_name
|
||||
. '_options" class="format_specific_options">';
|
||||
$ret .= '<h3>' . PMA_getString($text) . '</h3>';
|
||||
|
||||
$no_options = true;
|
||||
if (! is_null($options) && count($options) > 0) {
|
||||
foreach ($options->getProperties()
|
||||
as $propertyMainGroup
|
||||
) {
|
||||
// check for hidden properties
|
||||
$no_options = true;
|
||||
foreach ($propertyMainGroup->getProperties() as $propertyItem) {
|
||||
if (strcmp('PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem', get_class($propertyItem))) {
|
||||
$no_options = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$ret .= PMA_pluginGetOneOption(
|
||||
$section,
|
||||
$plugin_name,
|
||||
$propertyMainGroup
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($no_options) {
|
||||
$ret .= '<p>' . __('This format has no options') . '</p>';
|
||||
}
|
||||
$ret .= '</div>';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
@ -1,357 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Set of functions used for cleaning up phpMyAdmin tables
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Relation;
|
||||
|
||||
/**
|
||||
* Cleanup column related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
* @param string $column column name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_relationsCleanupColumn($db, $table, $column)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND column_name = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND display_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND master_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND foreign_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND foreign_field = \'' . $GLOBALS['dbi']->escapeString($column)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup table related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
* @param string $table table name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_relationsCleanupTable($db, $table)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['pdfwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_coords'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\''
|
||||
. ' AND foreign_table = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['navigationhiding'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\''
|
||||
. ' AND (table_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' OR (item_name = \'' . $GLOBALS['dbi']->escapeString($table)
|
||||
. '\''
|
||||
. ' AND item_type = \'table\'))';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup database related relation stuff
|
||||
*
|
||||
* @param string $db database name
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_relationsCleanupDatabase($db)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['commwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['column_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['bookmarkwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['bookmark'])
|
||||
. ' WHERE dbase = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['displaywork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_info'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['pdfwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['pdf_pages'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_coords'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['relwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE master_db = \''
|
||||
. $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['relation'])
|
||||
. ' WHERE foreign_db = \'' . $GLOBALS['dbi']->escapeString($db)
|
||||
. '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['navigationhiding'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['savedsearcheswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['savedsearches'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['centralcolumnswork']) {
|
||||
$remove_query = 'DELETE FROM '
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. '.' . PhpMyAdmin\Util::backquote($cfgRelation['central_columns'])
|
||||
. ' WHERE db_name = \'' . $GLOBALS['dbi']->escapeString($db) . '\'';
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup user related relation stuff
|
||||
*
|
||||
* @param string $username username
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_relationsCleanupUser($username)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
if ($cfgRelation['bookmarkwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['bookmark'])
|
||||
. " WHERE `user` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['historywork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['history'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['recentwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['recent'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['favoritework']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['favorite'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['uiprefswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['table_uiprefs'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['userconfigwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['userconfig'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['menuswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['users'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['navwork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['navigationhiding'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['savedsearcheswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['savedsearches'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
|
||||
if ($cfgRelation['designersettingswork']) {
|
||||
$remove_query = "DELETE FROM "
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['db'])
|
||||
. "." . PhpMyAdmin\Util::backquote($cfgRelation['designer_settings'])
|
||||
. " WHERE `username` = '" . $GLOBALS['dbi']->escapeString($username)
|
||||
. "'";
|
||||
Relation::queryAsControlUser($remove_query);
|
||||
}
|
||||
}
|
||||
@ -1,115 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Code for displaying server selection
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Url;
|
||||
|
||||
/**
|
||||
* Renders the server selection in list or selectbox form, or option tags only
|
||||
*
|
||||
* @param boolean $not_only_options whether to include form tags or not
|
||||
* @param boolean $omit_fieldset whether to omit fieldset tag or not
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_selectServer($not_only_options, $omit_fieldset)
|
||||
{
|
||||
$retval = '';
|
||||
|
||||
// Show as list?
|
||||
if ($not_only_options) {
|
||||
$list = $GLOBALS['cfg']['DisplayServersList'];
|
||||
$not_only_options =! $list;
|
||||
} else {
|
||||
$list = false;
|
||||
}
|
||||
|
||||
if ($not_only_options) {
|
||||
$retval .= '<form method="post" action="'
|
||||
. PhpMyAdmin\Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabServer'], 'server'
|
||||
)
|
||||
. '" class="disableAjax">';
|
||||
|
||||
if (! $omit_fieldset) {
|
||||
$retval .= '<fieldset>';
|
||||
}
|
||||
|
||||
$retval .= Url::getHiddenFields(array());
|
||||
$retval .= '<label for="select_server">'
|
||||
. __('Current server:') . '</label> ';
|
||||
|
||||
$retval .= '<select name="server" id="select_server" class="autosubmit">';
|
||||
$retval .= '<option value="">(' . __('Servers') . ') ...</option>' . "\n";
|
||||
} elseif ($list) {
|
||||
$retval .= __('Current server:') . '<br />';
|
||||
$retval .= '<ul id="list_server">';
|
||||
}
|
||||
|
||||
foreach ($GLOBALS['cfg']['Servers'] as $key => $server) {
|
||||
if (empty($server['host'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($GLOBALS['server']) && (int) $GLOBALS['server'] === (int) $key) {
|
||||
$selected = 1;
|
||||
} else {
|
||||
$selected = 0;
|
||||
}
|
||||
if (!empty($server['verbose'])) {
|
||||
$label = $server['verbose'];
|
||||
} else {
|
||||
$label = $server['host'];
|
||||
if (!empty($server['port'])) {
|
||||
$label .= ':' . $server['port'];
|
||||
}
|
||||
}
|
||||
if (! empty($server['only_db'])) {
|
||||
if (! is_array($server['only_db'])) {
|
||||
$label .= ' - ' . $server['only_db'];
|
||||
// try to avoid displaying a too wide selector
|
||||
} elseif (count($server['only_db']) < 4) {
|
||||
$label .= ' - ' . implode(', ', $server['only_db']);
|
||||
}
|
||||
}
|
||||
if (!empty($server['user']) && $server['auth_type'] == 'config') {
|
||||
$label .= ' (' . $server['user'] . ')';
|
||||
}
|
||||
|
||||
if ($list) {
|
||||
$retval .= '<li>';
|
||||
if ($selected) {
|
||||
$retval .= '<strong>' . htmlspecialchars($label) . '</strong>';
|
||||
} else {
|
||||
|
||||
$retval .= '<a class="disableAjax item" href="'
|
||||
. PhpMyAdmin\Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabServer'], 'server'
|
||||
)
|
||||
. Url::getCommon(array('server' => $key))
|
||||
. '" >' . htmlspecialchars($label) . '</a>';
|
||||
}
|
||||
$retval .= '</li>';
|
||||
} else {
|
||||
$retval .= '<option value="' . $key . '" '
|
||||
. ($selected ? ' selected="selected"' : '') . '>'
|
||||
. htmlspecialchars($label) . '</option>' . "\n";
|
||||
}
|
||||
} // end while
|
||||
|
||||
if ($not_only_options) {
|
||||
$retval .= '</select>';
|
||||
if (! $omit_fieldset) {
|
||||
$retval .= '</fieldset>';
|
||||
}
|
||||
$retval .= '</form>';
|
||||
} elseif ($list) {
|
||||
$retval .= '</ul>';
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
@ -1,254 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Functions for displaying user preferences pages
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Config\ConfigFile;
|
||||
use PhpMyAdmin\Config\Forms\User\UserFormList;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Relation;
|
||||
use PhpMyAdmin\Url;
|
||||
|
||||
if (! defined('PHPMYADMIN')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Common initialization for user preferences modification pages
|
||||
*
|
||||
* @param ConfigFile $cf Config file instance
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_userprefsPageInit(ConfigFile $cf)
|
||||
{
|
||||
$forms_all_keys = UserFormList::getFields();
|
||||
$cf->resetConfigData(); // start with a clean instance
|
||||
$cf->setAllowedKeys($forms_all_keys);
|
||||
$cf->setCfgUpdateReadMapping(
|
||||
array(
|
||||
'Server/hide_db' => 'Servers/1/hide_db',
|
||||
'Server/only_db' => 'Servers/1/only_db'
|
||||
)
|
||||
);
|
||||
$cf->updateWithGlobalConfig($GLOBALS['cfg']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads user preferences
|
||||
*
|
||||
* Returns an array:
|
||||
* * config_data - path => value pairs
|
||||
* * mtime - last modification time
|
||||
* * type - 'db' (config read from pmadb) or 'session' (read from user session)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_loadUserprefs()
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
if (! $cfgRelation['userconfigwork']) {
|
||||
// no pmadb table, use session storage
|
||||
if (! isset($_SESSION['userconfig'])) {
|
||||
$_SESSION['userconfig'] = array(
|
||||
'db' => array(),
|
||||
'ts' => time());
|
||||
}
|
||||
return array(
|
||||
'config_data' => $_SESSION['userconfig']['db'],
|
||||
'mtime' => $_SESSION['userconfig']['ts'],
|
||||
'type' => 'session');
|
||||
}
|
||||
// load configuration from pmadb
|
||||
$query_table = PhpMyAdmin\Util::backquote($cfgRelation['db']) . '.'
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['userconfig']);
|
||||
$query = 'SELECT `config_data`, UNIX_TIMESTAMP(`timevalue`) ts'
|
||||
. ' FROM ' . $query_table
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
$row = $GLOBALS['dbi']->fetchSingleRow($query, 'ASSOC', $GLOBALS['controllink']);
|
||||
|
||||
return array(
|
||||
'config_data' => $row ? (array)json_decode($row['config_data']) : array(),
|
||||
'mtime' => $row ? $row['ts'] : time(),
|
||||
'type' => 'db');
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves user preferences
|
||||
*
|
||||
* @param array $config_array configuration array
|
||||
*
|
||||
* @return true|PhpMyAdmin\Message
|
||||
*/
|
||||
function PMA_saveUserprefs(array $config_array)
|
||||
{
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
$server = isset($GLOBALS['server'])
|
||||
? $GLOBALS['server']
|
||||
: $GLOBALS['cfg']['ServerDefault'];
|
||||
$cache_key = 'server_' . $server;
|
||||
if (! $cfgRelation['userconfigwork']) {
|
||||
// no pmadb table, use session storage
|
||||
$_SESSION['userconfig'] = array(
|
||||
'db' => $config_array,
|
||||
'ts' => time());
|
||||
if (isset($_SESSION['cache'][$cache_key]['userprefs'])) {
|
||||
unset($_SESSION['cache'][$cache_key]['userprefs']);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// save configuration to pmadb
|
||||
$query_table = PhpMyAdmin\Util::backquote($cfgRelation['db']) . '.'
|
||||
. PhpMyAdmin\Util::backquote($cfgRelation['userconfig']);
|
||||
$query = 'SELECT `username` FROM ' . $query_table
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
|
||||
$has_config = $GLOBALS['dbi']->fetchValue(
|
||||
$query, 0, 0, $GLOBALS['controllink']
|
||||
);
|
||||
$config_data = json_encode($config_array);
|
||||
if ($has_config) {
|
||||
$query = 'UPDATE ' . $query_table
|
||||
. ' SET `timevalue` = NOW(), `config_data` = \''
|
||||
. $GLOBALS['dbi']->escapeString($config_data)
|
||||
. '\''
|
||||
. ' WHERE `username` = \''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user'])
|
||||
. '\'';
|
||||
} else {
|
||||
$query = 'INSERT INTO ' . $query_table
|
||||
. ' (`username`, `timevalue`,`config_data`) '
|
||||
. 'VALUES (\''
|
||||
. $GLOBALS['dbi']->escapeString($cfgRelation['user']) . '\', NOW(), '
|
||||
. '\'' . $GLOBALS['dbi']->escapeString($config_data) . '\')';
|
||||
}
|
||||
if (isset($_SESSION['cache'][$cache_key]['userprefs'])) {
|
||||
unset($_SESSION['cache'][$cache_key]['userprefs']);
|
||||
}
|
||||
if (!$GLOBALS['dbi']->tryQuery($query, $GLOBALS['controllink'])) {
|
||||
$message = Message::error(__('Could not save configuration'));
|
||||
$message->addMessage(
|
||||
Message::rawError(
|
||||
$GLOBALS['dbi']->getError($GLOBALS['controllink'])
|
||||
),
|
||||
'<br /><br />'
|
||||
);
|
||||
return $message;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a user preferences array filtered by $cfg['UserprefsDisallow']
|
||||
* (blacklist) and keys from user preferences form (whitelist)
|
||||
*
|
||||
* @param array $config_data path => value pairs
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_applyUserprefs(array $config_data)
|
||||
{
|
||||
$cfg = array();
|
||||
$blacklist = array_flip($GLOBALS['cfg']['UserprefsDisallow']);
|
||||
$whitelist = array_flip(UserFormList::getFields());
|
||||
// whitelist some additional fields which are custom handled
|
||||
$whitelist['ThemeDefault'] = true;
|
||||
$whitelist['fontsize'] = true;
|
||||
$whitelist['lang'] = true;
|
||||
$whitelist['collation_connection'] = true;
|
||||
$whitelist['Server/hide_db'] = true;
|
||||
$whitelist['Server/only_db'] = true;
|
||||
foreach ($config_data as $path => $value) {
|
||||
if (! isset($whitelist[$path]) || isset($blacklist[$path])) {
|
||||
continue;
|
||||
}
|
||||
Core::arrayWrite($path, $cfg, $value);
|
||||
}
|
||||
return $cfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates one user preferences option (loads and saves to database).
|
||||
*
|
||||
* No validation is done!
|
||||
*
|
||||
* @param string $path configuration
|
||||
* @param mixed $value value
|
||||
* @param mixed $default_value default value
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_persistOption($path, $value, $default_value)
|
||||
{
|
||||
$prefs = PMA_loadUserprefs();
|
||||
if ($value === $default_value) {
|
||||
if (isset($prefs['config_data'][$path])) {
|
||||
unset($prefs['config_data'][$path]);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$prefs['config_data'][$path] = $value;
|
||||
}
|
||||
PMA_saveUserprefs($prefs['config_data']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirects after saving new user preferences
|
||||
*
|
||||
* @param string $file_name Filename
|
||||
* @param array $params URL parameters
|
||||
* @param string $hash Hash value
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_userprefsRedirect($file_name,
|
||||
$params = null, $hash = null
|
||||
) {
|
||||
// redirect
|
||||
$url_params = array('saved' => 1);
|
||||
if (is_array($params)) {
|
||||
$url_params = array_merge($params, $url_params);
|
||||
}
|
||||
if ($hash) {
|
||||
$hash = '#' . urlencode($hash);
|
||||
}
|
||||
Core::sendHeaderLocation('./' . $file_name
|
||||
. Url::getCommonRaw($url_params) . $hash
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows form which allows to quickly load
|
||||
* settings stored in browser's local storage
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_userprefsAutoloadGetHeader()
|
||||
{
|
||||
if (isset($_REQUEST['prefs_autoload'])
|
||||
&& $_REQUEST['prefs_autoload'] == 'hide'
|
||||
) {
|
||||
$_SESSION['userprefs_autoload'] = true;
|
||||
return '';
|
||||
}
|
||||
|
||||
$script_name = basename(basename($GLOBALS['PMA_PHP_SELF']));
|
||||
$return_url = $script_name . '?' . http_build_query($_GET, '', '&');
|
||||
|
||||
return PhpMyAdmin\Template::get('prefs_autoload')
|
||||
->render(
|
||||
array(
|
||||
'hidden_inputs' => Url::getHiddenInputs(),
|
||||
'return_url' => $return_url,
|
||||
)
|
||||
);
|
||||
}
|
||||
@ -10,15 +10,15 @@ use PhpMyAdmin\Config\Forms\User\UserFormList;
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
|
||||
/**
|
||||
* Gets some core libraries and displays a top message if required
|
||||
*/
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
|
||||
$cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings);
|
||||
PMA_userprefsPageInit($cf);
|
||||
UserPreferences::pageInit($cf);
|
||||
|
||||
// handle form processing
|
||||
|
||||
@ -45,13 +45,13 @@ if (isset($_POST['revert'])) {
|
||||
$error = null;
|
||||
if ($form_display->process(false) && !$form_display->hasErrors()) {
|
||||
// save settings
|
||||
$result = PMA_saveUserprefs($cf->getConfigArray());
|
||||
$result = UserPreferences::save($cf->getConfigArray());
|
||||
if ($result === true) {
|
||||
// reload config
|
||||
$GLOBALS['PMA_Config']->loadUserPreferences();
|
||||
$tabHash = isset($_POST['tab_hash']) ? $_POST['tab_hash'] : null;
|
||||
$hash = ltrim($tabHash, '#');
|
||||
PMA_userprefsRedirect(
|
||||
UserPreferences::redirect(
|
||||
'prefs_forms.php',
|
||||
array('form' => $form_param),
|
||||
$hash
|
||||
|
||||
@ -11,19 +11,19 @@ use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\File;
|
||||
use PhpMyAdmin\Message;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Util;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Sanitize;
|
||||
use PhpMyAdmin\ThemeManager;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
/**
|
||||
* Gets some core libraries and displays a top message if required
|
||||
*/
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
|
||||
$cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings);
|
||||
PMA_userprefsPageInit($cf);
|
||||
UserPreferences::pageInit($cf);
|
||||
$response = Response::getInstance();
|
||||
|
||||
$error = '';
|
||||
@ -35,7 +35,7 @@ if (isset($_POST['submit_export'])
|
||||
$response->disable();
|
||||
$filename = 'phpMyAdmin-config-' . urlencode(Core::getenv('HTTP_HOST')) . '.json';
|
||||
Core::downloadHeader($filename, 'application/json');
|
||||
$settings = PMA_loadUserprefs();
|
||||
$settings = UserPreferences::load();
|
||||
echo json_encode($settings['config_data'], JSON_PRETTY_PRINT);
|
||||
exit;
|
||||
} elseif (isset($_POST['submit_export'])
|
||||
@ -46,7 +46,7 @@ if (isset($_POST['submit_export'])
|
||||
$response->disable();
|
||||
$filename = 'phpMyAdmin-config-' . urlencode(Core::getenv('HTTP_HOST')) . '.php';
|
||||
Core::downloadHeader($filename, 'application/php');
|
||||
$settings = PMA_loadUserprefs();
|
||||
$settings = UserPreferences::load();
|
||||
echo '/* ' . _('phpMyAdmin configuration snippet') . " */\n\n";
|
||||
echo '/* ' . _('Paste it to your config.inc.php') . " */\n\n";
|
||||
foreach ($settings['config_data'] as $key => $val) {
|
||||
@ -55,7 +55,7 @@ if (isset($_POST['submit_export'])
|
||||
}
|
||||
exit;
|
||||
} else if (isset($_POST['submit_get_json'])) {
|
||||
$settings = PMA_loadUserprefs();
|
||||
$settings = UserPreferences::load();
|
||||
$response->addJSON('prefs', json_encode($settings['config_data']));
|
||||
$response->addJSON('mtime', $settings['mtime']);
|
||||
exit;
|
||||
@ -172,7 +172,7 @@ if (isset($_POST['submit_export'])
|
||||
}
|
||||
|
||||
// save settings
|
||||
$result = PMA_saveUserprefs($cf->getConfigArray());
|
||||
$result = UserPreferences::save($cf->getConfigArray());
|
||||
if ($result === true) {
|
||||
if ($return_url) {
|
||||
$query = PhpMyAdmin\Util::splitURLQuery($return_url);
|
||||
@ -191,14 +191,14 @@ if (isset($_POST['submit_export'])
|
||||
}
|
||||
// reload config
|
||||
$GLOBALS['PMA_Config']->loadUserPreferences();
|
||||
PMA_userprefsRedirect($return_url, $params);
|
||||
UserPreferences::redirect($return_url, $params);
|
||||
exit;
|
||||
} else {
|
||||
$error = $result;
|
||||
}
|
||||
}
|
||||
} else if (isset($_POST['submit_clear'])) {
|
||||
$result = PMA_saveUserprefs(array());
|
||||
$result = UserPreferences::save(array());
|
||||
if ($result === true) {
|
||||
$params = array();
|
||||
if ($GLOBALS['PMA_Config']->get('fontsize') != '82%') {
|
||||
@ -206,7 +206,7 @@ if (isset($_POST['submit_export'])
|
||||
}
|
||||
$GLOBALS['PMA_Config']->removeCookie('pma_collaction_connection');
|
||||
$GLOBALS['PMA_Config']->removeCookie('pma_lang');
|
||||
PMA_userprefsRedirect('prefs_manage.php', $params);
|
||||
UserPreferences::redirect('prefs_manage.php', $params);
|
||||
exit;
|
||||
} else {
|
||||
$error = $result;
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Plugins\SchemaPlugin;
|
||||
use PhpMyAdmin\Relation;
|
||||
|
||||
@ -22,7 +23,6 @@ require_once 'libraries/common.inc.php';
|
||||
$cfgRelation = Relation::getRelationsParam();
|
||||
|
||||
require_once 'libraries/pmd_common.php';
|
||||
require_once 'libraries/plugin_interface.lib.php';
|
||||
|
||||
if (! isset($_REQUEST['export_type'])) {
|
||||
PhpMyAdmin\Util::checkParameters(array('export_type'));
|
||||
@ -56,7 +56,7 @@ function PMA_processExportSchema($export_type)
|
||||
|
||||
// get the specific plugin
|
||||
/* @var $export_plugin SchemaPlugin */
|
||||
$export_plugin = PMA_getPlugin(
|
||||
$export_plugin = Plugins::getPlugin(
|
||||
"schema",
|
||||
$export_type,
|
||||
'libraries/classes/Plugins/Schema/'
|
||||
|
||||
@ -278,7 +278,6 @@ if (isset($_REQUEST['change_pw'])) {
|
||||
if (isset($_REQUEST['delete'])
|
||||
|| (isset($_REQUEST['change_copy']) && $_REQUEST['mode'] < 4)
|
||||
) {
|
||||
include_once 'libraries/relation_cleanup.lib.php';
|
||||
$queries = Privileges::getDataForDeleteUsers($queries);
|
||||
if (empty($_REQUEST['change_copy'])) {
|
||||
list($sql_query, $message) = Privileges::deleteUser($queries);
|
||||
|
||||
@ -19,7 +19,6 @@ if (!file_exists('./libraries/common.inc.php')) {
|
||||
}
|
||||
|
||||
require_once './libraries/common.inc.php';
|
||||
require_once './libraries/user_preferences.lib.php';
|
||||
require_once './setup/lib/ConfigGenerator.php';
|
||||
|
||||
// use default error handler
|
||||
@ -48,4 +47,3 @@ $GLOBALS['ConfigFile']->setPersistKeys(
|
||||
|
||||
// allows for redirection even after sending some data
|
||||
ob_start();
|
||||
|
||||
|
||||
4
sql.php
4
sql.php
@ -8,6 +8,7 @@
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
use PhpMyAdmin\Config\PageSettings;
|
||||
use PhpMyAdmin\ParseAnalyze;
|
||||
use PhpMyAdmin\Response;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\Url;
|
||||
@ -130,12 +131,11 @@ if (empty($sql_query) && strlen($table) > 0 && strlen($db) > 0) {
|
||||
/**
|
||||
* Parse and analyze the query
|
||||
*/
|
||||
require_once 'libraries/parse_analyze.lib.php';
|
||||
list(
|
||||
$analyzed_sql_results,
|
||||
$db,
|
||||
$table_from_sql
|
||||
) = PMA_parseAnalyze($sql_query, $db);
|
||||
) = ParseAnalyze::sqlQuery($sql_query, $db);
|
||||
// @todo: possibly refactor
|
||||
extract($analyzed_sql_results);
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Mime;
|
||||
|
||||
/**
|
||||
* Common functions.
|
||||
@ -15,7 +16,6 @@ use PhpMyAdmin\Core;
|
||||
// data
|
||||
define('PMA_BYPASS_GET_INSTANCE', 1);
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/mime.lib.php';
|
||||
|
||||
/* Check parameters */
|
||||
PhpMyAdmin\Util::checkParameters(
|
||||
@ -53,7 +53,7 @@ if ($result === false) {
|
||||
|
||||
Core::downloadHeader(
|
||||
$table . '-' . $_GET['transform_key'] . '.bin',
|
||||
PMA_detectMIME($result),
|
||||
Mime::detect($result),
|
||||
strlen($result)
|
||||
);
|
||||
echo $result;
|
||||
|
||||
@ -426,7 +426,7 @@ if (! (isset($db_is_system_schema) && $db_is_system_schema)) {
|
||||
htmlspecialchars($table)
|
||||
),
|
||||
// table name is needed to avoid running
|
||||
// PMA_relationsCleanupDatabase() on the whole db later
|
||||
// PhpMyAdmin\RelationCleanup::database() on the whole db later
|
||||
'table' => $GLOBALS['table'],
|
||||
)
|
||||
);
|
||||
|
||||
@ -2,10 +2,10 @@
|
||||
<fieldset>
|
||||
<?= PhpMyAdmin\Url::getHiddenInputs($db); ?>
|
||||
<label><?= __('Select Export Relational Type'); ?></label><br/>
|
||||
<?= PMA_pluginGetChoice(
|
||||
<?= PhpMyAdmin\Plugins::getChoice(
|
||||
'Schema', 'export_type', $export_list, 'format'
|
||||
); ?>
|
||||
<input type="hidden" name="page_number" value="<?= htmlspecialchars($page); ?>" />
|
||||
<?= PMA_pluginGetOptions('Schema', $export_list); ?>
|
||||
<?= PhpMyAdmin\Plugins::getOptions('Schema', $export_list); ?>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
@ -9,11 +9,6 @@ namespace PhpMyAdmin\Tests\Database;
|
||||
use PhpMyAdmin\Database\Designer;
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/plugin_interface.lib.php';
|
||||
|
||||
/**
|
||||
* Tests for PhpMyAdmin\Database\Designer
|
||||
*
|
||||
|
||||
@ -9,12 +9,11 @@ namespace PhpMyAdmin\Tests\Display;
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
use PhpMyAdmin\Display\Export;
|
||||
use PhpMyAdmin\Plugins;
|
||||
use PhpMyAdmin\Theme;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
require_once 'libraries/plugin_interface.lib.php';
|
||||
|
||||
/**
|
||||
* class PhpMyAdmin\Tests\Display\ExportTest
|
||||
*
|
||||
@ -148,7 +147,7 @@ class ExportTest extends \PHPUnit_Framework_TestCase
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
/* Scan for plugins */
|
||||
$export_list = PMA_getPlugins(
|
||||
$export_list = Plugins::getPlugins(
|
||||
"export",
|
||||
'libraries/classes/Plugins/Export/',
|
||||
array(
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for ip_allow_deny.lib.php
|
||||
* tests for PhpMyAdmin\IpAllowDeny
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin\Tests;
|
||||
|
||||
use PhpMyAdmin\Core;
|
||||
|
||||
require_once 'libraries/ip_allow_deny.lib.php';
|
||||
use PhpMyAdmin\IpAllowDeny;
|
||||
|
||||
/**
|
||||
* PMA_Ip_Allow_Deny_Test class
|
||||
* PhpMyAdmin\Tests\IpAllowDenyTest class
|
||||
*
|
||||
* this class is for testing ip_allow_deny.lib.php
|
||||
* this class is for testing PhpMyAdmin\IpAllowDeny
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
class IpAllowDenyTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
@ -101,7 +101,7 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_ipMaskTest
|
||||
* Test for IpAllowDeny::ipMaskTest
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -112,26 +112,26 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
$ipToTest = "10.0.0.0";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
|
||||
$testRange = "255.255.0.0/4";
|
||||
$ipToTest = "255.3.0.0";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
|
||||
$testRange = "255.255.0.[0-10]";
|
||||
$ipToTest = "255.3.0.3";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
$ipToTest = "255.3.0.12";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
|
||||
//IPV6 testing
|
||||
@ -140,13 +140,13 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:1020";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1020";
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:2020";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
|
||||
//range
|
||||
@ -154,13 +154,13 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:3020";
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
|
||||
//CDIR
|
||||
@ -168,18 +168,18 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1000";
|
||||
$testRange = "2001:4998:c:a0d:0000:0000:4998:3020/24";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_ipMaskTest($testRange, $ipToTest)
|
||||
IpAllowDeny::ipMaskTest($testRange, $ipToTest)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_allowDeny
|
||||
* Test for IpAllowDeny::allowDeny
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -188,51 +188,51 @@ class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
|
||||
$_SERVER['REMOTE_ADDR'] = "";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = "255.0.1.0";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
$_SERVER['REMOTE_ADDR'] = "10.0.0.0";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = "255.255.0.1";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_allowDeny("deny")
|
||||
IpAllowDeny::allowDeny("deny")
|
||||
);
|
||||
$_SERVER['REMOTE_ADDR'] = "255.124.0.5";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_allowDeny("deny")
|
||||
IpAllowDeny::allowDeny("deny")
|
||||
);
|
||||
$_SERVER['REMOTE_ADDR'] = "122.124.0.5";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_allowDeny("deny")
|
||||
IpAllowDeny::allowDeny("deny")
|
||||
);
|
||||
|
||||
//IPV6
|
||||
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1020";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1000";
|
||||
$this->assertEquals(
|
||||
false,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1020";
|
||||
$this->assertEquals(
|
||||
true,
|
||||
PMA_allowDeny("allow")
|
||||
IpAllowDeny::allowDeny("allow")
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1,48 +1,45 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for mime.lib.php
|
||||
* tests for PhpMyAdmin\Mime
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin;
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
|
||||
require_once 'libraries/mime.lib.php';
|
||||
use PhpMyAdmin\Mime;
|
||||
|
||||
/**
|
||||
* Test for mime detection.
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_MIME_Test extends PHPUnit_Framework_TestCase
|
||||
class MimeTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for PMA_detectMIME
|
||||
* Test for Mime::detect
|
||||
*
|
||||
* @param string $test MIME to test
|
||||
* @param string $output Expected output
|
||||
*
|
||||
* @return void
|
||||
* @dataProvider providerForTestDetectMIME
|
||||
* @dataProvider providerForTestDetect
|
||||
*/
|
||||
public function testDetectMIME($test, $output)
|
||||
public function testDetect($test, $output)
|
||||
{
|
||||
|
||||
$this->assertEquals(
|
||||
PMA_detectMIME($test),
|
||||
Mime::detect($test),
|
||||
$output
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for testPMA_detectMIME
|
||||
* Provider for testDetect
|
||||
*
|
||||
* @return array data for testPMA_detectMIME
|
||||
* @return array data for testDetect
|
||||
*/
|
||||
public function providerForTestDetectMIME()
|
||||
public function providerForTestDetect()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
@ -1,28 +1,24 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for mult_submits.lib.php
|
||||
* tests for PhpMyAdmin\MultSubmits
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin\Tests;
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PhpMyAdmin\MultSubmits;
|
||||
use PhpMyAdmin\Theme;
|
||||
use PhpMyAdmin\Url;
|
||||
|
||||
require_once 'libraries/mult_submits.lib.php';
|
||||
require_once 'libraries/relation_cleanup.lib.php';
|
||||
|
||||
/**
|
||||
* class PMA_MultSubmits_Test
|
||||
* PhpMyAdmin\Tests\MultSubmitsTest class
|
||||
*
|
||||
* this class is for testing mult_submits.lib.php functions
|
||||
* this class is for testing PhpMyAdmin\MultSubmits methods
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
class MultSubmitsTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for setUp
|
||||
@ -73,7 +69,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getHtmlForReplacePrefixTable
|
||||
* Test for MultSubmits::getHtmlForReplacePrefixTable
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -83,7 +79,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$_url_params = array('url_query'=>'PMA_original_url_query');
|
||||
|
||||
//Call the test function
|
||||
$html = PMA_getHtmlForReplacePrefixTable($action, $_url_params);
|
||||
$html = MultSubmits::getHtmlForReplacePrefixTable($action, $_url_params);
|
||||
|
||||
//form action
|
||||
$this->assertContains(
|
||||
@ -103,7 +99,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getHtmlForAddPrefixTable
|
||||
* Test for MultSubmits::getHtmlForAddPrefixTable
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -113,7 +109,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$_url_params = array('url_query'=>'PMA_original_url_query');
|
||||
|
||||
//Call the test function
|
||||
$html = PMA_getHtmlForAddPrefixTable($action, $_url_params);
|
||||
$html = MultSubmits::getHtmlForAddPrefixTable($action, $_url_params);
|
||||
|
||||
//form action
|
||||
$this->assertContains(
|
||||
@ -133,7 +129,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getHtmlForOtherActions
|
||||
* Test for MultSubmits::getHtmlForOtherActions
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -145,7 +141,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$full_query = 'select column from PMA_table';
|
||||
|
||||
//Call the test function
|
||||
$html = PMA_getHtmlForOtherActions(
|
||||
$html = MultSubmits::getHtmlForOtherActions(
|
||||
$what, $action, $_url_params, $full_query
|
||||
);
|
||||
|
||||
@ -181,7 +177,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getUrlParams
|
||||
* Test for MultSubmits::getUrlParams
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -199,7 +195,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$original_sql_query = "original_sql_query";
|
||||
$original_url_query = "original_url_query";
|
||||
|
||||
$_url_params = PMA_getUrlParams(
|
||||
$_url_params = MultSubmits::getUrlParams(
|
||||
$what, $reload, $action, $db, $table, $selected, $views,
|
||||
$original_sql_query, $original_url_query
|
||||
);
|
||||
@ -226,7 +222,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_buildOrExecuteQueryForMulti
|
||||
* Test for MultSubmits::buildOrExecuteQueryForMulti
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -250,7 +246,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
list(
|
||||
$result, $rebuild_database_list, $reload_ret,
|
||||
$run_parts, $execute_query_later,,
|
||||
) = PMA_buildOrExecuteQueryForMulti(
|
||||
) = MultSubmits::buildOrExecuteQueryForMulti(
|
||||
$query_type, $selected, $db, $table, $views,
|
||||
$primary, $from_prefix, $to_prefix
|
||||
);
|
||||
@ -282,7 +278,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$query_type = 'analyze_tbl';
|
||||
list(
|
||||
,,,, $execute_query_later,,
|
||||
) = PMA_buildOrExecuteQueryForMulti(
|
||||
) = MultSubmits::buildOrExecuteQueryForMulti(
|
||||
$query_type, $selected, $db, $table, $views,
|
||||
$primary, $from_prefix, $to_prefix
|
||||
);
|
||||
@ -295,7 +291,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getQueryFromSelected
|
||||
* Test for MultSubmits::getQueryFromSelected
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -311,7 +307,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
|
||||
list($full_query, $reload, $full_query_views)
|
||||
= PMA_getQueryFromSelected(
|
||||
= MultSubmits::getQueryFromSelected(
|
||||
$what, $table, $selected, $views
|
||||
);
|
||||
|
||||
@ -336,7 +332,7 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
|
||||
$what = "drop_db";
|
||||
|
||||
list($full_query, $reload, $full_query_views)
|
||||
= PMA_getQueryFromSelected(
|
||||
= MultSubmits::getQueryFromSelected(
|
||||
$what, $table, $selected, $views
|
||||
);
|
||||
|
||||
@ -1,27 +1,25 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for relation_cleanup.lib.php
|
||||
* tests for PhpMyAdmin\RelationCleanup
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin\Tests;
|
||||
|
||||
use PhpMyAdmin\DatabaseInterface;
|
||||
use PhpMyAdmin\Relation;
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/relation_cleanup.lib.php';
|
||||
use PhpMyAdmin\RelationCleanup;
|
||||
use PHPUnit_Framework_TestCase as TestCase;
|
||||
|
||||
/**
|
||||
* PMA_Relation_Cleanup_Test class
|
||||
* PhpMyAdmin\Tests\RelationCleanupTest class
|
||||
*
|
||||
* this class is for testing relation_cleanup.lib.php functions
|
||||
* this class is for testing PhpMyAdmin\RelationCleanup methods
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
class RelationCleanupTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
@ -70,7 +68,7 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_relationsCleanupColumn
|
||||
* Test for RelationCleanup::column
|
||||
*
|
||||
* @return void
|
||||
* @group medium
|
||||
@ -123,7 +121,7 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
|
||||
//cleanup
|
||||
PMA_relationsCleanupColumn($db, $table, $column);
|
||||
RelationCleanup::column($db, $table, $column);
|
||||
|
||||
//the $cfgRelation value after cleanup column
|
||||
$cfgRelation = Relation::checkRelationsParam();
|
||||
@ -151,7 +149,7 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_relationsCleanupTable
|
||||
* Test for RelationCleanup::table
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -180,8 +178,8 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
$cfgRelation['relation']
|
||||
);
|
||||
|
||||
//PMA_relationsCleanupTable
|
||||
PMA_relationsCleanupTable($db, $table);
|
||||
//RelationCleanup::table
|
||||
RelationCleanup::table($db, $table);
|
||||
|
||||
//the $cfgRelation value after cleanup column
|
||||
$cfgRelation = Relation::checkRelationsParam();
|
||||
@ -216,7 +214,7 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_relationsCleanupDatabase
|
||||
* Test for RelationCleanup::database
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -253,7 +251,7 @@ class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
|
||||
//cleanup
|
||||
PMA_relationsCleanupDatabase($db);
|
||||
RelationCleanup::database($db);
|
||||
|
||||
//the value after cleanup column
|
||||
$cfgRelation = Relation::checkRelationsParam();
|
||||
@ -14,8 +14,6 @@ use PhpMyAdmin\Theme;
|
||||
use PhpMyAdmin\Url;
|
||||
use PhpMyAdmin\Util;
|
||||
|
||||
require_once 'libraries/relation_cleanup.lib.php';
|
||||
|
||||
/**
|
||||
* PhpMyAdmin\Tests\Server\PrivilegesTest class
|
||||
*
|
||||
|
||||
@ -1,28 +1,25 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for select_server.lib.php
|
||||
* tests for PhpMyAdmin\Server\Select
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin\Tests\Server;
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PhpMyAdmin\Server\Select;
|
||||
use PhpMyAdmin\Theme;
|
||||
|
||||
|
||||
require_once 'libraries/select_server.lib.php';
|
||||
|
||||
use PhpMyAdmin\Util;
|
||||
use PHPUnit_Framework_TestCase as TestCase;
|
||||
|
||||
/**
|
||||
* PMA_SelectServer_Test class
|
||||
* PhpMyAdmin\Tests\Server\SelectTest class
|
||||
*
|
||||
* this class is for testing select_server.lib.php functions
|
||||
* this class is for testing PhpMyAdmin\Server\Select methods
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_SelectServer_Test extends PHPUnit_Framework_TestCase
|
||||
class SelectTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
@ -52,11 +49,11 @@ class PMA_SelectServer_Test extends PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_selectServer
|
||||
* Test for Select::render
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPMASelectServer()
|
||||
public function testRender()
|
||||
{
|
||||
$not_only_options = false;
|
||||
$omit_fieldset = false;
|
||||
@ -81,7 +78,7 @@ class PMA_SelectServer_Test extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
|
||||
//$not_only_options=false & $omit_fieldset=false
|
||||
$html = PMA_selectServer($not_only_options, $omit_fieldset);
|
||||
$html = Select::render($not_only_options, $omit_fieldset);
|
||||
$server = $GLOBALS['cfg']['Servers']['0'];
|
||||
|
||||
//server items
|
||||
@ -107,11 +104,11 @@ class PMA_SelectServer_Test extends PHPUnit_Framework_TestCase
|
||||
$GLOBALS['cfg']['DisplayServersList'] = null;
|
||||
|
||||
//$not_only_options=true & $omit_fieldset=true
|
||||
$html = PMA_selectServer($not_only_options, $omit_fieldset);
|
||||
$html = Select::render($not_only_options, $omit_fieldset);
|
||||
|
||||
//$GLOBALS['cfg']['DefaultTabServer']
|
||||
$this->assertContains(
|
||||
PhpMyAdmin\Util::getScriptNameForOption(
|
||||
Util::getScriptNameForOption(
|
||||
$GLOBALS['cfg']['DefaultTabServer'], 'server'
|
||||
),
|
||||
$html
|
||||
@ -1,26 +1,22 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for methods under user_preferences library
|
||||
* tests for methods under PhpMyAdmin\UserPreferences class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
namespace PhpMyAdmin\Tests;
|
||||
|
||||
/*
|
||||
* Include to test
|
||||
*/
|
||||
use PhpMyAdmin\Config\ConfigFile;
|
||||
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
use PhpMyAdmin\UserPreferences;
|
||||
|
||||
/**
|
||||
* tests for methods under user_preferences library
|
||||
* tests for methods under PhpMyAdmin\UserPreferences class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_User_Preferences_Test extends PMATestCase
|
||||
class UserPreferencesTest extends \PMATestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Setup various pre conditions
|
||||
*
|
||||
@ -35,7 +31,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_userprefsPageInit
|
||||
* Test for UserPreferences::pageInit
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -48,7 +44,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$GLOBALS['cfg']['AvailableCharsets'] = array();
|
||||
$GLOBALS['cfg']['UserprefsDeveloperTab'] = null;
|
||||
|
||||
PMA_userprefsPageInit(new ConfigFile());
|
||||
UserPreferences::pageInit(new ConfigFile());
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
@ -63,7 +59,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_loadUserprefs
|
||||
* Test for UserPreferences::load
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -74,7 +70,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$_SESSION['relation'][$GLOBALS['server']]['userconfigwork'] = null;
|
||||
unset($_SESSION['userconfig']);
|
||||
|
||||
$result = PMA_loadUserprefs();
|
||||
$result = UserPreferences::load();
|
||||
|
||||
$this->assertCount(
|
||||
3,
|
||||
@ -129,7 +125,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$result = PMA_loadUserprefs();
|
||||
$result = UserPreferences::load();
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
@ -142,7 +138,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_saveUserprefs
|
||||
* Test for UserPreferences::save
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -153,7 +149,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$_SESSION['relation'][2]['userconfigwork'] = null;
|
||||
unset($_SESSION['userconfig']);
|
||||
|
||||
$result = PMA_saveUserprefs(array(1));
|
||||
$result = UserPreferences::save(array(1));
|
||||
|
||||
$this->assertTrue(
|
||||
$result
|
||||
@ -220,7 +216,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
$this->assertTrue(
|
||||
PMA_saveUserprefs(array(1))
|
||||
UserPreferences::save(array(1))
|
||||
);
|
||||
|
||||
// case 3
|
||||
@ -255,7 +251,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$result = PMA_saveUserprefs(array(1));
|
||||
$result = UserPreferences::save(array(1));
|
||||
|
||||
$this->assertEquals(
|
||||
'Could not save configuration<br /><br />err1',
|
||||
@ -264,7 +260,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_applyUserprefs
|
||||
* Test for UserPreferences::apply
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -275,7 +271,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
'foo' => 'bar'
|
||||
);
|
||||
$GLOBALS['cfg']['UserprefsDeveloperTab'] = null;
|
||||
$result = PMA_applyUserprefs(
|
||||
$result = UserPreferences::apply(
|
||||
array(
|
||||
'DBG/sql' => true,
|
||||
'ErrorHandler/display' => true,
|
||||
@ -296,14 +292,14 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_applyUserprefs
|
||||
* Test for UserPreferences::apply
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testApplyDevelUserprefs()
|
||||
{
|
||||
$GLOBALS['cfg']['UserprefsDeveloperTab'] = true;
|
||||
$result = PMA_applyUserprefs(
|
||||
$result = UserPreferences::apply(
|
||||
array(
|
||||
'DBG/sql' => true,
|
||||
)
|
||||
@ -318,7 +314,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_persistOption
|
||||
* Test for UserPreferences::persistOption
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -337,20 +333,20 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$_SESSION['relation'][2]['userconfigwork'] = null;
|
||||
|
||||
$this->assertNull(
|
||||
PMA_persistOption('Server/hide_db', 'val', 'val')
|
||||
UserPreferences::persistOption('Server/hide_db', 'val', 'val')
|
||||
);
|
||||
|
||||
$this->assertNull(
|
||||
PMA_persistOption('Server/hide_db', 'val2', 'val')
|
||||
UserPreferences::persistOption('Server/hide_db', 'val2', 'val')
|
||||
);
|
||||
|
||||
$this->assertNull(
|
||||
PMA_persistOption('Server/hide_db2', 'val', 'val')
|
||||
UserPreferences::persistOption('Server/hide_db2', 'val', 'val')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_userprefsRedirect
|
||||
* Test for UserPreferences::redirect
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -363,7 +359,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$GLOBALS['PMA_Config']->set('PmaAbsoluteUri', '');
|
||||
$GLOBALS['PMA_Config']->set('PMA_IS_IIS', false);
|
||||
|
||||
PMA_userprefsRedirect(
|
||||
UserPreferences::redirect(
|
||||
'file.html',
|
||||
array('a' => 'b'),
|
||||
'h ash'
|
||||
@ -371,7 +367,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_userprefsAutoloadGetHeader
|
||||
* Test for UserPreferences::autoloadGetHeader
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -382,7 +378,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
|
||||
$this->assertEquals(
|
||||
'',
|
||||
PMA_userprefsAutoloadGetHeader()
|
||||
UserPreferences::autoloadGetHeader()
|
||||
);
|
||||
|
||||
$this->assertTrue(
|
||||
@ -392,7 +388,7 @@ class PMA_User_Preferences_Test extends PMATestCase
|
||||
$_REQUEST['prefs_autoload'] = 'nohide';
|
||||
$GLOBALS['cfg']['ServerDefault'] = 1;
|
||||
$GLOBALS['PMA_PHP_SELF'] = 'phpunit';
|
||||
$result = PMA_userprefsAutoloadGetHeader();
|
||||
$result = UserPreferences::autoloadGetHeader();
|
||||
|
||||
$this->assertContains(
|
||||
'<form action="prefs_manage.php" method="post" class="disableAjax">',
|
||||
@ -11,7 +11,6 @@ use PhpMyAdmin\Config\ConfigFile;
|
||||
use PhpMyAdmin\Config\FormDisplay;
|
||||
|
||||
require_once 'test/PMATestCase.php';
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
|
||||
/**
|
||||
* Tests for PMA_FormDisplay class
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
use PhpMyAdmin\Theme;
|
||||
|
||||
require_once 'libraries/config/FormDisplay.tpl.php';
|
||||
require_once 'libraries/user_preferences.lib.php';
|
||||
|
||||
/**
|
||||
* Tests for FromDisplay.tpl.php
|
||||
|
||||
Loading…
Reference in New Issue
Block a user