From b0b3c4b9c60f414b5ab0ea916791edb07e6fffc4 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 4 Sep 2013 16:12:41 +0000 Subject: add ability to delete groups --- forms.py | 6 +++++- models.py | 6 ++++++ templates/group.html | 20 ++++++++++++++++++++ templates/group_delete.html | 38 ++++++++++++++++++++++++++++++++++++++ views.py | 17 ++++++++++++++--- 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 templates/group_delete.html 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 %} + +
+
+

Delete this group

+
+ +
+
+ {% for field in delete_form %} + {{ render_field(field) }} + {% endfor %} +
+
+ +
+
+
+
+
{% 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 %} +
+
+

Delete this group

+
+ +
+
+
+
+

+ Are you sure you want to delete the group {{group}}? +

+ +

+ This will permanently delete all pads of this group and + all information about the group members. +

+
+
+ + {% for field in delete_form %} + {{ render_field(field) }} + {% endfor %} +
+
+ +
+
+
+
+
+{% 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('//') +@app.route('//', 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} -- cgit v1.2.3-1-g7c22