Merge pull request #16875 from danielTiringer/14801-extract-server-select-html-to-twig
Extract Server/Select HTML to Twig
This commit is contained in:
commit
06b01ac63f
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
37
templates/server/select/index.twig
Normal file
37
templates/server/select/index.twig
Normal 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 %}
|
||||
8
templates/server/select/server_options.twig
Normal file
8
templates/server/select/server_options.twig
Normal file
@ -0,0 +1,8 @@
|
||||
{% for server in select %}
|
||||
<option
|
||||
value="{{ server.value }}"
|
||||
{% if server.selected %}selected="selected"{% endif %}
|
||||
>
|
||||
{{- server.label -}}
|
||||
</option>
|
||||
{% endfor %}
|
||||
@ -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,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user