From 1f98d945110b7cd467811e784eead280edcdee9e Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sun, 10 Jan 2016 15:33:52 +0100 Subject: One URL for public/member group view. The group is now always reachable with a consistent URL regardless of membership of the current_user. If the user is no member the public view is rendered with the possibility to join the group. --- views.py | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) (limited to 'views.py') diff --git a/views.py b/views.py index 9117146..457be01 100644 --- a/views.py +++ b/views.py @@ -73,13 +73,12 @@ def index(): return dict(groups=groups, create_form=form) -@app.route('/_all/', defaults={'page': 1}) -@app.route('/_all/_page/') +@app.route('/_browse/', defaults={'page': 1}) +@app.route('/_browse/') @templated() @login_required -def all(page): +def browse(page): public_groups = Group.query.filter( - ~Group.members.any(Member.user == current_user), Group.browsable == True, ) @@ -90,28 +89,6 @@ def all(page): 'breadcrumbs': [{'text': 'Public groups'}]} -@app.route('/_all//', methods=['GET', 'POST']) -@templated('group.html') -@login_required -def public_group(group_name): - group = Group.query.filter( - ~Group.members.any(Member.user == current_user), - Group.name == group_name, - Group.browsable == True, - ).first_or_404() - - if request.method == 'POST': - Member.create(user=current_user, group=group) - db.session.commit() - return redirect(url_for('all')) - - return {'group': group, - 'public_view': True, - 'breadcrumbs': [ - {'text': 'Public groups', 'href': url_for('all')}, - {'text': group}]} - - @app.route('//_delete/', methods=['GET', 'POST']) @templated() @login_required @@ -337,7 +314,7 @@ def pad(group_name, pad_name): 'host': 'https://%s' % urlparse(request.url).hostname} -@app.route('//') +@app.route('//', methods=['GET', 'POST']) @templated() @login_required def group(group_name): @@ -345,14 +322,22 @@ def group(group_name): Group.name == group_name, ).first_or_404() - member = Member.query.filter( + membership = Member.query.filter( Member.user == current_user, Member.group == group, - Member.active == True, - ).first_or_404() + ).first() + + if membership is None and request.method == 'POST': + membership = Member.create(user=current_user, group=group) + db.session.commit() + + breadcrumbs = [{'text': group}] + if group.browsable and (membership is None or not membership.active): + breadcrumbs.insert(0, {'text': 'Public groups', + 'href': url_for('browse')}) return {'group': group, + 'membership': membership, 'pads': group.pads, - 'admin': member.admin, 'members': group.members, - 'breadcrumbs': [{'text': group}]} + 'breadcrumbs': breadcrumbs} -- cgit v1.2.3-1-g7c22