diff options
-rw-r--r-- | libraries/classes/Server/Select.php | 76 | ||||
-rw-r--r-- | templates/server/select/index.twig | 37 | ||||
-rw-r--r-- | templates/server/select/server_options.twig | 8 | ||||
-rw-r--r-- | test/classes/Server/SelectTest.php | 112 |
4 files changed, 134 insertions, 99 deletions
diff --git a/libraries/classes/Server/Select.php b/libraries/classes/Server/Select.php index 7f63896869..4853f6b065 100644 --- a/libraries/classes/Server/Select.php +++ b/libraries/classes/Server/Select.php @@ -7,11 +7,11 @@ declare(strict_types=1); namespace PhpMyAdmin\Server; +use PhpMyAdmin\Template; use PhpMyAdmin\Url; use PhpMyAdmin\Util; use function count; -use function htmlspecialchars; use function implode; use function is_array; use function strpos; @@ -31,8 +31,6 @@ class Select */ public static function render($not_only_options, $omit_fieldset) { - $retval = ''; - // Show as list? if ($not_only_options) { $list = $GLOBALS['cfg']['DisplayServersList']; @@ -41,29 +39,15 @@ class Select $list = false; } + $form_action = ''; if ($not_only_options) { - $retval .= '<form method="post" action="' - . Util::getScriptNameForOption( - $GLOBALS['cfg']['DefaultTabServer'], - 'server' - ) - . '" class="disableAjax">'; - - if (! $omit_fieldset) { - $retval .= '<fieldset class="pma-fieldset">'; - } - - $retval .= Url::getHiddenFields([]); - $retval .= '<label for="select_server">' - . __('Current server:') . '</label> '; - - $retval .= '<select name="server" id="select_server" class="autosubmit">'; - $retval .= '<option value="">(' . __('Servers') . ') ...</option>' . "\n"; - } elseif ($list) { - $retval .= __('Current server:') . '<br>'; - $retval .= '<ul id="list_server">'; + $form_action = Util::getScriptNameForOption( + $GLOBALS['cfg']['DefaultTabServer'], + 'server' + ); } + $servers = []; foreach ($GLOBALS['cfg']['Servers'] as $key => $server) { if (empty($server['host'])) { continue; @@ -98,39 +82,45 @@ class Select } if ($list) { - $retval .= '<li>'; if ($selected) { - $retval .= '<strong>' . htmlspecialchars($label) . '</strong>'; + $servers['list'][] = [ + 'selected' => true, + 'label' => $label, + ]; } else { $scriptName = Util::getScriptNameForOption( $GLOBALS['cfg']['DefaultTabServer'], 'server' ); - $retval .= '<a class="disableAjax item" href="' - . $scriptName - . Url::getCommon(['server' => $key], strpos($scriptName, '?') === false ? '?' : '&') - . '" >' . htmlspecialchars($label) . '</a>'; + $href = $scriptName . Url::getCommon( + ['server' => $key], + strpos($scriptName, '?') === false ? '?' : '&' + ); + $servers['list'][] = [ + 'href' => $href, + 'label' => $label, + ]; } - - $retval .= '</li>'; } else { - $retval .= '<option value="' . $key . '" ' - . ($selected ? ' selected="selected"' : '') . '>' - . htmlspecialchars($label) . '</option>' . "\n"; + $servers['select'][] = [ + 'value' => $key, + 'selected' => $selected, + 'label' => $label, + ]; } } + $renderDetails = [ + 'not_only_options' => $not_only_options, + 'omit_fieldset' => $omit_fieldset, + 'servers' => $servers, + ]; if ($not_only_options) { - $retval .= '</select>'; - if (! $omit_fieldset) { - $retval .= '</fieldset>'; - } - - $retval .= '</form>'; - } elseif ($list) { - $retval .= '</ul>'; + $renderDetails['form_action'] = $form_action; } - return $retval; + $template = new Template(); + + return $template->render('server/select/index', $renderDetails); } } diff --git a/templates/server/select/index.twig b/templates/server/select/index.twig new file mode 100644 index 0000000000..dd456b5e48 --- /dev/null +++ b/templates/server/select/index.twig @@ -0,0 +1,37 @@ +{% if not_only_options %} + <form class="disableAjax" method="post" action="{{ form_action|raw }}"> + {% if omit_fieldset == false %} + <fieldset class="pma-fieldset"> + {% endif %} + {{ get_hidden_fields([]) }} + <label for="select_server">{% trans 'Current server:' %}</label> + <select id="select_server" class="autosubmit" name="server"> + <option value="">({% trans 'Servers' %}) ...</option> + {% include 'server/select/server_options.twig' with { + 'select': servers.select + } only %} + </select> + {% if omit_fieldset == false %} + </fieldset> + {% endif %} + </form> +{% elseif servers.list %} + {% trans 'Current server:' %}<br> + <ul id="list_server"> + <li> + {% for server in servers.list %} + {% if server.selected %} + <strong>{{ server.label }}</strong> + {% else %} + <a class="disableAjax item" href="{{ server.href }}"> + {{- server.label -}} + </a> + {% endif %} + {% endfor %} + </li> + </ul> +{% else %} + {% include 'server/select/server_options.twig' with { + 'select': servers.select + } only %} +{% endif %} diff --git a/templates/server/select/server_options.twig b/templates/server/select/server_options.twig new file mode 100644 index 0000000000..661f3c0784 --- /dev/null +++ b/templates/server/select/server_options.twig @@ -0,0 +1,8 @@ +{% for server in select %} + <option + value="{{ server.value }}" + {% if server.selected %}selected="selected"{% endif %} + > + {{- server.label -}} + </option> +{% endfor %} diff --git a/test/classes/Server/SelectTest.php b/test/classes/Server/SelectTest.php index e2c001d8ca..646d40b269 100644 --- a/test/classes/Server/SelectTest.php +++ b/test/classes/Server/SelectTest.php @@ -38,17 +38,6 @@ class SelectTest extends AbstractTestCase $GLOBALS['table'] = 'table'; - //$_SESSION - } - - /** - * Test for Select::render - */ - public function testRender(): void - { - $not_only_options = false; - $omit_fieldset = false; - $GLOBALS['cfg']['DefaultTabServer'] = 'welcome'; $GLOBALS['cfg']['Servers'] = [ @@ -67,57 +56,50 @@ class SelectTest extends AbstractTestCase 'auth_type' => 'config', ], ]; + //$_SESSION + } - //$not_only_options=false & $omit_fieldset=false - $html = Select::render($not_only_options, $omit_fieldset); - $server = $GLOBALS['cfg']['Servers']['0']; - - //server items - $this->assertStringContainsString( - $server['host'], - $html - ); - $this->assertStringContainsString( - $server['port'], - $html - ); - $this->assertStringContainsString( - $server['only_db'], - $html - ); - $this->assertStringContainsString( - $server['user'], - $html - ); - - $not_only_options = true; - $omit_fieldset = true; - $GLOBALS['cfg']['DisplayServersList'] = null; + /** + * Test for Select::render + * + * @dataProvider renderDataProvider + */ + public function testRender(bool $not_only_options, bool $omit_fieldset): void + { + if ($not_only_options) { + $GLOBALS['cfg']['DisplayServersList'] = null; + } - //$not_only_options=true & $omit_fieldset=true $html = Select::render($not_only_options, $omit_fieldset); + $server = $GLOBALS['cfg']['Servers']['0']; - //$GLOBALS['cfg']['DefaultTabServer'] - $this->assertStringContainsString( - Util::getScriptNameForOption( - $GLOBALS['cfg']['DefaultTabServer'], - 'server' - ), - $html - ); - - //labels - $this->assertStringContainsString( - __('Current server:'), - $html - ); - $this->assertStringContainsString( - '(' . __('Servers') . ')', - $html - ); + if ($not_only_options) { + if (! $omit_fieldset) { + $this->assertStringContainsString( + '</fieldset>', + $html + ); + } + + $this->assertStringContainsString( + Util::getScriptNameForOption( + $GLOBALS['cfg']['DefaultTabServer'], + 'server' + ), + $html + ); + + $this->assertStringContainsString( + __('Current server:'), + $html + ); + $this->assertStringContainsString( + '(' . __('Servers') . ')', + $html + ); + } //server items - $server = $GLOBALS['cfg']['Servers']['0']; $this->assertStringContainsString( $server['host'], $html @@ -135,4 +117,22 @@ class SelectTest extends AbstractTestCase $html ); } + + public function renderDataProvider(): array + { + return [ + 'only options, don\'t omit fieldset' => [ + false, + false, + ], + 'not only options, omits fieldset' => [ + true, + true, + ], + 'not only options, don\'t omit fieldset' => [ + true, + false, + ], + ]; + } } |