summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-19 01:15:11 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-19 02:15:56 +0100
commit2045386f7d09df9716f81ab523ffb619d8c6c887 (patch)
tree569ab4414e4e3d0a3ee0e7e6bf6ac63e8b277fb8
parent2e7f70591ddc2e73be3e9d426ceaffaf3df0b9c2 (diff)
downloadpadlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.tar.gz
padlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.tar.bz2
padlite-teams-2045386f7d09df9716f81ab523ffb619d8c6c887.zip
group_change: add form/template/view to change a group
-rw-r--r--forms.py9
-rw-r--r--templates/group_change.html25
-rw-r--r--utils.py10
-rw-r--r--views.py19
-rw-r--r--widgets.py9
5 files changed, 68 insertions, 4 deletions
diff --git a/forms.py b/forms.py
index c19a699..ef8ab65 100644
--- a/forms.py
+++ b/forms.py
@@ -1,8 +1,8 @@
from wtforms import HiddenField, validators
-from utils import Unique
from models import Group
-from wtfpeewee.orm import model_form
+from wtfpeewee.orm import model_form, ModelConverter
from flask.ext.wtf import Form
+from utils import Unique, ReadonlyField
from widgets import TextArea
@@ -19,6 +19,11 @@ CreateGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args=
'description': {'widget': TextArea(rows=7)}})
+ChangeGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args={
+ 'description': {'widget': TextArea(rows=7)}},
+ converter=ModelConverter(overrides={'name': ReadonlyField}))
+
+
class DeleteGroup(Form):
id = HiddenField('group id', [validators.Required()]);
sure = HiddenField('are you sure');
diff --git a/templates/group_change.html b/templates/group_change.html
new file mode 100644
index 0000000..9b95315
--- /dev/null
+++ b/templates/group_change.html
@@ -0,0 +1,25 @@
+{% extends "layout.html" %}
+{% from "_formhelpers.html" import render_field %}
+
+{% block head %}Group: {{group}}{% endblock %}
+
+{% block content %}
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Edit this group</h3>
+ </div>
+
+ <div class="panel-body">
+ <form class="form-horizontal" role="form" method="POST">
+ {% for field in change_form %}
+ {{ render_field(field) }}
+ {% endfor %}
+ <div class="form-group">
+ <div class="col-lg-10 col-lg-offset-2">
+ <button type="submit" class="btn btn-primary">Save group</button>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+{% endblock %}
diff --git a/utils.py b/utils.py
index f414d1b..fbec4c9 100644
--- a/utils.py
+++ b/utils.py
@@ -1,6 +1,7 @@
from functools import wraps
from flask import request, render_template
-from wtforms import ValidationError
+from wtforms import Field, ValidationError
+from widgets import Static
# using http://flask.pocoo.org/docs/patterns/viewdecorators/
def templated(template=None):
@@ -35,3 +36,10 @@ class Unique(object):
raise ValidationError(self.message)
except self.model.DoesNotExist:
pass
+
+
+class ReadonlyField(Field):
+ widget = Static()
+
+ def process_formdata(self, _):
+ pass
diff --git a/views.py b/views.py
index 7edb0f2..d881d21 100644
--- a/views.py
+++ b/views.py
@@ -3,7 +3,7 @@ from auth import auth
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 forms import CreateGroup, DeleteGroup, ChangeGroup
from utils import templated
from filters import *
@@ -41,3 +41,20 @@ def group(group_name):
else:
form.id.data = group.id
return {'group': group, 'members': group.members, 'delete_form': form}
+
+
+@app.route('/<group_name>/_change/', methods=['GET', 'POST'])
+@templated('group_change.html')
+@auth.login_required
+def group_change(group_name):
+ group = get_group_or_404(Group.name == group_name, Member.admin == True)
+ form = ChangeGroup(request.form, obj=group)
+ if form.validate_on_submit():
+ del form.name
+ form.populate_obj(group)
+ group.save()
+ return redirect(url_for('group', group_name=group.name))
+ return {'group': group,
+ 'change_form': form,
+ 'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group},
+ {'text': 'Edit group'}]}
diff --git a/widgets.py b/widgets.py
index 77f3650..3e5d2b8 100644
--- a/widgets.py
+++ b/widgets.py
@@ -1,6 +1,15 @@
import wtforms.widgets.core
+class Static(object):
+ def __call__(self, field, **kwargs):
+ kwargs.setdefault('id', field.id)
+ if kwargs['class_'] == 'form-control':
+ kwargs['class_'] = 'form-control-static'
+ html = ['<p %s>' % wtforms.widgets.core.html_params(**kwargs), field.data,'</p>']
+ return wtforms.widgets.core.HTMLString(''.join(html))
+
+
class TextArea(wtforms.widgets.core.TextArea):
def __init__(self, **kwargs):
self.kwargs = kwargs