Merge pull request #16875 from danielTiringer/14801-extract-server-select-html-to-twig

Extract Server/Select HTML to Twig
This commit is contained in:
Maurício Meneghini Fauth 2021-05-07 13:01:36 -03:00 committed by GitHub
commit 06b01ac63f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 132 additions and 97 deletions

View File

@ -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);
}
}

View File

@ -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 %}

View File

@ -0,0 +1,8 @@
{% for server in select %}
<option
value="{{ server.value }}"
{% if server.selected %}selected="selected"{% endif %}
>
{{- server.label -}}
</option>
{% endfor %}

View File

@ -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(
'</fieldset>',
$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,
],
];
}
}