summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2011-09-16 16:06:07 -0500
committerEndi S. Dewata <edewata@redhat.com>2011-09-22 16:52:59 +0000
commit26a2fa027d4e3d5c6953db325080074eedf64d98 (patch)
tree9df40d29c4b0dd6d6faa24a77dc6de7437c40a88
parentc981627016e0d3c0002214c1d2cc0812a480339a (diff)
downloadfreeipa-26a2fa027d4e3d5c6953db325080074eedf64d98.tar.gz
freeipa-26a2fa027d4e3d5c6953db325080074eedf64d98.tar.xz
freeipa-26a2fa027d4e3d5c6953db325080074eedf64d98.zip
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
-rw-r--r--install/ui/dns.js119
-rw-r--r--install/ui/hbac.js26
-rw-r--r--install/ui/sudo.js28
3 files changed, 142 insertions, 31 deletions
diff --git a/install/ui/dns.js b/install/ui/dns.js
index 20660d17..e01e28f6 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,
@@ -109,6 +112,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 53a4edcb..32b2202f 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 c9e7cdaf..cdd5e50a 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);
}
});