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

Reply via email to