1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
from app import app
from auth import auth
from flask import g, request, redirect, render_template, url_for
from flask_peewee.utils import get_object_or_404
from models import Group, Member
from forms import CreateGroup, DeleteForm, ChangeGroup
from utils import templated
from pagination import Pagination
from filters import *
def get_group_or_404(*query):
group = get_object_or_404(Group.select().join(Member),
Member.user == g.user, *query)
return group
@app.route('/', methods=['GET', 'POST'])
@templated('index.html')
@auth.login_required
def index():
form = CreateGroup(request.form)
if form.validate_on_submit():
group = Group()
form.populate_obj(group)
group.save()
Member.create(user=g.user, group=group, admin=True, active=True)
form = CreateGroup()
groups = [member.group for member in g.user.groups if member.active]
return {'groups': groups, 'create_form': form}
@app.route('/_all/', defaults={'page': 1})
@app.route('/_all/_page/<int:page>')
@templated('all.html')
def all(page):
user_groups = Group.select().join(Member).where(Member.user == g.user)
public_groups = Group.select().where(~(Group.id << user_groups)).where(Group.browsable == True)
count = public_groups.count()
return {'groups': public_groups.paginate(page, 10),
'count': count,
'pagination': Pagination(page, 10, count),
'breadcrumbs': [{'text': 'Public groups'}]}
@app.route('/<group_name>/_delete/', methods=['GET', 'POST'])
@templated('group_delete.html')
@auth.login_required
def group_delete(group_name):
group = get_group_or_404(Group.name == group_name, Member.admin == True)
form = DeleteForm(request.form)
if form.validate_on_submit():
if form.sure.data == 'yes':
group.delete_instance(recursive=True)
return redirect(url_for('index'))
return {'group': group,
'delete_form': form,
'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group},
{'text': 'Delete group'}]}
@app.route('/<group_name>/_change/', methods=['GET', 'POST'])
@templated('group_change.html')
@auth.login_required
def group_change(group_name):
group = get_group_or_404(Group.name == group_name, Member.admin == True)
form = ChangeGroup(request.form, obj=group)
if form.validate_on_submit():
del form.name
form.populate_obj(group)
group.save()
return redirect(url_for('group', group_name=group.name))
return {'group': group,
'change_form': form,
'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group},
{'text': 'Edit group'}]}
@app.route('/<group_name>/_join/<int:member_id>/<accept>/')
@auth.login_required
def group_join(group_name, member_id, accept):
group = get_group_or_404(Group.name == group_name, Member.admin == True)
member = get_object_or_404(Member, Member.id == member_id, Member.group == group)
if accept == 'yes':
member.active = True
member.save()
elif accept == 'no':
member.delete_instance()
return redirect(url_for('group', group_name=group_name))
@app.route('/<group_name>/')
@templated('group.html')
@auth.login_required
def group(group_name):
group = get_group_or_404(Group.name == group_name)
member = get_object_or_404(Member, Member.user == g.user, Member.group == group)
return {'group': group,
'admin': member.admin,
'members': [m for m in group.members.execute()],
'breadcrumbs': [{'text': group}]}
|