diff options
Diffstat (limited to 'modules/server_add')
-rw-r--r-- | modules/server_add/controllers/server_add.php | 12 | ||||
-rw-r--r-- | modules/server_add/js/server_add.js | 84 | ||||
-rw-r--r-- | modules/server_add/views/server_add_tree_dialog.html.php | 1 |
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() ?> |