diff options
Diffstat (limited to 'install/ui')
-rw-r--r-- | install/ui/add.js | 5 | ||||
-rw-r--r-- | install/ui/details.js | 7 | ||||
-rw-r--r-- | install/ui/dns.js | 695 | ||||
-rw-r--r-- | install/ui/entity.js | 2 | ||||
-rw-r--r-- | install/ui/host.js | 20 | ||||
-rw-r--r-- | install/ui/navigation.js | 20 | ||||
-rw-r--r-- | install/ui/policy.js | 3 | ||||
-rw-r--r-- | install/ui/search.js | 12 | ||||
-rw-r--r-- | install/ui/test/data/dnsrecord_find.json | 37 | ||||
-rw-r--r-- | install/ui/test/data/dnsrecord_show.json | 73 | ||||
-rw-r--r-- | install/ui/test/widget_tests.js | 35 | ||||
-rw-r--r-- | install/ui/user.js | 5 | ||||
-rw-r--r-- | install/ui/webui.js | 8 | ||||
-rw-r--r-- | install/ui/widget.js | 73 |
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 |