From 964c80366e2b12737745b5e565837fd451e3493d Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 26 Jul 2023 16:44:05 +0800 Subject: [PATCH] * admin: refactor the table engine page, finish task #98719. --- module/admin/control.php | 6 +-- module/admin/js/tableengine.ui.js | 64 ++++++++++++++++++++++++++++ module/admin/ui/tableengine.html.php | 59 +++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 module/admin/js/tableengine.ui.js create mode 100644 module/admin/ui/tableengine.html.php diff --git a/module/admin/control.php b/module/admin/control.php index 56dd63de9c..7b8202f7bd 100755 --- a/module/admin/control.php +++ b/module/admin/control.php @@ -476,7 +476,7 @@ class admin extends control { unset($_SESSION['errorTables']); $response['result'] = 'finished'; - return print(json_encode($response)); + return $this->send($response); } try @@ -489,7 +489,7 @@ class admin extends control if(!empty($dbProcess->Info) and strpos($dbProcess->Info, " {$thisTable} ") !== false) { $response['message'] = sprintf($this->lang->upgrade->changingTable, $thisTable); - return print(json_encode($response)); + return $this->send($response); } } } @@ -512,7 +512,7 @@ class admin extends control $response['message'] = sprintf($this->lang->admin->changeFail, $thisTable, htmlspecialchars($e->getMessage())); } - return print(json_encode($response)); + return $this->send($response); } /** diff --git a/module/admin/js/tableengine.ui.js b/module/admin/js/tableengine.ui.js new file mode 100644 index 0000000000..584261a846 --- /dev/null +++ b/module/admin/js/tableengine.ui.js @@ -0,0 +1,64 @@ +var changeFails = 0; +/** + * Change all table engines. + * + * @access public + * @return void + */ +function changeAllEngines() +{ + $(event.target).hide(); + var $engineBox = $('#engineBox'); + $engineBox.empty(); + + changeTableEngine(); +} + +/** + * Ajax change table engine. + * + * @access public + * @return void + */ +function changeTableEngine() +{ + var $engineBox = $('#engineBox'); + var link = $.createLink('admin', 'ajaxChangeTableEngine'); + $.ajax( + { + type: "GET", + url: link, + success: function(response) + { + response = JSON.parse(response); + if(response == null || response.result == 'finished') + { + $engineBox.append("
" + changeFinished + '
'); + $engineBox.append("
'); + if(changeFails == 0) $('#mainContent .table-engine').html(allInnoDB); + if(changeFails != 0) $('#mainContent .table-engine').html(hasMyISAM.replace('%s', changeFails)); + $engineBox.children().last().scrollIntoView({block: 'end'}); + } + else + { + table = response.thisTable; + if($engineBox.find('[data-table=' + table + ']').length == 0) $engineBox.append("
" + changingTable.replace('%s', table) + '
'); + $engineBox.find('[data-table=' + table + ']').html("
" + response.message); + if(response.result == 'success') $engineBox.find('[data-table=' + table + ']').addClass('text-success').find('.black').toggleClass('black success'); + if(response.result == 'fail') $engineBox.find('[data-table=' + table + ']').addClass('text-warning'); + + nextTable = response.nextTable; + if(nextTable && $engineBox.find('[data-table=' + nextTable + ']').length == 0) $engineBox.append("
" + changingTable.replace('%s', nextTable) + "
"); + + if(response.result == 'fail') changeFails++; + $engineBox.children().last().scrollIntoView({block: 'end'}); + + changeTableEngine(); + } + }, + error: function() + { + changeTableEngine(); + } + }) +} diff --git a/module/admin/ui/tableengine.html.php b/module/admin/ui/tableengine.html.php new file mode 100644 index 0000000000..9a93b2d98b --- /dev/null +++ b/module/admin/ui/tableengine.html.php @@ -0,0 +1,59 @@ + + * @package admin + * @link https://www.zentao.net + */ +namespace zin; + +jsVar('refresh', $lang->refresh); +jsVar('changingTable', $lang->admin->changingTable); +jsVar('changeFinished', $lang->admin->changeFinished); +jsVar('allInnoDB', $lang->admin->engineSummary['allInnoDB']); +jsVar('hasMyISAM', $lang->admin->engineSummary['hasMyISAM']); + +$MyISAMCount = 0; +$engineList = array(); +foreach($tableEngines as $tableName => $engine) +{ + if($engine != 'InnoDB') $MyISAMCount++; + $engineList[] = div + ( + setClass('flex items-center my-1 pl-5 h-5'), + set(array('data-table' => $tableName)), + div + ( + setClass('rounded-full black mr-2 w-1 h-1') + ), + html(sprintf($lang->admin->engineInfo, $tableName, $engine)) + ); +} + +$title = $MyISAMCount > 0 ? sprintf($lang->admin->engineSummary['hasMyISAM'], $MyISAMCount) : $lang->admin->engineSummary['allInnoDB']; + +panel +( + set::title($title), + set::titleClass('table-engine'), + set::headingClass('justify-start border-b'), + $MyISAMCount > 0 ? to::headingActions + ( + button + ( + on::click('changeAllEngines'), + setClass('btn primary'), + $lang->admin->changeEngine + ) + ) : null, + div + ( + setID('engineBox'), + $engineList + ) +); + +render();