Add group screen. More to come...

This commit is contained in:
Kevin McCarthy 2007-09-11 14:51:51 -07:00
parent b4297caa8b
commit c4ab64cabc
6 changed files with 174 additions and 9 deletions

View File

@ -18,12 +18,15 @@ import ipa.ipaclient
import ipa.user import ipa.user
import xmlrpclib import xmlrpclib
import forms.user import forms.user
import forms.group
from helpers import userhelper from helpers import userhelper
from ipa import ipaerror from ipa import ipaerror
ipa.config.init_config() ipa.config.init_config()
user_new_form = forms.user.UserNewForm() user_new_form = forms.user.UserNewForm()
user_edit_form = forms.user.UserEditForm() user_edit_form = forms.user.UserEditForm()
group_new_form = forms.group.GroupNewForm()
group_edit_form = forms.group.GroupEditForm()
password_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" password_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
@ -283,10 +286,12 @@ class Root(controllers.RootController):
return "" return ""
@expose() @expose()
@identity.require(identity.not_anonymous())
def suggest_email(self, givenname, sn): def suggest_email(self, givenname, sn):
if (len(givenname) == 0) or (len(sn) == 0): if (len(givenname) == 0) or (len(sn) == 0):
return "" return ""
client.set_principal(identity.current.user_name)
givenname = givenname.lower() givenname = givenname.lower()
sn = sn.lower() sn = sn.lower()
@ -331,13 +336,55 @@ class Root(controllers.RootController):
client.set_principal(identity.current.user_name) client.set_principal(identity.current.user_name)
return dict() return dict()
@expose("ipagui.templates.groupnew")
############
# Resource #
############
@expose("ipagui.templates.resindex")
@identity.require(identity.not_anonymous()) @identity.require(identity.not_anonymous())
def resindex(self, tg_errors=None): def groupnew(self, tg_errors=None):
"""Displays the new group form"""
if tg_errors:
turbogears.flash("There was a problem with the form!")
client.set_principal(identity.current.user_name) client.set_principal(identity.current.user_name)
return dict()
return dict(form=group_new_form)
@expose()
@identity.require(identity.not_anonymous())
def groupcreate(self, **kw):
"""Creates a new group"""
restrict_post()
client.set_principal(identity.current.user_name)
if kw.get('submit') == 'Cancel':
turbogears.flash("Add group cancelled")
raise turbogears.redirect('/')
tg_errors, kw = self.groupcreatevalidate(**kw)
if tg_errors:
return dict(form=group_new_form, tg_template='ipagui.templates.groupnew')
try:
new_group = ipa.group.Group()
new_group.setValue('cn', kw.get('cn'))
new_group.setValue('description', kw.get('description'))
rv = client.add_group(new_group)
turbogears.flash("%s added!" % kw.get('cn'))
# raise turbogears.redirect('/groupedit', cn=kw['cn'])
raise turbogears.redirect('/')
except ipaerror.exception_for(ipaerror.LDAP_DUPLICATE):
turbogears.flash("Group with name '%s' already exists" %
kw.get('cn'))
return dict(form=group_new_form, tg_template='ipagui.templates.groupnew')
except ipaerror.IPAError, e:
turbogears.flash("Group add failed: " + str(e) + "<br/>" + str(e.detail))
return dict(form=group_new_form, tg_template='ipagui.templates.groupnew')
@validate(form=group_new_form)
@identity.require(identity.not_anonymous())
def groupcreatevalidate(self, tg_errors=None, **kw):
return tg_errors, kw
@validate(form=group_edit_form)
@identity.require(identity.not_anonymous())
def groupupdatevalidate(self, tg_errors=None, **kw):
return tg_errors, kw

View File

@ -0,0 +1,48 @@
import turbogears
from turbogears import validators, widgets
class GroupFields():
cn = widgets.TextField(name="cn", label="Name")
gidnumber = widgets.TextField(name="gidnumber", label="GID")
description = widgets.TextField(name="description", label="Description")
cn_hidden = widgets.HiddenField(name="cn")
group_orig = widgets.HiddenField(name="group_orig")
class GroupNewValidator(validators.Schema):
cn = validators.PlainText(not_empty=True)
description = validators.String(not_empty=False)
class GroupNewForm(widgets.Form):
params = ['group']
fields = [GroupFields.cn, GroupFields.description]
validator = GroupNewValidator()
def __init__(self, *args, **kw):
super(GroupNewForm,self).__init__(*args, **kw)
(self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.groupnewform")
self.group = GroupFields
def update_params(self, params):
super(GroupNewForm,self).update_params(params)
class GroupEditValidator(validators.Schema):
gidnumber = widgets.TextField(name="gidnumber", label="GID")
description = widgets.TextField(name="description", label="Description")
class GroupEditForm(widgets.Form):
params = ['group']
fields = [GroupFields.gidnumber, GroupFields.description]
validator = GroupEditValidator()
def __init__(self, *args, **kw):
super(GroupEditForm,self).__init__(*args, **kw)
(self.template_c, self.template) = widgets.meta.load_kid_template("ipagui.templates.groupeditform")
self.group = GroupFields

View File

@ -65,6 +65,8 @@ class UserEditValidator(validators.Schema):
givenname = validators.String(not_empty=True) givenname = validators.String(not_empty=True)
sn = validators.String(not_empty=True) sn = validators.String(not_empty=True)
mail = validators.Email(not_empty=True) 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 # validators.PhoneNumber may be a bit too picky, requiring an area code
# telephonenumber = validators.PlainText(not_empty=False) # telephonenumber = validators.PlainText(not_empty=False)

View File

@ -0,0 +1,13 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'userlayout.kid'">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
<title>Add Group</title>
</head>
<body>
<h2>Add Group</h2>
${form.display(action="groupcreate")}
</body>
</html>

View File

@ -0,0 +1,55 @@
<div xmlns:py="http://purl.org/kid/ns#"
class="simpleroster">
<form action="${action}" name="${name}" method="${method}" class="tableform">
<div class="formsection">Group Details</div>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th>
<label class="fieldlabel" for="${group.cn.field_id}"
py:content="group.cn.label" />:
</th>
<td>
<span py:replace="group.cn.display(value_for(group.cn))" />
<span py:if="tg.errors.get('cn')" class="fielderror"
py:content="tg.errors.get('cn')" />
</td>
</tr>
<tr>
<th>
<label class="fieldlabel" for="${group.description.field_id}"
py:content="group.description.label" />:
</th>
<td>
<span py:replace="group.description.display(value_for(group.description))" />
<span py:if="tg.errors.get('description')" class="fielderror"
py:content="tg.errors.get('description')" />
</td>
</tr>
<tr>
<th>
<label class="fieldlabel" for="${group.gidnumber.field_id}"
py:content="group.gidnumber.label" />:
</th>
<td>
Generated by server
</td>
</tr>
</table>
<table class="formtable" cellpadding="2" cellspacing="0" border="0">
<tr>
<th></th>
<td>
<br />
<input type="submit" class="submitbutton" name="submit" value="Add Group"/>
</td>
</tr>
</table>
</form>
</div>

View File

@ -69,7 +69,7 @@
<a href="${tg.url('/userlist')}">Find People</a><br/> <a href="${tg.url('/userlist')}">Find People</a><br/>
</p> </p>
<p> <p>
<a href="${tg.url('/groupindex')}">Add Group</a><br/> <a href="${tg.url('/groupnew')}">Add Group</a><br/>
<a href="${tg.url('/groupindex')}">Find Groups</a><br/> <a href="${tg.url('/groupindex')}">Find Groups</a><br/>
</p> </p>
<p> <p>