summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2014-11-28 18:03:57 +0100
committerSimon Rettberg2014-11-28 18:03:57 +0100
commit1da8eeb6246efe22d0121b58063e7b98a527980b (patch)
treea914fb98f478eaf9fffcf6d83d1557e03045530a
parentReturn status code 500 on Util::traceError() (diff)
downloadslx-admin-1da8eeb6246efe22d0121b58063e7b98a527980b.tar.gz
slx-admin-1da8eeb6246efe22d0121b58063e7b98a527980b.tar.xz
slx-admin-1da8eeb6246efe22d0121b58063e7b98a527980b.zip
Wait for reboot to complete after restoring a configuration backup
-rw-r--r--lang/de/messages.json1
-rw-r--r--lang/de/templates/backup/restore.json3
-rw-r--r--lang/en/messages.json1
-rw-r--r--lang/en/templates/backup/restore.json3
-rw-r--r--modules/backup.inc.php13
-rw-r--r--templates/backup/restore.html31
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 @@
<div id="restorefailed" class="alert alert-danger" style="display:none">
{{lang_restoreFailed}}
</div>
+ <div id="waiting" style="display:none">
+ <span id="dots"></span>
+ </div>
</div>
</div>
@@ -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('<span class="glyphicon glyphicon-refresh slx-rotation"></span>');
+ $('#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");
+ });
}
</script>