diff options
Diffstat (limited to 'install/ui/association.js')
-rw-r--r-- | install/ui/association.js | 275 |
1 files changed, 146 insertions, 129 deletions
diff --git a/install/ui/association.js b/install/ui/association.js index 9f315a0e1..83b7a3923 100644 --- a/install/ui/association.js +++ b/install/ui/association.js @@ -30,7 +30,7 @@ IPA.associator = function (spec) { var that = {}; - that.entity_name = spec.entity_name; + that.entity = spec.entity; that.pkey = spec.pkey; that.other_entity = spec.other_entity; @@ -72,7 +72,7 @@ IPA.serial_associator = function(spec) { var args = [value]; var options = {}; - options[that.entity_name] = that.pkey; + options[that.entity.name] = that.pkey; var command = IPA.command({ entity: that.other_entity, @@ -123,7 +123,7 @@ IPA.bulk_associator = function(spec) { options[that.other_entity] = value; var command = IPA.command({ - entity: that.entity_name, + entity: that.entity.name, method: that.method, args: args, options: options, @@ -145,42 +145,34 @@ IPA.bulk_associator = function(spec) { IPA.association_adder_dialog = function (spec) { spec = spec || {}; + /* + TODO: columns map in IPA.adder_dialog should be removed and add_column() + should be modified to add the column directly into the available_table + and selected_table. This way IPA.association_adder_dialog can call + create_column() from the initialization area, no need to modify the + parameters. + */ + default_columns(spec); var that = IPA.adder_dialog(spec); - that.entity_name = spec.entity_name; + that.entity = spec.entity; that.pkey = spec.pkey; that.other_entity = spec.other_entity; that.attribute_member = spec.attribute_member; - that.init = function() { - if (!that.columns.length) { - var pkey_name = IPA.metadata.objects[that.other_entity].primary_key; - that.create_column({ - name: pkey_name, - label: IPA.metadata.objects[that.other_entity].label, - primary_key: true, - width: '200px' - }); - } - - /* FIXME: event not firing? */ - $('input[name=hidememb]', that.container).click(that.search); - - that.adder_dialog_init(); - }; - that.search = function() { function on_success(data, text_status, xhr) { var results = data.result; that.clear_available_values(); - var pkey_attr = IPA.metadata.objects[that.entity_name].primary_key; + var pkey_attr = that.entity.metadata.primary_key; for (var i=0; i<results.count; i++){ var result = results.result[i]; - if (result[pkey_attr] != spec.pkey) + if (result[pkey_attr] != spec.pkey){ that.add_available_value(result); + } } } @@ -203,7 +195,7 @@ IPA.association_adder_dialog = function (spec) { var relationship = relationships[other_attribute_member]; if (relationship) { - var param_name = relationship[2] + that.entity_name; + var param_name = relationship[2] + that.entity.name; options[param_name] = that.pkey; } } @@ -217,8 +209,18 @@ IPA.association_adder_dialog = function (spec) { }).execute(); }; - that.association_adder_dialog_init = that.init; - that.association_adder_dialog_setup = that.setup; + /*initialization*/ + function default_columns(spec){ + if (!spec.columns) { + var pkey_name = IPA.metadata.objects[spec.other_entity].primary_key; + spec.columns = [{ + name: pkey_name, + label: IPA.metadata.objects[spec.other_entity].label, + primary_key: true, + width: '200px' + }]; + } + } return that; }; @@ -233,7 +235,7 @@ IPA.association_deleter_dialog = function (spec) { var that = IPA.deleter_dialog(spec); - that.entity_name = spec.entity_name; + that.entity = spec.entity; that.pkey = spec.pkey; that.other_entity = spec.other_entity; that.values = spec.values; @@ -247,13 +249,13 @@ IPA.association_deleter_dialog = function (spec) { that.execute = function() { var associator = that.associator({ - 'entity_name': that.entity_name, - 'pkey': that.pkey, - 'other_entity': that.other_entity, - 'values': that.values, - 'method': that.method, - 'on_success': that.on_success, - 'on_error': that.on_error + entity: that.entity, + pkey: that.pkey, + other_entity: that.other_entity, + values: that.values, + method: that.method, + on_success: that.on_success, + on_error: that.on_error }); associator.execute(); @@ -280,6 +282,7 @@ IPA.association_config = function (spec) { IPA.association_table_widget = function (spec) { spec = spec || {}; + spec.managed_entity_name = spec.other_entity; var that = IPA.table_widget(spec); @@ -301,24 +304,12 @@ IPA.association_table_widget = function (spec) { }; that.create_adder_column = function(spec) { + spec.entity_name = that.other_entity; var column = IPA.column(spec); that.add_adder_column(column); return column; }; - /*this is duplicated in the facet... should be unified*/ - var i; - if (spec.columns){ - for (i = 0; i < spec.columns.length; i+= 1){ - that.create_column(spec.columns[i]); - } - } - if (spec.adder_columns){ - for (i = 0; i < spec.adder_columns.length; i+= 1){ - that.create_adder_column(spec.adder_columns[i]); - } - } - that.create = function(container) { var column; @@ -326,16 +317,17 @@ IPA.association_table_widget = function (spec) { // create a column if none defined if (!that.columns.length) { that.create_column({ - 'name': that.name, - 'label': IPA.metadata.objects[that.other_entity].label, - 'primary_key': true + name: that.name, + label: IPA.metadata.objects[that.other_entity].label, + entity_name: that.other_entity, + primary_key: true }); } var columns = that.columns.values; for (var i=0; i<columns.length; i++) { column = columns[i]; - column.entity_name = that.other_entity; + column.entity = IPA.get_entity(that.other_entity); if (column.link) { column.link_handler = function(value) { @@ -351,8 +343,6 @@ IPA.association_table_widget = function (spec) { column.entity_name = that.other_entity; } - that.table_init(); - that.table_create(container); var button = IPA.action_button({ @@ -381,11 +371,11 @@ IPA.association_table_widget = function (spec) { return; } - var entity = IPA.get_entity(that.entity_name); - var facet = entity.get_facet(); + var facet = that.entity.get_facet(); if (facet.is_dirty()) { var dialog = IPA.dirty_dialog({ + entity:that.entity, facet: facet }); @@ -393,7 +383,6 @@ IPA.association_table_widget = function (spec) { that.show_add_dialog(); }; - dialog.init(); dialog.open(that.container); } else { @@ -406,11 +395,11 @@ IPA.association_table_widget = function (spec) { return; } - var entity = IPA.get_entity(that.entity_name); - var facet = entity.get_facet(); + var facet = that.entity.get_facet(); if (facet.is_dirty()) { var dialog = IPA.dirty_dialog({ + entity:that.entity, facet: facet }); @@ -418,7 +407,6 @@ IPA.association_table_widget = function (spec) { that.show_remove_dialog(); }; - dialog.init(); dialog.open(that.container); } else { @@ -445,7 +433,7 @@ IPA.association_table_widget = function (spec) { } var batch = IPA.batch_command({ - 'name': that.entity_name+'_'+that.name, + 'name': that.entity.name+'_'+that.name, 'on_success': on_success, 'on_error': on_error }); @@ -501,27 +489,29 @@ IPA.association_table_widget = function (spec) { }; that.create_add_dialog = function() { - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var label = IPA.metadata.objects[that.other_entity].label; var title = IPA.messages.association.add; - title = title.replace('${entity}', IPA.metadata.objects[that.entity_name].label_singular); + title = title.replace( + '${entity}', + that.entity.metadata.label_singular); title = title.replace('${primary_key}', pkey); title = title.replace('${other_entity}', label); return IPA.association_adder_dialog({ - 'title': title, - 'entity_name': that.entity_name, - 'pkey': pkey, - 'other_entity': that.other_entity, - 'attribute_member': that.attribute_member, + title: title, + entity: that.entity, + pkey: pkey, + other_entity: that.other_entity, + attribute_member: that.attribute_member, method: that.add_method }); }; that.show_add_dialog = function() { - var dialog = that.create_add_dialog(); + var dialog = that.create_add_dialog({entity:that.entity}); var columns = that.adder_columns.values; if (columns.length) { @@ -542,17 +532,15 @@ IPA.association_table_widget = function (spec) { ); }; - dialog.init(); - dialog.open(that.container); }; that.add = function(values, on_success, on_error) { - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var command = IPA.command({ - entity: that.entity_name, + entity: that.entity.name, method: that.add_method, args: [pkey], on_success: on_success, @@ -573,17 +561,19 @@ IPA.association_table_widget = function (spec) { return; } - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var label = IPA.metadata.objects[that.other_entity].label; var title = IPA.messages.association.remove; - title = title.replace('${entity}', IPA.metadata.objects[that.entity_name].label_singular); + title = title.replace( + '${entity}', + that.entity.metadata.label_singular); title = title.replace('${primary_key}', pkey); title = title.replace('${other_entity}', label); var dialog = IPA.association_deleter_dialog({ 'title': title, - 'entity_name': that.entity_name, + 'entity': that.entity, 'pkey': pkey, 'other_entity': that.other_entity, 'values': selected_values, @@ -604,17 +594,16 @@ IPA.association_table_widget = function (spec) { ); }; - dialog.init(); dialog.open(that.container); }; that.remove = function(values, on_success, on_error) { - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var command = IPA.command({ - entity: that.entity_name, + entity: that.entity.name, method: that.remove_method, args: [pkey], on_success: on_success, @@ -637,9 +626,9 @@ IPA.association_table_widget = function (spec) { summary.append(error_thrown.name+': '+error_thrown.message); } - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); IPA.command({ - entity: that.entity_name, + entity: that.entity.name, method: 'show', args: [pkey], options: {'all': true, 'rights': true}, @@ -648,8 +637,23 @@ IPA.association_table_widget = function (spec) { }).execute(); }; + /*initialization code*/ + /*this is duplicated in the facet... should be unified*/ + var i; + if (spec.columns){ + for (i = 0; i < spec.columns.length; i+= 1){ + spec.columns[i].entity_name = spec.columns[i].entity_name || + that.other_entity; + that.create_column(spec.columns[i]); + } + } + if (spec.adder_columns){ + for (i = 0; i < spec.adder_columns.length; i+= 1){ + that.create_adder_column(spec.adder_columns[i]); + } + } + // methods that should be invoked by subclasses - that.association_table_widget_init = that.init; that.association_table_widget_show_add_dialog = that.show_add_dialog; that.association_table_widget_show_remove_dialog = that.show_remove_dialog; @@ -661,8 +665,19 @@ IPA.association_facet = function (spec) { spec = spec || {}; + /* + Link parameter is used to turn off the links in selfservice mode. + Default it to true if not set so that facets that would not otherwise + link by default get links set. + + link must be set before the call to the base class, to affect the table. + */ + spec.link = spec.link === undefined ? true : spec.link; + + spec.managed_entity_name = spec.other_entity; var that = IPA.table_facet(spec); + that.entity = spec.entity; that.attribute_member = spec.attribute_member; that.indirect_attribute_member = spec.indirect_attribute_member; @@ -672,7 +687,6 @@ IPA.association_facet = function (spec) { that.facet_group = spec.facet_group; that.read_only = spec.read_only; - that.link = spec.link === undefined ? true : spec.link; that.associator = spec.associator || IPA.bulk_associator; that.add_method = spec.add_method || 'add_member'; @@ -691,40 +705,49 @@ IPA.association_facet = function (spec) { that.adder_columns.put(column.name, column); }; + /*TODO try to reuse the association_table_widget in association_facet*/ that.create_adder_column = function(spec) { var column; + var factory; if (spec instanceof Object) { - var factory = spec.factory || IPA.column; - column = factory(spec); + factory = spec.factory || IPA.column; } else { - column = IPA.column({ name: spec }); + factory = IPA.column; + spec = { name: spec }; } + spec.entity = that.entity; + column = factory(spec); that.add_adder_column(column); return column; }; - var adder_columns = spec.adder_columns || []; - for (var i=0; i<adder_columns.length; i++) { - that.create_adder_column(adder_columns[i]); - } + function setup_columns(){ + var column; + var i; - that.init = function() { + var pkey_name; + if (that.other_entity){ + pkey_name = IPA.metadata.objects[that.other_entity].primary_key; + } - that.facet_init(); + if (!that.columns.length){ + that.create_column({ + name: pkey_name, + primary_key: true, + link: spec.link + }); + } - var entity = IPA.get_entity(that.entity_name); - var column; - var i; - var label = IPA.metadata.objects[that.other_entity] ? IPA.metadata.objects[that.other_entity].label : that.other_entity; - var pkey_name = IPA.metadata.objects[that.other_entity].primary_key; + var label = IPA.metadata.objects[that.other_entity] ? + IPA.metadata.objects[that.other_entity].label : that.other_entity; that.table = IPA.table_widget({ - id: that.entity_name+'-'+that.other_entity, + id: that.entity.name+'-'+that.other_entity, 'class': 'content-table', name: pkey_name, label: label, - entity_name: that.entity_name, + entity: that.entity, other_entity: that.other_entity, page_length: that.page_length, scrollable: true, @@ -732,13 +755,6 @@ IPA.association_facet = function (spec) { }); var columns = that.columns.values; - if (!columns.length) { - that.create_column({ - name: pkey_name, - primary_key: true, - link: that.link - }); - } that.table.set_columns(columns); @@ -804,14 +820,13 @@ IPA.association_facet = function (spec) { that.refresh_table(); }; - that.table.init(); - }; + } that.create_header = function(container) { that.facet_create_header(container); - that.pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + that.pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var other_label = IPA.metadata.objects[that.other_entity].label; if (!that.read_only) { @@ -884,31 +899,31 @@ IPA.association_facet = function (spec) { }; that.create_content = function(container) { - that.table.create(container); - that.table.setup(container); }; that.show = function() { that.facet_show(); - that.pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + that.pkey = IPA.nav.get_state(that.entity.name+'-pkey'); that.header.set_pkey(that.pkey); }; that.show_add_dialog = function() { - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var label = IPA.metadata.objects[that.other_entity] ? IPA.metadata.objects[that.other_entity].label : that.other_entity; var title = IPA.messages.association.add; - title = title.replace('${entity}', IPA.metadata.objects[that.entity_name].label_singular); + title = title.replace( + '${entity}', + that.entity.metadata.label_singular); title = title.replace('${primary_key}', pkey); title = title.replace('${other_entity}', label); var dialog = IPA.association_adder_dialog({ 'title': title, - 'entity_name': that.entity_name, + 'entity': that.entity, 'pkey': pkey, 'other_entity': that.other_entity, 'attribute_member': that.attribute_member @@ -921,10 +936,10 @@ IPA.association_facet = function (spec) { dialog.execute = function() { - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var associator = that.associator({ - 'entity_name': that.entity_name, + 'entity': that.entity, 'pkey': pkey, 'other_entity': that.other_entity, 'values': dialog.get_selected_values(), @@ -942,8 +957,6 @@ IPA.association_facet = function (spec) { associator.execute(); }; - dialog.init(); - dialog.open(that.container); }; @@ -958,16 +971,18 @@ IPA.association_facet = function (spec) { return; } - var pkey = IPA.nav.get_state(that.entity_name+'-pkey'); + var pkey = IPA.nav.get_state(that.entity.name+'-pkey'); var title = IPA.messages.association.remove; - title = title.replace('${entity}', IPA.metadata.objects[that.entity_name].label_singular); + title = title.replace( + '${entity}', + that.entity.metadata.label_singular); title = title.replace('${primary_key}', pkey); title = title.replace('${other_entity}', label); var dialog = IPA.association_deleter_dialog({ title: title, - entity_name: that.entity_name, + entity: that.entity, pkey: pkey, other_entity: that.other_entity, values: values @@ -976,7 +991,7 @@ IPA.association_facet = function (spec) { dialog.execute = function() { var associator = that.associator({ - entity_name: that.entity_name, + entity: that.entity, pkey: pkey, other_entity: that.other_entity, values: values, @@ -994,8 +1009,6 @@ IPA.association_facet = function (spec) { associator.execute(); }; - dialog.init(); - dialog.open(that.container); }; @@ -1062,7 +1075,7 @@ IPA.association_facet = function (spec) { if (!length) return; var batch = IPA.batch_command({ - 'name': that.entity_name+'_'+that.get_attribute_name(), + 'name': that.entity.name+'_'+that.get_attribute_name(), 'on_success': on_success, 'on_error': on_error }); @@ -1111,10 +1124,10 @@ IPA.association_facet = function (spec) { if (that.remove_button) that.remove_button.css('display', 'none'); } - var pkey = IPA.get_entity(that.entity_name).get_primary_key(); + var pkey = IPA.get_entity(that.entity.name).get_primary_key(); var command = IPA.command({ - entity: that.entity_name, + entity: that.entity.name, method: 'show', args: pkey }); @@ -1128,7 +1141,11 @@ IPA.association_facet = function (spec) { command.execute(); }; - that.association_facet_init = that.init; - + /*initialization*/ + var adder_columns = spec.adder_columns || []; + for (var i=0; i<adder_columns.length; i++) { + that.create_adder_column(adder_columns[i]); + } + setup_columns(); return that; }; |