* adjust for change table engine.
This commit is contained in:
+29
-23
@@ -393,22 +393,36 @@ class admin extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxChangeTableEngine($tableName)
|
||||
public function ajaxChangeTableEngine()
|
||||
{
|
||||
$response = array();
|
||||
$response['result'] = 'success';
|
||||
$response['message'] = '';
|
||||
$response['result'] = 'success';
|
||||
$response['message'] = '';
|
||||
$response['thisTable'] = '';
|
||||
$response['nextTable'] = '';
|
||||
|
||||
$tableEngines = $this->loadModel('misc')->getTableEngines();
|
||||
if(!isset($tableEngines[$tableName]))
|
||||
|
||||
$thisTable = '';
|
||||
$nextTable = '';
|
||||
foreach($tableEngines as $table => $engine)
|
||||
{
|
||||
$response['result'] = 'fail';
|
||||
return print(json_encode($response));
|
||||
if($engine == 'InnoDB') continue;
|
||||
|
||||
if(stripos($table, 'searchindex') !== false)
|
||||
{
|
||||
$mysqlVersion = $this->loadModel('install')->getMysqlVersion();
|
||||
if($mysqlVersion < 5.6) continue;
|
||||
}
|
||||
|
||||
if($thisTable and empty($nextTable)) $nextTable = $table;
|
||||
if(empty($thisTable)) $thisTable = $table;
|
||||
if($thisTable and $nextTable) break;
|
||||
}
|
||||
|
||||
if($tableEngines[$tableName] == 'InnoDB')
|
||||
if(empty($thisTable))
|
||||
{
|
||||
$response['message'] = sprintf($this->lang->admin->changeSuccess, $tableName);
|
||||
$response['result'] = 'finished';
|
||||
return print(json_encode($response));
|
||||
}
|
||||
|
||||
@@ -419,36 +433,28 @@ class admin extends control
|
||||
foreach($dbProcesses as $dbProcess)
|
||||
{
|
||||
if($dbProcess->db != $this->config->db->name) continue;
|
||||
if(strpos($dbProcess->Info, " {$tableName} ") !== false)
|
||||
if(strpos($dbProcess->Info, " {$thisTable} ") !== false)
|
||||
{
|
||||
$response['message'] = sprintf($this->lang->upgrade->changingTable, $tableName);
|
||||
$response['message'] = sprintf($this->lang->upgrade->changingTable, $thisTable);
|
||||
return print(json_encode($response));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(PDOException $e){}
|
||||
|
||||
if(stripos($tableName, 'searchindex') !== false)
|
||||
{
|
||||
$mysqlVersion = $this->loadModel('install')->getMysqlVersion();
|
||||
if($mysqlVersion < 5.6)
|
||||
{
|
||||
$response['result'] = 'fail';
|
||||
$response['message'] = $this->lang->admin->errorInnodb;
|
||||
return print(json_encode($response));
|
||||
}
|
||||
}
|
||||
$response['thisTable'] = $thisTable;
|
||||
$response['nextTable'] = $nextTable;
|
||||
|
||||
try
|
||||
{
|
||||
$sql = "ALTER TABLE `$tableName` ENGINE='InnoDB'";
|
||||
$sql = "ALTER TABLE `$thisTable` ENGINE='InnoDB'";
|
||||
$this->dao->exec($sql);
|
||||
$response['message'] = sprintf($this->lang->admin->changeSuccess, $tableName);
|
||||
$response['message'] = sprintf($this->lang->admin->changeSuccess, $thisTable);
|
||||
}
|
||||
catch(PDOException $e)
|
||||
{
|
||||
$response['result'] = 'fail';
|
||||
$response['message'] = sprintf($this->lang->admin->changeFail, $tableName, htmlspecialchars($e->getMessage()));
|
||||
$response['message'] = sprintf($this->lang->admin->changeFail, $thisTable, htmlspecialchars($e->getMessage()));
|
||||
}
|
||||
|
||||
return print(json_encode($response));
|
||||
|
||||
@@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...';
|
||||
$lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.';
|
||||
$lang->admin->changeFail = "Failed to replace table %s engine. Reason: <span class='text-red'>%s</span>。";
|
||||
$lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.';
|
||||
$lang->admin->changeFinished = "Database engine replacement completed.";
|
||||
$lang->admin->engineInfo = "The <strong>%s</strong> table engine is <strong>%s</strong>.";
|
||||
$lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines";
|
||||
$lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines";
|
||||
|
||||
@@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...';
|
||||
$lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.';
|
||||
$lang->admin->changeFail = "Failed to replace table %s engine. Reason: <span class='text-red'>%s</span>。";
|
||||
$lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.';
|
||||
$lang->admin->changeFinished = "Database engine replacement completed.";
|
||||
$lang->admin->engineInfo = "The <strong>%s</strong> table engine is <strong>%s</strong>.";
|
||||
$lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines";
|
||||
$lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines";
|
||||
|
||||
@@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...';
|
||||
$lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.';
|
||||
$lang->admin->changeFail = "Failed to replace table %s engine. Reason: <span class='text-red'>%s</span>。";
|
||||
$lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.';
|
||||
$lang->admin->changeFinished = "Database engine replacement completed.";
|
||||
$lang->admin->engineInfo = "The <strong>%s</strong> table engine is <strong>%s</strong>.";
|
||||
$lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines";
|
||||
$lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines";
|
||||
|
||||
@@ -35,6 +35,7 @@ $lang->admin->changingTable = '正在更换数据表%s引擎...';
|
||||
$lang->admin->changeSuccess = '已经更换数据表%s引擎为InnoDB。';
|
||||
$lang->admin->changeFail = "更换数据表%s引擎失败,原因:<span class='text-red'>%s</span>。";
|
||||
$lang->admin->errorInnodb = '您当前的数据库不支持使用InnoDB数据表引擎。';
|
||||
$lang->admin->changeFinished = "更换数据库引擎完毕。";
|
||||
$lang->admin->engineInfo = "表<strong>%s</strong>的引擎是<strong>%s</strong>。";
|
||||
$lang->admin->engineSummary['hasMyISAM'] = "有%s个表不是InnoDB引擎";
|
||||
$lang->admin->engineSummary['allInnoDB'] = "所有的表都是InnoDB引擎了";
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('changingTable', $lang->admin->changingTable);?>
|
||||
<?php js::set('hasMyISAM', $lang->admin->engineSummary['hasMyISAM']);?>
|
||||
<script>
|
||||
/**
|
||||
* Change all table engines.
|
||||
@@ -45,34 +46,24 @@
|
||||
*/
|
||||
function changeAllEngines()
|
||||
{
|
||||
var tables = [];
|
||||
var $engineBox = $('#engineBox');
|
||||
$engineBox.find('li').each(function()
|
||||
{
|
||||
tables.push($(this).attr('data-table'));
|
||||
});
|
||||
|
||||
$('.btn.changeEngine').hide();
|
||||
$engineBox.empty();
|
||||
$.each(tables, function(_, table)
|
||||
{
|
||||
changeEngine(table);
|
||||
});
|
||||
|
||||
changeTableEngine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Change one engine.
|
||||
* Ajax change table engine.
|
||||
*
|
||||
* @param string $table
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function changeEngine(table)
|
||||
function changeTableEngine()
|
||||
{
|
||||
var $engineBox = $('#engineBox');
|
||||
var link = createLink('admin', 'ajaxChangeTableEngine', 'table=' + table);
|
||||
|
||||
if($engineBox.find('[data-table=' + table + ']').length == 0) $engineBox.append("<div data-table='" + table + "'>" + changingTable.replace('%s', table) + "</div>");
|
||||
var link = createLink('admin', 'ajaxChangeTableEngine');
|
||||
var fails = 0;
|
||||
$.ajax(
|
||||
{
|
||||
type: "GET",
|
||||
@@ -80,11 +71,31 @@ function changeEngine(table)
|
||||
success: function(response)
|
||||
{
|
||||
response = JSON.parse(response);
|
||||
$engineBox.find('[data-table=' + table + ']').html(response.message).addClass('text-success');
|
||||
if(response == null || response.result == 'finished')
|
||||
{
|
||||
$engineBox.append("<div class='text-success'><?php echo $lang->admin->changeFinished?></div>");
|
||||
$engineBox.append("<div class='btn btn-sm'><a href='javascript:location.reload()'><?php echo $lang->refresh;?></a></div>");
|
||||
if(fails == 0) $('#mainContent .main-header h2').html("<?php echo $lang->admin->engineSummary['allInnoDB']?>");
|
||||
if(fails != 0) $('#mainContent .main-header h2').html(hasMyISAM.replace('%s', fails));
|
||||
}
|
||||
else
|
||||
{
|
||||
table = response.thisTable;
|
||||
if($engineBox.find('[data-table=' + table + ']').length == 0) $engineBox.append("<li data-table='" + table + "'>" + changingTable.replace('%s', table) + "</li>");
|
||||
$engineBox.find('[data-table=' + table + ']').html(response.message).addClass('text-success');
|
||||
|
||||
nextTable = response.nextTable;
|
||||
if(nextTable && $engineBox.find('[data-table=' + nextTable + ']').length == 0) $engineBox.append("<li data-table='" + nextTable + "'>" + changingTable.replace('%s', nextTable) + "</li>");
|
||||
|
||||
if(response.result == 'fail') fails += 1;
|
||||
$(document).scrollTop($(document).height());
|
||||
|
||||
changeTableEngine();
|
||||
}
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
changeEngine(table);
|
||||
changeTableEngine();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user