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("
');
+ $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();