Smarter sorting, use auth.py in templates.
This commit is contained in:
parent
18217d3d76
commit
a68f64ec7f
9 changed files with 55 additions and 54 deletions
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue