Smarter sorting, use auth.py in templates.

This commit is contained in:
Ricky Zhou (周家杰) 2007-08-28 16:11:06 -07:00
parent 18217d3d76
commit a68f64ec7f
9 changed files with 55 additions and 54 deletions

View file

@ -42,6 +42,17 @@ def canSponsorGroup(userName, groupName, g=None):
except:
return False
def isApproved(userName, groupName, g=None):
if not g:
g = Groups.byUserName(userName)
try:
if (g[groupName].fedoraRoleStatus.lower() == 'approved'):
return True
else:
return False
except:
return False
def canEditUser(userName, editUserName):
if userName == editUserName:
return True

View file

@ -15,6 +15,8 @@ from operator import itemgetter
from fas.user import User
from fas.group import Group
from fas.auth import isAdmin, canAdminGroup, canSponsorGroup, canEditUser
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

View file

@ -12,8 +12,6 @@ from fas.fasLDAP import UserGroup
from fas.auth import isAdmin, canAdminGroup, canSponsorGroup, canEditUser
from operator import itemgetter
from fas.user import knownUser, userNameExists
class knownGroup(validators.FancyValidator):
@ -97,7 +95,6 @@ class Group(controllers.Controller):
#searchUserForm.groupName.display('group')
#findUser.groupName.display(value='fff')
value = {'groupName': groupName}
groups = sorted(groups.items(), key=itemgetter(0))
return dict(userName=userName, groups=groups, group=group, me=me, value=value)
@expose(template="fas.templates.group.new")
@ -202,7 +199,6 @@ class Group(controllers.Controller):
except:
turbogears.flash(_("No Groups found matching '%s'") % search)
groups = {}
groups = sorted(groups.items(), key=itemgetter(0))
return dict(groups=groups, search=search, myGroups=myGroups)
@validate(validators=userNameGroupNameExists())
@ -325,6 +321,5 @@ class Group(controllers.Controller):
@identity.require(turbogears.identity.not_anonymous())
def dump(self, groupName=None):
groups = Groups.byGroupName(groupName)
groups = sorted(groups.items(), key=itemgetter(0))
return dict(groups=groups, Person=Person)

View file

@ -1,3 +1,3 @@
#for user in groups
${user[0]},${Person.byUserName(user[0]).mail},${Person.byUserName(user[0]).givenName},${user[1].fedoraRoleType}
#for user in sorted(groups.keys())
${user},${Person.byUserName(user).mail},${Person.byUserName(user).givenName},${groups[user].fedoraRoleType}
#end

View file

@ -27,15 +27,15 @@
<tr><th>Group</th><th>Description</th><th>Status</th></tr>
</thead>
<tbody>
<tr py:for="group in groups">
<td><a href="${tg.url('/group/view/%s' % group[1].cn)}">${group[1].cn}</a></td>
<td>${group[1].fedoraGroupDesc}</td>
<tr py:for="group in sorted(groups.keys())">
<td><a href="${tg.url('/group/view/%s' % groups[group].cn)}">${groups[group].cn}</a></td>
<td>${groups[group].fedoraGroupDesc}</td>
<td>
<a py:if="group[1].cn in myGroups" href="${tg.url('/group/view/%s' % group[1].cn)}">
<span class="approved" py:if="myGroups[group[1].cn].fedoraRoleStatus.lower() == 'approved'">Approved</span>
<span class="unapproved" py:if="myGroups[group[1].cn].fedoraRoleStatus.lower() == 'unapproved'">Unapproved</span>
<a py:if="groups[group].cn in myGroups" href="${tg.url('/group/view/%s' % groups[group].cn)}">
<span class="approved" py:if="myGroups[groups[group].cn].fedoraRoleStatus.lower() == 'approved'">Approved</span>
<span class="unapproved" py:if="myGroups[groups[group].cn].fedoraRoleStatus.lower() == 'unapproved'">Unapproved</span>
</a>
<a py:if="group[1].cn not in myGroups" href="${tg.url('/group/view/%s' % group[1].cn)}"><span>Not a Member</span></a>
<a py:if="groups[group].cn not in myGroups" href="${tg.url('/group/view/%s' % groups[group].cn)}"><span>Not a Member</span></a>
</td>
</tr>
</tbody>

View file

@ -7,11 +7,12 @@
<title>Edit Group</title>
</head>
<body>
<?python from fas import auth ?>
<h2>${group.fedoraGroupDesc} (${group.cn})</h2>
<h3>
My Status:
<span py:if="me.fedoraRoleStatus.lower() == 'approved'" class="approved">Approved</span>
<span py:if="me.fedoraRoleStatus.lower() == 'unapproved'" class="unapproved">Unapproved</span>
<span py:if="auth.isApproved(userName, group.cn)" class="approved">Approved</span>
<span py:if="not auth.isApproved(userName, group.cn)" class="unapproved">Unapproved</span>
<span py:if="'Not a Member' in me.fedoraRoleStatus">Not a Member</span>
</h3>
<form py:if="'Not a Member' in me.fedoraRoleStatus" action="${tg.url('/group/apply/%s/%s' % (group.cn, userName))}">
@ -54,32 +55,29 @@
<th>Date Approved</th>
<th>Approval</th>
<th>Role Type</th>
<th py:if='me.fedoraRoleType == "administrator" or me.fedoraRoleType == "sponsor"'>Action</th>
<th py:if="auth.canSponsorGroup(userName, group.cn)">Action</th>
</tr>
</thead>
<tr py:for="user in groups">
<td><a href="${tg.url('/user/view/%s' % user[0])}">${user[0]}</a></td>
<td py:if='not(user[1].fedoraRoleSponsor == "None")'><a href="${tg.url('/user/view/%s' % user[1].fedoraRoleSponsor)}">${user[1].fedoraRoleSponsor}</a></td>
<td py:if='user[1].fedoraRoleSponsor == "None"'>${user[1].fedoraRoleSponsor}</td>
<td>${user[1].fedoraRoleCreationDate}</td>
<td>${user[1].fedoraRoleApprovalDate}</td>
<td>${user[1].fedoraRoleStatus}</td>
<td>${user[1].fedoraRoleType}</td>
<!--<td>${user[1].fedoraRoleDomain}</td>-->
<tr py:for="user in sorted(groups.keys())">
<td><a href="${tg.url('/user/view/%s' % user)}">${user}</a></td>
<td py:if='not(groups[user].fedoraRoleSponsor == "None")'><a href="${tg.url('/user/view/%s' % groups[user].fedoraRoleSponsor)}">${groups[user].fedoraRoleSponsor}</a></td>
<td py:if='groups[user].fedoraRoleSponsor == "None"'>None</td>
<td>${groups[user].fedoraRoleCreationDate}</td>
<td>${groups[user].fedoraRoleApprovalDate}</td>
<td>${groups[user].fedoraRoleStatus}</td>
<td>${groups[user].fedoraRoleType}</td>
<!--<td>${groups[user].fedoraRoleDomain}</td>-->
<!-- This section includes all action items -->
<td py:if='me.fedoraRoleType == "administrator"'>
<a py:if="group.fedoraGroupNeedsSponsor.upper() == 'TRUE'" href="${tg.url('/group/sponsor/%s/%s' % (user[1].cn, user[0]))}">Sponsor</a>
<a py:if="not group.fedoraGroupNeedsSponsor.upper() == 'TRUE' and user[1].fedoraRoleStatus.lower() != 'approved'" href="${tg.url('/group/sponsor/%s/%s' % (user[1].cn, user[0]))}">Approve</a>
<a href="${tg.url('/group/remove/%s/%s' % (user[1].cn, user[0]))}">Delete</a>
<a href="${tg.url('/group/upgrade/%s/%s' % (user[1].cn, user[0]))}">Upgrade</a>
<a href="${tg.url('/group/downgrade/%s/%s' % (user[1].cn, user[0]))}">Downgrade</a> Suspend
</td>
<td py:if='me.fedoraRoleType == "sponsor" and not user[1].fedoraRoleType == "administrator"'>
<a href="${tg.url('/group/sponsor/%s/%s' % (user[1].cn, user[0]))}" py:if="group.fedoraGroupNeedsSponsor.upper() == 'TRUE'">Sponsor</a>
<a href="${tg.url('/group/sponsor/%s/%s' % (user[1].cn, user[0]))}" py:if="not group.fedoraGroupNeedsSponsor.upper() == 'TRUE'">Approve</a>
<a href="${tg.url('/group/remove/%s/%s' % (user[1].cn, user[0]))}">Delete</a>
<a py:if='user[1].fedoraRoleType' href="${tg.url('/group/upgrade/%s/%s' % (user[1].cn, user[0]))}">Upgrade</a>
<a href="${tg.url('/group/downgrade/%s/%s' % (user[1].cn, user[0]))}">Downgrade</a> Suspend
<td py:if="auth.canSponsorGroup(userName, group.cn)">
<ul>
<li>
<a py:if="group.fedoraGroupNeedsSponsor.upper() == 'TRUE'" href="${tg.url('/group/sponsor/%s/%s' % (groups[user].cn, user))}">Sponsor</a>
<a py:if="not group.fedoraGroupNeedsSponsor.upper() == 'TRUE' and groups[user].fedoraRoleStatus.lower() != 'approved'" href="${tg.url('/group/sponsor/%s/%s' % (groups[user].cn, user))}">Approve</a>
</li>
<li><a href="${tg.url('/group/remove/%s/%s' % (groups[user].cn, user))}">Delete</a></li>
<li><a href="${tg.url('/group/upgrade/%s/%s' % (groups[user].cn, user))}">Upgrade</a></li>
<li><a href="${tg.url('/group/downgrade/%s/%s' % (groups[user].cn, user))}">Downgrade</a></li>
</ul>
</td>
</tr>
</table>

View file

@ -28,7 +28,7 @@
</tr>
</thead>
<tbody>
<tr py:for="user in users">
<tr py:for="user in sorted(users)">
<td><a href="${tg.url('/user/view/%s' % user)}">${user}</a></td>
<td>
<span py:if="claDone[user]" class="approved"> Done</span>

View file

@ -7,6 +7,7 @@
<title>View Account</title>
</head>
<body>
<?python from fas import auth ?>
<h2 class="account" py:if="personal">Your Fedora Account</h2>
<h2 class="account" py:if="not personal">${user.givenName}'s Fedora Account</h2>
<h3>Account Details <a href="${tg.url('/user/edit/%s' % user.cn)}" py:if="personal or admin">(edit)</a></h3>
@ -29,16 +30,16 @@
<h3 py:if="personal">Your Roles</h3>
<h3 py:if="not personal">${user.givenName}'s Roles</h3>
<ul class="roleslist">
<li py:for="group in groups"><span class="team approved">${groupdata[group[0]].fedoraGroupDesc} (${group[0]})</span></li>
<li py:for="group in groupsPending"><span class="team unapproved">${groupdata[group[0]].fedoraGroupDesc} (${group[0]})</span></li>
<li py:for="group in sorted(groups.keys())"><span class="team approved">${groupdata[group].fedoraGroupDesc} (${group})</span></li>
<li py:for="group in sorted(groupsPending.keys())"><span class="team unapproved">${groupdata[group].fedoraGroupDesc} (${group})</span></li>
</ul>
<ul class="actions" py:if="personal">
<li><a href="/">(Join another project)</a></li>
<li><a href="/">(Create a new project)</a></li>
</ul>
<ul id="rolespanel" py:if="personal">
<li py:for="group in groups" class="role">
<h4>${groupdata[group[0]].fedoraGroupDesc}</h4>, ${group[1].fedoraRoleType}
<li py:for="group in sorted(groups.keys())" class="role">
<h4>${groupdata[group].fedoraGroupDesc}</h4>, ${groups[group].fedoraRoleType}
<dl>
<dt>Status:</dt>
<dd>
@ -48,13 +49,12 @@
<dd>
<ul class="tools">
<li><a href="/">Invite a New Member...</a></li>
<li py:if="group[1].fedoraRoleType.lower() in ('administrator', 'sponsor')"><a href="${tg.url('/group/view/%s' % group[0])}">View All Pending Group Membership Requests...</a></li>
<li><a href="${tg.url('/group/view/%s' % group[0])}">Manage Group Membership...</a></li>
<!-- Replace with canAdminGroup, etc. -->
<li py:if="group[1].fedoraRoleType.lower() == 'administrator'"><a href="${tg.url('/group/edit/%s' % group[0])}">Manage Group Details...</a></li>
<li py:if="auth.canSponsorGroup(user.cn, group)"><a href="${tg.url('/group/view/%s' % group)}">View All Pending Group Membership Requests...</a></li>
<li><a href="${tg.url('/group/view/%s' % group)}">Manage Group Membership...</a></li>
<li py:if="auth.canAdminGroup(user.cn, group)"><a href="${tg.url('/group/edit/%s' % group)}">Manage Group Details...</a></li>
</ul>
</dd>
<div py:if="group[1].fedoraRoleType.lower() in ('administrator', 'sponsor')" py:strip="">
<div py:if="auth.canSponsorGroup(user.cn, group)" py:strip="">
<dt>Queue:</dt>
<dd>
<ul class="queue">

View file

@ -12,8 +12,6 @@ from fas.fasLDAP import UserGroup
from fas.auth import isAdmin, canAdminGroup, canSponsorGroup, canEditUser
from operator import itemgetter
class knownUser(validators.FancyValidator):
'''Make sure that a user already exists'''
def _to_python(self, value, state):
@ -122,8 +120,6 @@ class User(controllers.Controller):
claDone=True
except KeyError:
claDone=None
groups = sorted(groups.items(), key=itemgetter(0))
groupsPending = sorted(groupsPending.items(), key=itemgetter(0))
return dict(user=user, groups=groups, groupsPending=groupsPending, groupdata=groupdata, claDone=claDone, personal=personal, admin=admin)
@expose(template="fas.templates.user.edit")
@ -186,7 +182,6 @@ class User(controllers.Controller):
users = []
cla_done = Groups.byGroupName('cla_done')
claDone = {}
users.sort()
for u in users:
try:
cla_done[u]