webgui side of custom fields.

This commit is contained in:
Kevin McCarthy 2007-10-24 16:04:17 -07:00
parent 6e6237e54a
commit 358d279a53
5 changed files with 96 additions and 2 deletions

View File

@ -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,
@ -83,6 +85,8 @@ class UserNewForm(widgets.Form):
UserFields.secretary_cn,
]
custom_fields = []
validator = UserNewValidator()
def __init__(self, *args, **kw):
@ -112,7 +116,7 @@ class UserEditValidator(validators.Schema):
]
class UserEditForm(widgets.Form):
params = ['user']
params = ['user', 'custom_fields']
hidden_fields = [
UserFields.uid_hidden, UserFields.user_orig,
@ -126,6 +130,8 @@ class UserEditForm(widgets.Form):
UserFields.secretary_cn,
]
custom_fields = []
validator = UserEditValidator()
def __init__(self, *args, **kw):

View File

@ -32,6 +32,36 @@ 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):
raise turbogears.redirect("/user/list")
@ -107,6 +137,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):
turbogears.flash("Person with login '%s' already exists" %
@ -320,6 +354,7 @@ 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
@ -327,6 +362,10 @@ class UserController(IPAController):
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)
#
# If the user update succeeds, but below operations fail, we

View File

@ -613,6 +613,23 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div py:if='len(custom_fields) &gt; 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>

View File

@ -601,6 +601,23 @@ from ipagui.helpers import ipahelper
</tr>
</table>
<div py:if='len(custom_fields) &gt; 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>

View File

@ -259,6 +259,21 @@ else:
</tr>
</table>
<div py:if='len(fields.custom_fields) &gt; 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) &gt; 0'>Direct Reports</div>
<ol py:if="len(user_reports) &gt; 0">
<li py:for="report in user_reports">