diff --git a/install/static/associate.js b/install/static/associate.js index 7daa0cffb..2050e468e 100644 --- a/install/static/associate.js +++ b/install/static/associate.js @@ -25,14 +25,14 @@ /** *This associator is built for the case where each association requires a separate rpc */ -function SerialAssociator(form, manyObjPkeys, on_success) +function serial_associate(form, manyObjPkeys, on_success) { var associator = this; this.form = form; this.manyObjPkeys = manyObjPkeys; this.on_success = on_success; - this.associateNext = function(){ + this.associate_next = function(){ var form = this.form; //TODO assert pre-conditions var manyObjPkey = manyObjPkeys.shift(); @@ -46,7 +46,7 @@ function SerialAssociator(form, manyObjPkeys, on_success) if (data.error){ alert('error adding member: '+data.error.message); }else{ - associator.associateNext(); + associator.associate_next(); } }, function(xhr, text_status, error_thrown) { @@ -57,53 +57,117 @@ function SerialAssociator(form, manyObjPkeys, on_success) associator.on_success(); } } + this.associate_next(); } + +function serial_delete(delete_method, one_entity, one_entity_pkey, many_entity, + many_entity_pkeys, on_success){ + var that = {}; + that.one_entity = one_entity; + that.on_success = on_success; + that.many_entity_pkeys = many_entity_pkeys; + that.delete_next = function(){ + var many_entity_pkey = this.many_entity_pkeys.shift(); + if (many_entity_pkey){ + var options = {}; + options[one_entity] = one_entity_pkey; + var args = [many_entity_pkey]; + ipa_cmd( delete_method,args, options , + function(data, text_status, xhr) { + if (data.error){ + alert("error deleting member: " + +data.error.message); + }else{ + that.delete_next(); + } + }, + function(xhr, text_status, error_thrown) { + alert("associateFailure"); + }, + many_entity ); + }else{ + this.on_success(); + } + } + + that.delete_next(); +} + +function bulk_delete(delete_method, one_entity, one_entity_pkey, many_entity, + many_entity_pkeys, on_success){ + if (many_entity_pkeys.length){ + var options = {}; + options[one_entity] = one_entity_pkey; + var option = many_entity_pkeys.shift(); + while(many_entity_pkeys.length > 0) { + option += ',' + many_entity_pkeys.shift(); + } + + var options = { + 'all':true + }; + options[many_entity] = option; + var args = [one_entity_pkey]; + ipa_cmd( delete_method,args, options , + function(data, text_status, xhr) { + if (data.error){ + alert("error deleting member: " + +data.error.message); + }else{ + on_success(); + } + }, + function(xhr, text_status, error_thrown) { + alert("associateFailure"); + }, + one_entity ); + }else{ + on_success(); + } +} + + /** *This associator is for the common case where all the asociations can be sent in a single rpc */ -function BulkAssociator(form, manyObjPkeys, on_success) +function bulk_associate(form, manyObjPkeys, on_success) { var associator = this; this.form = form; this.manyObjPkeys = manyObjPkeys; this.on_success = on_success; - this.associateNext = function() { - var form = this.form; - var option = manyObjPkeys.shift(); - while(manyObjPkeys.length > 0) { - option += ',' + manyObjPkeys.shift(); - } - - var options = { - 'all':true - }; - options[form.manyObj] = option; - - var args = [form.pkey]; - - ipa_cmd( form.method,args, options , - function(data, text_status, xhr) { - if (data.error){ - alert('error adding member: '+data.error.message); - }else{ - associator.on_success(); - } - }, - function(xhr, text_status, error_thrown) { - alert('associateFailure'); - }, - form.oneObj ); + var form = this.form; + var option = manyObjPkeys.shift(); + while(manyObjPkeys.length > 0) { + option += ',' + manyObjPkeys.shift(); } + var options = { + 'all':true + }; + options[form.manyObj] = option; + var args = [form.pkey]; + ipa_cmd( form.method,args, options , + function(data, text_status, xhr) { + if (data.error){ + alert('error adding member: '+data.error.message); + }else{ + associator.on_success(); + } + }, + function(xhr, text_status, error_thrown) { + alert('associateFailure'); + }, + form.oneObj ); } /** * Create a form for a one to many association. * */ -function AssociationForm(oneObj, pkey, manyObj, on_success, associatorConstructor, method) +function AssociationForm(oneObj, pkey, manyObj, on_success, associator, method) { var form = this; @@ -121,10 +185,9 @@ function AssociationForm(oneObj, pkey, manyObj, on_success, associatorConstructo else this.method = 'add_member'; - if (associatorConstructor) - this.associatorConstructor = associatorConstructor; - else - this.associatorConstructor = BulkAssociator; + this.associator = associator; + + this.setup = function() { var label = IPA.metadata[form.manyObj].label; @@ -203,9 +266,7 @@ function AssociationForm(oneObj, pkey, manyObj, on_success, associatorConstructo $('#enrollments', form.dialog).children().each(function (i, selected) { manyObjPkeys.push(selected.value); }); - var associator = - new this.associatorConstructor(form, manyObjPkeys, on_success); - associator.associateNext(); + this.associator(form, manyObjPkeys, on_success); }; } @@ -271,7 +332,15 @@ function ipa_association_facet(spec) { ]; var config = that.get_config(that.other_entity); - that.associator = config ? config.associator : null; + + if ( config && config.associator === 'serial' ){ + that.associator = serial_associate; + that.deleter = serial_delete; + }else{ + that.associator = bulk_associate; + that.deleter = bulk_delete; + } + that.method = config ? config.method : null; that.setup_views(container); @@ -284,15 +353,21 @@ function ipa_association_facet(spec) { container.find('.search-filter').css('display', 'none'); container.find('.search-buttons').html(''); - $('', { - type: 'button', - value: 'enroll', - click: function() { - that.show_enrollment_dialog(); - } - }).appendTo(container.find('.search-buttons')); + var ctrls = container.find('.search-buttons'); - var header = $('').appendTo(container.find('.search-table thead:last')); + ipa_make_button( 'ui-icon-plus',IPA.messages.button.enroll). + click(function() { + that.show_enrollment_dialog(container); + }).appendTo(ctrls); + + ipa_make_button('ui-icon-trash',IPA.messages.button.delete). + click(function(){ + that.delete_on_click(container); + }).appendTo(ctrls); + + + + var header = container.find('.search-table thead:last').find("tr");; for (var i =0 ; i != that.columns.length ;i++){ $('',{ html: that.columns[i].title @@ -301,21 +376,91 @@ function ipa_association_facet(spec) { that.refresh(container); }; + that.delete_on_click = function(container) { + var delete_list = []; + var delete_dialog = $('
', { + title: IPA.messages.button.delete, + 'class': 'search-dialog-delete' + }); + + function delete_on_click() { + that.deleter('remove_member', that.entity_name, + that.pkey, that.other_entity, delete_list, + function(){ that.refresh(container)}); + delete_dialog.dialog('close'); + } + function delete_on_win() { + delete_dialog.dialog('close'); + } + function cancel_on_click() { + delete_dialog.dialog('close'); + } + var confirm_list = $('