1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-04-21 00:02:18 +02:00

[ticket/16449] Remove AJAX actions for extension management

This reverts commits
  2b66608023a2a4f4212984dc350cb5d67e3b4b97
  5cf88ea871afa9444f808bb9a2bb0e2b8e54056c

PHPBB3-16449
This commit is contained in:
kasimi 2020-04-18 00:43:47 +02:00
parent 724b3682d1
commit 66436bd9f7
No known key found for this signature in database
GPG Key ID: 3163AB573241193A
10 changed files with 172 additions and 228 deletions

View File

@ -1,7 +0,0 @@
{% for action in enabled.actions %}
<a href="{{ action.U_ACTION }}"{% if action.L_ACTION_EXPLAIN %} title="{{ action.L_ACTION_EXPLAIN }}"{% endif %}{% if action.COLOR %} style="color: {{ action.COLOR }};"{% endif %} data-ajax="{{ action.ACTION_AJAX }}" data-refresh="true">{{ action.L_ACTION }}</a>{% if not action.S_LAST_ROW %}&nbsp;|&nbsp;{% endif %}
{% endfor %}
{% for action in disabled.actions %}
<a href="{{ action.U_ACTION }}"{% if action.L_ACTION_EXPLAIN %} title="{{ action.L_ACTION_EXPLAIN }}"{% endif %}{% if action.COLOR %} style="color: {{ action.COLOR }};"{% endif %} data-ajax="{{ action.ACTION_AJAX }}" data-refresh="true">{{ action.L_ACTION }}</a>{% if not action.S_LAST_ROW %}&nbsp;|&nbsp;{% endif %}
{% endfor %}

View File

@ -0,0 +1,40 @@
<!-- INCLUDE overall_header.html -->
<a id="maincontent"></a>
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
<p>{L_EXTENSION_DELETE_DATA_EXPLAIN}</p>
<!-- IF MIGRATOR_ERROR -->
<div class="errorbox">
<p><strong>{L_MIGRATION_EXCEPTION_ERROR}</strong></p>
<p>{MIGRATOR_ERROR}</p>
<p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ELSEIF PRE -->
<div class="errorbox">
<p>{L_CONFIRM_MESSAGE}</p>
</div>
<form id="acp_extensions" method="post" action="{U_PURGE}">
<fieldset class="submit-buttons">
<legend>{L_EXTENSION_DELETE_DATA}</legend>
<input class="button1" type="submit" name="delete_data" value="{L_EXTENSION_DELETE_DATA}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="errorbox">
<p>{L_EXTENSION_DELETE_DATA_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
<p>{L_EXTENSION_DELETE_DATA_SUCCESS}</p>
<br />
<p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
<!-- INCLUDE overall_footer.html -->

View File

@ -0,0 +1,34 @@
<!-- INCLUDE overall_header.html -->
<a id="maincontent"></a>
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
<p>{L_EXTENSION_DISABLE_EXPLAIN}</p>
<!-- IF PRE -->
<fieldset>
<h2>{L_CONFIRM}</h2>
<p>{L_CONFIRM_MESSAGE}</p>
</fieldset>
<form id="acp_extensions" method="post" action="{U_DISABLE}">
<fieldset class="submit-buttons">
<input class="button1" type="submit" name="disable" value="{L_EXTENSION_DISABLE}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="successbox notice">
<p>{L_EXTENSION_DISABLE_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
<p>{L_EXTENSION_DISABLE_SUCCESS}</p>
<br />
<p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
<!-- INCLUDE overall_footer.html -->

View File

@ -0,0 +1,40 @@
<!-- INCLUDE overall_header.html -->
<a id="maincontent"></a>
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
<p>{L_EXTENSION_ENABLE_EXPLAIN}</p>
<!-- IF MIGRATOR_ERROR -->
<div class="errorbox">
<p><strong>{L_MIGRATION_EXCEPTION_ERROR}</strong></p>
<p>{MIGRATOR_ERROR}</p>
<p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ELSEIF PRE -->
<fieldset>
<h2>{L_CONFIRM}</h2>
<p>{L_CONFIRM_MESSAGE}</p>
</fieldset>
<form id="acp_extensions" method="post" action="{U_ENABLE}">
<fieldset class="submit-buttons">
<input class="button1" type="submit" name="enable" value="{L_EXTENSION_ENABLE}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="successbox notice">
<p>{L_EXTENSION_ENABLE_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
<p>{L_EXTENSION_ENABLE_SUCCESS}</p>
<br />
<p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
<!-- INCLUDE overall_footer.html -->

View File

@ -42,8 +42,8 @@
</tr>
</thead>
<tbody>
<tr id="ext_enabled_header"<!-- IF not .enabled --> class="hidden"<!-- ENDIF -->>
<!-- IF .enabled -->
<tr>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong><!-- EVENT acp_ext_list_enabled_title_after --></td>
</tr>
<!-- BEGIN enabled -->
@ -59,12 +59,17 @@
</td>
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
<td style="text-align: center;">
<!-- INCLUDE acp_ext_actions.html -->
<!-- BEGIN actions -->
<a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
<!-- IF not enabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>
</tr>
<!-- END enabled -->
<!-- ENDIF -->
<tr id="ext_disabled_header"<!-- IF not .disabled --> class="hidden"<!-- ENDIF -->>
<!-- IF .disabled -->
<tr>
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong><!-- EVENT acp_ext_list_disabled_title_after --></td>
</tr>
<!-- BEGIN disabled -->
@ -82,10 +87,14 @@
<!-- IF disabled.U_DETAILS --><a href="{disabled.U_DETAILS}">{L_DETAILS}</a><!-- ENDIF -->
</td>
<td style="text-align: center;">
<!-- INCLUDE acp_ext_actions.html -->
<!-- BEGIN actions -->
<a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
<!-- IF not disabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>
</tr>
<!-- END disabled -->
<!-- ENDIF -->
</tbody>
</table>

View File

@ -228,64 +228,6 @@ function parse_document(container)
});
}
/**
* Extension actions helper functions
*/
function move_to_enabled(element)
{
var disabled_header = document.querySelector('#ext_disabled_header');
disabled_header.parentNode.insertBefore(element, disabled_header);
element.classList.remove('ext_disabled');
element.classList.add('ext_enabled');
}
function move_to_disabled(element)
{
var table_body = document.querySelector('#ext_disabled_header').parentNode;
table_body.appendChild(element);
element.classList.remove('ext_enabled');
element.classList.add('ext_disabled');
}
function set_actions(container, actions) {
container.innerHTML = '';
for (var i = 0; i < actions.length; i++) {
var a = document.createElement('a');
a.href = actions[i].U_ACTION.split('&amp;').join('&'); // replace all occurances
a.title = actions[i].L_ACTION_EXPLAIN;
if (actions[i].COLOR) {
a.style = actions[i].COLOR;
}
a.innerHTML = actions[i].L_ACTION;
// ajaxify this action as well
phpbb.ajaxify({
selector: a,
refresh: true,
callback: actions[i].ACTION_AJAX
});
container.appendChild(a);
if (i < actions.length - 1) {
container.innerHTML += '&nbsp;|&nbsp;';
}
}
}
function show_enabled_header() {
document.querySelector('#ext_enabled_header').classList.remove('hidden');
}
function show_disabled_header() {
document.querySelector('#ext_disabled_header').classList.remove('hidden');
}
function hide_disabled_header_if_empty() {
if (!document.querySelector('.ext_disabled')) {
document.querySelector('#ext_disabled_header').classList.add('hidden');
}
}
function hide_enabled_header_if_empty() {
if (!document.querySelector('.ext_enabled')) {
document.querySelector('#ext_enabled_header').classList.add('hidden');
}
}
/**
* Run onload functions
*/

View File

@ -157,34 +157,6 @@ phpbb.addAjaxCallback('row_delete', function(res) {
}
});
/**
* Callbacks for extension actions
*/
phpbb.addAjaxCallback('ext_enable', function(res) {
if (res.EXT_ENABLE_SUCCESS) {
move_to_enabled(this.parentNode.parentNode);
set_actions(this.parentNode, res.ACTIONS);
show_enabled_header();
hide_disabled_header_if_empty();
}
});
phpbb.addAjaxCallback('ext_delete_data', function(res) {
if (res.EXT_DELETE_DATA_SUCCESS) {
move_to_disabled(this.parentNode.parentNode);
set_actions(this.parentNode, res.ACTIONS);
show_disabled_header();
hide_enabled_header_if_empty();
}
});
phpbb.addAjaxCallback('ext_disable', function(res) {
if (res.EXT_DISABLE_SUCCESS) {
move_to_disabled(this.parentNode.parentNode);
set_actions(this.parentNode, res.ACTIONS);
show_disabled_header();
hide_enabled_header_if_empty();
}
});
/**
* Handler for submitting permissions form in chunks
* This call will submit permissions forms in chunks of 5 fieldsets.

View File

@ -180,19 +180,13 @@ class acp_extensions
redirect($this->u_action);
}
if (confirm_box(true))
{
redirect($this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
}
else
{
confirm_box(false, $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array(
'i' => $id,
'mode' => $mode,
'action' => 'enable_pre',
'ext_name' => $ext_name,
)));
}
$this->tpl_name = 'acp_ext_enable';
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
'U_ENABLE' => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name),
));
break;
case 'enable':
@ -217,8 +211,9 @@ class acp_extensions
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
if ((time() - $start_time) >= $safe_time_limit)
{
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
trigger_error('EXTENSION_ENABLE_IN_PROGRESS', E_USER_NOTICE);
}
}
@ -234,29 +229,14 @@ class acp_extensions
}
catch (\phpbb\db\migration\exception $e)
{
trigger_error($this->user->lang('MIGRATION_EXCEPTION_ERROR', $e->getLocalisedMessage($this->user)), E_USER_WARNING);
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
}
if ($this->request->is_ajax())
{
$actions = $this->output_actions('enabled', [
'DISABLE' => $this->u_action . '&amp;action=disable_pre&amp;ext_name=' . urlencode($ext_name),
]);
$this->tpl_name = 'acp_ext_enable';
$data = [
'EXT_ENABLE_SUCCESS' => true,
'ACTIONS' => $actions,
'REFRESH_DATA' => [
'url' => '',
'time' => 0,
],
];
$json_response = new \phpbb\json_response;
$json_response->send($data);
}
trigger_error($this->user->lang('EXTENSION_ENABLE_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
case 'disable_pre':
@ -265,19 +245,13 @@ class acp_extensions
redirect($this->u_action);
}
if (confirm_box(true))
{
redirect($this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
}
else
{
confirm_box(false, $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array(
'i' => $id,
'mode' => $mode,
'action' => 'disable_pre',
'ext_name' => $ext_name,
)));
}
$this->tpl_name = 'acp_ext_disable';
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
'U_DISABLE' => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name),
));
break;
case 'disable':
@ -294,32 +268,15 @@ class acp_extensions
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
trigger_error('EXTENSION_DISABLE_IN_PROGRESS', E_USER_NOTICE);
}
}
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
if ($this->request->is_ajax())
{
$actions = $this->output_actions('disabled', [
'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($ext_name),
'DELETE_DATA' => $this->u_action . '&amp;action=delete_data_pre&amp;ext_name=' . urlencode($ext_name),
]);
$this->tpl_name = 'acp_ext_disable';
$data = [
'EXT_DISABLE_SUCCESS' => true,
'ACTIONS' => $actions,
'REFRESH_DATA' => [
'url' => '',
'time' => 0,
],
];
$json_response = new \phpbb\json_response;
$json_response->send($data);
}
trigger_error($this->user->lang('EXTENSION_DISABLE_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
case 'delete_data_pre':
@ -327,20 +284,13 @@ class acp_extensions
{
redirect($this->u_action);
}
$this->tpl_name = 'acp_ext_delete_data';
if (confirm_box(true))
{
redirect($this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
}
else
{
confirm_box(false, $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')), build_hidden_fields(array(
'i' => $id,
'mode' => $mode,
'action' => 'delete_data_pre',
'ext_name' => $ext_name,
)));
}
$this->template->assign_vars(array(
'PRE' => true,
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
'U_PURGE' => $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name),
));
break;
case 'delete_data':
@ -359,36 +309,20 @@ class acp_extensions
$this->template->assign_var('S_NEXT_STEP', true);
meta_refresh(0, $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
trigger_error('EXTENSION_DELETE_DATA_IN_PROGRESS', E_USER_NOTICE);
}
}
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
}
catch (\phpbb\db\migration\exception $e)
{
trigger_error($this->user->lang('MIGRATION_EXCEPTION_ERROR', $e->getLocalisedMessage($this->user)), E_USER_WARNING);
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
}
if ($this->request->is_ajax())
{
$actions = $this->output_actions('disabled', [
'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($ext_name),
]);
$this->tpl_name = 'acp_ext_delete_data';
$data = [
'EXT_DELETE_DATA_SUCCESS' => true,
'ACTIONS' => $actions,
'REFRESH_DATA' => [
'url' => '',
'time' => 0,
],
];
$json_response = new \phpbb\json_response;
$json_response->send($data);
}
trigger_error($this->user->lang('EXTENSION_DELETE_DATA_SUCCESS') . adm_back_link($this->u_action), E_USER_NOTICE);
$this->template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
case 'details':
@ -667,37 +601,17 @@ class acp_extensions
*
* @param string $block
* @param array $actions
* @return array List of actions to be performed on the extension
*/
private function output_actions($block, $actions)
{
$vars_ary = array();
foreach ($actions as $lang => $options)
foreach ($actions as $lang => $url)
{
$url = $options;
if (is_array($options))
{
$url = $options['url'];
}
$vars = array(
$this->template->assign_block_vars($block . '.actions', array(
'L_ACTION' => $this->user->lang('EXTENSION_' . $lang),
'L_ACTION_EXPLAIN' => (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',
'U_ACTION' => $url,
'ACTION_AJAX' => 'ext_' . strtolower($lang),
);
if (isset($options['color']))
{
$vars['COLOR'] = $options['color'];
}
$this->template->assign_block_vars($block . '.actions', $vars);
$vars_ary[] = $vars;
));
}
return $vars_ary;
}
/**

View File

@ -46,7 +46,7 @@ $lang = array_merge($lang, array(
'MIGRATION_DATA_IN_PROGRESS' => 'Installing Data: %1$s; Time: %2$.2f seconds',
'MIGRATION_DATA_RUNNING' => 'Installing Data: %s.',
'MIGRATION_EFFECTIVELY_INSTALLED' => 'Migration already effectively installed (skipped): %s',
'MIGRATION_EXCEPTION_ERROR' => 'Something went wrong during the request and an exception was thrown. The changes made before the error occurred were reversed to the best of our abilities, but you should check the board for errors:<br><br>%s',
'MIGRATION_EXCEPTION_ERROR' => 'Something went wrong during the request and an exception was thrown. The changes made before the error occurred were reversed to the best of our abilities, but you should check the board for errors.',
'MIGRATION_NOT_FULFILLABLE' => 'The migration "%1$s" is not fulfillable, missing migration "%2$s".',
'MIGRATION_NOT_INSTALLED' => 'The migration "%s" is not installed.',
'MIGRATION_NOT_VALID' => '%s is not a valid migration.',

View File

@ -200,7 +200,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
$this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('div.main thead')->text());
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
$this->assertContains('Are you sure that you wish to delete the data associated with “phpBB Moo Extension”?', $crawler->filter('#main')->text());
$this->assertContains('Are you sure that you wish to delete the data associated with “phpBB Moo Extension”?', $crawler->filter('.errorbox')->text());
}
public function test_actions()
@ -211,7 +211,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
// Correctly submit the enable form
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
$form = $crawler->selectButton('confirm')->form();
$form = $crawler->selectButton('enable')->form();
$crawler = self::submit($form);
$this->assertContainsLang('EXTENSION_ENABLE_SUCCESS', $crawler->filter('.successbox')->text());
@ -221,7 +221,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
// Correctly submit the disable form
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
$form = $crawler->selectButton('confirm')->form();
$form = $crawler->selectButton('disable')->form();
$crawler = self::submit($form);
$this->assertContainsLang('EXTENSION_DISABLE_SUCCESS', $crawler->filter('.successbox')->text());
@ -231,7 +231,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
// Correctly submit the delete data form
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
$form = $crawler->selectButton('confirm')->form();
$form = $crawler->selectButton('delete_data')->form();
$crawler = self::submit($form);
$this->assertContainsLang('EXTENSION_DELETE_DATA_SUCCESS', $crawler->filter('.successbox')->text());