diff options
author | Kevin McCarthy <kmccarth@redhat.com> | 2007-08-10 16:31:59 -0700 |
---|---|---|
committer | Kevin McCarthy <kmccarth@redhat.com> | 2007-08-10 16:31:59 -0700 |
commit | 10cbfe87876f536a51f3420945429cd82b7716b6 (patch) | |
tree | 6a2c277f659e711a3aa5cfb8517a40000bdb3bb5 | |
parent | 2e1f317b092e2ad28dde3f78159fbeea1e07557b (diff) | |
download | freeipa-10cbfe87876f536a51f3420945429cd82b7716b6.tar.gz freeipa-10cbfe87876f536a51f3420945429cd82b7716b6.tar.xz freeipa-10cbfe87876f536a51f3420945429cd82b7716b6.zip |
Split userform into edit and new forms.
(They will likely diverge so no sense forcing them together).
Add css for required fields.
Add "_orig" hidden fields to the edit form in prep for sending only modified
fields.
-rw-r--r-- | ipa-server/ipa-gui/ipagui/controllers.py | 43 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/forms/user.py | 36 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/static/css/style.css | 4 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/usereditform.kid | 124 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/usernewform.kid (renamed from ipa-server/ipa-gui/ipagui/templates/userform.kid) | 0 |
5 files changed, 181 insertions, 26 deletions
diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py index 361a5cbdf..ec4b87193 100644 --- a/ipa-server/ipa-gui/ipagui/controllers.py +++ b/ipa-server/ipa-gui/ipagui/controllers.py @@ -7,7 +7,6 @@ from turbogears import error_handler # from model import * # import logging # log = logging.getLogger("ipagui.controllers") -# import ipa.rpcclient import ipa.config import ipa.ipaclient import ipa.user @@ -15,7 +14,8 @@ import xmlrpclib import forms.user ipa.config.init_config() -user_form = forms.user.UserFormWidget() +user_new_form = forms.user.UserNewForm() +user_edit_form = forms.user.UserEditForm() client = ipa.ipaclient.IPAClient(True) client.set_principal("test@FREEIPA.ORG") @@ -32,8 +32,12 @@ def user_to_hash(user): 'sn' : user.getValue('sn'), 'mail' : user.getValue('mail'), 'telephoneNumber': user.getValue('telephoneNumber'), - 'uidNumber': user.getValue('uidNumber'), - 'gidNumber': user.getValue('gidNumber'), + 'uidNumber' : user.getValue('uidNumber'), + 'gidNumber' : user.getValue('gidNumber'), + 'givenName_orig' : user.getValue('givenName'), + 'sn_orig' : user.getValue('sn'), + 'mail_orig' : user.getValue('mail'), + 'telephoneNumber_orig': user.getValue('telephoneNumber'), } class Root(controllers.RootController): @@ -53,7 +57,7 @@ class Root(controllers.RootController): if tg_errors: turbogears.flash("There was a problem with the form!") - return dict(form=user_form) + return dict(form=user_new_form) @expose() def usercreate(self, **kw): @@ -63,12 +67,11 @@ class Root(controllers.RootController): turbogears.flash("Add user cancelled") raise turbogears.redirect('/userlist') - tg_errors, kw = self.uservalidate(**kw) + tg_errors, kw = self.usercreatevalidate(**kw) if tg_errors: - return dict(form=user_form, tg_template='ipagui.templates.usernew') + return dict(form=user_new_form, tg_template='ipagui.templates.usernew') try: - # rv = ipa.rpcclient.add_user(kw) newuser = ipa.user.User(None) newuser.setValue('uid', kw['uid']) newuser.setValue('givenName', kw['givenName']) @@ -87,7 +90,7 @@ class Root(controllers.RootController): raise turbogears.redirect('/usershow', uid=kw['uid']) except xmlrpclib.Fault, f: turbogears.flash("User add failed: " + str(f.faultString)) - return dict(form=user_form, tg_template='ipagui.templates.usernew') + return dict(form=user_new_form, tg_template='ipagui.templates.usernew') @expose("ipagui.templates.useredit") @@ -96,9 +99,8 @@ class Root(controllers.RootController): if tg_errors: turbogears.flash("There was a problem with the form!") - # user = ipa.rpcclient.get_user(uid) user = client.get_user(uid) - return dict(form=user_form, user=user_to_hash(user)) + return dict(form=user_edit_form, user=user_to_hash(user)) @expose() def userupdate(self, **kw): @@ -108,24 +110,24 @@ class Root(controllers.RootController): turbogears.flash("Edit user cancelled") raise turbogears.redirect('/usershow', uid=kw.get('uid')) - tg_errors, kw = self.uservalidate(**kw) + tg_errors, kw = self.userupdatevalidate(**kw) if tg_errors: - return dict(form=user_form, user={}, tg_template='ipagui.templates.useredit') + return dict(form=user_edit_form, user=kw, + tg_template='ipagui.templates.useredit') try: - # rv = ipa.rpcclient.add_user(kw) turbogears.flash("%s updated!" % kw['uid']) raise turbogears.redirect('/usershow', uid=kw['uid']) except xmlrpclib.Fault, f: turbogears.flash("User add failed: " + str(f.faultString)) - return dict(form=user_form, user={}, tg_template='ipagui.templates.useredit') + return dict(form=user_edit_form, user=kw, + tg_template='ipagui.templates.useredit') @expose("ipagui.templates.userlist") @paginate('users', limit=3, allow_limit_override=True) def userlist(self): """Retrieve a list of all users and display them in one huge list""" - # users = ipa.rpcclient.get_all_users() users = client.get_all_users() return dict(users=users) @@ -134,15 +136,18 @@ class Root(controllers.RootController): def usershow(self, uid): """Retrieve a single user for display""" try: - # user = ipa.rpcclient.get_user(uid) user = client.get_user(uid) return dict(user=user_to_hash(user)) except xmlrpclib.Fault, f: turbogears.flash("User show failed: " + str(f.faultString)) raise turbogears.redirect("/") - @validate(form=user_form) - def uservalidate(self, tg_errors=None, **kw): + @validate(form=user_new_form) + def usercreatevalidate(self, tg_errors=None, **kw): + return tg_errors, kw + + @validate(form=user_edit_form) + def userupdatevalidate(self, tg_errors=None, **kw): return tg_errors, kw @expose() diff --git a/ipa-server/ipa-gui/ipagui/forms/user.py b/ipa-server/ipa-gui/ipagui/forms/user.py index 3cb4aed49..4b174103f 100644 --- a/ipa-server/ipa-gui/ipagui/forms/user.py +++ b/ipa-server/ipa-gui/ipagui/forms/user.py @@ -19,27 +19,49 @@ class UserFields(): # validators.PhoneNumber may be a bit too picky, requiring an area code telephoneNumber.validator = validators.PlainText(not_empty=True) + uid_hidden = widgets.HiddenField(name="uid") + uidNumber_hidden = widgets.HiddenField(name="uidNumber") + gidNumber_hidden = widgets.HiddenField(name="gidNumber") + givenName_orig = widgets.HiddenField(name="givenName_orig") + sn_orig = widgets.HiddenField(name="sn_orig") + mail_orig = widgets.HiddenField(name="mail_orig") + telephoneNumber_orig = widgets.HiddenField(name="telephoneNumber_orig") -class UserFormWidget(widgets.Form): + +class UserNewForm(widgets.Form): params = ['user'] -# fields = [UserFields.uid, UserFields.userPassword, UserFields.givenName, -# UserFields.sn, UserFields.mail] + fields = [UserFields.uid, UserFields.givenName, UserFields.uidNumber, UserFields.gidNumber, - UserFields.sn, UserFields.mail] + UserFields.sn, UserFields.mail] def __init__(self, *args, **kw): - super(UserFormWidget,self).__init__(*args, **kw) - (self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.userform") + super(UserNewForm,self).__init__(*args, **kw) + (self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.usernewform") self.user = UserFields def update_params(self, params): - super(UserFormWidget,self).update_params(params) + super(UserNewForm,self).update_params(params) params['has_foo'] = self.has_foo def has_foo(self): return False + +class UserEditForm(widgets.Form): + params = ['user'] + + fields = [UserFields.givenName, UserFields.sn, UserFields.mail, + UserFields.givenName_orig, UserFields.sn_orig, UserFields.mail_orig, + UserFields.uid_hidden, + UserFields.uidNumber_hidden, UserFields.gidNumber_hidden] + + def __init__(self, *args, **kw): + super(UserEditForm,self).__init__(*args, **kw) + (self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.usereditform") + self.user = UserFields + + # TODO - add dynamic field retrieval: # myfields=[] # schema = ipa.rpcclient.get_add_schema () diff --git a/ipa-server/ipa-gui/ipagui/static/css/style.css b/ipa-server/ipa-gui/ipagui/static/css/style.css index 9cd7fe094..219d7a817 100644 --- a/ipa-server/ipa-gui/ipagui/static/css/style.css +++ b/ipa-server/ipa-gui/ipagui/static/css/style.css @@ -144,3 +144,7 @@ body { color: red; font-weight: bold; } + +.requiredfield { + background: #eebbbb; +} diff --git a/ipa-server/ipa-gui/ipagui/templates/usereditform.kid b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid new file mode 100644 index 000000000..499f7ab42 --- /dev/null +++ b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid @@ -0,0 +1,124 @@ +<div xmlns:py="http://purl.org/kid/ns#" + class="simpleroster"> + <form action="${action}" name="${name}" method="${method}" class="tableform"> + + + <div py:for="field in hidden_fields" + py:replace="field.display(value_for(field), **params_for(field))" + /> + + <div class="formsection">Account Details</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.uid.field_id}" + py:content="user.uid.label" /> + </th> + <td> + ${value_for(user.uid)} + </td> + </tr> + +<!-- <tr> + <th> + <label class="fieldlabel" for="${user.userPassword.field_id}" + py:content="user.userPassword.label" /> + </th> + <td> + <span py:replace="user.userPassword.display(value_for(user.userPassword))" /> + <span py:if="tg.errors.get('userPassword')" class="fielderror" + py:content="tg.errors.get('userPassword')" /> + </td> + </tr> --> + + <tr> + <th> + <label class="fieldlabel" for="${user.uidNumber.field_id}" + py:content="user.uidNumber.label" /> + </th> + <td> + ${value_for(user.uidNumber)} + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.gidNumber.field_id}" + py:content="user.gidNumber.label" /> + </th> + <td> + ${value_for(user.gidNumber)} + </td> + </tr> + </table> + + <div class="formsection">Identity Details</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.givenName.field_id}" + py:content="user.givenName.label" /> + </th> + <td> + <span py:replace="user.givenName.display(value_for(user.givenName))" /> + <span py:if="tg.errors.get('givenName')" class="fielderror" + py:content="tg.errors.get('givenName')" /> + + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.sn.field_id}" + py:content="user.sn.label" /> + </th> + <td> + <span py:replace="user.sn.display(value_for(user.sn))" /> + <span py:if="tg.errors.get('sn')" class="fielderror" + py:content="tg.errors.get('sn')" /> + </td> + </tr> + </table> + + <div class="formsection">Contact Details</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.mail.field_id}" + py:content="user.mail.label" /> + </th> + <td> + <span py:replace="user.mail.display(value_for(user.mail))" /> + <span py:if="tg.errors.get('mail')" class="fielderror" + py:content="tg.errors.get('mail')" /> + </td> + </tr> + <tr> + <th> + <label class="fieldlabel" for="${user.telephoneNumber.field_id}" + py:content="user.telephoneNumber.label" /> + </th> + <td> + <span py:replace="user.telephoneNumber.display(value_for(user.telephoneNumber))" /> + <span py:if="tg.errors.get('telephoneNumber')" class="fielderror" + py:content="tg.errors.get('telephoneNumber')" /> + </td> + </tr> + </table> + + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <br /> + <input type="submit" class="submitbutton" name="submit" value="Submit"/> + </th> + <td> + <br /> + <input type="submit" class="submitbutton" name="submit" value="Cancel" /> + </td> + <td></td> + </tr> + </table> + + </form> +</div> diff --git a/ipa-server/ipa-gui/ipagui/templates/userform.kid b/ipa-server/ipa-gui/ipagui/templates/usernewform.kid index dd852865a..dd852865a 100644 --- a/ipa-server/ipa-gui/ipagui/templates/userform.kid +++ b/ipa-server/ipa-gui/ipagui/templates/usernewform.kid |