From df7f328f790dab5a3b3c4244977f65741cc851dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 5 Sep 2017 16:35:17 +0200 Subject: [PATCH 01/14] Rewrite User preferences forms as clases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- doc/config.rst | 2 +- libraries/classes/Config/Descriptions.php | 2 + libraries/classes/Config/Form.php | 2 +- libraries/classes/Config/FormDisplay.php | 3 +- libraries/classes/Config/Forms/BaseForm.php | 72 +++++++++ .../classes/Config/Forms/BaseFormList.php | 132 +++++++++++++++++ .../classes/Config/Forms/User/ExportForm.php | 137 ++++++++++++++++++ .../Config/Forms/User/FeaturesForm.php | 63 ++++++++ .../classes/Config/Forms/User/ImportForm.php | 55 +++++++ .../classes/Config/Forms/User/MainForm.php | 81 +++++++++++ .../classes/Config/Forms/User/NaviForm.php | 51 +++++++ .../classes/Config/Forms/User/SqlForm.php | 37 +++++ .../Config/Forms/User/UserFormList.php | 23 +++ libraries/user_preferences.inc.php | 14 +- libraries/user_preferences.lib.php | 39 +---- prefs_forms.php | 18 +-- prefs_manage.php | 10 +- test/classes/config/FormListTest.php | 51 +++++++ test/libraries/PMA_user_preferences_test.php | 33 +---- 19 files changed, 726 insertions(+), 99 deletions(-) create mode 100644 libraries/classes/Config/Forms/BaseForm.php create mode 100644 libraries/classes/Config/Forms/BaseFormList.php create mode 100644 libraries/classes/Config/Forms/User/ExportForm.php create mode 100644 libraries/classes/Config/Forms/User/FeaturesForm.php create mode 100644 libraries/classes/Config/Forms/User/ImportForm.php create mode 100644 libraries/classes/Config/Forms/User/MainForm.php create mode 100644 libraries/classes/Config/Forms/User/NaviForm.php create mode 100644 libraries/classes/Config/Forms/User/SqlForm.php create mode 100644 libraries/classes/Config/Forms/User/UserFormList.php create mode 100644 test/classes/config/FormListTest.php diff --git a/doc/config.rst b/doc/config.rst index 228da6c92e..4543c27ad1 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -3152,7 +3152,7 @@ Various display setting Contains names of configuration options (keys in ``$cfg`` array) that users can't set through user preferences. For possible values, refer - to :file:`libraries/config/user_preferences.forms.php`. + to clases under :file:`libraries/classes/Config/Forms/User/`. .. config:option:: $cfg['UserprefsDeveloperTab'] diff --git a/libraries/classes/Config/Descriptions.php b/libraries/classes/Config/Descriptions.php index 36f37d4ffa..6d081f8155 100644 --- a/libraries/classes/Config/Descriptions.php +++ b/libraries/classes/Config/Descriptions.php @@ -480,6 +480,8 @@ class Descriptions return __('Databases'); case 'Form_Navi_databases_desc': return __('Databases display options.'); + case 'Form_Navi_name': + return __('Navigation panel'); case 'Form_Navi_panel_name': return __('Navigation panel'); case 'Form_Navi_panel_desc': diff --git a/libraries/classes/Config/Form.php b/libraries/classes/Config/Form.php index efdad64252..f5ab1b7b7a 100644 --- a/libraries/classes/Config/Form.php +++ b/libraries/classes/Config/Form.php @@ -136,7 +136,7 @@ class Form /** * array_walk callback function, reads path of form fields from - * array (see file comment in setup.forms.php or user_preferences.forms.inc) + * array (see docs for \PhpMyAdmin\Config\Forms\BaseForm::getForms) * * @param mixed $value Value * @param mixed $key Key diff --git a/libraries/classes/Config/FormDisplay.php b/libraries/classes/Config/FormDisplay.php index e9e36d9ef1..fcc17b24d5 100644 --- a/libraries/classes/Config/FormDisplay.php +++ b/libraries/classes/Config/FormDisplay.php @@ -17,6 +17,7 @@ namespace PhpMyAdmin\Config; use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Descriptions; use PhpMyAdmin\Config\Form; +use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Config\Validator; use PhpMyAdmin\Sanitize; use PhpMyAdmin\Util; @@ -781,7 +782,7 @@ class FormDisplay return; } - $this->_userprefsKeys = array_flip(PMA_readUserprefsFieldNames()); + $this->_userprefsKeys = array_flip(UserFormList::getFields()); // read real config for user preferences display $userprefs_disallow = $GLOBALS['PMA_Config']->get('is_setup') ? $this->_configFile->get('UserprefsDisallow', array()) diff --git a/libraries/classes/Config/Forms/BaseForm.php b/libraries/classes/Config/Forms/BaseForm.php new file mode 100644 index 0000000000..6160279da5 --- /dev/null +++ b/libraries/classes/Config/Forms/BaseForm.php @@ -0,0 +1,72 @@ += 1 if editing a server + */ + public function __construct(ConfigFile $cf, $server_id = null) + { + parent::__construct($cf); + foreach (static::getForms() as $form_name => $form) { + // skip Developer form if no setting is available + if ($form_name == 'Developer' && !$GLOBALS['cfg']['UserprefsDeveloperTab']) { + continue; + } + $this->registerForm($form_name, $form, $server_id); + } + } + + /** + * List of available forms, each form is described as an array of fields to display. + * Fields MUST have their counterparts in the $cfg array. + * + * To define form field, use the notation below: + * $forms['Form group']['Form name'] = array('Option/path'); + * + * You can assign default values set by special button ("set value: ..."), eg.: + * 'Servers/1/pmadb' => 'phpmyadmin' + * + * To group options, use: + * ':group:' . __('group name') // just define a group + * or + * 'option' => ':group' // group starting from this option + * End group blocks with: + * ':group:end' + * + * @return array + */ + abstract public static function getForms(); + + /** + * Returns list of fields used in the form. + * + * @return string[] + */ + public static function getFields() + { + $names = []; + foreach (static::getForms() as $form) { + foreach ($form as $k => $v) { + $names[] = is_int($k) ? $v : $k; + } + } + return $names; + } +} diff --git a/libraries/classes/Config/Forms/BaseFormList.php b/libraries/classes/Config/Forms/BaseFormList.php new file mode 100644 index 0000000000..bbf39fa8f1 --- /dev/null +++ b/libraries/classes/Config/Forms/BaseFormList.php @@ -0,0 +1,132 @@ +_forms = array(); + foreach (static::$all as $form) { + $class = static::get($form); + $this->_forms[] = new $class($cf); + } + } + + /** + * Processes forms, returns true on successful save + * + * @param bool $allow_partial_save allows for partial form saving + * on failed validation + * @param bool $check_form_submit whether check for $_POST['submit_save'] + * + * @return boolean whether processing was successful + */ + public function process($allow_partial_save = true, $check_form_submit = true) + { + $ret = true; + foreach ($this->_forms as $form) { + $ret = $ret && $form->process($allow_partial_save, $check_form_submit); + } + return $ret; + } + + /** + * Displays errors + * + * @return string HTML for errors + */ + public function displayErrors() + { + $ret = ''; + foreach ($this->_forms as $form) { + $ret .= $form->displayErrors(); + } + return $ret; + } + + /** + * Reverts erroneous fields to their default values + * + * @return void + */ + public function fixErrors() + { + foreach ($this->_forms as $form) { + $form->fixErrors(); + } + } + + /** + * Tells whether form validation failed + * + * @return boolean + */ + public function hasErrors() + { + $ret = false; + foreach ($this->_forms as $form) { + $ret = $ret || $form->hasErrors(); + } + return $ret; + } + + /** + * Returns list of fields used in the form. + * + * @return string[] + */ + public static function getFields() + { + $names = []; + foreach (static::$all as $form) { + $class = static::get($form); + $names = array_merge($names, $class::getFields()); + } + return $names; + } +} diff --git a/libraries/classes/Config/Forms/User/ExportForm.php b/libraries/classes/Config/Forms/User/ExportForm.php new file mode 100644 index 0000000000..9b99059abf --- /dev/null +++ b/libraries/classes/Config/Forms/User/ExportForm.php @@ -0,0 +1,137 @@ + array( + 'Export/method', + ':group:' . __('Quick'), + 'Export/quick_export_onserver', + 'Export/quick_export_onserver_overwrite', + ':group:end', + ':group:' . __('Custom'), + 'Export/format', + 'Export/compression', + 'Export/charset', + 'Export/lock_tables', + 'Export/as_separate_files', + 'Export/asfile' => ':group', + 'Export/onserver', + 'Export/onserver_overwrite', + ':group:end', + 'Export/file_template_table', + 'Export/file_template_database', + 'Export/file_template_server' + ), + 'Sql' => array( + 'Export/sql_include_comments' => ':group', + 'Export/sql_dates', + 'Export/sql_relation', + 'Export/sql_mime', + ':group:end', + 'Export/sql_use_transaction', + 'Export/sql_disable_fk', + 'Export/sql_views_as_tables', + 'Export/sql_metadata', + 'Export/sql_compatibility', + 'Export/sql_structure_or_data', + ':group:' . __('Structure'), + 'Export/sql_drop_database', + 'Export/sql_create_database', + 'Export/sql_drop_table', + 'Export/sql_create_table' => ':group', + 'Export/sql_if_not_exists', + 'Export/sql_auto_increment', + ':group:end', + 'Export/sql_create_view', + 'Export/sql_procedure_function', + 'Export/sql_create_trigger', + 'Export/sql_backquotes', + ':group:end', + ':group:' . __('Data'), + 'Export/sql_delayed', + 'Export/sql_ignore', + 'Export/sql_type', + 'Export/sql_insert_syntax', + 'Export/sql_max_query_size', + 'Export/sql_hex_for_binary', + 'Export/sql_utc_time' + ), + 'CodeGen' => array( + 'Export/codegen_format' + ), + 'Csv' => array( + ':group:' . __('CSV'), + 'Export/csv_separator', + 'Export/csv_enclosed', + 'Export/csv_escaped', + 'Export/csv_terminated', + 'Export/csv_null', + 'Export/csv_removeCRLF', + 'Export/csv_columns', + ':group:end', + ':group:' . __('CSV for MS Excel'), + 'Export/excel_null', + 'Export/excel_removeCRLF', + 'Export/excel_columns', + 'Export/excel_edition' + ), + 'Latex' => array( + 'Export/latex_caption', + 'Export/latex_structure_or_data', + ':group:' . __('Structure'), + 'Export/latex_structure_caption', + 'Export/latex_structure_continued_caption', + 'Export/latex_structure_label', + 'Export/latex_relation', + 'Export/latex_comments', + 'Export/latex_mime', + ':group:end', + ':group:' . __('Data'), + 'Export/latex_columns', + 'Export/latex_data_caption', + 'Export/latex_data_continued_caption', + 'Export/latex_data_label', + 'Export/latex_null' + ), + 'Microsoft_Office' => array( + ':group:' . __('Microsoft Word 2000'), + 'Export/htmlword_structure_or_data', + 'Export/htmlword_null', + 'Export/htmlword_columns'), + 'Open_Document' => array( + ':group:' . __('OpenDocument Spreadsheet'), + 'Export/ods_columns', + 'Export/ods_null', + ':group:end', + ':group:' . __('OpenDocument Text'), + 'Export/odt_structure_or_data', + ':group:' . __('Structure'), + 'Export/odt_relation', + 'Export/odt_comments', + 'Export/odt_mime', + ':group:end', + ':group:' . __('Data'), + 'Export/odt_columns', + 'Export/odt_null' + ), + 'Texy' => array( + 'Export/texytext_structure_or_data', + ':group:' . __('Data'), + 'Export/texytext_null', + 'Export/texytext_columns' + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/User/FeaturesForm.php b/libraries/classes/Config/Forms/User/FeaturesForm.php new file mode 100644 index 0000000000..8c46a72182 --- /dev/null +++ b/libraries/classes/Config/Forms/User/FeaturesForm.php @@ -0,0 +1,63 @@ + array( + 'VersionCheck', + 'NaturalOrder', + 'InitialSlidersState', + 'LoginCookieValidity', + 'SkipLockedTables', + 'DisableMultiTableMaintenance', + 'MaxTableList', + 'ShowHint', + 'SendErrorReports', + 'ConsoleEnterExecutes' + ), + 'Databases' => array( + 'Servers/1/only_db', // saves to Server/only_db + 'Servers/1/hide_db', // saves to Server/hide_db + 'MaxDbList' + ), + 'Text_fields' => array( + 'CharEditing', + 'MinSizeForInputField', + 'MaxSizeForInputField', + 'CharTextareaCols', + 'CharTextareaRows', + 'TextareaCols', + 'TextareaRows', + 'LongtextDoubleTextarea' + ), + 'Page_titles' => array( + 'TitleDefault', + 'TitleTable', + 'TitleDatabase', + 'TitleServer' + ), + 'Warnings' => array( + 'PmaNoRelation_DisableWarning', + 'SuhosinDisableWarning', + 'LoginCookieValidityDisableWarning', + 'ReservedWordDisableWarning' + ), + // settings from this form are treated specially, + // see prefs_forms.php and user_preferences.lib.php + 'Developer' => array( + 'DBG/sql' + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/User/ImportForm.php b/libraries/classes/Config/Forms/User/ImportForm.php new file mode 100644 index 0000000000..53b34c6a9d --- /dev/null +++ b/libraries/classes/Config/Forms/User/ImportForm.php @@ -0,0 +1,55 @@ + array( + 'Import/format', + 'Import/charset', + 'Import/allow_interrupt', + 'Import/skip_queries' + ), + 'Sql' => array( + 'Import/sql_compatibility', + 'Import/sql_no_auto_value_on_zero', + 'Import/sql_read_as_multibytes' + ), + 'Csv' => array( + ':group:' . __('CSV'), + 'Import/csv_replace', + 'Import/csv_ignore', + 'Import/csv_terminated', + 'Import/csv_enclosed', + 'Import/csv_escaped', + 'Import/csv_col_names', + ':group:end', + ':group:' . __('CSV using LOAD DATA'), + 'Import/ldi_replace', + 'Import/ldi_ignore', + 'Import/ldi_terminated', + 'Import/ldi_enclosed', + 'Import/ldi_escaped', + 'Import/ldi_local_option' + ), + 'Open_Document' => array( + ':group:' . __('OpenDocument Spreadsheet'), + 'Import/ods_col_names', + 'Import/ods_empty_rows', + 'Import/ods_recognize_percentages', + 'Import/ods_recognize_currency' + ), + + ); + } +} diff --git a/libraries/classes/Config/Forms/User/MainForm.php b/libraries/classes/Config/Forms/User/MainForm.php new file mode 100644 index 0000000000..a172a0eb2d --- /dev/null +++ b/libraries/classes/Config/Forms/User/MainForm.php @@ -0,0 +1,81 @@ + array( + 'ShowCreateDb', + 'ShowStats', + 'ShowServerInfo' + ), + 'DbStructure' => array( + 'ShowDbStructureCharset', + 'ShowDbStructureComment', + 'ShowDbStructureCreation', + 'ShowDbStructureLastUpdate', + 'ShowDbStructureLastCheck' + ), + 'TableStructure' => array( + 'HideStructureActions', + 'ShowColumnComments', + ':group:' . __('Default transformations'), + 'DefaultTransformations/Hex', + 'DefaultTransformations/Substring', + 'DefaultTransformations/Bool2Text', + 'DefaultTransformations/External', + 'DefaultTransformations/PreApPend', + 'DefaultTransformations/DateFormat', + 'DefaultTransformations/Inline', + 'DefaultTransformations/TextImageLink', + 'DefaultTransformations/TextLink', + ':group:end' + ), + 'Browse' => array( + 'TableNavigationLinksMode', + 'ActionLinksMode', + 'ShowAll', + 'MaxRows', + 'Order', + 'BrowsePointerEnable', + 'BrowseMarkerEnable', + 'GridEditing', + 'SaveCellsAtOnce', + 'RepeatCells', + 'LimitChars', + 'RowActionLinks', + 'RowActionLinksWithoutUnique', + 'TablePrimaryKeyOrder', + 'RememberSorting', + 'RelationalDisplay' + ), + 'Edit' => array( + 'ProtectBinary', + 'ShowFunctionFields', + 'ShowFieldTypesInDataEditView', + 'InsertRows', + 'ForeignKeyDropdownOrder', + 'ForeignKeyMaxLimit' + ), + 'Tabs' => array( + 'TabsMode', + 'DefaultTabServer', + 'DefaultTabDatabase', + 'DefaultTabTable' + ), + 'DisplayRelationalSchema' => array( + 'PDFDefaultPageSize' + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/User/NaviForm.php b/libraries/classes/Config/Forms/User/NaviForm.php new file mode 100644 index 0000000000..46eeedb638 --- /dev/null +++ b/libraries/classes/Config/Forms/User/NaviForm.php @@ -0,0 +1,51 @@ + array( + 'ShowDatabasesNavigationAsTree', + 'NavigationLinkWithMainPanel', + 'NavigationDisplayLogo', + 'NavigationLogoLink', + 'NavigationLogoLinkWindow', + 'NavigationTreePointerEnable', + 'FirstLevelNavigationItems', + 'NavigationTreeDisplayItemFilterMinimum', + 'NumRecentTables', + 'NumFavoriteTables' + ), + 'Navi_tree' => array( + 'MaxNavigationItems', + 'NavigationTreeEnableGrouping', + 'NavigationTreeEnableExpansion', + 'NavigationTreeShowTables', + 'NavigationTreeShowViews', + 'NavigationTreeShowFunctions', + 'NavigationTreeShowProcedures', + 'NavigationTreeShowEvents' + ), + 'Navi_databases' => array( + 'NavigationTreeDisplayDbFilterMinimum', + 'NavigationTreeDbSeparator' + ), + 'Navi_tables' => array( + 'NavigationTreeDefaultTabTable', + 'NavigationTreeDefaultTabTable2', + 'NavigationTreeTableSeparator', + 'NavigationTreeTableLevel', + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/User/SqlForm.php b/libraries/classes/Config/Forms/User/SqlForm.php new file mode 100644 index 0000000000..7a0fb4cc26 --- /dev/null +++ b/libraries/classes/Config/Forms/User/SqlForm.php @@ -0,0 +1,37 @@ + array( + 'ShowSQL', + 'Confirm', + 'QueryHistoryMax', + 'IgnoreMultiSubmitErrors', + 'MaxCharactersInDisplayedSQL', + 'RetainQueryBox', + 'CodemirrorEnable', + 'LintEnable', + 'EnableAutocompleteForTablesAndColumns', + 'DefaultForeignKeyChecks', + ), + 'Sql_box' => array( + 'SQLQuery/Edit', + 'SQLQuery/Explain', + 'SQLQuery/ShowAsPHP', + 'SQLQuery/Refresh', + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/User/UserFormList.php b/libraries/classes/Config/Forms/User/UserFormList.php new file mode 100644 index 0000000000..5b319b5e21 --- /dev/null +++ b/libraries/classes/Config/Forms/User/UserFormList.php @@ -0,0 +1,23 @@ + 'b_tblops.png', - 'Sql_queries' => 'b_sql.png', - 'Navi_panel' => 'b_select.png', - 'Main_panel' => 'b_props.png', + 'Sql' => 'b_sql.png', + 'Navi' => 'b_select.png', + 'Main' => 'b_props.png', 'Import' => 'b_import.png', 'Export' => 'b_export.png'); @@ -35,7 +35,7 @@ $content = PhpMyAdmin\Util::getHtmlTab( ) ) . "\n"; $script_name = basename($GLOBALS['PMA_PHP_SELF']); -foreach (array_keys($forms) as $formset) { +foreach (UserFormList::getAll() as $formset) { $tab = array( 'link' => 'prefs_forms.php', 'text' => Descriptions::get('Form_' . $formset), diff --git a/libraries/user_preferences.lib.php b/libraries/user_preferences.lib.php index efe305c570..47b7090175 100644 --- a/libraries/user_preferences.lib.php +++ b/libraries/user_preferences.lib.php @@ -6,6 +6,7 @@ * @package PhpMyAdmin */ use PhpMyAdmin\Config\ConfigFile; +use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Core; use PhpMyAdmin\Message; use PhpMyAdmin\Relation; @@ -24,7 +25,7 @@ if (! defined('PHPMYADMIN')) { */ function PMA_userprefsPageInit(ConfigFile $cf) { - $forms_all_keys = PMA_readUserprefsFieldNames($GLOBALS['forms']); + $forms_all_keys = UserFormList::getFields(); $cf->resetConfigData(); // start with a clean instance $cf->setAllowedKeys($forms_all_keys); $cf->setCfgUpdateReadMapping( @@ -161,7 +162,7 @@ function PMA_applyUserprefs(array $config_data) // disallow everything in the Developers tab $blacklist['DBG/sql'] = true; } - $whitelist = array_flip(PMA_readUserprefsFieldNames()); + $whitelist = array_flip(UserFormList::getFields()); // whitelist some additional fields which are custom handled $whitelist['ThemeDefault'] = true; $whitelist['fontsize'] = true; @@ -178,40 +179,6 @@ function PMA_applyUserprefs(array $config_data) return $cfg; } -/** - * Reads user preferences field names - * - * @param array|null $forms Forms - * - * @return array - */ -function PMA_readUserprefsFieldNames(array $forms = null) -{ - static $names; - - if (defined('TESTSUITE')) { - $names = null; - } - - // return cached results - if ($names !== null) { - return $names; - } - if (is_null($forms)) { - $forms = array(); - include 'libraries/config/user_preferences.forms.php'; - } - $names = array(); - foreach ($forms as $formset) { - foreach ($formset as $form) { - foreach ($form as $k => $v) { - $names[] = is_int($k) ? $v : $k; - } - } - } - return $names; -} - /** * Updates one user preferences option (loads and saves to database). * diff --git a/prefs_forms.php b/prefs_forms.php index f364196d6f..f6fb96e2e1 100644 --- a/prefs_forms.php +++ b/prefs_forms.php @@ -6,7 +6,7 @@ * @package PhpMyAdmin */ use PhpMyAdmin\Config\ConfigFile; -use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Core; use PhpMyAdmin\Response; use PhpMyAdmin\Url; @@ -16,7 +16,6 @@ use PhpMyAdmin\Url; */ require_once 'libraries/common.inc.php'; require_once 'libraries/user_preferences.lib.php'; -require 'libraries/config/user_preferences.forms.php'; $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); PMA_userprefsPageInit($cf); @@ -24,19 +23,12 @@ PMA_userprefsPageInit($cf); // handle form processing $form_param = isset($_GET['form']) ? $_GET['form'] : null; -if (! isset($forms[$form_param])) { - $forms_keys = array_keys($forms); - $form_param = array_shift($forms_keys); +if (! UserFormList::isValid($form_param)) { + $form_param = UserFormList::getDefault(); } -$form_display = new FormDisplay($cf); -foreach ($forms[$form_param] as $form_name => $form) { - // skip Developer form if no setting is available - if ($form_name == 'Developer' && !$GLOBALS['cfg']['UserprefsDeveloperTab']) { - continue; - } - $form_display->registerForm($form_name, $form, 1); -} +$form_class = UserFormList::get($form_param); +$form_display = new $form_class($cf, 1); if (isset($_POST['revert'])) { // revert erroneous fields to their default values diff --git a/prefs_manage.php b/prefs_manage.php index ea9b968a9d..b6b27a5ce9 100644 --- a/prefs_manage.php +++ b/prefs_manage.php @@ -6,7 +6,7 @@ * @package PhpMyAdmin */ use PhpMyAdmin\Config\ConfigFile; -use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Core; use PhpMyAdmin\File; use PhpMyAdmin\Message; @@ -21,7 +21,6 @@ use PhpMyAdmin\ThemeManager; */ require_once 'libraries/common.inc.php'; require_once 'libraries/user_preferences.lib.php'; -require 'libraries/config/user_preferences.forms.php'; $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); PMA_userprefsPageInit($cf); @@ -94,12 +93,7 @@ if (isset($_POST['submit_export']) } else { // sanitize input values: treat them as though // they came from HTTP POST request - $form_display = new FormDisplay($cf); - foreach ($forms as $formset_id => $formset) { - foreach ($formset as $form_name => $form) { - $form_display->registerForm($formset_id . ': ' . $form_name, $form); - } - } + $form_display = new UserFormList($cf); $new_config = $cf->getFlatDefaultConfig(); if (!empty($_POST['import_merge'])) { $new_config = array_merge($new_config, $cf->getConfigArray()); diff --git a/test/classes/config/FormListTest.php b/test/classes/config/FormListTest.php new file mode 100644 index 0000000000..a4a157bee9 --- /dev/null +++ b/test/classes/config/FormListTest.php @@ -0,0 +1,51 @@ +base_settings); + + /* Static API */ + $this->assertTrue(UserFormList::isValid('Export')); + $this->assertEquals( + 'PhpMyAdmin\\Config\\Forms\\User\\ExportForm', + UserFormList::get('Export') + ); + $this->assertContains( + 'Export/texytext_columns', + UserFormList::getFields() + ); + + /* Instance handling */ + $forms = new UserFormList($cf); + $this->assertFalse($forms->process()); + $forms->fixErrors(); + $this->assertFalse($forms->hasErrors()); + $this->assertEquals('', $forms->displayErrors()); + } +} diff --git a/test/libraries/PMA_user_preferences_test.php b/test/libraries/PMA_user_preferences_test.php index 564314bf2c..11755db5e3 100644 --- a/test/libraries/PMA_user_preferences_test.php +++ b/test/libraries/PMA_user_preferences_test.php @@ -43,15 +43,9 @@ class PMA_User_Preferences_Test extends PMATestCase { $GLOBALS['cfg'] = array( 'Server/hide_db' => 'testval123', - 'Server/only_db' => 'test213' + 'Server/port' => '213' ); $GLOBALS['cfg']['AvailableCharsets'] = array(); - $GLOBALS['forms'] = array( - 'form1' => array( - array('Servers/1/hide_db', 'bar'), - array('test' => 'val') - ) - ); PMA_userprefsPageInit(new ConfigFile()); @@ -300,31 +294,6 @@ class PMA_User_Preferences_Test extends PMATestCase ); } - /** - * Test for PMA_readUserprefsFieldNames - * - * @return void - */ - public function testReadUserprefsFieldNames() - { - $this->assertGreaterThan( - 0, - count(PMA_readUserprefsFieldNames()) - ); - - $forms = array( - 'form1' => array( - array('Servers/1/hide_db', 'bar'), - array('test' => 'val') - ) - ); - - $this->assertEquals( - array('Servers/1/hide_db', 'bar', 'test'), - PMA_readUserprefsFieldNames($forms) - ); - } - /** * Test for PMA_persistOption * From 73d1599a1a5e146ba9e0700e627161c025c6d531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 09:05:15 +0200 Subject: [PATCH 02/14] Rewrite Page settings forms as classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- db_sql.php | 2 +- .../classes/Config/Forms/Page/BrowseForm.php | 21 +++++++++++++++ .../Config/Forms/Page/DbStructureForm.php | 22 +++++++++++++++ .../classes/Config/Forms/Page/EditForm.php | 23 ++++++++++++++++ .../classes/Config/Forms/Page/ExportForm.php | 12 +++++++++ .../classes/Config/Forms/Page/ImportForm.php | 12 +++++++++ .../classes/Config/Forms/Page/NaviForm.php | 12 +++++++++ .../Config/Forms/Page/PageFormList.php | 25 +++++++++++++++++ .../classes/Config/Forms/Page/SqlForm.php | 12 +++++++++ .../Config/Forms/Page/TableStructureForm.php | 22 +++++++++++++++ libraries/classes/Config/PageSettings.php | 20 ++++---------- server_sql.php | 2 +- tbl_sql.php | 2 +- test/classes/config/FormListTest.php | 27 +++++++++++++++++++ test/classes/config/PageSettingsTest.php | 2 +- 15 files changed, 197 insertions(+), 19 deletions(-) create mode 100644 libraries/classes/Config/Forms/Page/BrowseForm.php create mode 100644 libraries/classes/Config/Forms/Page/DbStructureForm.php create mode 100644 libraries/classes/Config/Forms/Page/EditForm.php create mode 100644 libraries/classes/Config/Forms/Page/ExportForm.php create mode 100644 libraries/classes/Config/Forms/Page/ImportForm.php create mode 100644 libraries/classes/Config/Forms/Page/NaviForm.php create mode 100644 libraries/classes/Config/Forms/Page/PageFormList.php create mode 100644 libraries/classes/Config/Forms/Page/SqlForm.php create mode 100644 libraries/classes/Config/Forms/Page/TableStructureForm.php diff --git a/db_sql.php b/db_sql.php index 3427cec598..72f7639607 100644 --- a/db_sql.php +++ b/db_sql.php @@ -15,7 +15,7 @@ require_once 'libraries/common.inc.php'; require_once 'libraries/config/user_preferences.forms.php'; require_once 'libraries/config/page_settings.forms.php'; -PageSettings::showGroup('Sql_queries'); +PageSettings::showGroup('Sql'); /** * Runs common work diff --git a/libraries/classes/Config/Forms/Page/BrowseForm.php b/libraries/classes/Config/Forms/Page/BrowseForm.php new file mode 100644 index 0000000000..e39a7fd2f1 --- /dev/null +++ b/libraries/classes/Config/Forms/Page/BrowseForm.php @@ -0,0 +1,21 @@ + MainForm::getForms()['Browse'] + ]; + } +} diff --git a/libraries/classes/Config/Forms/Page/DbStructureForm.php b/libraries/classes/Config/Forms/Page/DbStructureForm.php new file mode 100644 index 0000000000..03c9172aae --- /dev/null +++ b/libraries/classes/Config/Forms/Page/DbStructureForm.php @@ -0,0 +1,22 @@ + MainForm::getForms()['DbStructure'] + ]; + } +} + diff --git a/libraries/classes/Config/Forms/Page/EditForm.php b/libraries/classes/Config/Forms/Page/EditForm.php new file mode 100644 index 0000000000..b7b83b0333 --- /dev/null +++ b/libraries/classes/Config/Forms/Page/EditForm.php @@ -0,0 +1,23 @@ + MainForm::getForms()['Edit'], + 'Text_fields' => FeaturesForm::getForms()['Text_fields'], + ]; + } +} diff --git a/libraries/classes/Config/Forms/Page/ExportForm.php b/libraries/classes/Config/Forms/Page/ExportForm.php new file mode 100644 index 0000000000..824be9c7e4 --- /dev/null +++ b/libraries/classes/Config/Forms/Page/ExportForm.php @@ -0,0 +1,12 @@ + MainForm::getForms()['TableStructure'] + ]; + } +} + diff --git a/libraries/classes/Config/PageSettings.php b/libraries/classes/Config/PageSettings.php index 560e25e65e..c0adb51cd6 100644 --- a/libraries/classes/Config/PageSettings.php +++ b/libraries/classes/Config/PageSettings.php @@ -9,13 +9,12 @@ namespace PhpMyAdmin\Config; use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\Forms\Page\PageFormList; use PhpMyAdmin\Core; use PhpMyAdmin\Message; use PhpMyAdmin\Response; require_once 'libraries/user_preferences.lib.php'; -require 'libraries/config/user_preferences.forms.php'; -require 'libraries/config/page_settings.forms.php'; /** * Page-related settings @@ -57,8 +56,7 @@ class PageSettings */ public function __construct($formGroupName, $elemId = null) { - global $forms; - if (empty($forms[$formGroupName])) { + if (! PageFormList::isValid($formGroupName)) { return; } @@ -74,16 +72,8 @@ class PageSettings $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); PMA_userprefsPageInit($cf); - $form_display = new FormDisplay($cf); - foreach ($forms[$formGroupName] as $form_name => $form) { - // skip Developer form if no setting is available - if ($form_name == 'Developer' - && !$GLOBALS['cfg']['UserprefsDeveloperTab'] - ) { - continue; - } - $form_display->registerForm($form_name, $form, 1); - } + $form_class = PageFormList::get($formGroupName); + $form_display = new $form_class($cf); // Process form $error = null; @@ -226,7 +216,7 @@ class PageSettings */ public static function getNaviSettings() { - $object = new PageSettings('Navi_panel', 'pma_navigation_settings'); + $object = new PageSettings('Navi', 'pma_navigation_settings'); $response = Response::getInstance(); $response->addHTML($object->getErrorHTML()); diff --git a/server_sql.php b/server_sql.php index 8d09a41fd3..410c4b8feb 100644 --- a/server_sql.php +++ b/server_sql.php @@ -15,7 +15,7 @@ require_once 'libraries/common.inc.php'; require_once 'libraries/config/user_preferences.forms.php'; require_once 'libraries/config/page_settings.forms.php'; -PageSettings::showGroup('Sql_queries'); +PageSettings::showGroup('Sql'); /** * Does the common work diff --git a/tbl_sql.php b/tbl_sql.php index 40e34f524c..1643354b00 100644 --- a/tbl_sql.php +++ b/tbl_sql.php @@ -15,7 +15,7 @@ require_once 'libraries/common.inc.php'; require_once 'libraries/config/user_preferences.forms.php'; require_once 'libraries/config/page_settings.forms.php'; -PageSettings::showGroup('Sql_queries'); +PageSettings::showGroup('Sql'); /** * Runs common work diff --git a/test/classes/config/FormListTest.php b/test/classes/config/FormListTest.php index a4a157bee9..ff6424f627 100644 --- a/test/classes/config/FormListTest.php +++ b/test/classes/config/FormListTest.php @@ -8,6 +8,7 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\UserFormList; +use PhpMyAdmin\Config\Forms\Page\PageFormList; require_once 'test/PMATestCase.php'; @@ -48,4 +49,30 @@ class FormListTest extends PMATestCase $this->assertFalse($forms->hasErrors()); $this->assertEquals('', $forms->displayErrors()); } + + /** + * Tests for page preferences forms. + */ + public function testPageForms() + { + $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); + + /* Static API */ + $this->assertTrue(PageFormList::isValid('Export')); + $this->assertEquals( + 'PhpMyAdmin\\Config\\Forms\\Page\\ExportForm', + PageFormList::get('Export') + ); + $this->assertContains( + 'Export/texytext_columns', + PageFormList::getFields() + ); + + /* Instance handling */ + $forms = new PageFormList($cf); + $this->assertFalse($forms->process()); + $forms->fixErrors(); + $this->assertFalse($forms->hasErrors()); + $this->assertEquals('', $forms->displayErrors()); + } } diff --git a/test/classes/config/PageSettingsTest.php b/test/classes/config/PageSettingsTest.php index 0a4fc9148d..873210f0e2 100644 --- a/test/classes/config/PageSettingsTest.php +++ b/test/classes/config/PageSettingsTest.php @@ -91,7 +91,7 @@ class PageSettingsTest extends PMATestCase ); $this->assertContains( - '', + '', $html ); } From 94bb2e31a124e5212086a6de863f81ec1e92943e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 09:07:48 +0200 Subject: [PATCH 03/14] Remove no longer needed page_settings.forms.php and user_preferences.forms.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue #11731 Signed-off-by: Michal Čihař --- db_export.php | 2 - db_import.php | 2 - db_sql.php | 2 - .../Database/DatabaseStructureController.php | 2 - .../Table/TableStructureController.php | 3 - libraries/common.inc.php | 5 - libraries/config/page_settings.forms.php | 29 -- libraries/config/user_preferences.forms.php | 310 ------------------ server_export.php | 2 - server_import.php | 2 - server_sql.php | 2 - sql.php | 2 - tbl_change.php | 2 - tbl_export.php | 2 - tbl_import.php | 2 - tbl_sql.php | 2 - tbl_structure.php | 2 - test/classes/config/PageSettingsTest.php | 2 - 18 files changed, 375 deletions(-) delete mode 100644 libraries/config/page_settings.forms.php delete mode 100644 libraries/config/user_preferences.forms.php diff --git a/db_export.php b/db_export.php index 2479f116cd..e43f914cc9 100644 --- a/db_export.php +++ b/db_export.php @@ -16,8 +16,6 @@ use PhpMyAdmin\Util; * Gets some core libraries */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Export'); diff --git a/db_import.php b/db_import.php index 3989af0d10..8a266293f9 100644 --- a/db_import.php +++ b/db_import.php @@ -10,8 +10,6 @@ use PhpMyAdmin\Response; use PhpMyAdmin\Config\PageSettings; require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Import'); diff --git a/db_sql.php b/db_sql.php index 72f7639607..5c1dee5ea8 100644 --- a/db_sql.php +++ b/db_sql.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Sql'); diff --git a/libraries/classes/Controllers/Database/DatabaseStructureController.php b/libraries/classes/Controllers/Database/DatabaseStructureController.php index a16f503275..3377473327 100644 --- a/libraries/classes/Controllers/Database/DatabaseStructureController.php +++ b/libraries/classes/Controllers/Database/DatabaseStructureController.php @@ -24,8 +24,6 @@ use PhpMyAdmin\Util; use PhpMyAdmin\Url; require_once 'libraries/display_create_table.lib.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; /** * Handles database structure logic diff --git a/libraries/classes/Controllers/Table/TableStructureController.php b/libraries/classes/Controllers/Table/TableStructureController.php index 310d3344af..95438221df 100644 --- a/libraries/classes/Controllers/Table/TableStructureController.php +++ b/libraries/classes/Controllers/Table/TableStructureController.php @@ -25,9 +25,6 @@ use PhpMyAdmin\Transformations; use PhpMyAdmin\Url; use PhpMyAdmin\Util; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; - /** * Handles table structure logic * diff --git a/libraries/common.inc.php b/libraries/common.inc.php index c2a92e9193..6a0abc20cb 100644 --- a/libraries/common.inc.php +++ b/libraries/common.inc.php @@ -899,8 +899,3 @@ if (! defined('PMA_MINIMUM_COMMON') } } } - -if (! defined('PMA_MINIMUM_COMMON')) { - include 'libraries/config/user_preferences.forms.php'; - include_once 'libraries/config/page_settings.forms.php'; -} diff --git a/libraries/config/page_settings.forms.php b/libraries/config/page_settings.forms.php deleted file mode 100644 index 2b925df527..0000000000 --- a/libraries/config/page_settings.forms.php +++ /dev/null @@ -1,29 +0,0 @@ - 'phpmyadmin' - * - * To group options, use: - * ':group:' . __('group name') // just define a group - * or - * 'option' => ':group' // group starting from this option - * End group blocks with: - * ':group:end' - * - * @package PhpMyAdmin - */ - -$forms = array(); -$forms['Features']['General'] = array( - 'VersionCheck', - 'NaturalOrder', - 'InitialSlidersState', - 'LoginCookieValidity', - 'SkipLockedTables', - 'DisableMultiTableMaintenance', - 'MaxTableList', - 'ShowHint', - 'SendErrorReports', - 'ConsoleEnterExecutes' -); -$forms['Features']['Databases'] = array( - 'Servers/1/only_db', // saves to Server/only_db - 'Servers/1/hide_db', // saves to Server/hide_db - 'MaxDbList' -); -$forms['Features']['Text_fields'] = array( - 'CharEditing', - 'MinSizeForInputField', - 'MaxSizeForInputField', - 'CharTextareaCols', - 'CharTextareaRows', - 'TextareaCols', - 'TextareaRows', - 'LongtextDoubleTextarea'); -$forms['Features']['Page_titles'] = array( - 'TitleDefault', - 'TitleTable', - 'TitleDatabase', - 'TitleServer'); -$forms['Features']['Warnings'] = array( - 'PmaNoRelation_DisableWarning', - 'SuhosinDisableWarning', - 'LoginCookieValidityDisableWarning', - 'ReservedWordDisableWarning'); -// settings from this form are treated specially, -// see prefs_forms.php and user_preferences.lib.php -$forms['Features']['Developer'] = array( - 'DBG/sql'); -$forms['Sql_queries']['Sql_queries'] = array( - 'ShowSQL', - 'Confirm', - 'QueryHistoryMax', - 'IgnoreMultiSubmitErrors', - 'MaxCharactersInDisplayedSQL', - 'RetainQueryBox', - 'CodemirrorEnable', - 'LintEnable', - 'EnableAutocompleteForTablesAndColumns', - 'DefaultForeignKeyChecks'); -$forms['Sql_queries']['Sql_box'] = array( - 'SQLQuery/Edit', - 'SQLQuery/Explain', - 'SQLQuery/ShowAsPHP', - 'SQLQuery/Refresh'); -$forms['Navi_panel']['Navi_panel'] = array( - 'ShowDatabasesNavigationAsTree', - 'NavigationLinkWithMainPanel', - 'NavigationDisplayLogo', - 'NavigationLogoLink', - 'NavigationLogoLinkWindow', - 'NavigationTreePointerEnable', - 'FirstLevelNavigationItems', - 'NavigationTreeDisplayItemFilterMinimum', - 'NumRecentTables', - 'NumFavoriteTables' -); -$forms['Navi_panel']['Navi_tree'] = array( - 'MaxNavigationItems', - 'NavigationTreeEnableGrouping', - 'NavigationTreeEnableExpansion', - 'NavigationTreeShowTables', - 'NavigationTreeShowViews', - 'NavigationTreeShowFunctions', - 'NavigationTreeShowProcedures', - 'NavigationTreeShowEvents' -); -$forms['Navi_panel']['Navi_databases'] = array( - 'NavigationTreeDisplayDbFilterMinimum', - 'NavigationTreeDbSeparator'); -$forms['Navi_panel']['Navi_tables'] = array( - 'NavigationTreeDefaultTabTable', - 'NavigationTreeDefaultTabTable2', - 'NavigationTreeTableSeparator', - 'NavigationTreeTableLevel', -); -$forms['Main_panel']['Startup'] = array( - 'ShowCreateDb', - 'ShowStats', - 'ShowServerInfo'); -$forms['Main_panel']['DbStructure'] = array( - 'ShowDbStructureCharset', - 'ShowDbStructureComment', - 'ShowDbStructureCreation', - 'ShowDbStructureLastUpdate', - 'ShowDbStructureLastCheck'); -$forms['Main_panel']['TableStructure'] = array( - 'HideStructureActions', - 'ShowColumnComments', - ':group:' . __('Default transformations'), - 'DefaultTransformations/Hex', - 'DefaultTransformations/Substring', - 'DefaultTransformations/Bool2Text', - 'DefaultTransformations/External', - 'DefaultTransformations/PreApPend', - 'DefaultTransformations/DateFormat', - 'DefaultTransformations/Inline', - 'DefaultTransformations/TextImageLink', - 'DefaultTransformations/TextLink', - ':group:end' -); -$forms['Main_panel']['Browse'] = array( - 'TableNavigationLinksMode', - 'ActionLinksMode', - 'ShowAll', - 'MaxRows', - 'Order', - 'BrowsePointerEnable', - 'BrowseMarkerEnable', - 'GridEditing', - 'SaveCellsAtOnce', - 'RepeatCells', - 'LimitChars', - 'RowActionLinks', - 'RowActionLinksWithoutUnique', - 'TablePrimaryKeyOrder', - 'RememberSorting', - 'RelationalDisplay'); -$forms['Main_panel']['Edit'] = array( - 'ProtectBinary', - 'ShowFunctionFields', - 'ShowFieldTypesInDataEditView', - 'InsertRows', - 'ForeignKeyDropdownOrder', - 'ForeignKeyMaxLimit'); -$forms['Main_panel']['Tabs'] = array( - 'TabsMode', - 'DefaultTabServer', - 'DefaultTabDatabase', - 'DefaultTabTable'); -$forms['Main_panel']['DisplayRelationalSchema'] = array( - 'PDFDefaultPageSize'); - -$forms['Import']['Import_defaults'] = array( - 'Import/format', - 'Import/charset', - 'Import/allow_interrupt', - 'Import/skip_queries' -); -$forms['Import']['Sql'] = array( - 'Import/sql_compatibility', - 'Import/sql_no_auto_value_on_zero', - 'Import/sql_read_as_multibytes'); -$forms['Import']['Csv'] = array( - ':group:' . __('CSV'), - 'Import/csv_replace', - 'Import/csv_ignore', - 'Import/csv_terminated', - 'Import/csv_enclosed', - 'Import/csv_escaped', - 'Import/csv_col_names', - ':group:end', - ':group:' . __('CSV using LOAD DATA'), - 'Import/ldi_replace', - 'Import/ldi_ignore', - 'Import/ldi_terminated', - 'Import/ldi_enclosed', - 'Import/ldi_escaped', - 'Import/ldi_local_option'); -$forms['Import']['Open_Document'] = array( - ':group:' . __('OpenDocument Spreadsheet'), - 'Import/ods_col_names', - 'Import/ods_empty_rows', - 'Import/ods_recognize_percentages', - 'Import/ods_recognize_currency'); -$forms['Export']['Export_defaults'] = array( - 'Export/method', - ':group:' . __('Quick'), - 'Export/quick_export_onserver', - 'Export/quick_export_onserver_overwrite', - ':group:end', - ':group:' . __('Custom'), - 'Export/format', - 'Export/compression', - 'Export/charset', - 'Export/lock_tables', - 'Export/as_separate_files', - 'Export/asfile' => ':group', - 'Export/onserver', - 'Export/onserver_overwrite', - ':group:end', - 'Export/file_template_table', - 'Export/file_template_database', - 'Export/file_template_server'); -$forms['Export']['Sql'] = array( - 'Export/sql_include_comments' => ':group', - 'Export/sql_dates', - 'Export/sql_relation', - 'Export/sql_mime', - ':group:end', - 'Export/sql_use_transaction', - 'Export/sql_disable_fk', - 'Export/sql_views_as_tables', - 'Export/sql_metadata', - 'Export/sql_compatibility', - 'Export/sql_structure_or_data', - ':group:' . __('Structure'), - 'Export/sql_drop_database', - 'Export/sql_create_database', - 'Export/sql_drop_table', - 'Export/sql_create_table' => ':group', - 'Export/sql_if_not_exists', - 'Export/sql_auto_increment', - ':group:end', - 'Export/sql_create_view', - 'Export/sql_procedure_function', - 'Export/sql_create_trigger', - 'Export/sql_backquotes', - ':group:end', - ':group:' . __('Data'), - 'Export/sql_delayed', - 'Export/sql_ignore', - 'Export/sql_type', - 'Export/sql_insert_syntax', - 'Export/sql_max_query_size', - 'Export/sql_hex_for_binary', - 'Export/sql_utc_time'); -$forms['Export']['CodeGen'] = array( - 'Export/codegen_format'); -$forms['Export']['Csv'] = array( - ':group:' . __('CSV'), - 'Export/csv_separator', - 'Export/csv_enclosed', - 'Export/csv_escaped', - 'Export/csv_terminated', - 'Export/csv_null', - 'Export/csv_removeCRLF', - 'Export/csv_columns', - ':group:end', - ':group:' . __('CSV for MS Excel'), - 'Export/excel_null', - 'Export/excel_removeCRLF', - 'Export/excel_columns', - 'Export/excel_edition'); -$forms['Export']['Latex'] = array( - 'Export/latex_caption', - 'Export/latex_structure_or_data', - ':group:' . __('Structure'), - 'Export/latex_structure_caption', - 'Export/latex_structure_continued_caption', - 'Export/latex_structure_label', - 'Export/latex_relation', - 'Export/latex_comments', - 'Export/latex_mime', - ':group:end', - ':group:' . __('Data'), - 'Export/latex_columns', - 'Export/latex_data_caption', - 'Export/latex_data_continued_caption', - 'Export/latex_data_label', - 'Export/latex_null'); -$forms['Export']['Microsoft_Office'] = array( - ':group:' . __('Microsoft Word 2000'), - 'Export/htmlword_structure_or_data', - 'Export/htmlword_null', - 'Export/htmlword_columns'); -$forms['Export']['Open_Document'] = array( - ':group:' . __('OpenDocument Spreadsheet'), - 'Export/ods_columns', - 'Export/ods_null', - ':group:end', - ':group:' . __('OpenDocument Text'), - 'Export/odt_structure_or_data', - ':group:' . __('Structure'), - 'Export/odt_relation', - 'Export/odt_comments', - 'Export/odt_mime', - ':group:end', - ':group:' . __('Data'), - 'Export/odt_columns', - 'Export/odt_null'); -$forms['Export']['Texy'] = array( - 'Export/texytext_structure_or_data', - ':group:' . __('Data'), - 'Export/texytext_null', - 'Export/texytext_columns'); diff --git a/server_export.php b/server_export.php index 2c82d3f7cf..72f18f98fb 100644 --- a/server_export.php +++ b/server_export.php @@ -13,8 +13,6 @@ use PhpMyAdmin\Response; * Does the common work */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; require_once 'libraries/server_common.inc.php'; PageSettings::showGroup('Export'); diff --git a/server_import.php b/server_import.php index 19e1bde701..b8027ec41a 100644 --- a/server_import.php +++ b/server_import.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Import'); diff --git a/server_sql.php b/server_sql.php index 410c4b8feb..418903a05c 100644 --- a/server_sql.php +++ b/server_sql.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Sql'); diff --git a/sql.php b/sql.php index 36f550476b..685dc5e2ec 100644 --- a/sql.php +++ b/sql.php @@ -18,8 +18,6 @@ use PhpMyAdmin\Util; */ require_once 'libraries/common.inc.php'; require_once 'libraries/check_user_privileges.lib.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Browse'); diff --git a/tbl_change.php b/tbl_change.php index fcd71bf589..5f4cfa7c4c 100644 --- a/tbl_change.php +++ b/tbl_change.php @@ -16,8 +16,6 @@ use PhpMyAdmin\Url; * Gets the variables sent or posted to this script and displays the header */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Edit'); diff --git a/tbl_export.php b/tbl_export.php index f42230026e..bd34210c16 100644 --- a/tbl_export.php +++ b/tbl_export.php @@ -14,8 +14,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Export'); diff --git a/tbl_import.php b/tbl_import.php index 03c7adb056..477e304562 100644 --- a/tbl_import.php +++ b/tbl_import.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Import'); diff --git a/tbl_sql.php b/tbl_sql.php index 1643354b00..f33569bb92 100644 --- a/tbl_sql.php +++ b/tbl_sql.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Response; * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; PageSettings::showGroup('Sql'); diff --git a/tbl_structure.php b/tbl_structure.php index 333c4b2e3c..0134b13821 100644 --- a/tbl_structure.php +++ b/tbl_structure.php @@ -12,8 +12,6 @@ use PhpMyAdmin\Di\Container; use PhpMyAdmin\Response; require_once 'libraries/common.inc.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; $container = Container::getDefaultContainer(); $container->factory('PhpMyAdmin\Controllers\Table\TableStructureController'); diff --git a/test/classes/config/PageSettingsTest.php b/test/classes/config/PageSettingsTest.php index 873210f0e2..ba7367e72d 100644 --- a/test/classes/config/PageSettingsTest.php +++ b/test/classes/config/PageSettingsTest.php @@ -8,8 +8,6 @@ use PhpMyAdmin\Config\PageSettings; require_once 'test/PMATestCase.php'; -require_once 'libraries/config/user_preferences.forms.php'; -require_once 'libraries/config/page_settings.forms.php'; /** * Tests for PhpMyAdmin\Config\PageSettings From 1fb2887a2ad11ab4b030bc6cf427a75fa0384d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 09:48:35 +0200 Subject: [PATCH 04/14] Bring User settings in sync with Setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add server navigation configuration, it makes no sense to hide this from user as it configures just UI - reorganize Features form a bit to be in sync with Setup - add DisableShortcutKeys settings to User - remove LoginCookieValidity from User settings (there are more cookie related settings and all should be handled same) Signed-off-by: Michal Čihař --- libraries/classes/Config/Forms/User/FeaturesForm.php | 8 ++++---- libraries/classes/Config/Forms/User/NaviForm.php | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/classes/Config/Forms/User/FeaturesForm.php b/libraries/classes/Config/Forms/User/FeaturesForm.php index 8c46a72182..ab77c92ba4 100644 --- a/libraries/classes/Config/Forms/User/FeaturesForm.php +++ b/libraries/classes/Config/Forms/User/FeaturesForm.php @@ -18,18 +18,18 @@ class FeaturesForm extends BaseForm 'VersionCheck', 'NaturalOrder', 'InitialSlidersState', - 'LoginCookieValidity', 'SkipLockedTables', 'DisableMultiTableMaintenance', - 'MaxTableList', 'ShowHint', 'SendErrorReports', - 'ConsoleEnterExecutes' + 'ConsoleEnterExecutes', + 'DisableShortcutKeys', ), 'Databases' => array( 'Servers/1/only_db', // saves to Server/only_db 'Servers/1/hide_db', // saves to Server/hide_db - 'MaxDbList' + 'MaxDbList', + 'MaxTableList', ), 'Text_fields' => array( 'CharEditing', diff --git a/libraries/classes/Config/Forms/User/NaviForm.php b/libraries/classes/Config/Forms/User/NaviForm.php index 46eeedb638..a22b0560e5 100644 --- a/libraries/classes/Config/Forms/User/NaviForm.php +++ b/libraries/classes/Config/Forms/User/NaviForm.php @@ -36,6 +36,10 @@ class NaviForm extends BaseForm 'NavigationTreeShowProcedures', 'NavigationTreeShowEvents' ), + 'Navi_servers' => array( + 'NavigationDisplayServers', + 'DisplayServersList', + ), 'Navi_databases' => array( 'NavigationTreeDisplayDbFilterMinimum', 'NavigationTreeDbSeparator' From 8490d3a571a59899f8aea46a77bfa4210f9050dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:08:27 +0200 Subject: [PATCH 05/14] Rewrite Setup settings forms as classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- .../classes/Config/Forms/Setup/ConfigForm.php | 23 + .../classes/Config/Forms/Setup/ExportForm.php | 12 + .../Config/Forms/Setup/FeaturesForm.php | 60 +++ .../classes/Config/Forms/Setup/ImportForm.php | 12 + .../classes/Config/Forms/Setup/MainForm.php | 20 + .../classes/Config/Forms/Setup/NaviForm.php | 12 + .../Config/Forms/Setup/ServersForm.php | 81 ++++ .../Config/Forms/Setup/SetupFormList.php | 25 ++ .../classes/Config/Forms/Setup/SqlForm.php | 19 + libraries/config/setup.forms.php | 395 ------------------ setup/config.php | 9 +- setup/frames/form.inc.php | 12 +- setup/frames/menu.inc.php | 6 +- setup/frames/servers.inc.php | 9 +- test/classes/config/FormListTest.php | 27 ++ 15 files changed, 303 insertions(+), 419 deletions(-) create mode 100644 libraries/classes/Config/Forms/Setup/ConfigForm.php create mode 100644 libraries/classes/Config/Forms/Setup/ExportForm.php create mode 100644 libraries/classes/Config/Forms/Setup/FeaturesForm.php create mode 100644 libraries/classes/Config/Forms/Setup/ImportForm.php create mode 100644 libraries/classes/Config/Forms/Setup/MainForm.php create mode 100644 libraries/classes/Config/Forms/Setup/NaviForm.php create mode 100644 libraries/classes/Config/Forms/Setup/ServersForm.php create mode 100644 libraries/classes/Config/Forms/Setup/SetupFormList.php create mode 100644 libraries/classes/Config/Forms/Setup/SqlForm.php delete mode 100644 libraries/config/setup.forms.php diff --git a/libraries/classes/Config/Forms/Setup/ConfigForm.php b/libraries/classes/Config/Forms/Setup/ConfigForm.php new file mode 100644 index 0000000000..35dfd85467 --- /dev/null +++ b/libraries/classes/Config/Forms/Setup/ConfigForm.php @@ -0,0 +1,23 @@ + array( + 'DefaultLang', + 'ServerDefault' + ), + ); + } +} diff --git a/libraries/classes/Config/Forms/Setup/ExportForm.php b/libraries/classes/Config/Forms/Setup/ExportForm.php new file mode 100644 index 0000000000..09e59a1490 --- /dev/null +++ b/libraries/classes/Config/Forms/Setup/ExportForm.php @@ -0,0 +1,12 @@ + ':group', + 'IconvExtraParams', + ':group:end', + 'ZipDump', + 'GZipDump', + 'BZipDump', + 'CompressOnFly' + ); + $result['Security'] = array( + 'blowfish_secret', + 'CheckConfigurationPermissions', + 'TrustedProxies', + 'AllowUserDropDatabase', + 'AllowArbitraryServer', + 'ArbitraryServerRegexp', + 'LoginCookieRecall', + 'LoginCookieStore', + 'LoginCookieDeleteAll', + 'CaptchaLoginPublicKey', + 'CaptchaLoginPrivateKey' + ); + $result['Developer'][] = 'UserprefsDeveloperTab'; + $result['Other_core_settings'] = array( + 'OBGzip', + 'PersistentConnections', + 'ExecTimeLimit', + 'MemoryLimit', + 'UseDbSearch', + 'ProxyUrl', + 'ProxyUser', + 'ProxyPass', + 'AllowThirdPartyFraming', + 'ZeroConf', + ); + return $result; + } +} diff --git a/libraries/classes/Config/Forms/Setup/ImportForm.php b/libraries/classes/Config/Forms/Setup/ImportForm.php new file mode 100644 index 0000000000..cc36b1ba61 --- /dev/null +++ b/libraries/classes/Config/Forms/Setup/ImportForm.php @@ -0,0 +1,12 @@ + array('Servers' => array(1 => array( + 'verbose', + 'host', + 'port', + 'socket', + 'ssl', + 'compress'))), + 'Server_auth' => array('Servers' => array(1 => array( + 'auth_type', + ':group:' . __('Config authentication'), + 'user', + 'password', + ':group:end', + ':group:' . __('HTTP authentication'), + 'auth_http_realm', + ':group:end', + ':group:' . __('Signon authentication'), + 'SignonSession', + 'SignonURL', + 'LogoutURL'))), + 'Server_config' => array('Servers' => array(1 => array( + 'only_db', + 'hide_db', + 'AllowRoot', + 'AllowNoPassword', + 'DisableIS', + 'AllowDeny/order', + 'AllowDeny/rules', + 'SessionTimeZone'))), + 'Server_pmadb' => array('Servers' => array(1 => array( + 'pmadb' => 'phpmyadmin', + 'controlhost', + 'controlport', + 'controluser', + 'controlpass', + 'bookmarktable' => 'pma__bookmark', + 'relation' => 'pma__relation', + 'userconfig' => 'pma__userconfig', + 'users' => 'pma__users', + 'usergroups' => 'pma__usergroups', + 'navigationhiding' => 'pma__navigationhiding', + 'table_info' => 'pma__table_info', + 'column_info' => 'pma__column_info', + 'history' => 'pma__history', + 'recent' => 'pma__recent', + 'favorite' => 'pma__favorite', + 'table_uiprefs' => 'pma__table_uiprefs', + 'tracking' => 'pma__tracking', + 'table_coords' => 'pma__table_coords', + 'pdf_pages' => 'pma__pdf_pages', + 'savedsearches' => 'pma__savedsearches', + 'central_columns' => 'pma__central_columns', + 'designer_settings' => 'pma__designer_settings', + 'export_templates' => 'pma__export_templates', + 'MaxTableUiprefs' => 100))), + 'Server_tracking' => array('Servers' => array(1 => array( + 'tracking_version_auto_create', + 'tracking_default_statements', + 'tracking_add_drop_view', + 'tracking_add_drop_table', + 'tracking_add_drop_database', + ))), + ); + } +} diff --git a/libraries/classes/Config/Forms/Setup/SetupFormList.php b/libraries/classes/Config/Forms/Setup/SetupFormList.php new file mode 100644 index 0000000000..23abc02f1c --- /dev/null +++ b/libraries/classes/Config/Forms/Setup/SetupFormList.php @@ -0,0 +1,25 @@ + array(1 => array('host'))); - * can be written as - * $forms['Form group']['Form name'] = array('Servers/1/host'); - * - * You can assign default values set by special button ("set value: ..."), eg.: - * 'Servers/1/pmadb' => 'phpmyadmin' - * - * To group options, use: - * ':group:' . __('group name') // just define a group - * or - * 'option' => ':group' // group starting from this option - * End group blocks with: - * ':group:end' - * - * @package PhpMyAdmin-Setup - */ - -$forms = array(); -$forms['_config.php'] = array( - 'DefaultLang', - 'ServerDefault'); -$forms['Servers']['Server'] = array('Servers' => array(1 => array( - 'verbose', - 'host', - 'port', - 'socket', - 'ssl', - 'compress'))); -$forms['Servers']['Server_auth'] = array('Servers' => array(1 => array( - 'auth_type', - ':group:' . __('Config authentication'), - 'user', - 'password', - ':group:end', - ':group:' . __('HTTP authentication'), - 'auth_http_realm', - ':group:end', - ':group:' . __('Signon authentication'), - 'SignonSession', - 'SignonURL', - 'LogoutURL'))); -$forms['Servers']['Server_config'] = array('Servers' => array(1 => array( - 'only_db', - 'hide_db', - 'AllowRoot', - 'AllowNoPassword', - 'DisableIS', - 'AllowDeny/order', - 'AllowDeny/rules', - 'SessionTimeZone'))); -$forms['Servers']['Server_pmadb'] = array('Servers' => array(1 => array( - 'pmadb' => 'phpmyadmin', - 'controlhost', - 'controlport', - 'controluser', - 'controlpass', - 'bookmarktable' => 'pma__bookmark', - 'relation' => 'pma__relation', - 'userconfig' => 'pma__userconfig', - 'users' => 'pma__users', - 'usergroups' => 'pma__usergroups', - 'navigationhiding' => 'pma__navigationhiding', - 'table_info' => 'pma__table_info', - 'column_info' => 'pma__column_info', - 'history' => 'pma__history', - 'recent' => 'pma__recent', - 'favorite' => 'pma__favorite', - 'table_uiprefs' => 'pma__table_uiprefs', - 'tracking' => 'pma__tracking', - 'table_coords' => 'pma__table_coords', - 'pdf_pages' => 'pma__pdf_pages', - 'savedsearches' => 'pma__savedsearches', - 'central_columns' => 'pma__central_columns', - 'designer_settings' => 'pma__designer_settings', - 'export_templates' => 'pma__export_templates', - 'MaxTableUiprefs' => 100))); -$forms['Servers']['Server_tracking'] = array('Servers' => array(1 => array( - 'tracking_version_auto_create', - 'tracking_default_statements', - 'tracking_add_drop_view', - 'tracking_add_drop_table', - 'tracking_add_drop_database', -))); -$forms['Features']['Import_export'] = array( - 'UploadDir', - 'SaveDir', - 'RecodingEngine' => ':group', - 'IconvExtraParams', - ':group:end', - 'ZipDump', - 'GZipDump', - 'BZipDump', - 'CompressOnFly'); -$forms['Features']['Security'] = array( - 'blowfish_secret', - 'CheckConfigurationPermissions', - 'TrustedProxies', - 'AllowUserDropDatabase', - 'AllowArbitraryServer', - 'ArbitraryServerRegexp', - 'LoginCookieRecall', - 'LoginCookieValidity', - 'LoginCookieStore', - 'LoginCookieDeleteAll', - 'CaptchaLoginPublicKey', - 'CaptchaLoginPrivateKey'); -$forms['Features']['Page_titles'] = array( - 'TitleDefault', - 'TitleTable', - 'TitleDatabase', - 'TitleServer'); -$forms['Features']['Warnings'] = array( - 'PmaNoRelation_DisableWarning', - 'SuhosinDisableWarning', - 'LoginCookieValidityDisableWarning'); -$forms['Features']['Developer'] = array( - 'UserprefsDeveloperTab', - 'DBG/sql'); -$forms['Features']['Other_core_settings'] = array( - 'NaturalOrder', - 'InitialSlidersState', - 'MaxDbList', - 'MaxTableList', - 'NumFavoriteTables', - 'ShowHint', - 'OBGzip', - 'PersistentConnections', - 'ExecTimeLimit', - 'MemoryLimit', - 'SkipLockedTables', - 'DisableMultiTableMaintenance', - 'UseDbSearch', - 'VersionCheck', - 'SendErrorReports', - 'ConsoleEnterExecutes', - 'ProxyUrl', - 'ProxyUser', - 'ProxyPass', - 'AllowThirdPartyFraming', - 'ZeroConf', - 'DisableShortcutKeys' -); -$forms['Sql_queries']['Sql_queries'] = array( - 'ShowSQL', - 'Confirm', - 'QueryHistoryDB', - 'QueryHistoryMax', - 'IgnoreMultiSubmitErrors', - 'MaxCharactersInDisplayedSQL', - 'RetainQueryBox', - 'CodemirrorEnable', - 'LintEnable', - 'EnableAutocompleteForTablesAndColumns', - 'DefaultForeignKeyChecks'); -$forms['Sql_queries']['Sql_box'] = array('SQLQuery' => array( - 'Edit', - 'Explain', - 'ShowAsPHP', - 'Refresh')); -$forms['Navi_panel']['Navi_panel'] = array( - 'ShowDatabasesNavigationAsTree', - 'NavigationLinkWithMainPanel', - 'NavigationDisplayLogo', - 'NavigationLogoLink', - 'NavigationLogoLinkWindow', - 'NavigationTreePointerEnable', - 'FirstLevelNavigationItems', - 'NavigationTreeDisplayItemFilterMinimum', - 'NumRecentTables', - 'NumFavoriteTables' -); -$forms['Navi_panel']['Navi_tree'] = array( - 'MaxNavigationItems', - 'NavigationTreeEnableGrouping', - 'NavigationTreeEnableExpansion', - 'NavigationTreeShowTables', - 'NavigationTreeShowViews', - 'NavigationTreeShowFunctions', - 'NavigationTreeShowProcedures', - 'NavigationTreeShowEvents' -); -$forms['Navi_panel']['Navi_servers'] = array( - 'NavigationDisplayServers', - 'DisplayServersList'); -$forms['Navi_panel']['Navi_databases'] = array( - 'NavigationTreeDbSeparator'); -$forms['Navi_panel']['Navi_tables'] = array( - 'NavigationTreeDefaultTabTable', - 'NavigationTreeDefaultTabTable2', - 'NavigationTreeTableSeparator', - 'NavigationTreeTableLevel', -); -$forms['Main_panel']['Startup'] = array( - 'ShowCreateDb', - 'ShowStats', - 'ShowServerInfo', - 'ShowPhpInfo', - 'ShowChgPassword'); -$forms['Main_panel']['DbStructure'] = array( - 'ShowDbStructureCharset', - 'ShowDbStructureComment', - 'ShowDbStructureCreation', - 'ShowDbStructureLastUpdate', - 'ShowDbStructureLastCheck'); -$forms['Main_panel']['TableStructure'] = array( - 'HideStructureActions', - 'ShowColumnComments'); -$forms['Main_panel']['Browse'] = array( - 'TableNavigationLinksMode', - 'ShowAll', - 'MaxRows', - 'Order', - 'BrowsePointerEnable', - 'BrowseMarkerEnable', - 'GridEditing', - 'SaveCellsAtOnce', - 'RepeatCells', - 'LimitChars', - 'RowActionLinks', - 'RowActionLinksWithoutUnique', - 'TablePrimaryKeyOrder', - 'RememberSorting', - 'RelationalDisplay'); -$forms['Main_panel']['Edit'] = array( - 'ProtectBinary', - 'ShowFunctionFields', - 'ShowFieldTypesInDataEditView', - 'CharEditing', - 'MinSizeForInputField', - 'MaxSizeForInputField', - 'CharTextareaCols', - 'CharTextareaRows', - 'TextareaCols', - 'TextareaRows', - 'LongtextDoubleTextarea', - 'InsertRows', - 'ForeignKeyDropdownOrder', - 'ForeignKeyMaxLimit'); -$forms['Main_panel']['Tabs'] = array( - 'TabsMode', - 'ActionLinksMode', - 'DefaultTabServer', - 'DefaultTabDatabase', - 'DefaultTabTable' -); -$forms['Import']['Import_defaults'] = array('Import' => array( - 'format', - 'charset', - 'allow_interrupt', - 'skip_queries')); -$forms['Import']['Sql'] = array('Import' => array( - 'sql_compatibility', - 'sql_no_auto_value_on_zero')); -$forms['Import']['Csv'] = array('Import' => array( - ':group:' . __('CSV'), - 'csv_replace', - 'csv_ignore', - 'csv_terminated', - 'csv_enclosed', - 'csv_escaped', - 'csv_col_names', - ':group:end', - ':group:' . __('CSV using LOAD DATA'), - 'ldi_replace', - 'ldi_ignore', - 'ldi_terminated', - 'ldi_enclosed', - 'ldi_escaped', - 'ldi_local_option', - ':group:end')); -$forms['Import']['Open_Document'] = array('Import' => array( - ':group:' . __('OpenDocument Spreadsheet'), - 'ods_col_names', - 'ods_empty_rows', - 'ods_recognize_percentages', - 'ods_recognize_currency')); -$forms['Export']['Export_defaults'] = array('Export' => array( - 'method', - ':group:' . __('Quick'), - 'quick_export_onserver', - 'quick_export_onserver_overwrite', - ':group:end', - ':group:' . __('Custom'), - 'format', - 'compression', - 'charset', - 'lock_tables', - 'as_separate_files', - 'asfile' => ':group', - 'onserver', - 'onserver_overwrite', - ':group:end', - 'remember_file_template', - 'file_template_table', - 'file_template_database', - 'file_template_server')); -$forms['Export']['Sql'] = array('Export' => array( - 'sql_include_comments' => ':group', - 'sql_dates', - 'sql_relation', - 'sql_mime', - ':group:end', - 'sql_use_transaction', - 'sql_disable_fk', - 'sql_views_as_tables', - 'sql_metadata', - 'sql_compatibility', - 'sql_structure_or_data', - ':group:' . __('Structure'), - 'sql_drop_database', - 'sql_create_database', - 'sql_drop_table', - 'sql_procedure_function', - 'sql_create_table' => ':group', - 'sql_if_not_exists', - 'sql_auto_increment', - ':group:end', - 'sql_create_view', - 'sql_create_trigger', - 'sql_backquotes', - ':group:end', - ':group:' . __('Data'), - 'sql_delayed', - 'sql_ignore', - 'sql_type', - 'sql_insert_syntax', - 'sql_max_query_size', - 'sql_hex_for_binary', - 'sql_utc_time')); -$forms['Export']['CodeGen'] = array('Export' => array( - 'codegen_format')); -$forms['Export']['Csv'] = array('Export' => array( - ':group:' . __('CSV'), - 'csv_separator', - 'csv_enclosed', - 'csv_escaped', - 'csv_terminated', - 'csv_null', - 'csv_removeCRLF', - 'csv_columns', - ':group:end', - ':group:' . __('CSV for MS Excel'), - 'excel_null', - 'excel_removeCRLF', - 'excel_columns', - 'excel_edition')); -$forms['Export']['Latex'] = array('Export' => array( - 'latex_caption', - 'latex_structure_or_data', - ':group:' . __('Structure'), - 'latex_structure_caption', - 'latex_structure_continued_caption', - 'latex_structure_label', - 'latex_relation', - 'latex_comments', - 'latex_mime', - ':group:end', - ':group:' . __('Data'), - 'latex_columns', - 'latex_data_caption', - 'latex_data_continued_caption', - 'latex_data_label', - 'latex_null')); -$forms['Export']['Microsoft_Office'] = array('Export' => array( - ':group:' . __('Microsoft Word 2000'), - 'htmlword_structure_or_data', - 'htmlword_null', - 'htmlword_columns')); -$forms['Export']['Open_Document'] = array('Export' => array( - ':group:' . __('OpenDocument Spreadsheet'), - 'ods_columns', - 'ods_null', - ':group:end', - ':group:' . __('OpenDocument Text'), - 'odt_structure_or_data', - ':group:' . __('Structure'), - 'odt_relation', - 'odt_comments', - 'odt_mime', - ':group:end', - ':group:' . __('Data'), - 'odt_columns', - 'odt_null')); -$forms['Export']['Texy'] = array('Export' => array( - 'texytext_structure_or_data', - ':group:' . __('Data'), - 'texytext_null', - 'texytext_columns')); diff --git a/setup/config.php b/setup/config.php index 9e18436a48..ae99059675 100644 --- a/setup/config.php +++ b/setup/config.php @@ -5,8 +5,8 @@ * * @package PhpMyAdmin-Setup */ -use PhpMyAdmin\Config\FormDisplay; use PhpMyAdmin\Setup\ConfigGenerator; +use PhpMyAdmin\Config\Forms\Setup\ConfigForm; use PhpMyAdmin\Core; use PhpMyAdmin\Url; use PhpMyAdmin\Response; @@ -16,11 +16,8 @@ use PhpMyAdmin\Response; */ require './lib/common.inc.php'; -require './libraries/config/setup.forms.php'; - -$form_display = new FormDisplay($GLOBALS['ConfigFile']); -$form_display->registerForm('_config.php', $forms['_config.php']); -$form_display->save('_config.php'); +$form_display = new ConfigForm($GLOBALS['ConfigFile']); +$form_display->save('Config'); $response = Response::getInstance(); diff --git a/setup/frames/form.inc.php b/setup/frames/form.inc.php index 76e5e04255..1d537f008c 100644 --- a/setup/frames/form.inc.php +++ b/setup/frames/form.inc.php @@ -7,7 +7,7 @@ */ use PhpMyAdmin\Config\Descriptions; -use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\Forms\Setup\SetupFormList; use PhpMyAdmin\Core; if (!defined('PHPMYADMIN')) { @@ -19,11 +19,9 @@ if (!defined('PHPMYADMIN')) { */ require_once './setup/lib/form_processing.lib.php'; -require './libraries/config/setup.forms.php'; - $formset_id = Core::isValid($_GET['formset'], 'scalar') ? $_GET['formset'] : null; $mode = isset($_GET['mode']) ? $_GET['mode'] : null; -if (! isset($forms[$formset_id]) || substr($formset_id, 0, 1) === '_') { +if (! SetupFormList::isValid($formset_id)) { Core::fatalError(__('Incorrect formset, check $formsets array in setup/frames/form.inc.php!')); } @@ -31,8 +29,6 @@ $form_title = Descriptions::get('Formset_' . $formset_id); if (! is_null($form_title)) { echo '

' , $form_title , '

'; } -$form_display = new FormDisplay($GLOBALS['ConfigFile']); -foreach ($forms[$formset_id] as $form_name => $form) { - $form_display->registerForm($form_name, $form); -} +$form_class = SetupFormList::get($formset_id); +$form_display = new $form_class($GLOBALS['ConfigFile']); PMA_Process_formset($form_display); diff --git a/setup/frames/menu.inc.php b/setup/frames/menu.inc.php index 3f184b666e..4fead97ae4 100644 --- a/setup/frames/menu.inc.php +++ b/setup/frames/menu.inc.php @@ -20,9 +20,9 @@ echo '
  • __('Features'), - 'Sql_queries' => __('SQL queries'), - 'Navi_panel' => __('Navigation panel'), - 'Main_panel' => __('Main panel'), + 'Sql' => __('SQL queries'), + 'Navi' => __('Navigation panel'), + 'Main' => __('Main panel'), 'Import' => __('Import'), 'Export' => __('Export') ); diff --git a/setup/frames/servers.inc.php b/setup/frames/servers.inc.php index a3b62dfa9b..dd31c4661b 100644 --- a/setup/frames/servers.inc.php +++ b/setup/frames/servers.inc.php @@ -7,7 +7,7 @@ */ use PhpMyAdmin\Config\ConfigFile; -use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\Forms\Setup\ServersForm; use PhpMyAdmin\Core; use PhpMyAdmin\Url; @@ -20,8 +20,6 @@ if (!defined('PHPMYADMIN')) { */ require_once './setup/lib/form_processing.lib.php'; -require './libraries/config/setup.forms.php'; - $mode = isset($_GET['mode']) ? $_GET['mode'] : null; $id = Core::isValid($_GET['id'], 'numeric') ? intval($_GET['id']) : null; @@ -46,8 +44,5 @@ if ($mode == 'edit' && $server_exists) { if (isset($page_title)) { echo '

    ' , $page_title . '

    '; } -$form_display = new FormDisplay($cf); -foreach ($forms['Servers'] as $form_name => $form) { - $form_display->registerForm($form_name, $form, $id); -} +$form_display = new ServersForm($cf, $id); PMA_Process_formset($form_display); diff --git a/test/classes/config/FormListTest.php b/test/classes/config/FormListTest.php index ff6424f627..215d8c43aa 100644 --- a/test/classes/config/FormListTest.php +++ b/test/classes/config/FormListTest.php @@ -9,6 +9,7 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Config\Forms\Page\PageFormList; +use PhpMyAdmin\Config\Forms\Setup\SetupFormList; require_once 'test/PMATestCase.php'; @@ -75,4 +76,30 @@ class FormListTest extends PMATestCase $this->assertFalse($forms->hasErrors()); $this->assertEquals('', $forms->displayErrors()); } + + /** + * Tests for setup preferences forms. + */ + public function testSetupForms() + { + $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); + + /* Static API */ + $this->assertTrue(SetupFormList::isValid('Export')); + $this->assertEquals( + 'PhpMyAdmin\\Config\\Forms\\Setup\\ExportForm', + SetupFormList::get('Export') + ); + $this->assertContains( + 'Export/texytext_columns', + SetupFormList::getFields() + ); + + /* Instance handling */ + $forms = new SetupFormList($cf); + $this->assertFalse($forms->process()); + $forms->fixErrors(); + $this->assertFalse($forms->hasErrors()); + $this->assertEquals('', $forms->displayErrors()); + } } From 09642df6fcd3b7dff60cab2612677e8aa24a0d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:12:55 +0200 Subject: [PATCH 06/14] Avoid using abstract static functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This does not work in PHP 5, only in PHP 7. Signed-off-by: Michal Čihař --- libraries/classes/Config/Forms/BaseForm.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/classes/Config/Forms/BaseForm.php b/libraries/classes/Config/Forms/BaseForm.php index 6160279da5..78ded4fd61 100644 --- a/libraries/classes/Config/Forms/BaseForm.php +++ b/libraries/classes/Config/Forms/BaseForm.php @@ -50,9 +50,14 @@ abstract class BaseForm extends FormDisplay * End group blocks with: * ':group:end' * + * @todo This should be abstract, but that does not work in PHP 5 + * * @return array */ - abstract public static function getForms(); + public static function getForms() + { + return array(); + } /** * Returns list of fields used in the form. From 8490161073511bbd9bb5d35ed677ae6be155ba3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:21:06 +0200 Subject: [PATCH 07/14] Share code for testing FormLists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tests were same anyway, so avoid duplicating code. Signed-off-by: Michal Čihař --- .../Config/Forms/Page/PageFormList.php | 2 +- .../Config/Forms/Setup/SetupFormList.php | 2 +- .../Config/Forms/User/UserFormList.php | 2 +- test/classes/config/FormListTest.php | 81 ++++++------------- 4 files changed, 29 insertions(+), 58 deletions(-) diff --git a/libraries/classes/Config/Forms/Page/PageFormList.php b/libraries/classes/Config/Forms/Page/PageFormList.php index 47b8483d6c..321684277d 100644 --- a/libraries/classes/Config/Forms/Page/PageFormList.php +++ b/libraries/classes/Config/Forms/Page/PageFormList.php @@ -21,5 +21,5 @@ class PageFormList extends BaseFormList 'Sql', 'TableStructure', ); - protected static $ns = 'PhpMyAdmin\\Config\\Forms\\Page\\'; + protected static $ns = '\\PhpMyAdmin\\Config\\Forms\\Page\\'; } diff --git a/libraries/classes/Config/Forms/Setup/SetupFormList.php b/libraries/classes/Config/Forms/Setup/SetupFormList.php index 23abc02f1c..900bf059b4 100644 --- a/libraries/classes/Config/Forms/Setup/SetupFormList.php +++ b/libraries/classes/Config/Forms/Setup/SetupFormList.php @@ -21,5 +21,5 @@ class SetupFormList extends BaseFormList 'Servers', 'Sql', ); - protected static $ns = 'PhpMyAdmin\\Config\\Forms\\Setup\\'; + protected static $ns = '\\PhpMyAdmin\\Config\\Forms\\Setup\\'; } diff --git a/libraries/classes/Config/Forms/User/UserFormList.php b/libraries/classes/Config/Forms/User/UserFormList.php index 5b319b5e21..f32cae32f9 100644 --- a/libraries/classes/Config/Forms/User/UserFormList.php +++ b/libraries/classes/Config/Forms/User/UserFormList.php @@ -19,5 +19,5 @@ class UserFormList extends BaseFormList 'Import', 'Export', ); - protected static $ns = 'PhpMyAdmin\\Config\\Forms\\User\\'; + protected static $ns = '\\PhpMyAdmin\\Config\\Forms\\User\\'; } diff --git a/test/classes/config/FormListTest.php b/test/classes/config/FormListTest.php index 215d8c43aa..964ea51235 100644 --- a/test/classes/config/FormListTest.php +++ b/test/classes/config/FormListTest.php @@ -26,80 +26,51 @@ class FormListTest extends PMATestCase } /** - * Tests for user preferences forms. + * Tests for preferences forms. + * + * @param string $class Class to test + * @param string $prefix Reuturned class prefix + * + * @dataProvider formObjects */ - public function testUserForms() + public function testForms($class, $prefix) { $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); /* Static API */ - $this->assertTrue(UserFormList::isValid('Export')); + $this->assertTrue($class::isValid('Export')); $this->assertEquals( - 'PhpMyAdmin\\Config\\Forms\\User\\ExportForm', - UserFormList::get('Export') + $prefix . 'ExportForm', + $class::get('Export') ); $this->assertContains( 'Export/texytext_columns', - UserFormList::getFields() + $class::getFields() ); /* Instance handling */ - $forms = new UserFormList($cf); + $forms = new $class($cf); $this->assertFalse($forms->process()); $forms->fixErrors(); $this->assertFalse($forms->hasErrors()); $this->assertEquals('', $forms->displayErrors()); } - /** - * Tests for page preferences forms. - */ - public function testPageForms() + public function formObjects() { - $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); - - /* Static API */ - $this->assertTrue(PageFormList::isValid('Export')); - $this->assertEquals( - 'PhpMyAdmin\\Config\\Forms\\Page\\ExportForm', - PageFormList::get('Export') + return array( + array( + '\\PhpMyAdmin\\Config\\Forms\\User\\UserFormList', + '\\PhpMyAdmin\\Config\\Forms\\User\\', + ), + array( + '\\PhpMyAdmin\\Config\\Forms\\Page\\PageFormList', + '\\PhpMyAdmin\\Config\\Forms\\Page\\', + ), + array( + '\\PhpMyAdmin\\Config\\Forms\\Setup\\SetupFormList', + '\\PhpMyAdmin\\Config\\Forms\\Setup\\', + ), ); - $this->assertContains( - 'Export/texytext_columns', - PageFormList::getFields() - ); - - /* Instance handling */ - $forms = new PageFormList($cf); - $this->assertFalse($forms->process()); - $forms->fixErrors(); - $this->assertFalse($forms->hasErrors()); - $this->assertEquals('', $forms->displayErrors()); - } - - /** - * Tests for setup preferences forms. - */ - public function testSetupForms() - { - $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); - - /* Static API */ - $this->assertTrue(SetupFormList::isValid('Export')); - $this->assertEquals( - 'PhpMyAdmin\\Config\\Forms\\Setup\\ExportForm', - SetupFormList::get('Export') - ); - $this->assertContains( - 'Export/texytext_columns', - SetupFormList::getFields() - ); - - /* Instance handling */ - $forms = new SetupFormList($cf); - $this->assertFalse($forms->process()); - $forms->fixErrors(); - $this->assertFalse($forms->hasErrors()); - $this->assertEquals('', $forms->displayErrors()); } } From 953ef05b92ffbafad0d0e25715038e2a7bd6c51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:30:19 +0200 Subject: [PATCH 08/14] Use forms to define menu and titles on setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/classes/Config/Descriptions.php | 12 ------------ libraries/classes/Config/Forms/BaseForm.php | 12 ++++++++++++ .../classes/Config/Forms/User/ExportForm.php | 5 +++++ .../Config/Forms/User/FeaturesForm.php | 5 +++++ .../classes/Config/Forms/User/ImportForm.php | 5 +++++ .../classes/Config/Forms/User/MainForm.php | 5 +++++ .../classes/Config/Forms/User/NaviForm.php | 5 +++++ .../classes/Config/Forms/User/SqlForm.php | 5 +++++ setup/frames/form.inc.php | 6 +----- setup/frames/menu.inc.php | 19 ++++++++----------- test/classes/config/FormListTest.php | 5 +++++ 11 files changed, 56 insertions(+), 28 deletions(-) diff --git a/libraries/classes/Config/Descriptions.php b/libraries/classes/Config/Descriptions.php index 6d081f8155..74947a70e6 100644 --- a/libraries/classes/Config/Descriptions.php +++ b/libraries/classes/Config/Descriptions.php @@ -557,18 +557,6 @@ class Descriptions 'Tracking of changes made in database. Requires the phpMyAdmin configuration ' . 'storage.' ); - case 'Formset_Export_name': - return __('Customize export options'); - case 'Formset_Features_name': - return __('Features'); - case 'Formset_Import_name': - return __('Customize import defaults'); - case 'Formset_Navi_panel_name': - return __('Customize navigation panel'); - case 'Formset_Main_panel_name': - return __('Customize main panel'); - case 'Formset_Sql_queries_name': - return __('SQL queries'); case 'Form_Sql_name': return __('SQL'); case 'Form_Sql_box_name': diff --git a/libraries/classes/Config/Forms/BaseForm.php b/libraries/classes/Config/Forms/BaseForm.php index 78ded4fd61..86f558f2a3 100644 --- a/libraries/classes/Config/Forms/BaseForm.php +++ b/libraries/classes/Config/Forms/BaseForm.php @@ -74,4 +74,16 @@ abstract class BaseForm extends FormDisplay } return $names; } + + /** + * Returns name of the form + * + * @todo This should be abstract, but that does not work in PHP 5 + * + * @return string + */ + public static function getName() + { + return ''; + } } diff --git a/libraries/classes/Config/Forms/User/ExportForm.php b/libraries/classes/Config/Forms/User/ExportForm.php index 9b99059abf..8a74c3dbf7 100644 --- a/libraries/classes/Config/Forms/User/ExportForm.php +++ b/libraries/classes/Config/Forms/User/ExportForm.php @@ -134,4 +134,9 @@ class ExportForm extends BaseForm ), ); } + + public static function getName() + { + return __('Export'); + } } diff --git a/libraries/classes/Config/Forms/User/FeaturesForm.php b/libraries/classes/Config/Forms/User/FeaturesForm.php index ab77c92ba4..8482dfeee5 100644 --- a/libraries/classes/Config/Forms/User/FeaturesForm.php +++ b/libraries/classes/Config/Forms/User/FeaturesForm.php @@ -60,4 +60,9 @@ class FeaturesForm extends BaseForm ), ); } + + public static function getName() + { + return __('Features'); + } } diff --git a/libraries/classes/Config/Forms/User/ImportForm.php b/libraries/classes/Config/Forms/User/ImportForm.php index 53b34c6a9d..daf5c43bba 100644 --- a/libraries/classes/Config/Forms/User/ImportForm.php +++ b/libraries/classes/Config/Forms/User/ImportForm.php @@ -52,4 +52,9 @@ class ImportForm extends BaseForm ); } + + public static function getName() + { + return __('Import'); + } } diff --git a/libraries/classes/Config/Forms/User/MainForm.php b/libraries/classes/Config/Forms/User/MainForm.php index a172a0eb2d..e3c54eddbc 100644 --- a/libraries/classes/Config/Forms/User/MainForm.php +++ b/libraries/classes/Config/Forms/User/MainForm.php @@ -78,4 +78,9 @@ class MainForm extends BaseForm ), ); } + + public static function getName() + { + return __('Main panel'); + } } diff --git a/libraries/classes/Config/Forms/User/NaviForm.php b/libraries/classes/Config/Forms/User/NaviForm.php index a22b0560e5..7084353b6e 100644 --- a/libraries/classes/Config/Forms/User/NaviForm.php +++ b/libraries/classes/Config/Forms/User/NaviForm.php @@ -52,4 +52,9 @@ class NaviForm extends BaseForm ), ); } + + public static function getName() + { + return __('Navigation panel'); + } } diff --git a/libraries/classes/Config/Forms/User/SqlForm.php b/libraries/classes/Config/Forms/User/SqlForm.php index 7a0fb4cc26..2058076a91 100644 --- a/libraries/classes/Config/Forms/User/SqlForm.php +++ b/libraries/classes/Config/Forms/User/SqlForm.php @@ -34,4 +34,9 @@ class SqlForm extends BaseForm ), ); } + + public static function getName() + { + return __('SQL queries'); + } } diff --git a/setup/frames/form.inc.php b/setup/frames/form.inc.php index 1d537f008c..931245c27b 100644 --- a/setup/frames/form.inc.php +++ b/setup/frames/form.inc.php @@ -6,7 +6,6 @@ * @package PhpMyAdmin-Setup */ -use PhpMyAdmin\Config\Descriptions; use PhpMyAdmin\Config\Forms\Setup\SetupFormList; use PhpMyAdmin\Core; @@ -25,10 +24,7 @@ if (! SetupFormList::isValid($formset_id)) { Core::fatalError(__('Incorrect formset, check $formsets array in setup/frames/form.inc.php!')); } -$form_title = Descriptions::get('Formset_' . $formset_id); -if (! is_null($form_title)) { - echo '

    ' , $form_title , '

    '; -} $form_class = SetupFormList::get($formset_id); +echo '

    ' , $form_class::getName() , '

    '; $form_display = new $form_class($GLOBALS['ConfigFile']); PMA_Process_formset($form_display); diff --git a/setup/frames/menu.inc.php b/setup/frames/menu.inc.php index 4fead97ae4..5a707065d0 100644 --- a/setup/frames/menu.inc.php +++ b/setup/frames/menu.inc.php @@ -6,6 +6,7 @@ * @package PhpMyAdmin-Setup */ use PhpMyAdmin\Url; +use PhpMyAdmin\Config\Forms\Setup\SetupFormList; if (!defined('PHPMYADMIN')) { exit; @@ -18,19 +19,15 @@ echo '
  • ' , __('Overview') , '
  • '; -$formsets = array( - 'Features' => __('Features'), - 'Sql' => __('SQL queries'), - 'Navi' => __('Navigation panel'), - 'Main' => __('Main panel'), - 'Import' => __('Import'), - 'Export' => __('Export') -); - -foreach ($formsets as $formset => $label) { +$ignored = array('Config', 'Servers'); +foreach (SetupFormList::getAll() as $formset) { + if (in_array($formset, $ignored)) { + continue; + } + $form_class = SetupFormList::get($formset); echo '
  • ' , $label , '
  • '; + , '">' , $form_class::getName() , ''; } echo ''; diff --git a/test/classes/config/FormListTest.php b/test/classes/config/FormListTest.php index 964ea51235..11a82d4321 100644 --- a/test/classes/config/FormListTest.php +++ b/test/classes/config/FormListTest.php @@ -43,6 +43,11 @@ class FormListTest extends PMATestCase $prefix . 'ExportForm', $class::get('Export') ); + foreach ($class::getAll() as $form) { + $form_class = $class::get($form); + $this->assertNotNull($form_class::getName()); + } + $this->assertContains( 'Export/texytext_columns', $class::getFields() From 5788613cbc5b70947bf1d2d0869ab563862448f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:39:59 +0200 Subject: [PATCH 09/14] Use form name for menu in user preferences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/classes/Config/Descriptions.php | 8 -------- libraries/user_preferences.inc.php | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/libraries/classes/Config/Descriptions.php b/libraries/classes/Config/Descriptions.php index 74947a70e6..8ea3d05213 100644 --- a/libraries/classes/Config/Descriptions.php +++ b/libraries/classes/Config/Descriptions.php @@ -450,20 +450,14 @@ class Descriptions return __('Edit mode'); case 'Form_Edit_desc': return __('Customize edit mode.'); - case 'Form_Export_name': - return __('Export'); case 'Form_Export_defaults_name': return __('Export defaults'); case 'Form_Export_defaults_desc': return __('Customize default export options.'); - case 'Form_Features_name': - return __('Features'); case 'Form_General_name': return __('General'); case 'Form_General_desc': return __('Set some commonly used options.'); - case 'Form_Import_name': - return __('Import'); case 'Form_Import_defaults_name': return __('Import defaults'); case 'Form_Import_defaults_desc': @@ -480,8 +474,6 @@ class Descriptions return __('Databases'); case 'Form_Navi_databases_desc': return __('Databases display options.'); - case 'Form_Navi_name': - return __('Navigation panel'); case 'Form_Navi_panel_name': return __('Navigation panel'); case 'Form_Navi_panel_desc': diff --git a/libraries/user_preferences.inc.php b/libraries/user_preferences.inc.php index 30fcd76632..f453ff2417 100644 --- a/libraries/user_preferences.inc.php +++ b/libraries/user_preferences.inc.php @@ -5,7 +5,6 @@ * * @package PhpMyAdmin */ -use PhpMyAdmin\Config\Descriptions; use PhpMyAdmin\Config\Forms\User\UserFormList; use PhpMyAdmin\Message; use PhpMyAdmin\Relation; @@ -36,9 +35,10 @@ $content = PhpMyAdmin\Util::getHtmlTab( ) . "\n"; $script_name = basename($GLOBALS['PMA_PHP_SELF']); foreach (UserFormList::getAll() as $formset) { + $formset_class = UserFormList::get($formset); $tab = array( 'link' => 'prefs_forms.php', - 'text' => Descriptions::get('Form_' . $formset), + 'text' => $formset_class::getName(), 'icon' => $tabs_icons[$formset], 'active' => ($script_name == 'prefs_forms.php' && $formset == $form_param)); $content .= PhpMyAdmin\Util::getHtmlTab($tab, array('form' => $formset)) From e065793dc84f867572c48b193bef2c84df81c2c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:52:02 +0200 Subject: [PATCH 10/14] Fold validity check with getting class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is no need to do this twice (once in ::get). Signed-off-by: Michal Čihař --- libraries/classes/Config/PageSettings.php | 4 ++-- prefs_forms.php | 6 +++--- setup/frames/form.inc.php | 7 +++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/libraries/classes/Config/PageSettings.php b/libraries/classes/Config/PageSettings.php index c0adb51cd6..c1be5d6585 100644 --- a/libraries/classes/Config/PageSettings.php +++ b/libraries/classes/Config/PageSettings.php @@ -56,7 +56,8 @@ class PageSettings */ public function __construct($formGroupName, $elemId = null) { - if (! PageFormList::isValid($formGroupName)) { + $form_class = PageFormList::get($formGroupName); + if (is_null($form_class)) { return; } @@ -72,7 +73,6 @@ class PageSettings $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); PMA_userprefsPageInit($cf); - $form_class = PageFormList::get($formGroupName); $form_display = new $form_class($cf); // Process form diff --git a/prefs_forms.php b/prefs_forms.php index f6fb96e2e1..0bc0160fb6 100644 --- a/prefs_forms.php +++ b/prefs_forms.php @@ -23,11 +23,11 @@ PMA_userprefsPageInit($cf); // handle form processing $form_param = isset($_GET['form']) ? $_GET['form'] : null; -if (! UserFormList::isValid($form_param)) { - $form_param = UserFormList::getDefault(); +$form_class = UserFormList::get($form_param); +if (is_null($form_class)) { + Core::fatalError(__('Incorrect form specified!')); } -$form_class = UserFormList::get($form_param); $form_display = new $form_class($cf, 1); if (isset($_POST['revert'])) { diff --git a/setup/frames/form.inc.php b/setup/frames/form.inc.php index 931245c27b..9153598366 100644 --- a/setup/frames/form.inc.php +++ b/setup/frames/form.inc.php @@ -20,11 +20,10 @@ require_once './setup/lib/form_processing.lib.php'; $formset_id = Core::isValid($_GET['formset'], 'scalar') ? $_GET['formset'] : null; $mode = isset($_GET['mode']) ? $_GET['mode'] : null; -if (! SetupFormList::isValid($formset_id)) { - Core::fatalError(__('Incorrect formset, check $formsets array in setup/frames/form.inc.php!')); -} - $form_class = SetupFormList::get($formset_id); +if (is_null($form_class)) { + Core::fatalError(__('Incorrect form specified!')); +} echo '

    ' , $form_class::getName() , '

    '; $form_display = new $form_class($GLOBALS['ConfigFile']); PMA_Process_formset($form_display); From 3559f7a8a58d862d602e416a2af0acb3a0941248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 10:58:05 +0200 Subject: [PATCH 11/14] Remove special casing for UserprefsDeveloperTab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - include it in user form only if allowed - always include it in setup form Signed-off-by: Michal Čihař --- libraries/classes/Config/Forms/BaseForm.php | 4 ---- .../classes/Config/Forms/Setup/FeaturesForm.php | 5 ++++- .../classes/Config/Forms/User/FeaturesForm.php | 14 ++++++++------ libraries/user_preferences.lib.php | 4 ---- test/libraries/PMA_user_preferences_test.php | 1 + 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/libraries/classes/Config/Forms/BaseForm.php b/libraries/classes/Config/Forms/BaseForm.php index 86f558f2a3..c16fb8b384 100644 --- a/libraries/classes/Config/Forms/BaseForm.php +++ b/libraries/classes/Config/Forms/BaseForm.php @@ -25,10 +25,6 @@ abstract class BaseForm extends FormDisplay { parent::__construct($cf); foreach (static::getForms() as $form_name => $form) { - // skip Developer form if no setting is available - if ($form_name == 'Developer' && !$GLOBALS['cfg']['UserprefsDeveloperTab']) { - continue; - } $this->registerForm($form_name, $form, $server_id); } } diff --git a/libraries/classes/Config/Forms/Setup/FeaturesForm.php b/libraries/classes/Config/Forms/Setup/FeaturesForm.php index 459f00ad75..58b40f9f2b 100644 --- a/libraries/classes/Config/Forms/Setup/FeaturesForm.php +++ b/libraries/classes/Config/Forms/Setup/FeaturesForm.php @@ -42,7 +42,10 @@ class FeaturesForm extends \PhpMyAdmin\Config\Forms\User\FeaturesForm 'CaptchaLoginPublicKey', 'CaptchaLoginPrivateKey' ); - $result['Developer'][] = 'UserprefsDeveloperTab'; + $result['Developer'] = array( + 'UserprefsDeveloperTab', + 'DBG/sql', + ); $result['Other_core_settings'] = array( 'OBGzip', 'PersistentConnections', diff --git a/libraries/classes/Config/Forms/User/FeaturesForm.php b/libraries/classes/Config/Forms/User/FeaturesForm.php index 8482dfeee5..cac7dd5088 100644 --- a/libraries/classes/Config/Forms/User/FeaturesForm.php +++ b/libraries/classes/Config/Forms/User/FeaturesForm.php @@ -13,7 +13,7 @@ class FeaturesForm extends BaseForm { public static function getForms() { - return array( + $result = array( 'General' => array( 'VersionCheck', 'NaturalOrder', @@ -53,12 +53,14 @@ class FeaturesForm extends BaseForm 'LoginCookieValidityDisableWarning', 'ReservedWordDisableWarning' ), - // settings from this form are treated specially, - // see prefs_forms.php and user_preferences.lib.php - 'Developer' => array( - 'DBG/sql' - ), ); + // skip Developer form if no setting is available + if ($GLOBALS['cfg']['UserprefsDeveloperTab']) { + $result['Developer'] = array( + 'DBG/sql' + ); + } + return $result; } public static function getName() diff --git a/libraries/user_preferences.lib.php b/libraries/user_preferences.lib.php index 47b7090175..5c2209dea1 100644 --- a/libraries/user_preferences.lib.php +++ b/libraries/user_preferences.lib.php @@ -158,10 +158,6 @@ function PMA_applyUserprefs(array $config_data) { $cfg = array(); $blacklist = array_flip($GLOBALS['cfg']['UserprefsDisallow']); - if (!$GLOBALS['cfg']['UserprefsDeveloperTab']) { - // disallow everything in the Developers tab - $blacklist['DBG/sql'] = true; - } $whitelist = array_flip(UserFormList::getFields()); // whitelist some additional fields which are custom handled $whitelist['ThemeDefault'] = true; diff --git a/test/libraries/PMA_user_preferences_test.php b/test/libraries/PMA_user_preferences_test.php index 11755db5e3..866d1659aa 100644 --- a/test/libraries/PMA_user_preferences_test.php +++ b/test/libraries/PMA_user_preferences_test.php @@ -46,6 +46,7 @@ class PMA_User_Preferences_Test extends PMATestCase 'Server/port' => '213' ); $GLOBALS['cfg']['AvailableCharsets'] = array(); + $GLOBALS['cfg']['UserprefsDeveloperTab'] = null; PMA_userprefsPageInit(new ConfigFile()); From 4ec970fc824b775f20e6cd75d1598921236ce7ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 11:59:41 +0200 Subject: [PATCH 12/14] Remove duplicite validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/user_preferences.inc.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/libraries/user_preferences.inc.php b/libraries/user_preferences.inc.php index f453ff2417..693c2538bc 100644 --- a/libraries/user_preferences.inc.php +++ b/libraries/user_preferences.inc.php @@ -16,9 +16,6 @@ if (!defined('PHPMYADMIN')) { // build user preferences menu $form_param = isset($_GET['form']) ? $_GET['form'] : null; -if (! UserFormList::isValid($form_param)) { - $form_param = UserFormList::getDefault(); -} $tabs_icons = array( 'Features' => 'b_tblops.png', 'Sql' => 'b_sql.png', From 35fca8e2d5125ce61160b04fadf94a2176365f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 12:00:17 +0200 Subject: [PATCH 13/14] Remove not used BaseFormList::getDefault MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/classes/Config/Forms/BaseFormList.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/classes/Config/Forms/BaseFormList.php b/libraries/classes/Config/Forms/BaseFormList.php index bbf39fa8f1..1065c3b3d3 100644 --- a/libraries/classes/Config/Forms/BaseFormList.php +++ b/libraries/classes/Config/Forms/BaseFormList.php @@ -38,11 +38,6 @@ class BaseFormList return null; } - public static function getDefault() - { - return static::$all[0]; - } - /** * Constructor * From bea182257b68e9b8e8a94c36cac29f2ff2813fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 6 Sep 2017 12:02:39 +0200 Subject: [PATCH 14/14] Add test for UserprefsDeveloperTab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- test/libraries/PMA_user_preferences_test.php | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/libraries/PMA_user_preferences_test.php b/test/libraries/PMA_user_preferences_test.php index 866d1659aa..e1b0960d7e 100644 --- a/test/libraries/PMA_user_preferences_test.php +++ b/test/libraries/PMA_user_preferences_test.php @@ -295,6 +295,28 @@ class PMA_User_Preferences_Test extends PMATestCase ); } + /** + * Test for PMA_applyUserprefs + * + * @return void + */ + public function testApplyDevelUserprefs() + { + $GLOBALS['cfg']['UserprefsDeveloperTab'] = true; + $result = PMA_applyUserprefs( + array( + 'DBG/sql' => true, + ) + ); + + $this->assertEquals( + array( + 'DBG' => array('sql' => true), + ), + $result + ); + } + /** * Test for PMA_persistOption *