[Freeipa-devel] [PATCH] fixes to edit protected checkbox

Kevin McCarthy kmccarth at redhat.com
Tue Sep 18 17:49:25 UTC 2007


This patch makes the edit protected checkbox sticky, and also implements
required field validation for protected fields - only when the box is
checked.

-Kevin

-------------- next part --------------
# HG changeset patch
# User Kevin McCarthy <kmccarth at redhat.com>
# Date 1190138093 25200
# Node ID 364d56d319c1f6ec629d00a7b53585a534ed3962
# Parent  a2db36c1fc6c85bc41ab0fab14aa0b3c0757012f
Fixes to the edit protected checkbox.
- Make checkbox sticky on round trips
- Make required fields validate when checkbox is checked.

diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/controllers.py
--- a/ipa-server/ipa-gui/ipagui/controllers.py	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/controllers.py	Tue Sep 18 10:54:53 2007 -0700
@@ -163,11 +163,10 @@ class Root(controllers.RootController):
                 new_user.setValue('nsAccountLock', 'true')
             else:
                 new_user.setValue('nsAccountLock', None)
-            if kw.get('userpassword'):
-                new_user.setValue('userpassword', kw.get('userpassword'))
-            if kw.get('uidnumber'):
+            if kw.get('editprotected') == 'true':
+                if kw.get('userpassword'):
+                    new_user.setValue('userpassword', kw.get('userpassword'))
                 new_user.setValue('uidnumber', str(kw.get('uidnumber')))
-            if kw.get('gidnumber'):
                 new_user.setValue('gidnumber', str(kw.get('gidnumber')))
 
             #
@@ -480,9 +479,11 @@ class Root(controllers.RootController):
             if new_group.description != kw.get('description'):
                 group_modified = True
                 new_group.setValue('description', kw.get('description'))
-            if kw.get('gidnumber'):
-                group_modified = True
-                new_group.setValue('gidnumber', str(kw.get('gidnumber')))
+            if kw.get('editprotected') == 'true':
+                new_gid = str(kw.get('gidnumber'))
+                if new_group.gidnumber != new_gid:
+                    group_modified = True
+                    new_group.setValue('gidnumber', new_gid)
 
             if group_modified:
                 rv = client.update_group(new_group)
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/forms/group.py
--- a/ipa-server/ipa-gui/ipagui/forms/group.py	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/forms/group.py	Tue Sep 18 10:54:53 2007 -0700
@@ -7,13 +7,14 @@ class GroupFields():
     description = widgets.TextField(name="description", label="Description")
 
     cn_hidden = widgets.HiddenField(name="cn")
+    editprotected_hidden = widgets.HiddenField(name="editprotected")
 
     group_orig = widgets.HiddenField(name="group_orig")
     member_data = widgets.HiddenField(name="member_data")
     uid_to_cn_json = widgets.HiddenField(name="uid_to_cn_json")
 
 class GroupNewValidator(validators.Schema):
-    cn = validators.PlainText(not_empty=True)
+    cn = validators.String(not_empty=True)
     description = validators.String(not_empty=False)
 
 
@@ -37,11 +38,15 @@ class GroupEditValidator(validators.Sche
     gidnumber = validators.Int(not_empty=False)
     description = validators.String(not_empty=False)
 
+    pre_validators = [
+      validators.RequireIfPresent(required='gidnumber', present='editprotected'),
+    ]
+
 class GroupEditForm(widgets.Form):
     params = ['members', 'group']
 
     fields = [GroupFields.gidnumber, GroupFields.description,
-              GroupFields.cn_hidden,
+              GroupFields.cn_hidden, GroupFields.editprotected_hidden,
               GroupFields.group_orig, GroupFields.member_data,
               GroupFields.uid_to_cn_json]
 
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/forms/user.py
--- a/ipa-server/ipa-gui/ipagui/forms/user.py	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/forms/user.py	Tue Sep 18 10:54:53 2007 -0700
@@ -21,6 +21,7 @@ class UserFields():
     uidnumber_hidden = widgets.HiddenField(name="uidnumber")
     gidnumber_hidden = widgets.HiddenField(name="gidnumber")
     krbPasswordExpiration_hidden = widgets.HiddenField(name="krbPasswordExpiration")
+    editprotected_hidden = widgets.HiddenField(name="editprotected")
 
     user_orig = widgets.HiddenField(name="user_orig")
 
@@ -70,6 +71,11 @@ class UserEditValidator(validators.Schem
     #  validators.PhoneNumber may be a bit too picky, requiring an area code
     # telephonenumber = validators.PlainText(not_empty=False)
 
+    pre_validators = [
+      validators.RequireIfPresent(required='uidnumber', present='editprotected'),
+      validators.RequireIfPresent(required='gidnumber', present='editprotected'),
+    ]
+
     chained_validators = [
       validators.FieldsMatch('userpassword', 'userpassword_confirm')
     ]
@@ -81,6 +87,7 @@ class UserEditForm(widgets.Form):
               UserFields.uid_hidden, UserFields.user_orig,
               UserFields.uidnumber, UserFields.gidnumber,
               UserFields.krbPasswordExpiration_hidden,
+              UserFields.editprotected_hidden,
               ]
 
     validator = UserEditValidator()
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/templates/groupedit.kid
--- a/ipa-server/ipa-gui/ipagui/templates/groupedit.kid	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/groupedit.kid	Tue Sep 18 10:54:53 2007 -0700
@@ -8,7 +8,7 @@
 <body>
   <div>
     <div style="float:right">
-      <input type="checkbox"
+      <input type="checkbox" id="toggleprotected_checkbox"
           onclick="toggleProtectedFields(this);">
         <span class="small">edit protected fields</span>
       </input>
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/templates/groupeditform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/groupeditform.kid	Tue Sep 18 10:54:53 2007 -0700
@@ -24,8 +24,10 @@
       var gidnumberField = $('form_gidnumber');
       if (checkbox.checked) {
         gidnumberField.disabled = false;
+        $('form_editprotected').value = 'true';
       } else {
         gidnumberField.disabled = true;
+        $('form_editprotected').value = '';
       }
     }
 
@@ -273,6 +275,11 @@
     if ($('form_uid_to_cn_json').value != "") {
       uid_to_cn_hash = new Hash($('form_uid_to_cn_json').value.evalJSON());
     }
+
+    if ($('form_editprotected').value != "") {
+      $('toggleprotected_checkbox').checked = true;
+      toggleProtectedFields($('toggleprotected_checkbox'));
+    }
   </script>
 
   <?python
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/templates/useredit.kid
--- a/ipa-server/ipa-gui/ipagui/templates/useredit.kid	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/useredit.kid	Tue Sep 18 10:54:53 2007 -0700
@@ -9,7 +9,7 @@
 
   <div>
     <div style="float:right">
-      <input type="checkbox"
+      <input type="checkbox" id="toggleprotected_checkbox"
           onclick="toggleProtectedFields(this);">
         <span class="small">edit protected fields</span>
       </input>
diff -r a2db36c1fc6c -r 364d56d319c1 ipa-server/ipa-gui/ipagui/templates/usereditform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/usereditform.kid	Mon Sep 17 15:24:11 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid	Tue Sep 18 10:54:53 2007 -0700
@@ -13,11 +13,13 @@
         passwordConfirmField.disabled = false;
         uidnumberField.disabled = false;
         gidnumberField.disabled = false;
+        $('form_editprotected').value = 'true';
       } else {
         passwordField.disabled = true;
         passwordConfirmField.disabled = true;
         uidnumberField.disabled = true;
         gidnumberField.disabled = true;
+        $('form_editprotected').value = '';
       }
     }
   </script>
@@ -228,4 +230,11 @@
     </table>
 
   </form>
+
+  <script type="text/javascript">
+    if ($('form_editprotected').value != "") {
+      $('toggleprotected_checkbox').checked = true;
+      toggleProtectedFields($('toggleprotected_checkbox'));
+    }
+  </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/20070918/925d8d76/attachment.bin>


More information about the Freeipa-devel mailing list