summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2016-01-10 15:33:52 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2016-01-10 17:37:01 +0100
commit1f98d945110b7cd467811e784eead280edcdee9e (patch)
tree75c30a12b06e96553783379b4cd38a533dbc23f3
parent1ec270de4390f215f874e8fad23736ce978c1bbd (diff)
downloadpadlite-teams-1f98d945110b7cd467811e784eead280edcdee9e.tar.gz
padlite-teams-1f98d945110b7cd467811e784eead280edcdee9e.tar.bz2
padlite-teams-1f98d945110b7cd467811e784eead280edcdee9e.zip
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.
-rw-r--r--migrations/versions/2016-01-10_1a81cf0e0862_initial_migration.py4
-rw-r--r--models.py4
-rw-r--r--templates/browse.html (renamed from templates/all.html)2
-rw-r--r--templates/group.html12
-rw-r--r--templates/group_delete.html2
-rw-r--r--templates/index.html2
-rw-r--r--views.py49
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'], ),
diff --git a/models.py b/models.py
index 564c27c..252cb20 100644
--- a/models.py
+++ b/models.py
@@ -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>
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/<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}