diff options
-rw-r--r-- | forms.py | 6 | ||||
-rw-r--r-- | models.py | 6 | ||||
-rw-r--r-- | templates/group.html | 20 | ||||
-rw-r--r-- | templates/group_delete.html | 38 | ||||
-rw-r--r-- | views.py | 17 |
5 files changed, 83 insertions, 4 deletions
@@ -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'); @@ -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 %} @@ -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} |