Hi, Please review the attached patch. This should fix this bug:
https://fedorahosted.org/freeipa/ticket/462 The user details facet has been modified such that when the account is activated/deactivated the page will be reloaded. Some methods in the framework have been changed: - The ipa_widget.clear() has been removed because it can be replaced by existing reset(). - The ipa_widget.set_values() has been renamed into update(). Thanks! -- Endi S. Dewata
From 424bc5785731a2862bbd8bd3dfcd751769d2c07f Mon Sep 17 00:00:00 2001 From: Endi S. Dewata <edew...@redhat.com> Date: Thu, 9 Dec 2010 14:20:40 -0600 Subject: [PATCH] Account activation adjustment The user details facet has been modified such that when the account is activated/deactivated the page will be reloaded. Some methods in the framework have been changed: - The ipa_widget.clear() has been removed because it can be replaced by existing reset(). - The ipa_widget.set_values() has been renamed into update(). --- install/static/add.js | 2 +- install/static/associate.js | 2 +- install/static/details.js | 34 +++++--- install/static/hbac.js | 16 ++-- install/static/test/details_tests.js | 4 +- install/static/user.js | 136 +++++++++++++++++++--------------- install/static/widget.js | 55 +++++--------- 7 files changed, 128 insertions(+), 121 deletions(-) diff --git a/install/static/add.js b/install/static/add.js index f2eebb8ac2992a5332f6aa929265b5c00898fb69..0048f4b105a2dcc38526a70a28e409b78c750aca 100644 --- a/install/static/add.js +++ b/install/static/add.js @@ -57,7 +57,7 @@ function ipa_add_dialog(spec) { var facet = entity.get_facet('search'); var table = facet.table; table.refresh(); - that.clear(); + that.reset(); } ); }); diff --git a/install/static/associate.js b/install/static/associate.js index 540b1a80f7ee36cbf647ecfdab83be2ad457a5b9..1e6d6b908116aeca75aff01e4922b27ee7e1048b 100644 --- a/install/static/associate.js +++ b/install/static/associate.js @@ -364,7 +364,7 @@ function ipa_association_table_widget(spec) { that.reset(); }; - that.set_values = function(values) { + that.update = function() { that.empty(); diff --git a/install/static/details.js b/install/static/details.js index fcf04ffd1041ec5074e57e3f17c9076b5cd1a9c6..853635b13a67511530c05f2dd16b32786da27f68 100644 --- a/install/static/details.js +++ b/install/static/details.js @@ -40,13 +40,13 @@ function ipa_details_field(spec) { that.load = spec.load || load; that.save = spec.save || save; - function load(result) { - that.record = result; - that.values = result[that.name]; + function load(record) { + that.record = record; + that.values = record[that.name]; that.reset(); } - that.set_values = function(values) { + that.update = function() { if (!that.record) return; @@ -332,20 +332,28 @@ function ipa_details_list_section(spec){ } }; - // This is to allow declarative style programming for details - function input(spec){ - that.create_field(spec); - return that; - } - - that.input = input; - return that; } // shorthand notation used for declarative definitions of details pages function ipa_stanza(spec) { - return ipa_details_list_section(spec); + + spec = spec || {}; + + var that = ipa_details_list_section(spec); + + // This is to allow declarative style programming for details + that.input = function(spec) { + that.create_field(spec); + return that; + }; + + that.custom_input = function(input) { + that.add_field(input); + return that; + }; + + return that; } function ipa_details_facet(spec) { diff --git a/install/static/hbac.js b/install/static/hbac.js index 213dd3e4804e55de26232a19ad3c2acc7f89ae94..d0188fa5a7d00593441e61135798f8687462b552 100755 --- a/install/static/hbac.js +++ b/install/static/hbac.js @@ -806,25 +806,25 @@ function ipa_hbac_accesstime_widget(spec) { } }; - that.load = function(result) { + that.load = function(record) { - that.values = result[that.name] || []; + that.values = record[that.name] || []; that.reset(); }; - that.set_values = function(values) { + that.update = function() { - that.set_radio_value(that.container, values && values.length ? '' : 'all'); + that.set_category(that.container, that.values && that.values.length ? '' : 'all'); that.table.tbody.empty(); - for (var i=0; values && i<values.length; i++) { + for (var i=0; that.values && i<that.values.length; i++) { var record = {}; - record[that.name] = values[i]; + record[that.name] = that.values[i]; that.table.add_record(record); } }; - that.set_radio_value = function(container, value) { + that.set_category = function(container, value) { $('input[name="'+that.name+'"][value="'+value+'"]', that.container).get(0).checked = true; }; @@ -903,7 +903,7 @@ function ipa_hbac_accesstime_widget(spec) { dialog.add_button('Add', function() { add( - function() { dialog.clear(); } + function() { dialog.reset(); } ); }); diff --git a/install/static/test/details_tests.js b/install/static/test/details_tests.js index 3dee5357f7e48a77bd1ed065a48fece33ff7ea11..141b51238cb027893e6b72e8578c21594a8131dd 100644 --- a/install/static/test/details_tests.js +++ b/install/static/test/details_tests.js @@ -34,7 +34,7 @@ test("Testing ipa_details_section.create().", function() { } ); - var section = ipa_details_list_section({name:'IDIDID', label:'NAMENAMENAME'}). + var section = ipa_stanza({name:'IDIDID', label:'NAMENAMENAME'}). input({name:'cn'}). input({name:'description'}). input({name:'number'}); @@ -270,7 +270,7 @@ test("Testing _ipa_create_text_input() read only .", function(){ test("Testing ipa_details_section_setup again()",function(){ - var section = ipa_details_list_section({name: 'IDIDID', label: 'NAMENAMENAME'}). + var section = ipa_stanza({name: 'IDIDID', label: 'NAMENAMENAME'}). input({name:'cn', label:'Entity Name'}). input({name:'description', label:'Description'}). input({name:'number', label:'Entity ID'}); diff --git a/install/static/user.js b/install/static/user.js index 3e1174ca61003447403a360c0b972ea40dec1de4..249dcd6a14211d12cce808493d36fbdd30af5902 100644 --- a/install/static/user.js +++ b/install/static/user.js @@ -21,23 +21,36 @@ /* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */ function ipa_user(){ + var that = ipa_entity({ name: 'user' }); + that.init = function() { + + that.create_association({ + 'name': 'group', + 'associator': 'serial' + }); + + that.create_association({ + 'name': 'netgroup', + 'associator': 'serial' + }); + var search_facet = ipa_search_facet({ 'name': 'search', 'label': 'Search', entity_name: that.name }); + that.add_facet(search_facet); + search_facet.create_column({name:'cn'}); search_facet.create_column({name:'uid'}); search_facet.create_column({name:'uidnumber'}); search_facet.create_column({name:'mail'}); search_facet.create_column({name:'telephonenumber'}); search_facet.create_column({name:'title'}); - that.add_facet(search_facet); - that.add_facet(details_facet({name:'details',label:'Details'})); @@ -74,7 +87,7 @@ function ipa_user(){ input({name:'displayname'}). input({name:'initials'}), ipa_stanza({name:'account', label:'Account Details'}). - input({name:'nsaccountlock', load:user_status_load}). + custom_input(user_status_widget({name:'nsaccountlock'})). input({name:'uid'}). input({name:'userpassword', load: user_password_load}). input({name:'uidnumber'}). @@ -107,70 +120,73 @@ function ipa_user(){ } IPA.add_entity(ipa_user()); -ipa_entity_set_association_definition('user', { - 'group': { associator: 'serial' }, - 'netgroup': { associator: 'serial' } -}); - /* ATTRIBUTE CALLBACKS */ -function user_status_load(result) { - - var that = this; - - $('dd', that.container).remove(); - - var dd = ipa_create_first_dd(this.name); - dd.appendTo(that.container); - - var lock_field = 'nsaccountlock'; - - var locked = result[lock_field] && - result[lock_field][0].toLowerCase() === 'true'; - var title = "Active"; - var text = "Active: Click to Deactivate"; - if (locked) { - title = "Inactive"; - text = "Inactive: Click to Activate"; - } - - function on_lock_win(data, textStatus, xhr){ - alert(data.result.summary); - $.bbq.pushState('user-facet','search'); - return false; - } - - function on_lock_fail(data, textStatus, xhr){ - $("#userstatuslink").text = "Error changing account status"; - return false; - } - - var status_field = - $('<a/>', - { - id: 'userstatuslink', - title: title, - href: "jslink", - text: text, - click: function() { - var jobj = $(this); - var val = jobj.attr('title'); - var pkey = $.bbq.getState('user-pkey'); - var command = 'user_enable'; - if (val == 'Active') { - command = 'user_disable'; +function user_status_widget(spec) { + + spec = spec || {}; + + var that = ipa_widget(spec); + + that.update = function() { + + if (!that.record) return; + + $('dd', that.container).remove(); + + var dd = ipa_create_first_dd(this.name); + dd.appendTo(that.container); + + var lock_field = 'nsaccountlock'; + + var locked = that.record[lock_field] && + that.record[lock_field][0].toLowerCase() === 'true'; + var title = "Active"; + var text = "Active: Click to Deactivate"; + if (locked) { + title = "Inactive"; + text = "Inactive: Click to Activate"; + } + + function on_lock_win(data, textStatus, xhr){ + var entity = IPA.get_entity(that.entity_name); + var facet = entity.get_facet('details'); + facet.refresh(); + return false; + } + + function on_lock_fail(data, textStatus, xhr){ + $("#userstatuslink").text = "Error changing account status"; + return false; + } + + var status_field = + $('<a/>', + { + id: 'userstatuslink', + title: title, + href: "jslink", + text: text, + click: function() { + var jobj = $(this); + var val = jobj.attr('title'); + var pkey = $.bbq.getState('user-pkey'); + var command = 'user_enable'; + if (val == 'Active') { + command = 'user_disable'; + } + ipa_cmd(command, [pkey], {}, on_lock_win,on_lock_fail); + + return (false); } - ipa_cmd(command, [pkey], {}, on_lock_win,on_lock_fail); + }); + status_field.appendTo(dd); + } - return (false); - } - }); - status_field.appendTo(dd); + return that; } - - function resetpwd_on_click(){ function reset_password(new_password){ diff --git a/install/static/widget.js b/install/static/widget.js index 1bdb0d4ff52255fe6ee91317e91fbab8c11787fe..d205ea8339eaf1bd2df83b63d1a3a27ac5b1281f 100755 --- a/install/static/widget.js +++ b/install/static/widget.js @@ -42,7 +42,6 @@ function ipa_widget(spec) { that.setup = spec.setup || setup; that.load = spec.load || load; that.save = spec.save || save; - that.clear = spec.clear || clear; that.__defineGetter__("entity_name", function(){ return that._entity_name; @@ -67,15 +66,14 @@ function ipa_widget(spec) { } function load(record) { + that.record = record; + that.reset(); } function save() { return []; } - function clear() { - } - that.is_dirty = function() { var values = that.save(); @@ -90,12 +88,12 @@ function ipa_widget(spec) { return false; }; - that.set_values = function(values) { + that.update = function() { }; that.reset = function() { that.hide_undo(); - that.set_values(that.values); + that.update(); }; that.get_undo = function() { @@ -189,18 +187,15 @@ function ipa_text_widget(spec) { } }; - that.set_values = function(values) { + that.update = function() { + var value = that.values && that.values.length ? that.values[0] : ''; if (that.read_only) { - $('label[name="'+that.name+'"]', that.container).val(values[0]); + $('label[name="'+that.name+'"]', that.container).val(value); } else { - $('input[name="'+that.name+'"]', that.container).val(values[0]); + $('input[name="'+that.name+'"]', that.container).val(value); } }; - that.clear = function() { - that.set_values(['']); - }; - return that; } @@ -251,15 +246,11 @@ function ipa_checkbox_widget(spec) { return [value]; }; - that.set_values = function(values) { - var value = values && values.length ? values[0] : false; + that.update = function() { + var value = that.values && that.values.length ? that.values[0] : false; $('input[name="'+that.name+'"]', that.container).get(0).checked = value; }; - that.clear = function() { - $('input[name="'+that.name+'"]', that.container).get(0).checked = false; - }; - return that; } @@ -320,20 +311,15 @@ function ipa_radio_widget(spec) { return [input.val()]; }; - that.set_values = function(values) { - if (values.length) { - var input = $('input[name="'+that.name+'"][value="'+values[0]+'"]', that.container); + that.update = function() { + if (that.values && that.values.length) { + var input = $('input[name="'+that.name+'"][value="'+that.values[0]+'"]', that.container); if (input.length) { input.get(0).checked = true; - } else { - that.clear(); + return; } - } else { - that.clear(); } - }; - that.clear = function() { $('input[name="'+that.name+'"]', that.container).each(function() { var input = this; input.checked = false; @@ -397,12 +383,9 @@ function ipa_textarea_widget(spec) { return [value]; }; - that.set_values = function(values) { - $('textarea[name="'+that.name+'"]', that.container).val(values[0]); - }; - - that.clear = function() { - that.set_values(['']); + that.update = function() { + var value = that.values && that.values.length ? that.values[0] : ''; + $('textarea[name="'+that.name+'"]', that.container).val(value); }; return that; @@ -930,10 +913,10 @@ function ipa_dialog(spec) { that.container.remove(); }; - that.clear = function() { + that.reset = function() { for (var i=0; i<that.fields.length; i++) { var field = that.fields[i]; - field.clear(); + field.reset(); } }; -- 1.6.6.1
_______________________________________________ Freeipa-devel mailing list Freeipa-devel@redhat.com https://www.redhat.com/mailman/listinfo/freeipa-devel