[Freeipa-devel] [PATCH] webgui custom fields

Kevin McCarthy kmccarth at redhat.com
Wed Oct 24 23:08:55 UTC 2007


This is the webgui part of custom fields.  It will take a little more
thought as to where to store the fields, etc.  But this is my
recommendation for how to implement them in the UI.

I have actually included a couple bogus fields, just so you can see it
in action.  Of course, rip those out when you get the real
infrastructure in.

-Kevin

-------------- next part --------------
# HG changeset patch
# User Kevin McCarthy <kmccarth at redhat.com>
# Date 1193267057 25200
# Node ID cde69f824a52e2fc3e1ec96b1b995d71aee2b1a1
# Parent  6ef60881c7b292bba8438b2f76e7159275ef2554
webgui side of custom fields.

diff -r 6ef60881c7b2 -r cde69f824a52 ipa-server/ipa-gui/ipagui/forms/user.py
--- a/ipa-server/ipa-gui/ipagui/forms/user.py	Wed Oct 24 15:04:17 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/forms/user.py	Wed Oct 24 16:04:17 2007 -0700
@@ -59,6 +59,8 @@ class UserFields():
     user_groups_data = widgets.HiddenField(name="user_groups_data")
     dn_to_info_json = widgets.HiddenField(name="dn_to_info_json")
 
+    custom_fields = []
+
 class UserNewValidator(validators.Schema):
     uid = validators.PlainText(not_empty=True)
     userpassword = validators.String(not_empty=False)
@@ -73,7 +75,7 @@ class UserNewValidator(validators.Schema
 
 
 class UserNewForm(widgets.Form):
-    params = ['user']
+    params = ['user', 'custom_fields']
 
     hidden_fields = [
       UserFields.dn_to_info_json,
@@ -82,6 +84,8 @@ class UserNewForm(widgets.Form):
       UserFields.secretary,
       UserFields.secretary_cn,
     ]
+
+    custom_fields = []
 
     validator = UserNewValidator()
 
@@ -112,7 +116,7 @@ class UserEditValidator(validators.Schem
     ]
 
 class UserEditForm(widgets.Form):
-    params = ['user']
+    params = ['user', 'custom_fields']
 
     hidden_fields = [
       UserFields.uid_hidden, UserFields.user_orig,
@@ -125,6 +129,8 @@ class UserEditForm(widgets.Form):
       UserFields.secretary,
       UserFields.secretary_cn,
     ]
+
+    custom_fields = []
 
     validator = UserEditValidator()
 
diff -r 6ef60881c7b2 -r cde69f824a52 ipa-server/ipa-gui/ipagui/subcontrollers/user.py
--- a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py	Wed Oct 24 15:04:17 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py	Wed Oct 24 16:04:17 2007 -0700
@@ -31,6 +31,36 @@ email_domain = ipa.config.config.default
 email_domain = ipa.config.config.default_realm.lower()
 
 class UserController(IPAController):
+
+    def __init__(self, *args, **kw):
+        super(UserController,self).__init__(*args, **kw)
+        self.load_custom_fields()
+
+    def load_custom_fields(self):
+        # client = self.get_ipaclient()
+        # schema = client.get_user_custom_schema()
+        schema = [
+          { 'label': 'See Also',
+            'field': 'seeAlso',
+            'required': 'true', } ,
+          { 'label': 'O O O',
+            'field': 'o',
+            'required': 'false', } ,
+        ]
+        for s in schema:
+            required=False
+            if (s['required'] == "true"):
+                required=True
+            field = widgets.TextField(name=s['field'],label=s['label'])
+            validator = validators.String(not_empty=required)
+
+            ipagui.forms.user.UserFields.custom_fields.append(field)
+            user_new_form.custom_fields.append(field)
+            user_edit_form.custom_fields.append(field)
+
+            user_new_form.validator.add_field(s['field'], validator)
+            user_edit_form.validator.add_field(s['field'], validator)
+
 
     @expose()
     def index(self):
@@ -108,6 +138,10 @@ class UserController(IPAController):
 
             if kw.get('nsAccountLock'):
                 new_user.setValue('nsAccountLock', 'true')
+
+            for custom_field in user_new_form.custom_fields:
+                new_user.setValue(custom_field.name,
+                                  kw.get(custom_field.name, ''))
 
             rv = client.add_user(new_user)
         except ipaerror.exception_for(ipaerror.LDAP_DUPLICATE):
@@ -322,12 +356,17 @@ class UserController(IPAController):
                 new_user.setValue('nsAccountLock', 'true')
             else:
                 new_user.setValue('nsAccountLock', None)
+
             if kw.get('editprotected') == 'true':
                 if kw.get('userpassword'):
                     password_change = True
                 new_user.setValue('uidnumber', str(kw.get('uidnumber')))
                 new_user.setValue('gidnumber', str(kw.get('gidnumber')))
                 new_user.setValue('homedirectory', str(kw.get('homedirectory')))
+
+            for custom_field in user_edit_form.custom_fields:
+                new_user.setValue(custom_field.name,
+                                  kw.get(custom_field.name, ''))
 
             rv = client.update_user(new_user)
             #
diff -r 6ef60881c7b2 -r cde69f824a52 ipa-server/ipa-gui/ipagui/templates/usereditform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/usereditform.kid	Wed Oct 24 15:04:17 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid	Wed Oct 24 16:04:17 2007 -0700
@@ -632,6 +632,23 @@ from ipagui.helpers import ipahelper
       </tr>
     </table>
 
+    <div py:if='len(custom_fields) > 0'>
+      <div class="formsection" >Custom Fields</div>
+      <table class="formtable" cellpadding="2" cellspacing="0" border="0">
+        <tr py:for='custom_field in custom_fields'>
+          <th>
+            <label class="fieldlabel" for="${custom_field.field_id}"
+              py:content="custom_field.label" />:
+          </th>
+          <td>
+            <span py:replace="custom_field.display(value_for(custom_field))" />
+            <span py:if="tg.errors.get(custom_field.name)" class="fielderror"
+                py:content="tg.errors.get(custom_field.name)" />
+          </td>
+        </tr>
+      </table>
+    </div>
+
 
     <div>
       <div class="formsection">Groups</div>
diff -r 6ef60881c7b2 -r cde69f824a52 ipa-server/ipa-gui/ipagui/templates/usernewform.kid
--- a/ipa-server/ipa-gui/ipagui/templates/usernewform.kid	Wed Oct 24 15:04:17 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/usernewform.kid	Wed Oct 24 16:04:17 2007 -0700
@@ -601,6 +601,23 @@ from ipagui.helpers import ipahelper
       </tr>
     </table>
 
+    <div py:if='len(custom_fields) > 0'>
+      <div class="formsection" >Custom Fields</div>
+      <table class="formtable" cellpadding="2" cellspacing="0" border="0">
+        <tr py:for='custom_field in custom_fields'>
+          <th>
+            <label class="fieldlabel" for="${custom_field.field_id}"
+              py:content="custom_field.label" />:
+          </th>
+          <td>
+            <span py:replace="custom_field.display(value_for(custom_field))" />
+            <span py:if="tg.errors.get(custom_field.name)" class="fielderror"
+                py:content="tg.errors.get(custom_field.name)" />
+          </td>
+        </tr>
+      </table>
+    </div>
+
     <div style="clear:both">
       <div class="formsection">Add Groups</div>
 
diff -r 6ef60881c7b2 -r cde69f824a52 ipa-server/ipa-gui/ipagui/templates/usershow.kid
--- a/ipa-server/ipa-gui/ipagui/templates/usershow.kid	Wed Oct 24 15:04:17 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/templates/usershow.kid	Wed Oct 24 16:04:17 2007 -0700
@@ -259,6 +259,21 @@ else:
         </tr>
     </table>
 
+    <div py:if='len(fields.custom_fields) > 0'>
+      <div class="formsection" >Custom Fields</div>
+      <table class="formtable" cellpadding="2" cellspacing="0" border="0">
+        <tr py:for='custom_field in fields.custom_fields'>
+          <th>
+            <label class="fieldlabel" for="${custom_field.field_id}"
+              py:content="custom_field.label" />:
+          </th>
+          <td>
+            ${user.get(custom_field.name)}
+          </td>
+        </tr>
+      </table>
+    </div>
+
     <div class="formsection" py:if='len(user_reports) > 0'>Direct Reports</div>
     <ol py:if="len(user_reports) > 0">
       <li py:for="report in user_reports">
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4054 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20071024/7459627a/attachment.bin>


More information about the Freeipa-devel mailing list