summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-08-10 16:31:59 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-08-10 16:31:59 -0700
commit10cbfe87876f536a51f3420945429cd82b7716b6 (patch)
tree6a2c277f659e711a3aa5cfb8517a40000bdb3bb5
parent2e1f317b092e2ad28dde3f78159fbeea1e07557b (diff)
downloadfreeipa-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.py43
-rw-r--r--ipa-server/ipa-gui/ipagui/forms/user.py36
-rw-r--r--ipa-server/ipa-gui/ipagui/static/css/style.css4
-rw-r--r--ipa-server/ipa-gui/ipagui/templates/usereditform.kid124
-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