Get more group stuff working.
This commit is contained in:
parent
2824c189a3
commit
9471dcb5d7
5 changed files with 39 additions and 49 deletions
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue