From 1da8eeb6246efe22d0121b58063e7b98a527980b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 28 Nov 2014 18:03:57 +0100 Subject: Wait for reboot to complete after restoring a configuration backup --- lang/de/messages.json | 1 + lang/de/templates/backup/restore.json | 3 ++- lang/en/messages.json | 1 + lang/en/templates/backup/restore.json | 3 ++- modules/backup.inc.php | 13 ++++++++++++- templates/backup/restore.html | 31 +++++++++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 3 deletions(-) diff --git a/lang/de/messages.json b/lang/de/messages.json index 66d62c6e..1e779b3f 100644 --- a/lang/de/messages.json +++ b/lang/de/messages.json @@ -35,6 +35,7 @@ "reboot-unconfirmed": "Sicherheitsabfrage zum Reboot nicht best\u00e4tigt", "remote-parse-failed": "Parsen der empfangenen Daten fehlgeschlagen ({{0}})", "remote-timeout": "Konnte Ressource {{0}} nicht herunterladen ({{1}})", + "restore-done": "Wiederherstellung abgeschlossen", "settings-updated": "Einstellungen wurden aktualisiert", "task-error": "Ausf\u00fchrung fehlgeschlagen: {{0}}", "taskmanager-error": "Verbindung zum Taskmanager fehlgeschlagen", diff --git a/lang/de/templates/backup/restore.json b/lang/de/templates/backup/restore.json index c78dc49f..6b3a7cdd 100644 --- a/lang/de/templates/backup/restore.json +++ b/lang/de/templates/backup/restore.json @@ -3,5 +3,6 @@ "lang_reboot": "Systemneustart", "lang_restoreConfig": "Konfiguration wiederherstellen", "lang_restoreFailed": "Wiederherstellung der Konfiguration fehlgeschlagen.", - "lang_stopping": "Stoppe" + "lang_stopping": "Stoppe", + "lang_waitReboot": "Warte auf Reboot." } \ No newline at end of file diff --git a/lang/en/messages.json b/lang/en/messages.json index 679164a9..dc4dd318 100644 --- a/lang/en/messages.json +++ b/lang/en/messages.json @@ -35,6 +35,7 @@ "reboot-unconfirmed": "Confirmation prompt to reboot not confirmed", "remote-parse-failed": "Parsing the received data failed ({{0}})", "remote-timeout": "Could not download resource {{0}} ({{1}})", + "restore-done": "Restore done", "settings-updated": "Settings have been updated", "task-error": "Execution failed: {{0}}", "taskmanager-error": "Failed to connect to the Task Manager", diff --git a/lang/en/templates/backup/restore.json b/lang/en/templates/backup/restore.json index 6698b690..5a5f6f64 100644 --- a/lang/en/templates/backup/restore.json +++ b/lang/en/templates/backup/restore.json @@ -3,5 +3,6 @@ "lang_reboot": "System reboot", "lang_restoreConfig": "Restore config", "lang_restoreFailed": "Restoring configuration failed.", - "lang_stopping": "Stopping" + "lang_stopping": "Stopping", + "lang_waitReboot": "Waiting for reboot." } \ No newline at end of file diff --git a/modules/backup.inc.php b/modules/backup.inc.php index e35aeed2..61964d47 100644 --- a/modules/backup.inc.php +++ b/modules/backup.inc.php @@ -78,7 +78,7 @@ class Page_Backup extends Page Message::addError('upload-failed', Util::uploadErrorString($_FILES['backupfile']['error'])); Util::redirect('?do=Backup'); } - $tempfile = '/tmp/bwlp-' . mt_rand(1, 100000) . '-' . crc32($_SERVER['REMOTE_HOST']) . '.tgz'; + $tempfile = '/tmp/bwlp-' . mt_rand(1, 100000) . '-' . crc32($_SERVER['REMOTE_ADDR']) . '.tgz'; if (!move_uploaded_file($_FILES['backupfile']['tmp_name'], $tempfile)) { Message::addError('error-write', $tempfile); Util::redirect('?do=Backup'); @@ -107,11 +107,22 @@ class Page_Backup extends Page $this->templateData['restoreid'] = $task['id']; $parent = $task['id']; } + // TODO: Trigger::rebuildAdModules(); + // Wait a bit + $task = Taskmanager::submit('SleepTask', array( + 'seconds' => 3, + 'parentTask' => $parent, + 'failOnParentFail' => false + )); + if (isset($task['id'])) + $parent = $task['id']; // Reboot $task = Taskmanager::submit('Reboot', array( 'parentTask' => $parent, 'failOnParentFail' => false )); + // Leave this comment so the i18n scanner finds it: + // Message::addSuccess('restore-done'); if (isset($task['id'])) $this->templateData['rebootid'] = $task['id']; } diff --git a/templates/backup/restore.html b/templates/backup/restore.html index 3e29dbdc..2e33beb3 100644 --- a/templates/backup/restore.html +++ b/templates/backup/restore.html @@ -12,6 +12,9 @@ + @@ -23,5 +26,33 @@ if (task.statusCode === 'TASK_ERROR') { $('#restorefailed').show('slow'); } + if (task.statusCode === 'TASK_ERROR' || task.statusCode === 'TASK_FINISHED') { + startRebootPoll(); + } + } + + function startRebootPoll() + { + $('#waiting').show(); + $('#waiting').prepend(''); + $('#dots').text('{{lang_waitReboot}}'); + slxDotInterval = setInterval(function() { $('#dots').text($('#dots').text() + '..'); }, 3000); + setTimeout('rebootPoll()', 10000); + } + + function rebootPoll() + { + if (slxDotInterval !== false) { + clearInterval(slxDotInterval); + slxDotInterval = false; + } + $('#dots').text($('#dots').text() + '..'); + slxTimeoutId = setTimeout('rebootPoll()', 3500); + $.ajax({url: "index.php?do=Main", timeout: 3000}).success(function(data, textStatus, jqXHR) { + if (textStatus !== "success" && textStatus !== "notmodified") + return; + clearTimeout(slxTimeoutId); + window.location.replace("index.php?do=Main&message[]=success%7Crestore-done"); + }); } -- cgit v1.2.3-55-g7522