summaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2011-08-11 10:28:50 +0200
committerEndi S. Dewata <edewata@redhat.com>2011-08-17 18:04:13 +0000
commitaee2544e1633eccb83015d6adacb91c52f6e3bff (patch)
treee791db75ef6adb8bfc7b5a71e78320711be07d85 /install
parent293f0fab0b5148e6778bb883dd20917cef714d72 (diff)
downloadfreeipa-aee2544e1633eccb83015d6adacb91c52f6e3bff.zip
freeipa-aee2544e1633eccb83015d6adacb91c52f6e3bff.tar.gz
freeipa-aee2544e1633eccb83015d6adacb91c52f6e3bff.tar.xz
error dialog for batch command
https://fedorahosted.org/freeipa/ticket/1597 https://fedorahosted.org/freeipa/ticket/1592 Added option to show multiple errors in error dialog.
Diffstat (limited to 'install')
-rw-r--r--install/ui/ipa.js138
-rw-r--r--install/ui/search.js4
-rw-r--r--install/ui/test/data/ipa_init.json7
3 files changed, 135 insertions, 14 deletions
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index 8a3dd4e..9a252f1 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -417,6 +417,11 @@ IPA.batch_command = function (spec) {
var that = IPA.command(spec);
that.commands = [];
+ that.errors = [];
+ that.error_message = spec.error_message || (IPA.messages.dialogs ?
+ IPA.messages.dialogs.batch_error_message : 'Some operations failed.');
+ that.show_error = typeof spec.show_error == 'undefined' ?
+ true : spec.show_error;
that.add_command = function(command) {
that.commands.push(command);
@@ -429,7 +434,21 @@ IPA.batch_command = function (spec) {
}
};
+ var clear_errors = function() {
+ that.errors = [];
+ };
+
+ var add_error = function(command, name, message, status) {
+ that.errors.push({
+ command: command,
+ name: name,
+ message: message,
+ status: status
+ });
+ };
+
that.execute = function() {
+ clear_errors();
IPA.command({
name: that.name,
@@ -444,25 +463,38 @@ IPA.batch_command = function (spec) {
var command = that.commands[i];
var result = data.result.results[i];
+ var name = '';
+ var message = '';
+
if (!result) {
+ name = 'Internal Error '+xhr.status;
+ message = result ? xhr.statusText : "Internal error";
+
+ add_error(command, name, message, text_status);
+
if (command.on_error) command.on_error.call(
this,
xhr,
text_status,
{
- name: 'Internal Error '+xhr.status,
- message: result ? xhr.statusText : "Internal error"
+ name: name,
+ message: message
}
);
} else if (result.error) {
+ name = 'IPA Error ' + (result.error.code || '');
+ message = result.error.message || result.error;
+
+ add_error(command, name, message, text_status);
+
if (command.on_error) command.on_error.call(
this,
xhr,
text_status,
{
- name: 'IPA Error '+result.error.code,
- message: result.error.message
+ name: name,
+ message: message
}
);
@@ -470,6 +502,22 @@ IPA.batch_command = function (spec) {
if (command.on_success) command.on_success.call(this, result, text_status, xhr);
}
}
+ //check for partial errors and show error dialog
+ if(that.show_error && that.errors.length > 0) {
+ var dialog = IPA.error_dialog({
+ xhr: xhr,
+ text_status: text_status,
+ error_thrown: {
+ name: IPA.messages.dialogs ? IPA.messages.dialogs.batch_error_title :
+ 'Operations Error',
+ message: that.error_message
+ },
+ command: that,
+ errors: that.errors,
+ visible_buttons: ['ok']
+ });
+ dialog.open();
+ }
if (that.on_success) that.on_success.call(this, data, text_status, xhr);
},
on_error: function(xhr, text_status, error_thrown) {
@@ -625,6 +673,8 @@ IPA.error_dialog = function(spec) {
that.error_thrown = spec.error_thrown || {};
that.command = spec.command;
that.title = spec.error_thrown.name;
+ that.errors = spec.errors;
+ that.visible_buttons = spec.visible_buttons || ['retry', 'cancel'];
};
that.create = function() {
@@ -637,6 +687,54 @@ IPA.error_dialog = function(spec) {
$('<p/>', {
html: that.error_thrown.message
}).appendTo(that.container);
+
+ if(that.errors && that.errors.length > 0) {
+ //render errors
+ var errors_title_div = $('<div />', {
+ 'class': 'errors_title'
+ }).appendTo(that.container);
+
+ var show_details = $('<a />', {
+ href: '#',
+ title: IPA.messages.dialogs.show_details,
+ text: IPA.messages.dialogs.show_details
+ }).appendTo(errors_title_div);
+
+ var hide_details = $('<a />', {
+ href: '#',
+ title: IPA.messages.dialogs.hide_details,
+ text: IPA.messages.dialogs.hide_details,
+ style : 'display: none'
+ }).appendTo(errors_title_div);
+
+ var errors_container = $('<ul />', {
+ 'class' : 'error-container',
+ style : 'display: none'
+ }).appendTo(that.container);
+
+ for(var i=0; i < that.errors.length; i++) {
+ var error = that.errors[i];
+ if(error.message) {
+ var error_div = $('<li />', {
+ text: error.message
+ }).appendTo(errors_container);
+ }
+ }
+
+ show_details.click(function() {
+ errors_container.show();
+ show_details.hide();
+ hide_details.show();
+ return false;
+ });
+
+ hide_details.click(function() {
+ errors_container.hide();
+ hide_details.hide();
+ show_details.show();
+ return false;
+ });
+ }
};
that.create_buttons = function() {
@@ -645,16 +743,28 @@ IPA.error_dialog = function(spec) {
* ticket, the messages including the button labels have not
* been loaded yet, so the button labels need default values.
*/
- var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
+ var label;
- that.add_button(label, function() {
- that.on_retry();
- });
+ if(that.visible_buttons.indexOf('retry') > -1) {
+ label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
+ that.add_button(label, function() {
+ that.on_retry();
+ });
+ }
- label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
- that.add_button(label, function() {
- that.on_cancel();
- });
+ if(that.visible_buttons.indexOf('ok') > -1) {
+ label = IPA.messages.buttons ? IPA.messages.buttons.ok : 'OK';
+ that.add_button(label, function() {
+ that.on_ok();
+ });
+ }
+
+ if(that.visible_buttons.indexOf('cancel') > -1) {
+ label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
+ that.add_button(label, function() {
+ that.on_cancel();
+ });
+ }
};
that.on_retry = function() {
@@ -662,6 +772,10 @@ IPA.error_dialog = function(spec) {
that.command.execute();
};
+ that.on_ok = function() {
+ that.close();
+ };
+
that.on_cancel = function() {
that.close();
};
diff --git a/install/ui/search.js b/install/ui/search.js
index fe0b07f..bee55c0 100644
--- a/install/ui/search.js
+++ b/install/ui/search.js
@@ -300,7 +300,9 @@ IPA.search_deleter_dialog = function(spec) {
var that = IPA.deleter_dialog(spec);
that.create_command = function() {
- var batch = IPA.batch_command();
+ var batch = IPA.batch_command({
+ error_message: IPA.messages.search.partial_delete
+ });
var pkeys = that.entity.get_primary_key_prefix();
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 659ddfc..bd32550 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -15880,13 +15880,17 @@
"dialogs": {
"add_title": "Add ${entity}",
"available": "Available",
+ "batch_error_message": "Some operations failed.",
+ "batch_error_title": "Operations Error",
"confirmation": "Confirmation",
"dirty_message": "This page has unsaved changes. Please save or revert.",
"dirty_title": "Dirty",
"hide_already_enrolled": "Hide already enrolled.",
+ "hide_details": "Hide details",
"prospective": "Prospective",
"remove_empty": "Select entries to be removed.",
- "remove_title": "Remove ${entity}"
+ "remove_title": "Remove ${entity}",
+ "show_details": "Show details"
},
"facet_groups": {
"managedby": "${primary_key} is managed by:",
@@ -16125,6 +16129,7 @@
},
"search": {
"delete_confirm": "Are you sure you want to delete selected entries?",
+ "partial_delete": "Some entries were not deleted",
"quick_links": "Quick Links",
"select_all": "Select All",
"truncated": "Query returned more results than the configured size limit. Displaying the first ${counter} results.",