diff options
-rw-r--r-- | migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py | 4 | ||||
-rw-r--r-- | models.py | 4 | ||||
-rw-r--r-- | templates/browse.html (renamed from templates/all.html) | 2 | ||||
-rw-r--r-- | templates/group.html | 12 | ||||
-rw-r--r-- | templates/group_delete.html | 2 | ||||
-rw-r--r-- | templates/index.html | 2 | ||||
-rw-r--r-- | views.py | 49 |
7 files changed, 33 insertions, 42 deletions
diff --git a/migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py b/migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py index 4ee4051..c6439df 100644 --- a/migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py +++ b/migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py @@ -21,7 +21,7 @@ def upgrade(): sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('email', sa.String(length=255), nullable=False), - sa.Column('last_login', sa.DateTime(timezone=True), server_default='CURRENT_TIMESTAMP', nullable=False), + sa.Column('last_login', sa.DateTime(timezone=True), nullable=False), sa.Column('active', sa.Boolean(), server_default='1', nullable=False), sa.Column('admin', sa.Boolean(), server_default='0', nullable=False), sa.PrimaryKeyConstraint('id'), @@ -42,7 +42,7 @@ def upgrade(): sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('group_id', sa.Integer(), nullable=False), - sa.Column('created', sa.DateTime(timezone=True), server_default='CURRENT_TIMESTAMP', nullable=False), + sa.Column('created', sa.DateTime(timezone=True), nullable=False), sa.Column('public', sa.Boolean(), server_default='0', nullable=False), sa.Column('password', sa.String(length=255), nullable=True), sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ), @@ -30,7 +30,7 @@ class User(UserMixin, APIMixin, SessionMixin, db.Model): id = column(db.Integer, primary_key=True) name = column(db.String(255), unique=True) email = column(db.String(255)) - last_login = column(db.DateTime(timezone=True), server_default=func.now()) + last_login = column(db.DateTime(timezone=True), default=func.now()) active = column(db.Boolean, default=True, server_default=expression.true()) admin = column(db.Boolean, default=False, @@ -148,7 +148,7 @@ class Pad(APIMixin, SessionMixin, db.Model): id = column(db.Integer, primary_key=True) name = column(db.String(255)) group_id = column(db.Integer, db.ForeignKey('groups.id')) - created = column(db.DateTime(timezone=True), server_default=func.now()) + created = column(db.DateTime(timezone=True), default=func.now()) public = column(db.Boolean, default=False, server_default=expression.false()) password = column(db.String(255), default='', diff --git a/templates/all.html b/templates/browse.html index 128c115..34bd10d 100644 --- a/templates/all.html +++ b/templates/browse.html @@ -11,7 +11,7 @@ <div class="list-group"> {% for group in groups %} - <a class="list-group-item" href="{{ url_for('public_group', group_name=group.name) }}">{{group}}</a> + <a class="list-group-item" href="{{ url_for('group', group_name=group.name) }}">{{group}}</a> {% endfor %} </div> diff --git a/templates/group.html b/templates/group.html index 38e078f..1d3205c 100644 --- a/templates/group.html +++ b/templates/group.html @@ -24,7 +24,7 @@ {% endif %} </div> -{% if not public_view %} +{% if membership.active %} <div class="panel panel-default"> <div class="panel-heading" style="border-bottom: 0"> <h3 class="panel-title">Pads</h3> @@ -56,7 +56,7 @@ <div class="panel-body">No pads created.</div> {% endfor %} - {% if admin %} + {% if membership.admin %} <div class="panel-footer"> <a href="{{ url_for('pad_create', group_name=group.name) }}"> Create pad @@ -77,7 +77,7 @@ </ul> </div> -{% if admin %} +{% if membership.admin %} {% for member in members|rejectattr("active") %} {% if loop.first %} <div class="panel panel-default"> @@ -139,6 +139,11 @@ </div> <div class="panel-body"> + {% if membership %} + <div class="text-center"> + Membership request pending. + </div> + {% else %} <form class="form-horizontal" role="form" method="POST"> <div class="form-group"> <div class="col-lg-offset-2 col-lg-8"> @@ -146,6 +151,7 @@ </div> </div> </form> + {% endif %} </div> </div> {% endif %} diff --git a/templates/group_delete.html b/templates/group_delete.html index 543c0f9..951b640 100644 --- a/templates/group_delete.html +++ b/templates/group_delete.html @@ -16,7 +16,7 @@ <p class="form-control-static text-center lead"> Are you sure you want to delete the group {{group}}? </p> - + <p class="form-control-static text-center"> This will permanently delete all pads of this group and all information about the group members. diff --git a/templates/index.html b/templates/index.html index f79fb68..11105e0 100644 --- a/templates/index.html +++ b/templates/index.html @@ -16,7 +16,7 @@ </div> <div class="panel-footer"> - <a href="{{ url_for('all') }}">Find public browsable groups</a> + <a href="{{ url_for('browse') }}">Find public browsable groups</a> </div> </div> @@ -73,13 +73,12 @@ def index(): return dict(groups=groups, create_form=form) -@app.route('/_all/', defaults={'page': 1}) -@app.route('/_all/_page/<int:page>') +@app.route('/_browse/', defaults={'page': 1}) +@app.route('/_browse/<int:page>') @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/<group_name>/', 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('/<group_name>/_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('/<group_name>/') +@app.route('/<group_name>/', 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} |