On 07/29/2011 10:58 AM, Adam Young wrote:
Due to my recent huge patch, version -1 patch will not apply. I had
to rebase by hand.
Please confirm that it still works as intended.
Missed a few files in my commit.
From aaf747c17669b7404a3869a5a1a99108dd08b257 Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Fri, 29 Jul 2011 10:53:01 -0400
Subject: [PATCH] Fixed adding host without DNS reverse zone
https://fedorahosted.org/freeipa/ticket/1481
Shows status dialog instead of error dialog (error 4304 is treated like success).
Refactored error dialog.
Changed context of calling command.on_success and command.on_error methods from $.ajax's object to command.
Added generic message dialog (IPA.message_dialog)
---
install/ui/add.js | 10 +++-
install/ui/dialog.js | 29 ++++++++++++
install/ui/host.js | 42 +++++++++++++++++
install/ui/ipa.js | 121 ++++++++++++++++++++++++++++----------------------
4 files changed, 146 insertions(+), 56 deletions(-)
diff --git a/install/ui/add.js b/install/ui/add.js
index 988ea8ff13819ccdd61a2033344e146dbaf09255..a55c5feacf7cf1702c3f4bbe34ba018664c724f3 100644
--- a/install/ui/add.js
+++ b/install/ui/add.js
@@ -31,6 +31,8 @@ IPA.add_dialog = function (spec) {
that.method = spec.method || 'add';
that.pre_execute_hook = spec.pre_execute_hook;
+ that.on_error = spec.on_error ;
+ that.retry = typeof spec.retry !== 'undefined' ? spec.retry : true;
function show_edit_page(entity,result){
var pkey_name = entity.metadata.primary_key;
@@ -51,6 +53,7 @@ IPA.add_dialog = function (spec) {
var command = IPA.command({
entity: that.entity.name,
method: that.method,
+ retry: that.retry,
on_success: on_success,
on_error: on_error
});
@@ -127,8 +130,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.close();
- }
- );
+ },
+ that.on_error);
});
that.add_button(IPA.messages.buttons.add_and_add_another, function() {
@@ -141,7 +144,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.reset();
- }
+ },
+ that.on_error);
);
});
diff --git a/install/ui/dialog.js b/install/ui/dialog.js
index 848252d87f4db8418f26ec5c7dfebbfaca5f0275..ad95eceda97fdbf5e93af2dd77de0ab12963f2f3 100644
--- a/install/ui/dialog.js
+++ b/install/ui/dialog.js
@@ -644,3 +644,32 @@ IPA.deleter_dialog = function (spec) {
return that;
};
+
+IPA.message_dialog = function(spec) {
+
+ var that = IPA.dialog(spec);
+
+ var init = function(spec) {
+ spec = spec || {};
+ that.message = spec.message || '';
+ that.on_ok = spec.on_ok;
+ };
+ that.message_dialog_init = init;
+
+ that.create = function() {
+ $('<p/>', {
+ 'text': that.message
+ }).appendTo(that.container);
+ };
+
+ that.add_button(IPA.messages.buttons.ok, function() {
+ that.close();
+ if(that.on_ok) {
+ that.on_ok();
+ }
+ });
+
+ init(spec);
+
+ return that;
+};
diff --git a/install/ui/host.js b/install/ui/host.js
index a84f54c190257e19efadcbdf0754b431eb4bd6de..8a40f07b18b20396b537f6d8fac6fe7f3d541e0c 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -102,6 +102,7 @@ IPA.entity_factories.host = function () {
}).
standard_association_facets().
adder_dialog({
+ factory: IPA.host_adder_dialog,
width: 400,
height: 250,
fields:[
@@ -128,6 +129,47 @@ IPA.entity_factories.host = function () {
build();
};
+IPA.host_adder_dialog = function(spec)
+{
+ spec = spec || {};
+ spec.retry = typeof spec.retry !== 'undefined' ? spec.retry : false;
+
+ var that = IPA.add_dialog(spec);
+
+ that.on_error = function(xhr, text_status, error_thrown)
+ {
+ var command = this;
+ var data = error_thrown.data;
+ var dialog = null;
+
+ if(data && data.error && data.error.code === 4304) {
+ dialog = IPA.message_dialog({
+ message: data.error.message,
+ title: spec.title,
+ on_ok: function() {
+ data.result = {
+ result: {
+ fqdn: that.get_field('fqdn').save()
+ }
+ };
+ command.on_success(data, text_status, xhr);
+ }
+ });
+ } else {
+ dialog = IPA.error_dialog({
+ xhr: xhr,
+ text_status: text_status,
+ error_thrown: error_thrown,
+ command: command
+ });
+ }
+
+ dialog.open(that.container);
+ };
+
+ return that;
+};
+
IPA.host_deleter_dialog = function(spec) {
spec = spec || {};
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index 2f1c6969c05c46c646c7796bff092b862157aa8f..361ebc50dfd4eb2f4da5bfbf3bf65c3f16197a33 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -243,57 +243,13 @@ IPA.command = function(spec) {
that.execute = function() {
function dialog_open(xhr, text_status, error_thrown) {
-
- IPA.error_dialog = $('<div/>', {
- id: 'error_dialog'
- });
-
- if (error_thrown.url) {
- $('<p/>', {
- text: 'URL: '+error_thrown.url
- }).appendTo(IPA.error_dialog);
- }
-
- $('<p/>', {
- html: error_thrown.message
- }).appendTo(IPA.error_dialog);
-
- function close() {
- IPA.error_dialog.dialog('destroy');
- IPA.error_dialog.remove();
- IPA.error_dialog = null;
- }
-
- var buttons = {};
-
- /**
- * When a user initially opens the Web UI without a Kerberos
- * 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';
- buttons[label] = function() {
- close();
- that.execute();
- };
-
- label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
- buttons[label] = function() {
- close();
- if (that.on_error) {
- that.on_error.call(this, xhr, text_status, error_thrown);
- }
- };
-
- IPA.error_dialog.dialog({
- modal: true,
- title: error_thrown.name,
- width: 400,
- buttons: buttons,
- close: function() {
- close();
- }
+ var dialog = IPA.error_dialog({
+ xhr: xhr,
+ text_status: text_status,
+ error_thrown: error_thrown,
+ command: this
});
+ dialog.open();
}
function error_handler(xhr, text_status, error_thrown) {
@@ -331,7 +287,7 @@ IPA.command = function(spec) {
dialog_open.call(this, xhr, text_status, error_thrown);
} else if (that.on_error) {
- that.on_error.call(this, xhr, text_status, error_thrown);
+ that.on_error(xhr, text_status, error_thrown);
}
}
@@ -349,12 +305,13 @@ IPA.command = function(spec) {
// error_handler() calls IPA.hide_activity_icon()
error_handler.call(this, xhr, text_status, /* error_thrown */ {
name: 'IPA Error '+data.error.code,
- message: data.error.message
+ message: data.error.message,
+ data: data
});
} else if (that.on_success) {
IPA.hide_activity_icon();
- that.on_success.call(this, data, text_status, xhr);
+ that.on_success(data, text_status, xhr);
}
}
@@ -610,3 +567,61 @@ IPA.dirty_dialog = function(spec) {
return that;
};
+
+IPA.error_dialog = function(spec) {
+ var that = IPA.dialog(spec);
+
+ that.xhr = '';
+ that.text_status = '';
+ that.error_thrown = '';
+ that.command = null;
+
+ var init = function(spec) {
+ spec = spec || {};
+
+ that.xhr = spec.xhr;
+ that.text_status = spec.text_status;
+ that.error_thrown = spec.error_thrown;
+ that.command = spec.command;
+ that.title = spec.error_thrown.name;
+ };
+
+ that.create = function() {
+ if (that.error_thrown.url) {
+ $('<p/>', {
+ text: 'URL: '+that.error_thrown.url
+ }).appendTo(that.container);
+ }
+
+ $('<p/>', {
+ html: that.error_thrown.message
+ }).appendTo(that.container);
+ };
+
+ that.create_buttons = function() {
+ /**
+ * When a user initially opens the Web UI without a Kerberos
+ * 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';
+
+ that.add_button(label, function() {
+ that.close();
+ that.command.execute();
+ });
+
+ label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
+ that.add_button(label, function() {
+ that.close();
+ if (that.command.retry && that.command.on_error) {
+ that.command.on_error(that.xhr, that.text_status, that.error_thrown);
+ }
+ });
+ };
+
+ init(spec);
+ that.create_buttons();
+
+ return that;
+};
\ No newline at end of file
--
1.7.6
_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel