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 .= '
';
- } elseif ($list) {
- $retval .= '';
+ $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 %}
+
+{% elseif servers.list %}
+ {% trans 'Current server:' %}
+
+
+ {% for server in servers.list %}
+ {% if server.selected %}
+ {{ server.label }}
+ {% else %}
+
+ {{- server.label -}}
+
+ {% endif %}
+ {% endfor %}
+
+
+{% 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 %}
+
+ {{- server.label -}}
+
+{% 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
+ }
+
+ /**
+ * 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=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
- );
+ if ($not_only_options) {
+ if (! $omit_fieldset) {
+ $this->assertStringContainsString(
+ '',
+ $html
+ );
+ }
- $not_only_options = true;
- $omit_fieldset = true;
- $GLOBALS['cfg']['DisplayServersList'] = null;
+ $this->assertStringContainsString(
+ Util::getScriptNameForOption(
+ $GLOBALS['cfg']['DefaultTabServer'],
+ 'server'
+ ),
+ $html
+ );
- //$not_only_options=true & $omit_fieldset=true
- $html = Select::render($not_only_options, $omit_fieldset);
-
- //$GLOBALS['cfg']['DefaultTabServer']
- $this->assertStringContainsString(
- Util::getScriptNameForOption(
- $GLOBALS['cfg']['DefaultTabServer'],
- 'server'
- ),
- $html
- );
-
- //labels
- $this->assertStringContainsString(
- __('Current server:'),
- $html
- );
- $this->assertStringContainsString(
- '(' . __('Servers') . ')',
- $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,
+ ],
+ ];
+ }
}