Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/classes/Server/Select.php76
-rw-r--r--templates/server/select/index.twig37
-rw-r--r--templates/server/select/server_options.twig8
-rw-r--r--test/classes/Server/SelectTest.php112
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,
+ ],
+ ];
+ }
}