Merge pull request #16480 from mauriciofauth/toggle-button-removal

Remove toggle button generator
This commit is contained in:
Maurício Meneghini Fauth 2020-11-14 15:02:43 -03:00 committed by GitHub
commit fee730fcdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 80 additions and 178 deletions

View File

@ -76,7 +76,9 @@ final class EventsController extends AbstractController
'items' => $items,
'select_all_arrow_src' => $PMA_Theme->getImgPath() . 'arrow_' . $text_dir . '.png',
'has_privilege' => Util::currentUserHasPrivilege('EVENT', $db),
'toggle_button' => $this->events->getFooterToggleButton(),
'scheduler_state' => $this->events->getEventSchedulerStatus(),
'text_dir' => $text_dir,
'theme_image_path' => $PMA_Theme->getImgPath(),
'is_ajax' => $this->response->isAjax() && empty($_REQUEST['ajax_page_request']),
]);
}

View File

@ -9,7 +9,6 @@ use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Message;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function count;
use function explode;
@ -467,49 +466,15 @@ class Events
return $query;
}
private function getEventSchedulerStatus(): bool
public function getEventSchedulerStatus(): bool
{
$state = $this->dbi->fetchValue(
'SHOW GLOBAL VARIABLES LIKE \'event_scheduler\'',
0,
1
);
$state = strtoupper($state);
return $state === 'ON' || $state === '1';
}
public function getFooterToggleButton(): string
{
global $db, $table;
$state = $this->getEventSchedulerStatus();
$options = [
0 => [
'label' => __('OFF'),
'value' => 'SET GLOBAL event_scheduler="OFF"',
'selected' => ! $state,
],
1 => [
'label' => __('ON'),
'value' => 'SET GLOBAL event_scheduler="ON"',
'selected' => $state,
],
];
return Generator::toggleButton(
Url::getFromRoute(
'/sql',
[
'db' => $db,
'table' => $table,
'goto' => Url::getFromRoute('/database/events', ['db' => $db]),
]
),
'sql_query',
$options,
'Functions.slidingMessage(data.sql_query);'
);
return strtoupper($state) === 'ON' || $state === '1';
}
/**

View File

@ -186,56 +186,6 @@ class Generator
return $ext_but_html;
}
/**
* Creates an AJAX sliding toggle button
* (or and equivalent form when AJAX is disabled)
*
* @param string $action The URL for the request to be executed
* @param string $select_name The name for the dropdown box
* @param array $options An array of options
* @param string $callback A JS snippet to execute when the request is
* successfully processed
*
* @return string HTML code for the toggle button
*
* @throws Throwable
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public static function toggleButton($action, $select_name, array $options, $callback): string
{
global $PMA_Theme;
$template = new Template();
// Do the logic first
$link = $action . '&' . urlencode($select_name) . '=';
$link_on = $link . urlencode($options[1]['value']);
$link_off = $link . urlencode($options[0]['value']);
if ($options[1]['selected'] == true) {
$state = 'on';
} elseif ($options[0]['selected'] == true) {
$state = 'off';
} else {
$state = 'on';
}
return $template->render(
'toggle_button',
[
'theme_image_path' => $PMA_Theme->getImgPath(),
'text_dir' => $GLOBALS['text_dir'],
'link_on' => $link_on,
'link_off' => $link_off,
'toggle_on' => $options[1]['label'],
'toggle_off' => $options[0]['label'],
'callback' => $callback,
'state' => $state,
]
);
}
/**
* Returns an HTML IMG tag for a particular icon from a theme,
* which may be an actual file or an icon from a sprite.

View File

@ -1118,22 +1118,6 @@ class Tracking
return $entries;
}
/**
* Function to get version status
*
* @param array $version version info
*
* @return string The status message
*/
public function getVersionStatus(array $version)
{
if ($version['tracking_active'] == 1) {
return __('active');
}
return __('not active');
}
/**
* Get HTML for tracked and untracked tables
*
@ -1184,12 +1168,7 @@ class Tracking
. '\' AND `version` = \'' . $versionNumber . '\'';
$tableResult = $relation->queryAsControlUser($tableQuery);
$versionData = $dbi->fetchArray($tableResult);
$versionData['status_button'] = $this->getStatusButton(
$versionData,
$urlParams
);
$versions[] = $versionData;
$versions[] = $dbi->fetchArray($tableResult);
}
}
@ -1249,41 +1228,4 @@ class Tracking
//Use helper function to get table list recursively.
return $this->extractTableNames($table_list, $db);
}
/**
* Get tracking status button
*
* @param array $versionData data about tracking versions
* @param array $params url parameters
*
* @return string HTML
*/
private function getStatusButton(array $versionData, array $params): string
{
$state = $this->getVersionStatus($versionData);
$options = [
0 => [
'label' => __('not active'),
'value' => 'deactivate_now',
'selected' => $state !== 'active',
],
1 => [
'label' => __('active'),
'value' => 'activate_now',
'selected' => $state === 'active',
],
];
$link = Url::getFromRoute('/table/tracking', array_merge([
'db' => $versionData['db_name'],
'table' => $versionData['table_name'],
'version' => $versionData['version'],
], $params));
return Generator::toggleButton(
$link,
'toggle_activation',
$options,
null
);
}
}

View File

@ -2150,11 +2150,6 @@ parameters:
count: 2
path: libraries/classes/Tracking.php
-
message: "#^Parameter \\#4 \\$callback of static method PhpMyAdmin\\\\Html\\\\Generator\\:\\:toggleButton\\(\\) expects string, null given\\.$#"
count: 1
path: libraries/classes/Tracking.php
-
message: "#^Parameter \\#1 \\$classname of function class_exists expects string, PhpMyAdmin\\\\Plugins\\\\TransformationsInterface given\\.$#"
count: 2

View File

@ -115,7 +115,42 @@
<fieldset class="right">
<legend>{% trans 'Event scheduler status' %}</legend>
<div class="wrap">
{{ toggle_button|raw }}
<div class="wrapper toggleAjax hide">
<div class="toggleButton">
<div title="{% trans 'Click to toggle' %}" class="toggle-container {{ scheduler_state ? 'on' : 'off' }}">
<img src="{{ theme_image_path }}toggle-{{ text_dir }}.png">
<table class="nospacing nopadding">
<tbody>
<tr>
<td class="toggleOn">
<span class="hide">
{{- url('/sql', {
'db': db,
'goto': url('/database/events', {'db': db}),
'sql_query': 'SET GLOBAL event_scheduler="ON"',
}) -}}
</span>
<div>{% trans 'ON' %}</div>
</td>
<td><div>&nbsp;</div></td>
<td class="toggleOff">
<span class="hide">
{{- url('/sql', {
'db': db,
'goto': url('/database/events', {'db': db}),
'sql_query': 'SET GLOBAL event_scheduler="OFF"',
}) -}}
</span>
<div>{% trans 'OFF' %}</div>
</td>
</tr>
</tbody>
</table>
<span class="hide callback">Functions.slidingMessage(data.sql_query);</span>
<span class="hide text_direction">{{ text_dir }}</span>
</div>
</div>
</div>
</div>
</fieldset>
<div class="clearfloat"></div>

View File

@ -42,7 +42,44 @@
{{ version.date_updated }}
</td>
<td>
{{ version.status_button|raw }}
<div class="wrapper toggleAjax hide">
<div class="toggleButton">
<div title="{% trans 'Click to toggle' %}" class="toggle-container {{ version.tracking_active == 1 ? 'on' : 'off' }}">
<img src="{{ theme_image_path }}toggle-{{ text_dir }}.png">
<table class="nospacing nopadding">
<tbody>
<tr>
<td class="toggleOn">
<span class="hide">
{{- url('/table/tracking', {
'db': version.db_name,
'table': version.table_name,
'version': version.version,
'toggle_activation': 'activate_now',
}) -}}
</span>
<div>{% trans 'active' %}</div>
</td>
<td><div>&nbsp;</div></td>
<td class="toggleOff">
<span class="hide">
{{- url('/table/tracking', {
'db': version.db_name,
'table': version.table_name,
'version': version.version,
'toggle_activation': 'deactivate_now',
}) -}}
</span>
<div>{% trans 'not active' %}</div>
</td>
</tr>
</tbody>
</table>
<span class="hide callback"></span>
<span class="hide text_direction">{{ text_dir }}</span>
</div>
</div>
</div>
</td>
<td>
<a class="delete_tracking_anchor ajax" href="{{ url('/database/tracking') }}" data-post="

View File

@ -1,24 +0,0 @@
<div class='wrapper toggleAjax hide'>
<div class='toggleButton'>
<div title="{% trans 'Click to toggle' %}" class='toggle-container {{ state }}'>
<img src="{{ theme_image_path }}toggle-{{ text_dir }}.png">
<table class='nospacing nopadding'>
<tbody>
<tr>
<td class='toggleOn'>
<span class='hide'>{{ link_on|raw }}</span>
<div>{{ toggle_on }}</div>
</td>
<td><div>&nbsp;</div></td>
<td class='toggleOff'>
<span class='hide'>{{ link_off|raw }}</span>
<div>{{ toggle_off }}</div>
</td>
</tr>
</tbody>
</table>
<span class='hide callback'>{{ callback }}</span>
<span class='hide text_direction'>{{ text_dir }}</span>
</div>
</div>
</div>