[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