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

Reply via email to