diff options
author | Kevin McCarthy <kmccarth@redhat.com> | 2007-10-03 13:53:14 -0700 |
---|---|---|
committer | Kevin McCarthy <kmccarth@redhat.com> | 2007-10-03 13:53:14 -0700 |
commit | 1cef67e2e16ec137a1d04f9f4f99694ed36e3d28 (patch) | |
tree | efa10de0ae86b04f0dcff943056068d2c7d512d0 | |
parent | 3ef4a374f723b61f8497c4a4d8921cc18d7f4070 (diff) | |
download | freeipa-1cef67e2e16ec137a1d04f9f4f99694ed36e3d28.tar.gz freeipa-1cef67e2e16ec137a1d04f9f4f99694ed36e3d28.tar.xz freeipa-1cef67e2e16ec137a1d04f9f4f99694ed36e3d28.zip |
Add the rest of the user fields to the user pages.
-rw-r--r-- | ipa-server/ipa-gui/ipagui/controllers.py | 71 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/forms/user.py | 68 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/usereditform.kid | 316 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/usernewform.kid | 351 | ||||
-rw-r--r-- | ipa-server/ipa-gui/ipagui/templates/usershow.kid | 160 | ||||
-rw-r--r-- | ipa-server/xmlrpc-server/funcs.py | 2 |
6 files changed, 908 insertions, 60 deletions
diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py index bdb7b102f..792b97a3e 100644 --- a/ipa-server/ipa-gui/ipagui/controllers.py +++ b/ipa-server/ipa-gui/ipagui/controllers.py @@ -139,11 +139,41 @@ class Root(controllers.RootController): # try: new_user = ipa.user.User() - new_user.setValue('uid', kw.get('uid')) + new_user.setValue('title', kw.get('title')) new_user.setValue('givenname', kw.get('givenname')) new_user.setValue('sn', kw.get('sn')) + new_user.setValue('cn', kw.get('cn')) + new_user.setValue('displayname', kw.get('displayname')) + new_user.setValue('initials', kw.get('initials')) + + new_user.setValue('uid', kw.get('uid')) + new_user.setValue('loginshell', kw.get('loginshell')) + new_user.setValue('gecos', kw.get('gecos')) + new_user.setValue('mail', kw.get('mail')) new_user.setValue('telephonenumber', kw.get('telephonenumber')) + new_user.setValue('facsimiletelephonenumber', + kw.get('facsimiletelephonenumber')) + new_user.setValue('mobile', kw.get('mobile')) + new_user.setValue('pager', kw.get('pager')) + new_user.setValue('homephone', kw.get('homephone')) + + new_user.setValue('street', kw.get('street')) + new_user.setValue('l', kw.get('l')) + new_user.setValue('st', kw.get('st')) + new_user.setValue('postalcode', kw.get('postalcode')) + + new_user.setValue('ou', kw.get('ou')) + new_user.setValue('businesscategory', kw.get('businesscategory')) + new_user.setValue('description', kw.get('description')) + new_user.setValue('employeetype', kw.get('employeetype')) + # new_user.setValue('manager', kw.get('manager')) + new_user.setValue('roomnumber', kw.get('roomnumber')) + # new_user.setValue('secretary', kw.get('secretary')) + + new_user.setValue('carlicense', kw.get('carlicense')) + new_user.setValue('labeleduri', kw.get('labeleduri')) + if kw.get('nsAccountLock'): new_user.setValue('nsAccountLock', 'true') @@ -293,10 +323,41 @@ class Root(controllers.RootController): orig_user_dict = loads(b64decode(kw.get('user_orig'))) new_user = ipa.user.User(orig_user_dict) + new_user.setValue('title', kw.get('title')) new_user.setValue('givenname', kw.get('givenname')) new_user.setValue('sn', kw.get('sn')) + new_user.setValue('cn', kw.get('cn')) + new_user.setValue('displayname', kw.get('displayname')) + new_user.setValue('initials', kw.get('initials')) + + new_user.setValue('loginshell', kw.get('loginshell')) + new_user.setValue('gecos', kw.get('gecos')) + new_user.setValue('mail', kw.get('mail')) new_user.setValue('telephonenumber', kw.get('telephonenumber')) + new_user.setValue('facsimiletelephonenumber', + kw.get('facsimiletelephonenumber')) + new_user.setValue('mobile', kw.get('mobile')) + new_user.setValue('pager', kw.get('pager')) + new_user.setValue('homephone', kw.get('homephone')) + + new_user.setValue('street', kw.get('street')) + new_user.setValue('l', kw.get('l')) + new_user.setValue('st', kw.get('st')) + new_user.setValue('postalcode', kw.get('postalcode')) + + new_user.setValue('ou', kw.get('ou')) + new_user.setValue('businesscategory', kw.get('businesscategory')) + new_user.setValue('description', kw.get('description')) + new_user.setValue('employeetype', kw.get('employeetype')) + # new_user.setValue('manager', kw.get('manager')) + new_user.setValue('roomnumber', kw.get('roomnumber')) + # new_user.setValue('secretary', kw.get('secretary')) + + new_user.setValue('carlicense', kw.get('carlicense')) + new_user.setValue('labeleduri', kw.get('labeleduri')) + + if kw.get('nsAccountLock'): new_user.setValue('nsAccountLock', 'true') else: @@ -306,13 +367,7 @@ class Root(controllers.RootController): password_change = True new_user.setValue('uidnumber', str(kw.get('uidnumber'))) new_user.setValue('gidnumber', str(kw.get('gidnumber'))) - - # - # this is a hack until we decide on the policy for names/cn/sn/givenName - # - new_user.setValue('cn', - "%s %s" % (new_user.getValue('givenname'), - new_user.getValue('sn'))) + new_user.setValue('homedirectory', str(kw.get('homedirectory'))) rv = client.update_user(new_user) # diff --git a/ipa-server/ipa-gui/ipagui/forms/user.py b/ipa-server/ipa-gui/ipagui/forms/user.py index 8beac5100..9072fe78f 100644 --- a/ipa-server/ipa-gui/ipagui/forms/user.py +++ b/ipa-server/ipa-gui/ipagui/forms/user.py @@ -2,17 +2,47 @@ import turbogears from turbogears import validators, widgets class UserFields(): + givenname = widgets.TextField(name="givenname", label="Given Name") + sn = widgets.TextField(name="sn", label="Family Name") + cn = widgets.TextField(name="cn", label="Common Names") + title = widgets.TextField(name="title", label="Title") + displayname = widgets.TextField(name="displayname", label="Display Name") + initials = widgets.TextField(name="initials", label="Initials") + uid = widgets.TextField(name="uid", label="Login") userpassword = widgets.PasswordField(name="userpassword", label="Password") userpassword_confirm = widgets.PasswordField(name="userpassword_confirm", label="Confirm Password") uidnumber = widgets.TextField(name="uidnumber", label="UID") gidnumber = widgets.TextField(name="gidnumber", label="GID") - givenname = widgets.TextField(name="givenname", label="Given Name") - sn = widgets.TextField(name="sn", label="Family Name") + homedirectory = widgets.TextField(name="homedirectory", label="Home Directory") + loginshell = widgets.TextField(name="loginshell", label="Login Shell") + gecos = widgets.TextField(name="gecos", label="GECOS") + mail = widgets.TextField(name="mail", label="E-mail Address") - telephonenumber = widgets.TextField(name="telephonenumber", label="Phone") - # nsAccountLock = widgets.CheckBox(name="nsAccountLock", label="Account Deactivated") + telephonenumber = widgets.TextField(name="telephonenumber", label="Work Number") + facsimiletelephonenumber = widgets.TextField(name="facsimiletelephonenumber", + label="Fax Number") + mobile = widgets.TextField(name="mobile", label="Cell Number") + pager = widgets.TextField(name="pager", label="Pager Number") + homephone = widgets.TextField(name="homephone", label="Home Number") + + street = widgets.TextField(name="street", label="Street Address") + l = widgets.TextField(name="l", label="City") + st = widgets.TextField(name="st", label="State") + postalcode = widgets.TextField(name="postalcode", label="ZIP") + + ou = widgets.TextField(name="ou", label="Org Unit") + businesscategory = widgets.TextField(name="businesscategory", label="Tags") + description = widgets.TextField(name="description", label="Description") + employeetype = widgets.TextField(name="employeetype", label="Employee Type") + manager = widgets.TextField(name="manager", label="Manager") + roomnumber = widgets.TextField(name="roomnumber", label="Room Number") + secretary = widgets.TextField(name="secretary", label="Secretary") + + carlicense = widgets.TextField(name="carlicense", label="Car License") + labeleduri = widgets.TextField(name="labeleduri", label="Home Page") + nsAccountLock = widgets.SingleSelectField(name="nsAccountLock", label="Account Status", options = [("", "active"), ("true", "inactive")]) @@ -34,8 +64,6 @@ class UserNewValidator(validators.Schema): givenname = validators.String(not_empty=True) sn = validators.String(not_empty=True) mail = validators.Email(not_empty=True) - # validators.PhoneNumber may be a bit too picky, requiring an area code - # telephonenumber = validators.PlainText(not_empty=False) chained_validators = [ validators.FieldsMatch('userpassword', 'userpassword_confirm') @@ -45,10 +73,9 @@ class UserNewValidator(validators.Schema): class UserNewForm(widgets.Form): params = ['user'] - fields = [UserFields.uid, UserFields.givenname, - UserFields.sn, UserFields.mail, - UserFields.dn_to_info_json, - ] + hidden_fields = [ + UserFields.dn_to_info_json, + ] validator = UserNewValidator() @@ -59,10 +86,6 @@ class UserNewForm(widgets.Form): def update_params(self, params): super(UserNewForm,self).update_params(params) - params['has_foo'] = self.has_foo - - def has_foo(self): - return False class UserEditValidator(validators.Schema): userpassword = validators.String(not_empty=False) @@ -72,8 +95,6 @@ class UserEditValidator(validators.Schema): mail = validators.Email(not_empty=True) uidnumber = validators.Int(not_empty=False) gidnumber = validators.Int(not_empty=False) - # validators.PhoneNumber may be a bit too picky, requiring an area code - # telephonenumber = validators.PlainText(not_empty=False) pre_validators = [ validators.RequireIfPresent(required='uidnumber', present='editprotected'), @@ -87,14 +108,13 @@ class UserEditValidator(validators.Schema): class UserEditForm(widgets.Form): params = ['user'] - fields = [UserFields.givenname, UserFields.sn, UserFields.mail, - UserFields.uid_hidden, UserFields.user_orig, - UserFields.uidnumber, UserFields.gidnumber, - UserFields.krbPasswordExpiration_hidden, - UserFields.editprotected_hidden, - UserFields.user_groups_data, - UserFields.dn_to_info_json, - ] + hidden_fields = [ + UserFields.uid_hidden, UserFields.user_orig, + UserFields.krbPasswordExpiration_hidden, + UserFields.editprotected_hidden, + UserFields.user_groups_data, + UserFields.dn_to_info_json, + ] validator = UserEditValidator() diff --git a/ipa-server/ipa-gui/ipagui/templates/usereditform.kid b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid index 135f352a0..a21f0b7d1 100644 --- a/ipa-server/ipa-gui/ipagui/templates/usereditform.kid +++ b/ipa-server/ipa-gui/ipagui/templates/usereditform.kid @@ -32,17 +32,20 @@ from ipagui.helpers import ipahelper passwordConfirmField = document.getElementById('form_userpassword_confirm'); uidnumberField = document.getElementById('form_uidnumber'); gidnumberField = document.getElementById('form_gidnumber'); + homedirectoryField = document.getElementById('form_homedirectory'); if (checkbox.checked) { passwordField.disabled = false; passwordConfirmField.disabled = false; uidnumberField.disabled = false; gidnumberField.disabled = false; + homedirectoryField.disabled = false; $('form_editprotected').value = 'true'; } else { passwordField.disabled = true; passwordConfirmField.disabled = true; uidnumberField.disabled = true; gidnumberField.disabled = true; + homedirectoryField.disabled = true; $('form_editprotected').value = ''; } } @@ -76,6 +79,19 @@ from ipagui.helpers import ipahelper <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" for="${user.title.field_id}" + py:content="user.title.label" />: + </th> + <td> + <span py:replace="user.title.display(value_for(user.title))" /> + <span py:if="tg.errors.get('title')" class="fielderror" + py:content="tg.errors.get('title')" /> + + </td> + </tr> + + <tr> + <th> <label class="fieldlabel" for="${user.givenname.field_id}" py:content="user.givenname.label" />: </th> @@ -98,12 +114,62 @@ from ipagui.helpers import ipahelper py:content="tg.errors.get('sn')" /> </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.cn.field_id}" + py:content="user.cn.label" />: + </th> + <td> + <span py:replace="user.cn.display(value_for(user.cn))" /> + <span py:if="tg.errors.get('cn')" class="fielderror" + py:content="tg.errors.get('cn')" /> + + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.displayname.field_id}" + py:content="user.displayname.label" />: + </th> + <td> + <span py:replace="user.displayname.display(value_for(user.displayname))" /> + <span py:if="tg.errors.get('displayname')" class="fielderror" + py:content="tg.errors.get('displayname')" /> + + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.initials.field_id}" + py:content="user.initials.label" />: + </th> + <td> + <span py:replace="user.initials.display(value_for(user.initials))" /> + <span py:if="tg.errors.get('initials')" class="fielderror" + py:content="tg.errors.get('initials')" /> + + </td> + </tr> </table> <div class="formsection">Account Details</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" for="${user.nsAccountLock.field_id}" + py:content="user.nsAccountLock.label" />: + </th> + <td> + <span py:replace="user.nsAccountLock.display(value_for(user.nsAccountLock))" /> + <span py:if="tg.errors.get('nsAccountLock')" class="fielderror" + py:content="tg.errors.get('nsAccountLock')" /> + </td> + </tr> + <tr> + <th> <label class="fieldlabel" for="${user.uid.field_id}" py:content="user.uid.label" />: </th> @@ -213,6 +279,49 @@ from ipagui.helpers import ipahelper </script> </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.homedirectory.field_id}" + py:content="user.homedirectory.label" />: + </th> + <td> + <span py:replace="user.homedirectory.display( + value_for(user.homedirectory))" /> + <span py:if="tg.errors.get('homedirectory')" class="fielderror" + py:content="tg.errors.get('homedirectory')" /> + + <script type="text/javascript"> + document.getElementById('form_homedirectory').disabled = true; + </script> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.loginshell.field_id}" + py:content="user.loginshell.label" />: + </th> + <td> + <span py:replace="user.loginshell.display( + value_for(user.loginshell))" /> + <span py:if="tg.errors.get('loginshell')" class="fielderror" + py:content="tg.errors.get('loginshell')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.gecos.field_id}" + py:content="user.gecos.label" />: + </th> + <td> + <span py:replace="user.gecos.display( + value_for(user.gecos))" /> + <span py:if="tg.errors.get('gecos')" class="fielderror" + py:content="tg.errors.get('gecos')" /> + </td> + </tr> </table> <div class="formsection">Contact Details</div> @@ -228,6 +337,7 @@ from ipagui.helpers import ipahelper py:content="tg.errors.get('mail')" /> </td> </tr> + <tr> <th> <label class="fieldlabel" for="${user.telephonenumber.field_id}" @@ -239,23 +349,217 @@ from ipagui.helpers import ipahelper py:content="tg.errors.get('telephonenumber')" /> </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.facsimiletelephonenumber.field_id}" + py:content="user.facsimiletelephonenumber.label" />: + </th> + <td> + <span py:replace="user.facsimiletelephonenumber.display(value_for(user.facsimiletelephonenumber))" /> + <span py:if="tg.errors.get('facsimiletelephonenumber')" class="fielderror" + py:content="tg.errors.get('facsimiletelephonenumber')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.mobile.field_id}" + py:content="user.mobile.label" />: + </th> + <td> + <span py:replace="user.mobile.display(value_for(user.mobile))" /> + <span py:if="tg.errors.get('mobile')" class="fielderror" + py:content="tg.errors.get('mobile')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.pager.field_id}" + py:content="user.pager.label" />: + </th> + <td> + <span py:replace="user.pager.display(value_for(user.pager))" /> + <span py:if="tg.errors.get('pager')" class="fielderror" + py:content="tg.errors.get('pager')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.homephone.field_id}" + py:content="user.homephone.label" />: + </th> + <td> + <span py:replace="user.homephone.display(value_for(user.homephone))" /> + <span py:if="tg.errors.get('homephone')" class="fielderror" + py:content="tg.errors.get('homephone')" /> + </td> + </tr> </table> - <div class="formsection">Account Status</div> + <div class="formsection">Mailing Address</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> - <label class="fieldlabel" for="${user.nsAccountLock.field_id}" - py:content="user.nsAccountLock.label" />: + <label class="fieldlabel" for="${user.street.field_id}" + py:content="user.street.label" />: </th> <td> - <span py:replace="user.nsAccountLock.display(value_for(user.nsAccountLock))" /> - <span py:if="tg.errors.get('nsAccountLock')" class="fielderror" - py:content="tg.errors.get('nsAccountLock')" /> + <span py:replace="user.street.display(value_for(user.street))" /> + <span py:if="tg.errors.get('street')" class="fielderror" + py:content="tg.errors.get('street')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.l.field_id}" + py:content="user.l.label" />: + </th> + <td> + <span py:replace="user.l.display(value_for(user.l))" /> + <span py:if="tg.errors.get('l')" class="fielderror" + py:content="tg.errors.get('l')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.st.field_id}" + py:content="user.st.label" />: + </th> + <td> + <span py:replace="user.st.display(value_for(user.st))" /> + <span py:if="tg.errors.get('st')" class="fielderror" + py:content="tg.errors.get('st')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.postalcode.field_id}" + py:content="user.postalcode.label" />: + </th> + <td> + <span py:replace="user.postalcode.display(value_for(user.postalcode))" /> + <span py:if="tg.errors.get('postalcode')" class="fielderror" + py:content="tg.errors.get('postalcode')" /> + </td> + </tr> + </table> + + <div class="formsection">Employee Information</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.ou.field_id}" + py:content="user.ou.label" />: + </th> + <td> + <span py:replace="user.ou.display(value_for(user.ou))" /> + <span py:if="tg.errors.get('ou')" class="fielderror" + py:content="tg.errors.get('ou')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.businesscategory.field_id}" + py:content="user.businesscategory.label" />: + </th> + <td> + <span py:replace="user.businesscategory.display(value_for(user.businesscategory))" /> + <span py:if="tg.errors.get('businesscategory')" class="fielderror" + py:content="tg.errors.get('businesscategory')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.description.field_id}" + py:content="user.description.label" />: + </th> + <td> + <span py:replace="user.description.display(value_for(user.description))" /> + <span py:if="tg.errors.get('description')" class="fielderror" + py:content="tg.errors.get('description')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.employeetype.field_id}" + py:content="user.employeetype.label" />: + </th> + <td> + <span py:replace="user.employeetype.display(value_for(user.employeetype))" /> + <span py:if="tg.errors.get('employeetype')" class="fielderror" + py:content="tg.errors.get('employeetype')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.manager.field_id}" + py:content="user.manager.label" />: + </th> + <td> + TODO + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.roomnumber.field_id}" + py:content="user.roomnumber.label" />: + </th> + <td> + <span py:replace="user.roomnumber.display(value_for(user.roomnumber))" /> + <span py:if="tg.errors.get('roomnumber')" class="fielderror" + py:content="tg.errors.get('roomnumber')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.secretary.field_id}" + py:content="user.secretary.label" />: + </th> + <td> + TODO </td> </tr> </table> + <div class="formsection">Misc Information</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.carlicense.field_id}" + py:content="user.carlicense.label" />: + </th> + <td> + <span py:replace="user.carlicense.display(value_for(user.carlicense))" /> + <span py:if="tg.errors.get('carlicense')" class="fielderror" + py:content="tg.errors.get('carlicense')" /> + </td> + </tr> + <tr> + <th> + <label class="fieldlabel" for="${user.labeleduri.field_id}" + py:content="user.labeleduri.label" />: + </th> + <td> + <span py:replace="user.labeleduri.display(value_for(user.labeleduri))" /> + <span py:if="tg.errors.get('labeleduri')" class="fielderror" + py:content="tg.errors.get('labeleduri')" /> + </td> + </tr> + </table> + + <div> <div class="formsection">Groups</div> diff --git a/ipa-server/ipa-gui/ipagui/templates/usernewform.kid b/ipa-server/ipa-gui/ipagui/templates/usernewform.kid index fd79e5ed8..de1e21302 100644 --- a/ipa-server/ipa-gui/ipagui/templates/usernewform.kid +++ b/ipa-server/ipa-gui/ipagui/templates/usernewform.kid @@ -49,6 +49,19 @@ from ipagui.helpers import ipahelper <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" for="${user.title.field_id}" + py:content="user.title.label" />: + </th> + <td> + <span py:replace="user.title.display(value_for(user.title))" /> + <span py:if="tg.errors.get('title')" class="fielderror" + py:content="tg.errors.get('title')" /> + + </td> + </tr> + + <tr> + <th> <label class="fieldlabel" for="${user.givenname.field_id}" py:content="user.givenname.label" />: </th> @@ -70,17 +83,25 @@ from ipagui.helpers import ipahelper <span py:if="tg.errors.get('sn')" class="fielderror" py:content="tg.errors.get('sn')" /> <script type="text/javascript"> - var uid_suggest = "" - var mail_suggest = "" + var uid_suggest = ""; + var mail_suggest = ""; + var cn_suggest = ""; + var displayname_suggest = ""; + var initials_suggest = ""; function autofill(self) { - givenname = document.getElementById('form_givenname'); - sn = document.getElementById('form_sn'); + var givenname = $('form_givenname'); + var sn = $('form_sn'); if ((givenname.value == "") || (sn.value == "")) { return; } - uid = document.getElementById('form_uid'); - mail = document.getElementById('form_mail'); + + var uid = $('form_uid'); + var mail = $('form_mail'); + var cn = $('form_cn'); + var displayname = $('form_displayname'); + var initials = $('form_initials'); + if ((uid.value == "") || (uid.value == uid_suggest)) { new Ajax.Request('${tg.url('/suggest_uid')}', { method: 'get', @@ -92,6 +113,7 @@ from ipagui.helpers import ipahelper } }); } + if ((mail.value == "") || (mail.value == mail_suggest)) { new Ajax.Request('${tg.url('/suggest_email')}', { method: 'get', @@ -103,18 +125,89 @@ from ipagui.helpers import ipahelper } }); } + + if ((cn.value == "") || (cn.value == cn_suggest)) { + cn.value = givenname.value + " " + sn.value; + cn_suggest = cn.value; + new Effect.Highlight(cn); + } + + if ((displayname.value == "") || + (displayname.value == displayname_suggest)) { + displayname.value = givenname.value + " " + sn.value; + displayname_suggest = displayname.value; + new Effect.Highlight(displayname); + } + + if ((displayname.value == "") || + (displayname.value == displayname_suggest)) { + initials.value = givenname.value[0] + sn.value[0]; + initials_suggest = initials.value; + new Effect.Highlight(initials); + } } - document.getElementById('form_givenname').onchange = autofill - document.getElementById('form_sn').onchange = autofill + + document.getElementById('form_givenname').onchange = autofill; + document.getElementById('form_sn').onchange = autofill; </script> </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.cn.field_id}" + py:content="user.cn.label" />: + </th> + <td> + <span py:replace="user.cn.display(value_for(user.cn))" /> + <span py:if="tg.errors.get('cn')" class="fielderror" + py:content="tg.errors.get('cn')" /> + + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.displayname.field_id}" + py:content="user.displayname.label" />: + </th> + <td> + <span py:replace="user.displayname.display(value_for(user.displayname))" /> + <span py:if="tg.errors.get('displayname')" class="fielderror" + py:content="tg.errors.get('displayname')" /> + + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.initials.field_id}" + py:content="user.initials.label" />: + </th> + <td> + <span py:replace="user.initials.display(value_for(user.initials))" /> + <span py:if="tg.errors.get('initials')" class="fielderror" + py:content="tg.errors.get('initials')" /> + + </td> + </tr> </table> <div class="formsection">Account Details</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" for="${user.nsAccountLock.field_id}" + py:content="user.nsAccountLock.label" />: + </th> + <td> + <span py:replace="user.nsAccountLock.display(value_for(user.nsAccountLock))" /> + <span py:if="tg.errors.get('nsAccountLock')" class="fielderror" + py:content="tg.errors.get('nsAccountLock')" /> + </td> + </tr> + <tr> + <th> <label class="fieldlabel" for="${user.uid.field_id}" py:content="user.uid.label" />: </th> @@ -181,6 +274,42 @@ from ipagui.helpers import ipahelper Generated by server </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.homedirectory.field_id}" + py:content="user.homedirectory.label" />: + </th> + <td> + Generated by server + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.loginshell.field_id}" + py:content="user.loginshell.label" />: + </th> + <td> + <span py:replace="user.loginshell.display( + value_for(user.loginshell))" /> + <span py:if="tg.errors.get('loginshell')" class="fielderror" + py:content="tg.errors.get('loginshell')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.gecos.field_id}" + py:content="user.gecos.label" />: + </th> + <td> + <span py:replace="user.gecos.display( + value_for(user.gecos))" /> + <span py:if="tg.errors.get('gecos')" class="fielderror" + py:content="tg.errors.get('gecos')" /> + </td> + </tr> </table> <div class="formsection">Contact Details</div> @@ -196,6 +325,7 @@ from ipagui.helpers import ipahelper py:content="tg.errors.get('mail')" /> </td> </tr> + <tr> <th> <label class="fieldlabel" for="${user.telephonenumber.field_id}" @@ -207,19 +337,212 @@ from ipagui.helpers import ipahelper py:content="tg.errors.get('telephonenumber')" /> </td> </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.facsimiletelephonenumber.field_id}" + py:content="user.facsimiletelephonenumber.label" />: + </th> + <td> + <span py:replace="user.facsimiletelephonenumber.display(value_for(user.facsimiletelephonenumber))" /> + <span py:if="tg.errors.get('facsimiletelephonenumber')" class="fielderror" + py:content="tg.errors.get('facsimiletelephonenumber')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.mobile.field_id}" + py:content="user.mobile.label" />: + </th> + <td> + <span py:replace="user.mobile.display(value_for(user.mobile))" /> + <span py:if="tg.errors.get('mobile')" class="fielderror" + py:content="tg.errors.get('mobile')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.pager.field_id}" + py:content="user.pager.label" />: + </th> + <td> + <span py:replace="user.pager.display(value_for(user.pager))" /> + <span py:if="tg.errors.get('pager')" class="fielderror" + py:content="tg.errors.get('pager')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.homephone.field_id}" + py:content="user.homephone.label" />: + </th> + <td> + <span py:replace="user.homephone.display(value_for(user.homephone))" /> + <span py:if="tg.errors.get('homephone')" class="fielderror" + py:content="tg.errors.get('homephone')" /> + </td> + </tr> </table> - <div class="formsection">Account Status</div> + <div class="formsection">Mailing Address</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> - <label class="fieldlabel" for="${user.nsAccountLock.field_id}" - py:content="user.nsAccountLock.label" />: + <label class="fieldlabel" for="${user.street.field_id}" + py:content="user.street.label" />: </th> <td> - <span py:replace="user.nsAccountLock.display(value_for(user.nsAccountLock))" /> - <span py:if="tg.errors.get('nsAccountLock')" class="fielderror" - py:content="tg.errors.get('nsAccountLock')" /> + <span py:replace="user.street.display(value_for(user.street))" /> + <span py:if="tg.errors.get('street')" class="fielderror" + py:content="tg.errors.get('street')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.l.field_id}" + py:content="user.l.label" />: + </th> + <td> + <span py:replace="user.l.display(value_for(user.l))" /> + <span py:if="tg.errors.get('l')" class="fielderror" + py:content="tg.errors.get('l')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.st.field_id}" + py:content="user.st.label" />: + </th> + <td> + <span py:replace="user.st.display(value_for(user.st))" /> + <span py:if="tg.errors.get('st')" class="fielderror" + py:content="tg.errors.get('st')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.postalcode.field_id}" + py:content="user.postalcode.label" />: + </th> + <td> + <span py:replace="user.postalcode.display(value_for(user.postalcode))" /> + <span py:if="tg.errors.get('postalcode')" class="fielderror" + py:content="tg.errors.get('postalcode')" /> + </td> + </tr> + </table> + + <div class="formsection">Employee Information</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.ou.field_id}" + py:content="user.ou.label" />: + </th> + <td> + <span py:replace="user.ou.display(value_for(user.ou))" /> + <span py:if="tg.errors.get('ou')" class="fielderror" + py:content="tg.errors.get('ou')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.businesscategory.field_id}" + py:content="user.businesscategory.label" />: + </th> + <td> + <span py:replace="user.businesscategory.display(value_for(user.businesscategory))" /> + <span py:if="tg.errors.get('businesscategory')" class="fielderror" + py:content="tg.errors.get('businesscategory')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.description.field_id}" + py:content="user.description.label" />: + </th> + <td> + <span py:replace="user.description.display(value_for(user.description))" /> + <span py:if="tg.errors.get('description')" class="fielderror" + py:content="tg.errors.get('description')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.employeetype.field_id}" + py:content="user.employeetype.label" />: + </th> + <td> + <span py:replace="user.employeetype.display(value_for(user.employeetype))" /> + <span py:if="tg.errors.get('employeetype')" class="fielderror" + py:content="tg.errors.get('employeetype')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.manager.field_id}" + py:content="user.manager.label" />: + </th> + <td> + TODO + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.roomnumber.field_id}" + py:content="user.roomnumber.label" />: + </th> + <td> + <span py:replace="user.roomnumber.display(value_for(user.roomnumber))" /> + <span py:if="tg.errors.get('roomnumber')" class="fielderror" + py:content="tg.errors.get('roomnumber')" /> + </td> + </tr> + + <tr> + <th> + <label class="fieldlabel" for="${user.secretary.field_id}" + py:content="user.secretary.label" />: + </th> + <td> + TODO + </td> + </tr> + </table> + + <div class="formsection">Misc Information</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" for="${user.carlicense.field_id}" + py:content="user.carlicense.label" />: + </th> + <td> + <span py:replace="user.carlicense.display(value_for(user.carlicense))" /> + <span py:if="tg.errors.get('carlicense')" class="fielderror" + py:content="tg.errors.get('carlicense')" /> + </td> + </tr> + <tr> + <th> + <label class="fieldlabel" for="${user.labeleduri.field_id}" + py:content="user.labeleduri.label" />: + </th> + <td> + <span py:replace="user.labeleduri.display(value_for(user.labeleduri))" /> + <span py:if="tg.errors.get('labeleduri')" class="fielderror" + py:content="tg.errors.get('labeleduri')" /> </td> </tr> </table> diff --git a/ipa-server/ipa-gui/ipagui/templates/usershow.kid b/ipa-server/ipa-gui/ipagui/templates/usershow.kid index 818dd78b5..311500289 100644 --- a/ipa-server/ipa-gui/ipagui/templates/usershow.kid +++ b/ipa-server/ipa-gui/ipagui/templates/usershow.kid @@ -37,6 +37,12 @@ else: <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" py:content="fields.title.label" />: + </th> + <td>${user.get("title")}</td> + </tr> + <tr> + <th> <label class="fieldlabel" py:content="fields.givenname.label" />: </th> <td>${user.get("givenname")}</td> @@ -47,12 +53,36 @@ else: </th> <td>${user.get("sn")}</td> </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.cn.label" />: + </th> + <td>${user.get("cn")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.displayname.label" />: + </th> + <td>${user.get("displayname")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.initials.label" />: + </th> + <td>${user.get("initials")}</td> + </tr> </table> <div class="formsection">Account Details</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> <tr> <th> + <label class="fieldlabel" py:content="fields.nsAccountLock.label" />: + </th> + <td>${userhelper.account_status_display(user.get("nsAccountLock"))}</td> + </tr> + <tr> + <th> <label class="fieldlabel" py:content="fields.uid.label" />: </th> <td>${user.get("uid")}</td> @@ -69,6 +99,24 @@ else: </th> <td>${user.get("gidnumber")}</td> </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.homedirectory.label" />: + </th> + <td>${user.get("homedirectory")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.loginshell.label" />: + </th> + <td>${user.get("loginshell")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.gecos.label" />: + </th> + <td>${user.get("gecos")}</td> + </tr> </table> <div class="formsection">Contact Details</div> @@ -85,6 +133,86 @@ else: </th> <td>${user.get("telephonenumber")}</td> </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.facsimiletelephonenumber.label" />: + </th> + <td>${user.get("facsimiletelephonenumber")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.mobile.label" />: + </th> + <td>${user.get("mobile")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.pager.label" />: + </th> + <td>${user.get("pager")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.homephone.label" />: + </th> + <td>${user.get("homephone")}</td> + </tr> + </table> + + <div class="formsection">Mailing Address</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" py:content="fields.street.label" />: + </th> + <td>${user.get("street")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.l.label" />: + </th> + <td>${user.get("l")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.st.label" />: + </th> + <td>${user.get("st")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.postalcode.label" />: + </th> + <td>${user.get("postalcode")}</td> + </tr> + </table> + + <div class="formsection">Employee Information</div> + <table class="formtable" cellpadding="2" cellspacing="0" border="0"> + <tr> + <th> + <label class="fieldlabel" py:content="fields.ou.label" />: + </th> + <td>${user.get("ou")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.businesscategory.label" />: + </th> + <td>${user.get("businesscategory")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.description.label" />: + </th> + <td>${user.get("description")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.employeetype.label" />: + </th> + <td>${user.get("employeetype")}</td> + </tr> <tr py:if='user_manager'> <th> Manager: @@ -94,16 +222,34 @@ else: >${user_manager.givenname} ${user_manager.sn}</a> </td> </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.roomnumber.label" />: + </th> + <td>${user.get("roomnumber")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.secretary.label" />: + </th> + <td>TODO</td> + </tr> </table> - <div class="formsection">Account Status</div> + <div class="formsection">Misc Information</div> <table class="formtable" cellpadding="2" cellspacing="0" border="0"> - <tr> - <th> - <label class="fieldlabel" py:content="fields.nsAccountLock.label" />: - </th> - <td>${userhelper.account_status_display(user.get("nsAccountLock"))}</td> - </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.carlicense.label" />: + </th> + <td>${user.get("carlicense")}</td> + </tr> + <tr> + <th> + <label class="fieldlabel" py:content="fields.labeleduri.label" />: + </th> + <td>${user.get("labeleduri")}</td> + </tr> </table> <div class="formsection" py:if='len(user_reports) > 0'>Direct Reports</div> diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py index 63df1ca8e..0f4850e9e 100644 --- a/ipa-server/xmlrpc-server/funcs.py +++ b/ipa-server/xmlrpc-server/funcs.py @@ -352,7 +352,7 @@ class IPAServer: # Let us add in some missing attributes if user.get('homedirectory') is None: user['homedirectory'] = '/home/%s' % user.get('uid') - if not user.get('gecos') is None: + if user.get('gecos') is None: user['gecos'] = user['uid'] # FIXME: This can be removed once the DS plugin is installed |