summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2013-09-04 16:12:41 +0000
committerpad <pad@vm-pad-b.spline.inf.fu-berlin.de>2013-09-04 16:12:41 +0000
commitb0b3c4b9c60f414b5ab0ea916791edb07e6fffc4 (patch)
tree9493ea4e06c5ce15b587baf765867960b71515af
parenta6624cda1ad4d31d98a18a258ed65899119aff56 (diff)
downloadpadlite-teams-b0b3c4b9c60f414b5ab0ea916791edb07e6fffc4.tar.gz
padlite-teams-b0b3c4b9c60f414b5ab0ea916791edb07e6fffc4.tar.bz2
padlite-teams-b0b3c4b9c60f414b5ab0ea916791edb07e6fffc4.zip
add ability to delete groups
-rw-r--r--forms.py6
-rw-r--r--models.py6
-rw-r--r--templates/group.html20
-rw-r--r--templates/group_delete.html38
-rw-r--r--views.py17
5 files changed, 83 insertions, 4 deletions
diff --git a/forms.py b/forms.py
index 7333acf..7418c58 100644
--- a/forms.py
+++ b/forms.py
@@ -1,4 +1,4 @@
-from wtforms import Form, TextField, validators
+from wtforms import Form, TextField, HiddenField, validators
from utils import Unique
from models import Group
@@ -9,3 +9,7 @@ class CreateGroup(Form):
message=u'Invalid group name (only simple characters, numbers, - and _).'),
Unique(Group, Group.name,
message=u'A group with this name already exists.')])
+
+class DeleteGroup(Form):
+ id = HiddenField('group id', [validators.Required()]);
+ sure = HiddenField('are you sure');
diff --git a/models.py b/models.py
index 5cc0d4e..51e123a 100644
--- a/models.py
+++ b/models.py
@@ -27,6 +27,12 @@ class Group(db.Model):
super(Group, self).save(force_insert=force_insert, only=only)
+ def delete_instance(self, **kwargs):
+ if self.api_id is not None:
+ pad.deleteGroup(self.api_id)
+ self.api_id = None
+ self.save()
+ super(Group, self).delete_instance(**kwargs)
class Member(db.Model):
group = ForeignKeyField(Group, related_name='members')
diff --git a/templates/group.html b/templates/group.html
index b1697e8..98c43c0 100644
--- a/templates/group.html
+++ b/templates/group.html
@@ -1,4 +1,5 @@
{% extends "layout.html" %}
+{% from "_formhelpers.html" import render_field %}
{% block head %}Group: {{group}}{% endblock %}
@@ -14,4 +15,23 @@
{% endfor %}
</ul>
</div>
+
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Delete this group</h3>
+ </div>
+
+ <div class="panel-body">
+ <form class="form-horizontal" role="form" method="POST">
+ {% for field in delete_form %}
+ {{ render_field(field) }}
+ {% endfor %}
+ <div class="form-group">
+ <div class="col-lg-offset-2 col-lg-8">
+ <button type="submit" class="btn btn-danger btn-block">Delete this group</button>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
{% endblock %}
diff --git a/templates/group_delete.html b/templates/group_delete.html
new file mode 100644
index 0000000..543c0f9
--- /dev/null
+++ b/templates/group_delete.html
@@ -0,0 +1,38 @@
+{% extends "layout.html" %}
+{% from "_formhelpers.html" import render_field %}
+
+{% block head %}Group: {{group}}{% endblock %}
+
+{% block content %}
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h3 class="panel-title">Delete this group</h3>
+ </div>
+
+ <div class="panel-body">
+ <form class="form-horizontal" role="form" method="POST">
+ <div class="form-group">
+ <div class="col-lg-offset-2 col-lg-8">
+ <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.
+ </p>
+ </div>
+ </div>
+
+ {% for field in delete_form %}
+ {{ render_field(field) }}
+ {% endfor %}
+ <div class="form-group">
+ <div class="col-lg-offset-2 col-lg-8">
+ <button type="submit" class="btn btn-danger btn-lg btn-block">Delete group {{group}}</button>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+{% endblock %}
diff --git a/views.py b/views.py
index 94a6048..9cb1bd7 100644
--- a/views.py
+++ b/views.py
@@ -1,8 +1,9 @@
from app import app
from auth import auth
-from flask import g, request
+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, DeleteGroup
from utils import templated
def get_group_or_404(*query):
@@ -22,9 +23,19 @@ def index():
groups = [member.group for member in g.user.groups]
return {'groups': groups, 'create_form': form}
-@app.route('/<group_name>/')
+@app.route('/<group_name>/', methods=['GET', 'POST'])
@templated('group.html')
@auth.login_required
def group(group_name):
group = get_group_or_404(Group.name == group_name)
- return {'group': group, 'members': group.members}
+ form = DeleteGroup(request.form)
+ if request.method == 'POST' and form.validate():
+ if form.sure.data == 'yes':
+ group.delete_instance(recursive=True)
+ return redirect(url_for('index'))
+ else:
+ form.sure.data = 'yes'
+ return render_template('group_delete.html', group=group, delete_form=form)
+ else:
+ form.id.data = group.id
+ return {'group': group, 'members': group.members, 'delete_form': form}