diff options
Diffstat (limited to 'install/ui/dns.js')
-rw-r--r-- | install/ui/dns.js | 121 |
1 files changed, 71 insertions, 50 deletions
diff --git a/install/ui/dns.js b/install/ui/dns.js index d30cc312..65c331f5 100644 --- a/install/ui/dns.js +++ b/install/ui/dns.js @@ -105,7 +105,7 @@ IPA.dns.zone_entity = function(spec) { facet_group: 'dnsrecord', nested_entity : 'dnsrecord', name: 'records', - pagination: false, + deleter_dialog: IPA.dns.record_search_deleter_dialog, title: IPA.metadata.objects.dnszone.label_singular, label: IPA.metadata.objects.dnsrecord.label, columns: [ @@ -468,80 +468,101 @@ IPA.dns.record_search_facet = function(spec) { var that = IPA.nested_search_facet(spec); - that.load_all = function(data) { + that.get_records = function(pkeys, on_success, on_error) { + + var batch = IPA.batch_command({ + name: that.get_records_command_name(), + on_success: on_success, + on_error: on_error + }); + + var zone = IPA.nav.get_state('dnszone-pkey'); + + for (var i=0; i<pkeys.length; i++) { + var pkey = pkeys[i]; + + var command = IPA.command({ + entity: that.table.entity.name, + method: 'show', + args: [zone, pkey], + options: { all: true } + }); + + batch.add_command(command); + } + + batch.execute(); + }; + + + that.load_records = function(records) { + that.table.empty(); var types = IPA.dns_record_types(); - var result = data.result.result; - var records = []; + for (var i=0; i<records.length; i++) { - for (var i=0; i<result.length; i++) { - var record = result[i]; + var original = records[i]; + var record = { + idnsname: original.idnsname, + values: [] + }; for (var j=0; j<types.length; j++) { var type = types[j]; - if (!record[type.value]) continue; + if (!original[type.value]) continue; - var values = record[type.value]; + var values = original[type.value]; for (var k=0; k<values.length; k++) { - records.push({ - idnsname: record.idnsname, + record.values.push({ type: type.label, data: values[k] }); } } + + that.add_record(record); } + that.table.set_values(that.selected_values); + }; - that.load_records(records); + that.add_record = function(record) { - if (data.result.truncated) { - var message = IPA.messages.search.truncated; - message = message.replace('${counter}', data.result.count); - that.table.summary.text(message); - } else { - that.table.summary.text(data.result.summary); + for (var i=0; i<record.values.length; i++) { + + var value = record.values[i]; + + if (i === 0) { + value.idnsname = record.idnsname; + } + + var tr = that.table.add_record(value); + + if (i > 0) { + $('input[name="'+that.table.name+'"]', tr).remove(); + } } }; - that.get_selected_values = function() { + return that; +}; - var values = []; +IPA.dns.record_search_deleter_dialog = function(spec) { - var records = {}; - var value; - var record_type; - - $('input[name="idnsname"]:checked', that.table.tbody).each(function() { - $('div', $(this).parent().parent()).each(function() { - var div = $(this); - var name = div.attr('name'); - var text = div.text(); - - if (name === 'idnsname') { - value = records[text]; - if (!value) { - value = { pkey: text }; - records[text] = value; - } - } else if (name === 'type') { - record_type = text.toLowerCase()+'record'; - - } else if (name === 'data') { - if (!value[record_type]) { - value[record_type] = text; - } else { - value[record_type] += ',' + text; - } - } - }); - }); + spec = spec || {}; - for (var key in records) { - values.push(records[key]); + var that = IPA.search_deleter_dialog(spec); + + that.create_command = function() { + + var batch = that.search_deleter_dialog_create_command(); + + for (var i=0; i<batch.commands.length; i++) { + var command = batch.commands[i]; + command.set_option('del_all', true); } - return values; + return batch; }; return that; |