summaryrefslogtreecommitdiff
path: root/modules/server_add
diff options
context:
space:
mode:
Diffstat (limited to 'modules/server_add')
-rw-r--r--modules/server_add/controllers/server_add.php12
-rw-r--r--modules/server_add/js/server_add.js84
-rw-r--r--modules/server_add/views/server_add_tree_dialog.html.php1
3 files changed, 71 insertions, 26 deletions
diff --git a/modules/server_add/controllers/server_add.php b/modules/server_add/controllers/server_add.php
index 430d8745..8f0ff4d8 100644
--- a/modules/server_add/controllers/server_add.php
+++ b/modules/server_add/controllers/server_add.php
@@ -107,7 +107,7 @@ class Server_Add_Controller extends Controller {
break;
case "error":
- message::success(t("Add from server completed with errors"));
+ message::warning(t("Add from server completed with errors"));
break;
}
print json_encode(array("result" => "success",
@@ -119,7 +119,15 @@ class Server_Add_Controller extends Controller {
}
}
- public function finish($id, $task_id) {
+ public function finish($id, $task_id, $cancelled=false) {
+ access::verify_csrf();
+
+ $task = task::run($task_id);
+
+ if (!$task->done && $cancelled) {
+ message::warning(t("Add from server was cancelled prior to completion"));
+ }
+
batch::stop();
print json_encode(array("result" => "success"));
}
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js
index d4066a7d..392bedab 100644
--- a/modules/server_add/js/server_add.js
+++ b/modules/server_add/js/server_add.js
@@ -1,10 +1,33 @@
+var paused = false;
+var task = null;
+
$("#gServerAdd").ready(function() {
- $("#gServerAdd :submit").click(function(event) {
+ init_server_add_form();
+});
+
+function init_server_add_form() {
+ $("#gServerAdd #gServerAddButton").click(function(event) {
do_add(this, event);
});
+ $("#gServerAdd #gServerPauseButton").click(function(event) {
+ event.preventDefault();
+ paused = true;
+ });
$(".gProgressBar").progressbar();
$("#gServerAddTree ul").css("display", "block");
-});
+ $("#gServerAdd form").bind("form_closing", function(target) {
+ if (task != null && !task.done) {
+ $.ajax({async: false,
+ success: function(data, textStatus) {
+ document.location.reload();
+ },
+ dataType: "json",
+ type: "POST",
+ url: get_url("server_add/finish", task.id + "/true")
+ });
+ }
+ });
+}
function open_close_branch(icon, event) {
var parent = icon.parentNode;
@@ -60,27 +83,35 @@ function load_children(parent, callback) {
function do_add(submit, event) {
event.preventDefault();
- $(".gProgressBar").progressbar("value", 0);
- $(".gProgressBar").css("visibility", "visible");
- var check_list = $("#gServerAdd :checkbox[checked]");
- var parms = "";
- $.each(check_list, function () {
- var parent = $(this).parents("li")[0];
- // If its a file or a directory with no children
- if ($(parent).hasClass("gFile") ||
- ($(parent).hasClass("gDirectory") && $(parent).find(".gCheckboxTree").length == 0)) {
- parms += "&path[]=" + this.value;
- }
- });
+ $("#gServerAdd #gServerAddButton").hide();
+ $("#gServerAdd #gServerPauseButton").show();
+
+ if (!paused) {
+ $(".gProgressBar").progressbar("value", 0);
+ $(".gProgressBar").css("visibility", "visible");
+ var check_list = $("#gServerAdd :checkbox[checked]");
+
+ var parms = "";
+ $.each(check_list, function () {
+ var parent = $(this).parents("li")[0];
+ // If its a file or a directory with no children
+ if ($(parent).hasClass("gFile") ||
+ ($(parent).hasClass("gDirectory") && $(parent).find(".gCheckboxTree").length == 0)) {
+ parms += "&path[]=" + this.value;
+ }
+ });
+ }
+ paused = false;
+
$.ajax({async: false,
data: parms,
dataType: "json",
success: function(data, textStatus) {
- var task = data.task;
+ task = data.task;
var url = data.url;
var done = false;
- while (!done) {
+ while (!done && !paused) {
$.ajax({async: false,
success: function(data, textStatus) {
$(".gProgressBar").progressbar("value", data.task.percent_complete);
@@ -91,14 +122,19 @@ function do_add(submit, event) {
url: url
});
}
- $.ajax({async: false,
- success: function(data, textStatus) {
- document.location.reload();
- },
- dataType: "json",
- type: "POST",
- url: get_url("server_add/finish", task.id)
- });
+ if (!paused) {
+ $.ajax({async: false,
+ success: function(data, textStatus) {
+ document.location.reload();
+ },
+ dataType: "json",
+ type: "POST",
+ url: get_url("server_add/finish", task.id)
+ });
+ } else {
+ $("#gServerAdd #gServerAddButton").show();
+ $("#gServerAdd #gServerPauseButton").hide();
+ }
},
type: "POST",
url: get_url("server_add/start")
diff --git a/modules/server_add/views/server_add_tree_dialog.html.php b/modules/server_add/views/server_add_tree_dialog.html.php
index a52d2729..a9b46d7d 100644
--- a/modules/server_add/views/server_add_tree_dialog.html.php
+++ b/modules/server_add/views/server_add_tree_dialog.html.php
@@ -16,6 +16,7 @@
<?= $tree ?>
</div>
<span>
+ <?= form::submit(array("id" => "gServerPauseButton", "name" => "add", "disabled" => true, "class" => "submit", "style" => "display:none"), t("Pause")) ?>
<?= form::submit(array("id" => "gServerAddButton", "name" => "add", "disabled" => true, "class" => "submit"), t("Add")) ?>
</span>
<?= form::close() ?>