The details facet for DNS zone has been modified to use dnszone-
enable/disable for idnszoneactive and dnszone-mod for other fields.

Ticket #1813

--
Endi S. Dewata
From edffb9b9c7cd2c0ae4f7ca07fa5e46bca5d33386 Mon Sep 17 00:00:00 2001
From: Endi S. Dewata <edew...@redhat.com>
Date: Fri, 16 Sep 2011 16:06:07 -0500
Subject: [PATCH] Fixed problem enabling/disabling DNS zone.

The details facet for DNS zone has been modified to use dnszone-
enable/disable for idnszoneactive and dnszone-mod for other fields.

Ticket #1813
---
 install/ui/dns.js  |  119 +++++++++++++++++++++++++++++++++++++++++++++++++---
 install/ui/hbac.js |   26 ++++++-----
 install/ui/sudo.js |   28 +++++++------
 3 files changed, 142 insertions(+), 31 deletions(-)

diff --git a/install/ui/dns.js b/install/ui/dns.js
index 4cd222758f4e38492a65021af15178aa4efe82f2..da00a0495172f5195f30217552939b64ca7ab490 100644
--- a/install/ui/dns.js
+++ b/install/ui/dns.js
@@ -38,12 +38,13 @@ IPA.entity_factories.dnszone = function() {
         facet_groups([ 'dnsrecord', 'settings' ]).
         search_facet({
             title: IPA.metadata.objects.dnszone.label,
-            columns:['idnsname']
+            columns: [ 'idnsname' ]
         }).
         details_facet({
-            sections:[{
-                name:'identity',
-                fields:[
+            factory: IPA.dnszone_details_facet,
+            sections: [{
+                name: 'identity',
+                fields: [
                     'idnsname',
                     'idnszoneactive',
                     'idnssoamname',
@@ -56,7 +57,9 @@ IPA.entity_factories.dnszone = function() {
                     'dnsttl',
                     'dnsclass',
                     'idnsallowdynupdate',
-                    'idnsupdatepolicy']}]
+                    'idnsupdatepolicy'
+                ]
+            }]
         }).
         nested_search_facet({
             facet_group: 'dnsrecord',
@@ -66,7 +69,7 @@ IPA.entity_factories.dnszone = function() {
             label: IPA.metadata.objects.dnsrecord.label,
             load: IPA.dns_record_search_load,
             get_values: IPA.dnsrecord_get_delete_values,
-            columns:[
+            columns: [
                 {
                     name: 'idnsname',
                     label: IPA.get_entity_param('dnsrecord', 'idnsname').label,
@@ -110,6 +113,110 @@ IPA.entity_factories.dnszone = function() {
         build();
 };
 
+IPA.dnszone_details_facet = function(spec) {
+
+    spec = spec || {};
+
+    var that = IPA.details_facet(spec);
+
+    that.update = function(on_success, on_error) {
+
+        var args = that.get_primary_key();
+
+        var modify_operation = {
+            execute: false,
+            command: IPA.command({
+                entity: that.entity.name,
+                method: 'mod',
+                args: args,
+                options: { all: true, rights: true }
+            })
+        };
+
+        var enable_operation = {
+            execute: false,
+            command: IPA.command({
+                entity: that.entity.name,
+                method: 'enable',
+                args: args,
+                options: { all: true, rights: true }
+            })
+        };
+
+        var sections = that.sections.values;
+        for (var i=0; i<sections.length; i++) {
+            var section = sections[i];
+
+            var section_fields = section.fields.values;
+            for (var j=0; j<section_fields.length; j++) {
+                var field = section_fields[j];
+                if (!field.is_dirty()) continue;
+
+                var values = field.save();
+                if (!values) continue;
+
+                var param_info = field.param_info;
+
+                // skip primary key
+                if (param_info && param_info.primary_key) continue;
+
+                // check enable/disable
+                if (field.name == 'idnszoneactive') {
+                    if (values[0] == 'FALSE') enable_operation.command.method = 'disable';
+                    enable_operation.execute = true;
+                    continue;
+                }
+
+                if (param_info) {
+                    if (values.length == 1) {
+                        modify_operation.command.set_option(field.name, values[0]);
+                    } else if (field.join) {
+                        modify_operation.command.set_option(field.name, values.join(','));
+                    } else {
+                        modify_operation.command.set_option(field.name, values);
+                    }
+
+                } else {
+                    if (values.length) {
+                        modify_operation.command.set_option('setattr', field.name+'='+values[0]);
+                    } else {
+                        modify_operation.command.set_option('setattr', field.name+'=');
+                    }
+                    for (var l=1; l<values.length; l++) {
+                        modify_operation.command.set_option('addattr', field.name+'='+values[l]);
+                    }
+                }
+
+                modify_operation.execute = true;
+            }
+        }
+
+        var batch = IPA.batch_command({
+            name: 'dnszone_details_update',
+            on_success: function(data, text_status, xhr) {
+                that.refresh();
+                if (on_success) on_success.call(this, data, text_status, xhr);
+            },
+            on_error: function(xhr, text_status, error_thrown) {
+                that.refresh();
+                if (on_error) on_error.call(this, xhr, text_status, error_thrown);
+            }
+        });
+
+        if (modify_operation.execute) batch.add_command(modify_operation.command);
+        if (enable_operation.execute) batch.add_command(enable_operation.command);
+
+        if (!batch.commands.length) {
+            that.refresh();
+            return;
+        }
+
+        batch.execute();
+    };
+
+    return that;
+};
+
 IPA.dnszone_adder_dialog = function(spec) {
 
     spec = spec || {};
diff --git a/install/ui/hbac.js b/install/ui/hbac.js
index 53a4edcb7f0232b15d406f71c2a615744b161ebc..32b2202fa4c50d9e7fe70756c760abcf4e2d87d5 100644
--- a/install/ui/hbac.js
+++ b/install/ui/hbac.js
@@ -321,14 +321,14 @@ IPA.hbacrule_details_facet = function(spec) {
 
     that.update = function(on_success, on_error) {
 
-        var pkey = IPA.nav.get_state(that.entity.name+'-pkey');
+        var args = that.get_primary_key();
 
         var modify_operation = {
             'execute': false,
             'command': IPA.command({
                 entity: that.entity.name,
                 method: 'mod',
-                args: [pkey],
+                args: args,
                 options: {all: true, rights: true}
             })
         };
@@ -355,7 +355,7 @@ IPA.hbacrule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_user',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -365,7 +365,7 @@ IPA.hbacrule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_host',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -375,7 +375,7 @@ IPA.hbacrule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_service',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -385,7 +385,7 @@ IPA.hbacrule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_sourcehost',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             }
@@ -396,7 +396,7 @@ IPA.hbacrule_details_facet = function(spec) {
             'command': IPA.command({
                 entity: that.entity.name,
                 method: 'enable',
-                args: [pkey],
+                args: args,
                 options: {all: true, rights: true}
             })
         };
@@ -408,15 +408,17 @@ IPA.hbacrule_details_facet = function(spec) {
             var section_fields = section.fields.values;
             for (var j=0; j<section_fields.length; j++) {
                 var field = section_fields[j];
-                if (!field.is_dirty()) continue;
+
+                // association tables are never dirty, so call
+                // is_dirty() after checking table values
 
                 var values = field.save();
                 if (!values) continue;
 
-                var param_info = IPA.get_entity_param(that.entity.name, field.name);
+                var param_info = field.param_info;
 
                 // skip primary key
-                if (param_info && param_info['primary_key']) continue;
+                if (param_info && param_info.primary_key) continue;
 
                 var p = field.name.indexOf('_');
                 if (p >= 0) {
@@ -475,11 +477,11 @@ IPA.hbacrule_details_facet = function(spec) {
             'name': 'hbac_details_update',
             'on_success': function(data, text_status, xhr) {
                 that.refresh();
-                if (on_success) on_success(data, text_status, xhr);
+                if (on_success) on_success.call(this, data, text_status, xhr);
             },
             'on_error': function(xhr, text_status, error_thrown) {
                 that.refresh();
-                if (on_error) on_error(xhr, text_status, error_thrown);
+                if (on_error) on_error.call(this, xhr, text_status, error_thrown);
             }
         });
 
diff --git a/install/ui/sudo.js b/install/ui/sudo.js
index c9e7cdaf1104541584612bd38bc1fa2cad27d5fa..cdd5e50af6437e014a0957f07cd1d3e27b239443 100644
--- a/install/ui/sudo.js
+++ b/install/ui/sudo.js
@@ -261,14 +261,14 @@ IPA.sudorule_details_facet = function(spec) {
 
     that.update = function(on_success, on_error) {
 
-        var pkey = IPA.nav.get_state(that.entity.name+'-pkey');
+        var args = that.get_primary_key();
 
         var modify_operation = {
             'execute': false,
             'command': IPA.command({
                 entity: that.entity.name,
                 method: 'mod',
-                args: [pkey],
+                args: args,
                 options: {all: true, rights: true}
             })
         };
@@ -298,7 +298,7 @@ IPA.sudorule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_user',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -308,7 +308,7 @@ IPA.sudorule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_host',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -318,7 +318,7 @@ IPA.sudorule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_allow_command',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -328,7 +328,7 @@ IPA.sudorule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_runasuser',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             },
@@ -338,7 +338,7 @@ IPA.sudorule_details_facet = function(spec) {
                 'command': IPA.command({
                     entity: that.entity.name,
                     method: 'remove_runasgroup',
-                    args: [pkey],
+                    args: args,
                     options: {all: true, rights: true}
                 })
             }
@@ -349,7 +349,7 @@ IPA.sudorule_details_facet = function(spec) {
             'command': IPA.command({
                 entity: that.entity.name,
                 method: 'enable',
-                args: [pkey],
+                args: args,
                 options: {all: true, rights: true}
             })
         };
@@ -361,15 +361,17 @@ IPA.sudorule_details_facet = function(spec) {
             var section_fields = section.fields.values;
             for (var j=0; j<section_fields.length; j++) {
                 var field = section_fields[j];
-                if (!field.is_dirty()) continue;
+
+                // association tables are never dirty, so call
+                // is_dirty() after checking table values
 
                 var values = field.save();
                 if (!values) continue;
 
-                var param_info = IPA.get_entity_param(that.entity.name, field.name);
+                var param_info = field.param_info;
 
                 // skip primary key
-                if (param_info && param_info['primary_key']) continue;
+                if (param_info && param_info.primary_key) continue;
 
                 var p = field.name.indexOf('_');
                 if (p >= 0) {
@@ -427,11 +429,11 @@ IPA.sudorule_details_facet = function(spec) {
             'name': 'sudorule_details_update',
             'on_success': function(data, text_status, xhr) {
                 that.refresh();
-                if (on_success) on_success(data, text_status, xhr);
+                if (on_success) on_success.call(this, data, text_status, xhr);
             },
             'on_error': function(xhr, text_status, error_thrown) {
                 that.refresh();
-                if (on_error) on_error(xhr, text_status, error_thrown);
+                if (on_error) on_error.call(this, xhr, text_status, error_thrown);
             }
         });
 
-- 
1.7.5.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to