Get more group stuff working.

This commit is contained in:
Ricky Zhou (周家杰) 2008-02-27 13:45:49 -05:00
parent 2824c189a3
commit 9471dcb5d7
5 changed files with 39 additions and 49 deletions

View file

@ -37,7 +37,7 @@ def canAdminGroup(person, group):
return True return True
else: else:
try: try:
role = PersonRoles.query.filter_by(group_id=group.id, person_id=person.id).one() role = PersonRoles.query.filter_by(group=group, member=person).one()
except IndexError: except IndexError:
''' Not in the group ''' ''' Not in the group '''
return False return False
@ -57,7 +57,7 @@ def canSponsorGroup(person, group):
return True return True
else: else:
try: try:
role = PersonRoles.query.filter_by(group_id=g.id, person_id=p.id).one() role = PersonRoles.query.filter_by(group=group, member=person).one()
except IndexError: except IndexError:
''' Not in the group ''' ''' Not in the group '''
return False return False
@ -71,7 +71,7 @@ def isApproved(person, group):
Returns True if the user is an approved member of a group Returns True if the user is an approved member of a group
''' '''
try: try:
role = PersonRoles.query.filter_by(group_id=group.id, person_id=person.id).one() role = PersonRoles.query.filter_by(group=group, member=person).one()
except IndexError: except IndexError:
''' Not in the group ''' ''' Not in the group '''
return False return False
@ -167,13 +167,11 @@ def canApplyGroup(person, group, applicant):
# owner of the group (when they initially make it). # owner of the group (when they initially make it).
prerequisite = group.prerequisite prerequisite = group.prerequisite
# TODO: Make this return more useful info. # TODO: Make this return more useful info.
if prerequisite: if prerequisite:
if prerequisite in person.approved_memberships: if prerequisite in person.approved_memberships:
pass pass
else: else:
print "GOT HERE %s" % prerequisite print "GOT HERE, prereq: %s" % prerequisite
turbogears.flash(_('%s membership required before application to this group is allowed' % prerequisite.name)) turbogears.flash(_('%s membership required before application to this group is allowed' % prerequisite.name))
return False return False
# A user can apply themselves, and FAS admins can apply other people. # A user can apply themselves, and FAS admins can apply other people.

View file

@ -154,7 +154,7 @@ class CLA(controllers.Controller):
else: else:
try: try:
clickgroup = Groups.by_name(config.get('cla_click_group')) clickgroup = Groups.by_name(config.get('cla_click_group'))
clickgroup.remove_person(person, person) person.remove(cilckgroup, person)
except: except:
pass pass
turbogears.flash(_("You have successfully signed the CLA. You are now in the '%s' group.") % group.name) turbogears.flash(_("You have successfully signed the CLA. You are now in the '%s' group.") % group.name)

View file

@ -204,7 +204,7 @@ class Group(controllers.Controller):
@identity.require(turbogears.identity.not_anonymous()) @identity.require(turbogears.identity.not_anonymous())
@validate(validators=editGroup()) @validate(validators=editGroup())
@error_handler(error) @error_handler(error)
@expose() @expose(template="fas.templates.group.edit")
def save(self, groupname, display_name, owner, group_type, needs_sponsor=0, user_can_remove=1, prerequisite='', joinmsg=''): def save(self, groupname, display_name, owner, group_type, needs_sponsor=0, user_can_remove=1, prerequisite='', joinmsg=''):
'''Edit a group''' '''Edit a group'''
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
@ -232,8 +232,8 @@ class Group(controllers.Controller):
turbogears.flash(_('The group details could not be saved.')) turbogears.flash(_('The group details could not be saved.'))
else: else:
turbogears.flash(_('The group details have been saved.')) turbogears.flash(_('The group details have been saved.'))
turbogears.redirect('/group/view/%s' % groupname) turbogears.redirect('/group/view/%s' % group.name)
return dict() return dict(group=group)
@identity.require(turbogears.identity.not_anonymous()) @identity.require(turbogears.identity.not_anonymous())
@expose(template="fas.templates.group.list", allow_json=True) @expose(template="fas.templates.group.list", allow_json=True)
@ -306,26 +306,26 @@ class Group(controllers.Controller):
target = People.by_username(targetname) target = People.by_username(targetname)
group = Groups.by_name(groupname) group = Groups.by_name(groupname)
if not canSponsorUser(sponsor, group, target): if not canSponsorUser(person, group, target):
turbogears.flash(_("You cannot sponsor '%s'") % target.username) turbogears.flash(_("You cannot sponsor '%s'") % target.username)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
return dict() return dict()
else: else:
try: try:
group.sponsor_person(person, target) target.sponsor(group, person)
except: except:
turbogears.flash(_("'%s' could not be sponsored!") % target.username) turbogears.flash(_("'%s' could not be sponsored!") % target.username)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
else: else:
import turbomail import turbomail
message = turbomail.Message(config.get('accounts_mail'), p.mail, "Your Fedora '%s' membership has been sponsored" % group.name) message = turbomail.Message(config.get('accounts_mail'), target.emails['primary'].email, "Your Fedora '%s' membership has been sponsored" % group.name)
message.plain = dedent(''' message.plain = dedent('''
%(name)s <%(email)s> has sponsored you for membership in the %(group)s %(name)s <%(email)s> has sponsored you for membership in the %(group)s
group of the Fedora account system. If applicable, this change should group of the Fedora account system. If applicable, this change should
propagate into the e-mail aliases and CVS repository within an hour. propagate into the e-mail aliases and CVS repository within an hour.
%(joinmsg)s %(joinmsg)s
''') % {'group': group.name, 'name': user.human_name, 'email': user.emails['primary'].email, 'joinmsg': group.joinmsg} ''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'].email, 'joinmsg': group.joinmsg}
turbomail.enqueue(message) turbomail.enqueue(message)
turbogears.flash(_("'%s' has been sponsored!") % person.human_name) turbogears.flash(_("'%s' has been sponsored!") % person.human_name)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
@ -340,23 +340,23 @@ class Group(controllers.Controller):
# TODO: Add confirmation? # TODO: Add confirmation?
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
person = People.by_username(username) person = People.by_username(username)
requester = People.by_username(targetname) target = People.by_username(targetname)
group = Groups.by_name(groupname) group = Groups.by_name(groupname)
if not canRemoveUser(person, group, requester): if not canRemoveUser(person, group, target):
turbogears.flash(_("You cannot remove '%s'.") % target.username) turbogears.flash(_("You cannot remove '%s'.") % target.username)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
return dict() return dict()
else: else:
try: try:
person.remove(group, requester) target.remove(group, target)
except KeyError: except KeyError:
turbogears.flash(_('%(name)s could not be removed from %(group)s!') % \ turbogears.flash(_('%(name)s could not be removed from %(group)s!') % \
{'name': requester.username, 'group': group.name}) {'name': target.username, 'group': group.name})
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
else: else:
import turbomail import turbomail
message = turbomail.Message(config.get('accounts_mail'), requester.emails['primary'].email, "Your Fedora '%s' membership has been removed" % group.name) message = turbomail.Message(config.get('accounts_mail'), target.emails['primary'].email, "Your Fedora '%s' membership has been removed" % group.name)
message.plain = dedent(''' message.plain = dedent('''
%(name)s <%(email)s> has removed you from the '%(group)s' %(name)s <%(email)s> has removed you from the '%(group)s'
group of the Fedora Accounts System This change is effective group of the Fedora Accounts System This change is effective
@ -365,7 +365,7 @@ class Group(controllers.Controller):
''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'].email} ''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'].email}
turbomail.enqueue(message) turbomail.enqueue(message)
turbogears.flash(_('%(name)s has been removed from %(group)s!') % \ turbogears.flash(_('%(name)s has been removed from %(group)s!') % \
{'name': requester.username, 'group': group.name}) {'name': target.username, 'group': group.name})
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
return dict() return dict()
@ -386,7 +386,7 @@ class Group(controllers.Controller):
return dict() return dict()
else: else:
try: try:
group.upgrade_person(person, target) target.upgrade(group, person)
except TypeError, e: except TypeError, e:
turbogears.flash(e) turbogears.flash(e)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
@ -396,9 +396,7 @@ class Group(controllers.Controller):
else: else:
import turbomail import turbomail
message = turbomail.Message(config.get('accounts_mail'), target.emails['primary'].email, "Your Fedora '%s' membership has been upgraded" % group.name) message = turbomail.Message(config.get('accounts_mail'), target.emails['primary'].email, "Your Fedora '%s' membership has been upgraded" % group.name)
user = Person.byUsername(username) # Should we make person.upgrade return this?
g = Groups.byUsername(username)
# Should we make upgrade_person return this?
role = PersonRoles.query.filter_by(group=group, member=target).one() role = PersonRoles.query.filter_by(group=group, member=target).one()
status = role.role_type status = role.role_type
message.plain = dedent(''' message.plain = dedent('''
@ -408,7 +406,7 @@ class Group(controllers.Controller):
into the e-mail aliases within an hour. into the e-mail aliases within an hour.
''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'].email, 'status': status} ''') % {'group': group.name, 'name': person.human_name, 'email': person.emails['primary'].email, 'status': status}
turbomail.enqueue(message) turbomail.enqueue(message)
turbogears.flash(_('%s has been upgraded!') % person.username) turbogears.flash(_('%s has been upgraded!') % target.username)
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
return dict() return dict()
@ -416,7 +414,7 @@ class Group(controllers.Controller):
@validate(validators=usernameGroupnameExists()) @validate(validators=usernameGroupnameExists())
@error_handler(error) @error_handler(error)
@expose(template='fas.templates.group.view') @expose(template='fas.templates.group.view')
def downgrade(self, groupname, username): def downgrade(self, groupname, targetname):
'''Upgrade user in group''' '''Upgrade user in group'''
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
person = People.by_username(username) person = People.by_username(username)
@ -429,7 +427,7 @@ class Group(controllers.Controller):
return dict() return dict()
else: else:
try: try:
group.downgrade_person(person, target) target.downgrade(group, person)
except: except:
turbogears.flash(_('%(username)s could not be downgraded!') % {'username': target.username}) turbogears.flash(_('%(username)s could not be downgraded!') % {'username': target.username})
turbogears.redirect('/group/view/%s' % group.name) turbogears.redirect('/group/view/%s' % group.name)
@ -471,7 +469,7 @@ class Group(controllers.Controller):
@expose(template='fas.templates.group.invite') @expose(template='fas.templates.group.invite')
def invite(self, groupname): def invite(self, groupname):
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
person = Person.byUsername(username) person = People.by_username(username)
group = Groups.by_name(groupname) group = Groups.by_name(groupname)
return dict(person=person, group=group) return dict(person=person, group=group)
@ -483,7 +481,7 @@ class Group(controllers.Controller):
def sendinvite(self, groupname, target): def sendinvite(self, groupname, target):
import turbomail import turbomail
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
person = Person.byUsername(username) person = People.by_username(username)
group = Groups.by_name(groupname) group = Groups.by_name(groupname)
if isApproved(person, group): if isApproved(person, group):

View file

@ -32,8 +32,8 @@
<input py:if="not group.user_can_remove" type="checkbox" id="user_can_remove" name="user_can_remove" value="1" /> <input py:if="not group.user_can_remove" type="checkbox" id="user_can_remove" name="user_can_remove" value="1" />
</div> </div>
<div class="field"> <div class="field">
<label for="prerequisite">${_('Must Belong To:')}</label> <label for="prerequisite">${_('Group Prerequisite:')}</label>
<input type="text" id="prerequisite" name="prerequisite" value="${group.prerequisite}" /> <input type="text" id="prerequisite" name="prerequisite" value="${group.prerequisite.name}" />
</div> </div>
<div class="field"> <div class="field">
<label for="joinmsg">${_('Group Join Message:')}</label> <label for="joinmsg">${_('Group Join Message:')}</label>

View file

@ -70,32 +70,26 @@
from datetime import datetime from datetime import datetime
from pytz import timezone from pytz import timezone
?> ?>
<td>${role.member.creation}<!--${datetime.fromtimestamp(float(role.member.creation), timezone(role.member.timezone)).strftime('%F %R %Z')}--></td> <td>${role.creation}</td>
<td py:if="role.approval == 'none'">${role.member.creation}</td> <td>${role.approval}</td>
<td py:if="role.approval != 'none'">${role.member.timezone}<!--${datetime.fromtimestamp(float(role.member.creation), timezone(role.member.timezone)).strftime('%F %R %Z')}--></td>
<td>${role.role_status}</td> <td>${role.role_status}</td>
<td>${role.role_type}</td> <td>${role.role_type}</td>
<!--<td>${groups[user].fedoraRoleDomain}</td>-->
<!-- This section includes all action items --> <!-- This section includes all action items -->
<td py:if="auth.canSponsorGroup(role.member, group)"> <td py:if="auth.canSponsorGroup(person, group)">
<ul> <ul>
<li py:if="group in role.member.unapproved_memberships">
<li py:if="group in role.member.memberships"> <a py:if="group.needs_sponsor" href="${tg.url('/group/sponsor/%s/%s' % (group.name, role.member.username))}">${_('Sponsor')}</a>
<a py:if="group in role.member.unapproved_memberships" <a py:if="not group.needs_sponsor" href="${tg.url('/group/sponsor/%s/%s' % (group.name, role.member.username))}">${_('Approve')}</a>
href="${tg.url('/group/sponsor/%s/%s' % (group.name, role.member.username))}">${_('Sponsor')}</a>
<!--<a py:if="not group.fedoraGroupNeedsSponsor.upper() == 'TRUE'"
href="${tg.url('/group/sponsor/%s/%s' % (groups[user].cn, user))}">${_('Approve')}</a>
</li> </li>
<li py:if="auth.canRemoveUser(tg.identity.user.user_name, group.cn, userName)"> <li py:if="auth.canRemoveUser(person, group, role.member)">
<a href="${tg.url('/group/remove/%s/%s' % (groups[user].cn, user))}">${_('Remove')}</a> <a href="${tg.url('/group/remove/%s/%s' % (group.name, role.member.username))}">${_('Remove')}</a>
</li> </li>
<li py:if="auth.canUpgradeUser(tg.identity.user.user_name, group.cn, userName)"> <li py:if="auth.canUpgradeUser(person, group, role.member)">
<a href="${tg.url('/group/upgrade/%s/%s' % (groups[user].cn, user))}">${_('Upgrade')}</a> <a href="${tg.url('/group/upgrade/%s/%s' % (group.name, role.member.username))}">${_('Upgrade')}</a>
</li> </li>
<li py:if="auth.canDowngradeUser(tg.identity.user.user_name, group.cn, userName)"> <li py:if="auth.canDowngradeUser(person, group, role.member)">
<a href="${tg.url('/group/downgrade/%s/%s' % (groups[user].cn, user))}">${_('Downgrade')}</a>--> <a href="${tg.url('/group/downgrade/%s/%s' % (group.name, role.member.username))}">${_('Downgrade')}</a>
</li> </li>
</ul> </ul>
</td> </td>
</tr> </tr>