summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--install/ui/add.js5
-rw-r--r--install/ui/details.js7
-rw-r--r--install/ui/dns.js695
-rw-r--r--install/ui/entity.js2
-rw-r--r--install/ui/host.js20
-rw-r--r--install/ui/navigation.js20
-rw-r--r--install/ui/policy.js3
-rw-r--r--install/ui/search.js12
-rw-r--r--install/ui/test/data/dnsrecord_find.json37
-rw-r--r--install/ui/test/data/dnsrecord_show.json73
-rw-r--r--install/ui/test/widget_tests.js35
-rw-r--r--install/ui/user.js5
-rw-r--r--install/ui/webui.js8
-rw-r--r--install/ui/widget.js73
14 files changed, 498 insertions, 497 deletions
diff --git a/install/ui/add.js b/install/ui/add.js
index 0a414b74b..b6b797c45 100644
--- a/install/ui/add.js
+++ b/install/ui/add.js
@@ -30,6 +30,7 @@ IPA.add_dialog = function (spec) {
var that = IPA.dialog(spec);
that.method = spec.method || 'add';
+ that.pre_execute_hook = spec.pre_execute_hook;
function show_edit_page(entity_name,result){
var pkey_name = IPA.metadata.objects[entity_name].primary_key;
@@ -160,9 +161,13 @@ IPA.add_dialog = function (spec) {
//alert(JSON.stringify(command.to_json()));
+ if (that.pre_execute_hook){
+ that.pre_execute_hook(command);
+ }
if (required_fields_filled){
command.execute();
}
+
};
that.add_dialog_init = that.init;
diff --git a/install/ui/details.js b/install/ui/details.js
index 746769702..b31305c69 100644
--- a/install/ui/details.js
+++ b/install/ui/details.js
@@ -591,9 +591,9 @@ IPA.details_facet = function(spec) {
values = field.save();
if (!values) continue;
- var param_info = IPA.get_entity_param(entity_name, field.name);
+ var param_info = field.param_info;
if (param_info) {
- if (param_info['primary_key']) continue;
+ if (param_info.primary_key) continue;
if (values.length === 1) {
command.set_option(field.name, values[0]);
} else if (field.join) {
@@ -601,8 +601,7 @@ IPA.details_facet = function(spec) {
} else {
command.set_option(field.name, values);
}
-
- } else {
+ } else {
if (values.length) {
command.add_option('setattr', field.name+'='+values[0]);
} else {
diff --git a/install/ui/dns.js b/install/ui/dns.js
index d689a8941..740192653 100644
--- a/install/ui/dns.js
+++ b/install/ui/dns.js
@@ -54,13 +54,15 @@ IPA.entity_factories.dnszone = function() {
'idnsallowdynupdate',
'idnsupdatepolicy']}]
}).
- facet({
- factory: IPA.dnsrecord_facet,
- name: 'records',
+ nested_search_facet({
facet_group: 'member',
+ nested_entity : 'dnsrecord',
+ name: 'records',
title: IPA.metadata.objects.dnszone.label_singular,
label: IPA.metadata.objects.dnsrecord.label,
- columns: [
+ load: IPA.dns_record_search_load,
+ get_values: IPA.dnsrecord_get_delete_values,
+ columns:[
{
name: 'idnsname',
label: IPA.get_entity_param('dnsrecord', 'idnsname').label,
@@ -87,470 +89,271 @@ IPA.entity_factories.dnszone = function() {
build();
};
-IPA.force_dnszone_add_checkbox_widget = function(spec) {
- var param_info = IPA.get_method_option('dnszone_add', 'force');
- spec.name = 'force';
- spec.label = param_info.label;
- spec.tooltip = param_info.doc;
- spec.undo = false;
- return IPA.checkbox_widget(spec);
-};
-
-IPA.dnsrecord_facet = function(spec) {
-
- spec = spec || {};
-
- spec.disable_breadcrumb = false;
- spec.disable_facet_tabs = false;
-
- var that = IPA.search_facet(spec);
+IPA.dns_record_search_load = function (result) {
+ this.table.empty();
+ var normalized_record;
+ var dns_record_types = IPA.dns_record_types();
+ for (var i = 0; i<result.length; i++) {
+ var record = result[i];
+ for (var j =0; j < dns_record_types.length; j += 1){
+ var record_type = dns_record_types[j].value;
+ if (record[record_type]){
+ var record_of_type = record[record_type];
+ for (var k =0;
+ k < record_of_type.length;
+ k+=1)
+ {
+ normalized_record = {
+ idnsname:record.idnsname,
+ type:record_type,
+ data:record_of_type[k]
+ };
+ this.table.add_record(normalized_record);
- function generate_recordtype_list(){
- var attrs = IPA.metadata.objects.dnsrecord.default_attributes;
- var record_types = [];
- for (var i =0; i < attrs.length; i+=1){
- var attr = attrs[i];
- var index = attr.search('record$');
- if (index > -1){
- var rec_type = attr.substring(0,index);
- record_types.push(rec_type);
+ }
}
}
- return record_types;
-
- }
-
- var record_types = generate_recordtype_list();
-
- that.init = function() {
-
- that.facet_init();
-
- that.table = IPA.table_widget({
- 'class': 'content-table',
- name: 'search',
- label: IPA.metadata.objects[that.entity_name].label,
- entity_name: that.entity_name,
- scrollable: true
- });
-
- var columns = that.columns.values;
- for (var i=0; i<columns.length; i++) {
- var column = columns[i];
- that.table.add_column(column);
- }
-
- that.table.select_changed = function() {
- that.select_changed();
- };
-
- that.table.refresh = function() {
- that.refresh();
- };
-
- that.table.init();
- };
-
- function create_type_select(id,add_none) {
- var type_select = $('<select/>',{
- id: id
- });
-
- if (add_none){
- type_select.append($('<option/>', {
- text: '(any)',
- value: ''
- }));
- }
- for (var t = 0 ; t < record_types.length ; t += 1){
- var record_type = record_types[t].toUpperCase();
-
- type_select.append($('<option/>',{
- text: record_type,
- value: record_type
- }));
- }
- return type_select;
}
+};
- that.add = function() {
-
- var title = IPA.messages.dialogs.add_title;
- var label = IPA.metadata.objects.dnsrecord.label_singular;
- title = title.replace('${entity}', label);
-
- var dialog = IPA.dialog({
- title: title
- });
-
- dialog.create = function() {
-
- var dl = $('<dl/>').appendTo(dialog.container);
-
- $('<dt/>', {
- html: IPA.get_entity_param('dnsrecord', 'idnsname').label
- }).appendTo(dl);
-
- var dd = $('<dd/>').appendTo(dl);
-
- dialog.resource = $('<input/>', {
- type: 'text'
- }).appendTo(dd);
-
- $('<dt/>', {
- html: IPA.messages.objects.dnsrecord.type
- }).appendTo(dl);
-
- dd = $('<dd/>').appendTo(dl);
-
- dialog.type = create_type_select('dns-record-type').appendTo(dd);
-
- $('<dt/>', {
- html: IPA.messages.objects.dnsrecord.data
- }).appendTo(dl);
-
- dd = $('<dd/>').appendTo(dl);
-
- dialog.data = $('<textarea/>', {
- rows: 8,
- cols: 20
- }).appendTo(dd);
- };
-
- dialog.add_button(IPA.messages.buttons.add, function() {
- dialog.add();
- dialog.close();
- });
-
- dialog.add_button(IPA.messages.buttons.add_and_add_another, function() {
- dialog.add();
- });
-
- dialog.add_button(IPA.messages.buttons.cancel, function() {
- dialog.close();
- });
-
- dialog.add = function() {
-
- var pkey = IPA.nav.get_state(that.entity_name+'-pkey');
- var resource = dialog.resource.val();
-
- var options = {};
- var key = dialog.type.val().toLowerCase()+'record';
- options[key] = dialog.data.val();
-
- var command = IPA.command({
- entity: 'dnsrecord',
- method: 'add',
- args: [pkey, resource],
- options: options,
- on_success: function(data, text_status, xhr) {
- that.refresh();
+IPA.entity_factories.dnsrecord = function() {
+ return IPA.entity_builder().
+ entity('dnsrecord').
+ containing_entity('dnszone').
+ details_facet({
+ disable_breadcrumb: false,
+ sections:[
+ {
+ name:'identity',
+ label: IPA.messages.details.identity,
+ fields:[
+ {
+ factory:IPA.dnsrecord_host_link_widget,
+ name: 'idnsname',
+ other_entity:'host',
+ label:'Record Name'
+ }
+ ]
+ },
+ {
+ name:'standard',
+ label:'Standard Records',
+ fields:[
+ { factory: IPA.multivalued_text_widget,
+ name: 'arecord',
+ param_info: {primary_key: false},
+ label:'A'
+ },
+ { factory: IPA.multivalued_text_widget,
+ name: 'aaaarecord',
+ param_info: {primary_key: false},
+ label:'AAAA'
+ },
+ { factory: IPA.multivalued_text_widget,
+ name: 'ptrrecord',
+ param_info: {primary_key: false},
+ label:'PTR'
+ },
+ { factory: IPA.multivalued_text_widget,
+ name: 'srvrecord',
+ param_info: {primary_key: false},
+ label:'SRV'
+ },
+ { factory: IPA.multivalued_text_widget,
+ name: 'txtrecord',
+ param_info: {primary_key: false},
+ label:'TXT'
+ },
+ { factory: IPA.multivalued_text_widget,
+ name: 'cnamerecord',
+ param_info: {primary_key: false},
+ label:'CNAME'
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'MX',
+ param_info: {primary_key: false},
+ name:"mxrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'NS',
+ param_info: {primary_key: false},
+ name:"nsrecord"
+ }
+
+ ]
+ },
+ {
+ name:'unusual',
+ label:'Other Record Types',
+ fields:[
+ { factory: IPA.multivalued_text_widget,
+ label:'AFSDB',
+ param_info: {primary_key: false},
+ name: "afsdbrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'CERT',
+ param_info: {primary_key: false},
+ name:"certrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'DNAME',
+ param_info: {primary_key: false},
+ name:"dnamerecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'DSRECORD',
+ param_info: {primary_key: false},
+ name:"dsrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'KEY',
+ param_info: {primary_key: false},
+ name:"keyrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'KX',
+ param_info: {primary_key: false},
+ name:"kxrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'LOC',
+ param_info: {primary_key: false},
+ name:"locrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'NAPTR',
+ name:"naptrrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'NSEC',
+ param_info: {primary_key: false},
+ name:"nsecrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'RRSIG',
+ param_info: {primary_key: false},
+ name:"rrsigrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'SIG',
+ param_info: {primary_key: false},
+ name:"sigrecord"
+ },
+ { factory: IPA.multivalued_text_widget,
+ label:'SSHFP',
+ param_info: {primary_key: false},
+ name:"sshfprecord"
+ }
+ ]
}
- });
-
- command.execute();
- };
-
- dialog.init();
-
- dialog.open(that.container);
- };
-
- that.remove = function() {
-
- var values = that.table.get_selected_rows();
-
- if (!values.length) {
- return;
- }
-
- var zone = IPA.nav.get_state('dnszone-pkey');
-
- var records = [];
-
- values.each(function() {
- var tr = $(this);
-
- records.push({
- resource: $('span[name=idnsname]', tr).text(),
- type: $('span[name=type]', tr).text().toLowerCase(),
- data: $('span[name=data]', tr).text()
- });
- });
-
- var title = IPA.messages.dialogs.remove_title;
- var label = IPA.metadata.objects.dnsrecord.label;
- title = title.replace('${entity}', label);
-
- var dialog = IPA.dialog({
- title: title
- });
-
- dialog.create = function() {
-
- var table = $('<table/>', {
- 'class': 'search-table'
- }).appendTo(dialog.container);
-
- var thead = $('<thead/>').appendTo(table);
-
- var tr = $('<tr/>').appendTo(thead);
-
- $('<th/>', {
- text: IPA.get_entity_param('dnsrecord', 'idnsname').label
- }).appendTo(tr);
-
- $('<th/>', {
- text: IPA.messages.objects.dnsrecord.type
- }).appendTo(tr);
-
- var tbody = $('<tbody/>').appendTo(table);
-
- for (var i=0; i<records.length; i++) {
- var record = records[i];
-
- tr = $('<tr/>').appendTo(tbody);
-
- $('<td/>', {
- html: record.resource
- }).appendTo(tr);
-
- $('<td/>', {
- html: record.type
- }).appendTo(tr);
- }
-
- $('<p/>', {
- text: IPA.messages.search.delete_confirm
- }).appendTo(dialog.container);
- };
-
- dialog.add_button(IPA.messages.buttons.remove, function() {
-
- var batch = IPA.batch_command({
- on_success: function() {
- that.refresh();
- dialog.close();
+ ]
+ }).
+ adder_dialog({
+ pre_execute_hook:function(command){
+ var record_type = command.options.record_type;
+ var record_data = command.options.record_data;
+
+ delete command.options.record_type;
+ delete command.options.record_data;
+ command.options[record_type] = record_data;
+ },
+ fields: [
+ 'idnsname',
+ {
+ name:'record_type',
+ label:IPA.messages.objects.dnsrecord.type,
+ factory:IPA.dnsrecord_type_widget,
+ undo: false
},
- on_error: function() {
- that.refresh();
- dialog.close();
+ {
+ name:'record_data',
+ label:IPA.messages.objects.dnsrecord.data,
+ factory:IPA.text_widget,
+ param_info:{required:true},
+ undo: false
}
- });
-
- for (var i=0; i<records.length; i++) {
- var record = records[i];
-
- var command = IPA.command({
- entity: 'dnsrecord',
- method: 'del',
- args: [zone, record.resource]
- });
-
- command.set_option(record.type+'record', record.data);
-
- batch.add_command(command);
- }
-
- batch.execute();
- });
-
- dialog.add_button(IPA.messages.buttons.cancel, function() {
- dialog.close();
- });
-
- dialog.init();
-
- dialog.open(that.container);
- };
-
- that.create_header = function(container) {
-
- that.facet_create_header(container);
-
- var span = $('<span/>', {
- 'class': 'right-aligned-facet-controls'
- }).appendTo(that.controls);
-
- that.filter = $('<input/>', {
- type: 'text',
- 'class': 'search-filter',
- name: 'filter'
- }).appendTo(span);
-
- that.filter.keypress(function(e) {
- /* if the key pressed is the enter key */
- if (e.which == 13) {
- that.find();
- }
- });
-
- /*
- The old DNS plugin allowed for search based on record type.
- This one does not. If the plugin gets modified to support
- Record type searches, uncomment the following lines and
- adjust the code that modifies the search parameters.
-
- that.controls.append('Type');
- create_type_select('dns-record-type-filter',true).
- appendTo(that.controls);
- */
-
- that.find_button = IPA.action_button({
- name: 'find',
- icon: 'search-icon',
- click: function(){
- that.find();
- return false;
- }
- }).appendTo(span);
-
- that.controls.append(IPA.create_network_spinner());
-
- that.remove_button = IPA.action_button({
- name: 'remove',
- label: IPA.messages.buttons.remove,
- icon: 'remove-icon',
- click: function() {
- if (that.remove_button.hasClass('input_link_disabled')) return false;
- that.remove();
- return false;
- }
- }).appendTo(that.controls);
-
- that.add_button = IPA.action_button({
- name: 'add',
- label: IPA.messages.buttons.add,
- icon: 'add-icon',
- click: function() {
- that.add();
- return false;
- }
- }).appendTo(that.controls);
- };
-
- that.create_content = function(container) {
-
- that.table.create(container);
- that.table.setup(container);
- };
-
- that.setup = function(container) {
-
- that.facet_setup(container);
-
- //commented out until data is searchable
- //control_span.append('Data');
- //control_span.append($('<input />',{
- // type: "text",
- // id: 'dns-record-data-filter',
- // name: 'search-' + obj_name + '-filter'
- //}));
- };
-
- that.show = function() {
- that.facet_show();
+ ]
+ }).
+ build();
+};
- that.record = IPA.nav.get_state(that.entity_name+'-record');
- that.pkey = IPA.nav.get_state(that.entity_name+'-pkey');
- that.header.set_pkey(that.pkey);
+IPA.dnsrecord_host_link_widget = function(spec){
+ var that = IPA.entity_link_widget(spec);
+ that.other_pkeys = function(){
+ var entity = IPA.get_entity(that.entity_name);
+ var pkey = entity.get_primary_key();
+ return [pkey[0]+'.'+pkey[1]];
};
+ return that;
+};
-
- that.get_records = function(result) {
- var idnsname;
- if (result.idnsname) {
- idnsname = result.idnsname[0];
- } else {
- idnsname = result.dn.split(',')[0].split('=')[1];
+IPA.dns_record_types = function(){
+ var attrs = IPA.metadata.objects.dnsrecord.default_attributes;
+ var record_types = [];
+ for (var i =0; i < attrs.length; i+=1){
+ var attr = attrs[i];
+ var index = attr.search('record$');
+ if (index > -1){
+ var rec_type = {
+ label: attr.substring(0,index).toUpperCase(),
+ value: attr
+ };
+ record_types.push(rec_type);
}
+ }
+ return record_types;
+};
- var records = [];
- for (var i=0; i<record_types.length; i++){
- var type = record_types[i];
- var data = result[type+'record'] || [];
- for (var j =0 ; j < data.length; j+=1){
- var record = {
- idnsname: idnsname,
- type : type,
- data : data[j]
- };
- records.unshift(record);
- }
- }
+IPA.dnsrecord_type_widget = function (spec){
- return records;
- };
+ spec.options = IPA.dns_record_types();
+ var that = IPA.select_widget(spec);
+ return that;
+};
+IPA.force_dnszone_add_checkbox_widget = function(spec) {
+ var param_info = IPA.get_method_option('dnszone_add', 'force');
+ spec.name = 'force';
+ spec.label = param_info.label;
+ spec.tooltip = param_info.doc;
+ spec.undo = false;
+ return IPA.checkbox_widget(spec);
+};
- that.refresh = function() {
- function on_success(data, text_status, xhr) {
+IPA.dnsrecord_get_delete_values = function(){
- that.table.empty();
+ var records = {};
+ var value;
+ var record_type;
+ $('input[name="select"]:checked', this.table.tbody).each(function() {
- var result = data.result.result;
- for (var i = 0; i<result.length; i++) {
- var records = that.get_records(result[i]);
+ $('span',$(this).parent().parent()).each(function(){
+ var name = this.attributes['name'].value;
- for (var j =0; j < records.length; j +=1){
- var record = records[j];
- that.table.add_record(record);
+ if (name === 'idnsname'){
+ value = records[$(this).text()];
+ if (!value){
+ value = {pkey:$(this).text()};
+ records[$(this).text()] = value;
+ }
+ }else if (name === 'type'){
+ record_type = $(this).text();
+ }else if (name === 'data'){
+ if (!value[record_type]){
+ value[record_type] = $(this).text();
+ }else{
+ value[record_type] += "," + $(this).text();
}
}
+ });
+ });
- var summary = $('span[name=summary]', that.table.tfoot);
- if (data.result.truncated) {
- var message = IPA.messages.search.truncated;
- message = message.replace('${counter}', data.result.count);
- summary.text(message);
- } else {
- summary.text(data.result.summary);
- }
-
- that.filter.focus();
- that.select_changed();
- }
-
- function on_error(xhr, text_status, error_thrown) {
- var summary = $('span[name=summary]', that.table.tfoot).empty();
- summary.append(error_thrown.name+': '+error_thrown.message);
- }
-
- var options = {};
-
- var filter = that.filter.val();
-/*
- if (filter){
- options.idnsname = filter;
- }
-
- var type_filter = that.container.find("#dns-record-type-filter").val();
- if (type_filter){
- options.type = type_filter;
- }
-
- var data_filter = that.container.find("#dns-record-data-filter").val();
- if (data_filter){
- options.data = data_filter;
- }
-*/
- var args = [IPA.nav.get_state(that.entity_name+'-pkey')];
-
- if (filter) {
- args.push(filter);
- }
-
- IPA.command({
- entity: 'dnsrecord',
- method: 'find',
- args: args,
- options: options,
- on_success: on_success,
- on_error: on_error
- }).execute();
- };
+ var value_array = [];
+ for (var key in records){
+ value_array.push(records[key]);
+ }
- return that;
+ return value_array;
};
diff --git a/install/ui/entity.js b/install/ui/entity.js
index 82edb7bbe..ec0317897 100644
--- a/install/ui/entity.js
+++ b/install/ui/entity.js
@@ -594,7 +594,7 @@ IPA.entity = function (spec) {
return pkey;
};
- /*gets the primary key for trhe current entity out of the URL parameters */
+ /*gets the primary key for the current entity out of the URL parameters */
that.get_primary_key = function() {
var pkey = that.get_primary_key_prefix();
var current_entity = that;
diff --git a/install/ui/host.js b/install/ui/host.js
index 6b5e3606e..fe9eabf0b 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -39,7 +39,10 @@ IPA.entity_factories.host = function () {
{
name:'details',
fields: [
- 'fqdn',
+ { factory: IPA.host_dnsrecord_entity_link_widget,
+ name: 'fqdn',
+ other_entity:'dnsrecord'
+ },
'krbprincipalname',
{
factory: IPA.text_widget,
@@ -124,6 +127,21 @@ IPA.entity_factories.host = function () {
};
+IPA.host_dnsrecord_entity_link_widget = function(spec){
+ var that = IPA.entity_link_widget(spec);
+
+ that.other_pkeys = function(){
+ var entity = IPA.get_entity(that.entity_name);
+ var pkey = entity.get_primary_key()[0];
+ var first_dot = pkey.search(/\./);
+ var pkeys = [];
+ pkeys[1] = pkey.substring(0,first_dot);
+ pkeys[0] = pkey.substring(first_dot+1);
+ return pkeys;
+ };
+ return that;
+};
+
/* Take an LDAP format date in UTC and format it */
IPA.utc_date_column_format = function(value){
if (!value) {
diff --git a/install/ui/navigation.js b/install/ui/navigation.js
index 9bcb20f05..25c519dce 100644
--- a/install/ui/navigation.js
+++ b/install/ui/navigation.js
@@ -172,6 +172,26 @@ IPA.navigation = function(spec) {
that.push_state(state);
};
+ /*like show page, but works for nested entities */
+ that.show_entity_page = function(entity, facet_name, pkeys) {
+ var state = that.get_path_state(entity.name);
+
+ if (facet_name) {
+ state[entity.name + '-facet'] = facet_name;
+ }
+
+ if (pkeys) {
+ var current_entity = entity;
+ while (current_entity){
+ state[current_entity.name + '-pkey'] = pkeys.pop();
+ current_entity = current_entity.containing_entity;
+ }
+ }
+
+ that.push_state(state);
+ };
+
+
that.create = function() {
var container = $('<div/>', {
diff --git a/install/ui/policy.js b/install/ui/policy.js
index cd0e499e1..46582f468 100644
--- a/install/ui/policy.js
+++ b/install/ui/policy.js
@@ -37,8 +37,7 @@ IPA.entity_factories.pwpolicy = function() {
{
factory: IPA.entity_link_widget,
name: 'cn',
- entity: 'group',
- no_link_value: 'global_policy'
+ other_entity: 'group'
},
'krbmaxpwdlife','krbminpwdlife','krbpwdhistorylength',
'krbpwdmindiffchars','krbpwdminlength']
diff --git a/install/ui/search.js b/install/ui/search.js
index b5f71e0d5..91f3d0b23 100644
--- a/install/ui/search.js
+++ b/install/ui/search.js
@@ -237,7 +237,11 @@ IPA.search_facet = function(spec) {
if (value instanceof Object){
for (var key in value){
if (value.hasOwnProperty(key)){
- command.set_option(key, value[key]);
+ if (key === 'pkey'){
+ command.add_arg(value[key]);
+ }else{
+ command.set_option(key, value[key]);
+ }
}
}
}else{
@@ -261,7 +265,7 @@ IPA.search_facet = function(spec) {
IPA.nav.push_state(state);
};
- that.load = function(result) {
+ function load(result) {
that.table.empty();
@@ -269,7 +273,9 @@ IPA.search_facet = function(spec) {
var record = that.table.get_record(result[i], 0);
that.table.add_record(record);
}
- };
+ }
+
+ that.load = spec.load || load;
that.refresh = function() {
that.search_refresh(that.entity);
diff --git a/install/ui/test/data/dnsrecord_find.json b/install/ui/test/data/dnsrecord_find.json
index fa103d109..87160e55e 100644
--- a/install/ui/test/data/dnsrecord_find.json
+++ b/install/ui/test/data/dnsrecord_find.json
@@ -2,7 +2,7 @@
"error": null,
"id": null,
"result": {
- "count": 11,
+ "count": 12,
"result": [
{
"dn": "idnsname=ayoung.boston.devel.redhat.com,cn=dns,dc=server15,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
@@ -96,20 +96,41 @@
},
{
"aaaarecord": [
- "00::11",
- "00::112"
- ],
- "arecord": [
- "192.168.122.28",
- "1.2.3.4"
+ "fec0::5054:ff:feb5:5a47"
],
"dn": "idnsname=server15,idnsname=ayoung.boston.devel.redhat.com,cn=dns,dc=server15,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"idnsname": [
"server15"
]
+ },
+ {
+ "aaaarecord": [
+ "feed:babe:beef:cafe::0001",
+ "feed:babe:beef:cafe::0002",
+ "feed:babe:beef:cafe::0004"
+ ],
+ "arecord": [
+ "3.4.5.6",
+ "1.3.5.7",
+ "10.10.2.1"
+ ],
+ "dn": "idnsname=testrec,idnsname=ayoung.boston.devel.redhat.com,cn=dns,dc=server15,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
+ "idnsname": [
+ "testrec"
+ ],
+ "keyrecord": [
+ "key"
+ ],
+ "srvrecord": [
+ "1 1 80 server15"
+ ],
+ "txtrecord": [
+ "A TExt Record",
+ "Another Text Record"
+ ]
}
],
"summary": null,
"truncated": false
}
-}
+} \ No newline at end of file
diff --git a/install/ui/test/data/dnsrecord_show.json b/install/ui/test/data/dnsrecord_show.json
new file mode 100644
index 000000000..e2a412546
--- /dev/null
+++ b/install/ui/test/data/dnsrecord_show.json
@@ -0,0 +1,73 @@
+{
+ "error": null,
+ "id": null,
+ "result": {
+ "result": {
+ "aaaarecord": [
+ "feed:babe:beef:cafe::0001",
+ "feed:babe:beef:cafe::0002",
+ "feed:babe:beef:cafe::0004"
+ ],
+ "arecord": [
+ "3.4.5.6",
+ "1.3.5.7",
+ "10.10.2.1"
+ ],
+ "attributelevelrights": {
+ "a6record": "rscwo",
+ "aaaarecord": "rscwo",
+ "aci": "rscwo",
+ "afsdbrecord": "rscwo",
+ "arecord": "rscwo",
+ "certrecord": "rscwo",
+ "cn": "rscwo",
+ "cnamerecord": "rscwo",
+ "dnamerecord": "rscwo",
+ "dnsclass": "rscwo",
+ "dnsttl": "rscwo",
+ "dsrecord": "rscwo",
+ "hinforecord": "rscwo",
+ "idnsallowdynupdate": "rscwo",
+ "idnsname": "rscwo",
+ "keyrecord": "rscwo",
+ "kxrecord": "rscwo",
+ "locrecord": "rscwo",
+ "mdrecord": "rscwo",
+ "minforecord": "rscwo",
+ "mxrecord": "rscwo",
+ "naptrrecord": "rscwo",
+ "nsaccountlock": "rscwo",
+ "nsecrecord": "rscwo",
+ "nsrecord": "rscwo",
+ "nxtrecord": "rscwo",
+ "objectclass": "rscwo",
+ "ptrrecord": "rscwo",
+ "rrsigrecord": "rscwo",
+ "sigrecord": "rscwo",
+ "srvrecord": "rscwo",
+ "sshfprecord": "rscwo",
+ "txtrecord": "rscwo"
+ },
+ "dn": "idnsname=testrec,idnsname=ayoung.boston.devel.redhat.com,cn=dns,dc=server15,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
+ "idnsname": [
+ "testrec"
+ ],
+ "keyrecord": [
+ "key"
+ ],
+ "objectclass": [
+ "top",
+ "idnsrecord"
+ ],
+ "srvrecord": [
+ "1 1 80 server15"
+ ],
+ "txtrecord": [
+ "A Text Record",
+ "Another Text Record"
+ ]
+ },
+ "summary": null,
+ "value": "testrec"
+ }
+} \ No newline at end of file
diff --git a/install/ui/test/widget_tests.js b/install/ui/test/widget_tests.js
index f323f9697..1abac1ca0 100644
--- a/install/ui/test/widget_tests.js
+++ b/install/ui/test/widget_tests.js
@@ -275,6 +275,41 @@ test("IPA.entity_select_widget" ,function(){
});
+test("IPA.entity_link_widget" ,function(){
+ var widget = IPA.entity_link_widget({
+ name: 'gidnumber',
+ other_entity:'group',
+ });
+ base_widget_test(widget,'user','test_value');
+
+ var mock_entity = {
+ get_primary_key: function(){
+ return "";
+ }
+ };
+
+ mock_record = {'uid':'kfrog','gidnumber':'123456'};
+
+ widget.entity = mock_entity;
+ widget.create(widget_container);
+
+ var nonlink = widget_container.find('label');
+ var link = widget_container.find('a');
+
+ ok(nonlink.length > 1);
+ ok(link.length > 1);
+
+ widget.load(mock_record);
+
+ link = widget_container.find('a[text=123456]');
+
+ same(link.length, 1,'link is populated');
+ same(link.css('display'), 'inline','link is displayed');
+ same(widget.nonlink.css('display'), 'none','text is not displayed');
+
+});
+
+
test("IPA.radio_widget" ,function(){
diff --git a/install/ui/user.js b/install/ui/user.js
index fb43916f1..07fe7fbd4 100644
--- a/install/ui/user.js
+++ b/install/ui/user.js
@@ -203,8 +203,9 @@ IPA.user_status_widget = function(spec) {
var locked_field = that.record[lock_field];
var locked = false;
- if (typeof locked_field === 'array') locked_field = locked_field[0];
-
+ if (locked_field instanceof Array) {
+ locked_field = locked_field[0];
+ }
if (typeof locked_field === 'boolean') {
locked = locked_field;
} else {
diff --git a/install/ui/webui.js b/install/ui/webui.js
index 06cfa1d6e..5e0063e34 100644
--- a/install/ui/webui.js
+++ b/install/ui/webui.js
@@ -42,7 +42,13 @@ IPA.admin_navigation = function(spec) {
{entity: 'service'}
]},
{name: 'policy', label: IPA.messages.tabs.policy, children: [
- {entity: 'dnszone', label: IPA.messages.tabs.dns},
+ {name:'dns',
+ label: IPA.messages.tabs.dns,
+ children:[
+ {entity: 'dnszone', hidden:true},
+ {entity: 'dnsrecord', hidden:true}
+ ]
+ },
{name: 'hbac', label: IPA.messages.tabs.hbac, children: [
{entity: 'hbacrule'},
{entity: 'hbacsvc'},
diff --git a/install/ui/widget.js b/install/ui/widget.js
index 795fdaf60..90ebaba1f 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -162,8 +162,10 @@ IPA.widget = function(spec) {
that.init = function() {
if (that.entity_name) {
that.entity = IPA.get_entity(that.entity_name);
- that.param_info = IPA.get_entity_param(that.entity_name, that.name);
-
+ if (!that.param_info){
+ that.param_info =
+ IPA.get_entity_param(that.entity_name, that.name);
+ }
if (that.param_info) {
if (that.label === undefined) {
@@ -1750,10 +1752,12 @@ IPA.entity_select_widget = function(spec) {
IPA.entity_link_widget = function(spec) {
var that = IPA.widget(spec);
- var no_link_value = spec.no_link_value || null;
- var should_link = true;
- var other_pkey = null;
- var other_entity = spec.entity;
+ var other_entity = spec.other_entity;
+
+ function other_pkeys (){
+ return that.entity.get_primary_key();
+ }
+ that.other_pkeys = spec.other_pkeys || other_pkeys;
that.super_create = that.create;
that.create = function(container) {
@@ -1764,42 +1768,53 @@ IPA.entity_link_widget = function(spec) {
title: '',
html: '',
click: function() {
- if (should_link){
- IPA.nav.show_page(other_entity, 'default', other_pkey);
- }
+ IPA.nav.show_entity_page(
+ IPA.get_entity(other_entity),
+ 'default',
+ that.other_pkeys());
return false;
}
}).appendTo(container);
- that.label = $('<label/>').
+ that.nonlink = $('<label/>').
appendTo(container);
};
- that.should_link = function(){
- return (other_pkey !== no_link_value);
- };
- that.reset = function(record) {
- other_pkey = null;
+ that.super_load = that.load;
+
+ that.load = function (record){
+ that.super_load(record);
if (that.values || that.values.length > 0){
- other_pkey = that.values[0];
- var should_link = that.should_link();
- if (should_link){
- that.link.html(other_pkey);
- that.link.css('display','inline');
- that.label.css('display','none');
- }else{
- that.label.html(other_pkey);
- that.link.css('display','none');
- that.label.css('display','inline');
- }
+ that.nonlink.html(that.values[0]);
+ that.link.html(that.values[0]);
+ that.link.css('display','none');
+ that.nonlink.css('display','inline');
}else{
- should_link = false;
that.link.html('');
- that.label.html('');
+ that.nonlink.html('');
that.link.css('display','none');
- that.label.css('display','none');
+ that.nonlink.css('display','none');
+ }
+
+ function find_success(result) {
+ if (result.result){
+ that.link.css('display','inline');
+ that.nonlink.css('display','none');
+ }
+ }
+ function find_error(err){
}
+ IPA.command({
+ entity: other_entity,
+ method: 'show',
+ args:that.other_pkeys(),
+ options:{},
+ retry:false,
+ on_success:find_success,
+ on_error:find_error
+ }).execute();
};
+
return that;
}; \ No newline at end of file