[Freeipa-devel] [PATCH] group refinements

Kevin McCarthy kmccarth at redhat.com
Mon Sep 17 22:34:57 UTC 2007


This patch continues the refinements to group editing:
- prevent double adds
- search indication while in progress
- filter exising entries from search results
- correct calculation of result counter after filtering

-Kevin

-------------- next part --------------
# HG changeset patch
# User Kevin McCarthy <kmccarth at redhat.com>
# Date 1190067851 25200
# Node ID a2db36c1fc6c85bc41ab0fab14aa0b3c0757012f
# Parent  9a39b5ad527aeaae93a0359bd1ca89ae5652bc3c
Prevent members from being added added twice.
Display search message while in progress.
Correctly calculate number of search results after filtering.

diff -r 9a39b5ad527a -r a2db36c1fc6c ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid	Mon Sep 17 11:46:48 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid	Mon Sep 17 15:24:11 2007 -0700
@@ -10,6 +10,15 @@
     // this is used for round-trip recontruction of the names.
     // the hidden fields only contain uids.  
     var uid_to_cn_hash = new Hash();
+
+    // used to filter search results.
+    // records uids already in the group
+    var member_hash = new Hash();
+
+    // used to prevent double adding
+    // records uid to be added
+    var added_hash = new Hash();
+
 
     function toggleProtectedFields(checkbox) {
       var gidnumberField = $('form_gidnumber');
@@ -30,6 +39,11 @@
     function adduser(uid, cn) {
       uid_to_cn_hash[uid] = cn;
 
+      if ((added_hash[uid] == 1) || (member_hash[uid] == 1)) {
+        return null;
+      }
+      added_hash[uid] = 1;
+
       var newdiv = document.createElement('div');
       newdiv.appendChild(document.createTextNode(
         cn.escapeHTML() + " (" + uid.escapeHTML() + ") "));
@@ -38,6 +52,7 @@
       undolink.setAttribute('href', '');
       undolink.setAttribute('onclick',
         'new Effect.Fade(Element.up(this), {afterFinish: removeElement});' +
+        'added_hash.remove("' + uid + '");' +
         'return false;');
       undolink.appendChild(document.createTextNode("undo"));
       newdiv.appendChild(undolink);
@@ -56,9 +71,11 @@
 
     function adduserHandler(element, uid, cn) {
       var newdiv = adduser(uid, cn)
-      new Effect.Fade(Element.up(element));
-      new Effect.Appear(newdiv);
-      /* Element.up(element).remove(); */
+      if (newdiv != null) {
+        new Effect.Fade(Element.up(element));
+        new Effect.Appear(newdiv);
+        /* Element.up(element).remove(); */
+      }
     }
 
     function removeuser(uid, cn) {
@@ -112,10 +129,12 @@
     }
 
     function doSearch() {
+      $('searchresults').update("Searching...");
       new Ajax.Updater('searchresults',
           '${searchurl}',
           {  asynchronous:true,
-             parameters: { uid: $('uid').value } });
+             parameters: { uid: $('uid').value },
+             evalScripts: true });
       return false;
     }
 
@@ -192,11 +211,14 @@
           member_name = "%s %s" % (member.get('givenname', ''),
                                    member.get('sn', ''))
           ?>
-          ${member_name}
+          ${member_name} (${member_uid})
           <a href="#" 
             onclick="removeuserHandler(this, '${member_uid}', '${member_name}');
                      return false;"
           >remove</a>
+          <script type="text/javascript">
+            member_hash["${member_uid}"] = 1;
+          </script>
         </div>
       </div>
 
@@ -267,7 +289,9 @@
     var uid = "${uidadd}";
     var cn = uid_to_cn_hash[uid];
     var newdiv = adduser(uid, cn);
-    newdiv.style.display = 'block';
+    if (newdiv != null) {
+      newdiv.style.display = 'block';
+    }
   </script>
 
   <script py:for="uiddel in uiddels">
diff -r 9a39b5ad527a -r a2db36c1fc6c ipa-server/ipa-gui/ipagui/templates/userlistajax.kid
--- a/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid	Mon Sep 17 11:46:48 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/userlistajax.kid	Mon Sep 17 15:24:11 2007 -0700
@@ -1,14 +1,33 @@
 <div xmlns:py="http://purl.org/kid/ns#">
+    <div id="search-results-count">
+    </div>
+    <script type="text/javascript">
+      search_string = "${uid}";
+      results_counter = 0;
+    </script>
     <div py:if='(users != None) and (len(users) > 0)'>
-        <div>${len(users)} results returned:</div>
-        <div py:for="user in users">
+        <div py:for="user in users" id="search-${user.uid}">
+          <script type="text/javascript">
+            if ((added_hash["${user.uid}"] == 1) ||
+                (member_hash["${user.uid}"] == 1)) {
+              $("search-${user.uid}").style.display = 'none';
+            } else {
+              results_counter = results_counter + 1;
+            }
+          </script>
           ${user.givenName} ${user.sn} (${user.uid})
           <a href="" 
             onclick="adduserHandler(this, '${user.uid}', '${user.cn}'); return false;"
           >add</a>
         </div>
     </div>
-    <div py:if='(users != None) and (len(users) == 0)'>
-        No results found for "${uid}"
-    </div>
+    <script type="text/javascript">
+      if (results_counter == 0) {
+        $('search-results-count').appendChild(document.createTextNode(
+          "No results found for " + search_string));
+      } else {
+        $('search-results-count').appendChild(document.createTextNode(
+          "" + results_counter + " results found:"));
+      }
+    </script>
 </div>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 2228 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20070917/8a129d1d/attachment.bin>


More information about the Freeipa-devel mailing list