summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2013-09-04 15:49:03 +0000
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2013-09-04 15:52:20 +0000
commitd29ad289dc6b4873c1ab06841509aeb21fa28958 (patch)
tree4fcf292afab3537142976dfa0a7f9af4a6464bb8
parent1a9edf1fcb945f7f235ad5691f4958d1c4089dc0 (diff)
downloadpadlite-teams-d29ad289dc6b4873c1ab06841509aeb21fa28958.tar.gz
padlite-teams-d29ad289dc6b4873c1ab06841509aeb21fa28958.tar.bz2
padlite-teams-d29ad289dc6b4873c1ab06841509aeb21fa28958.zip
add ability to create new groups
-rw-r--r--forms.py11
-rw-r--r--models.py9
-rw-r--r--templates/index.html18
-rw-r--r--views.py13
4 files changed, 47 insertions, 4 deletions
diff --git a/forms.py b/forms.py
new file mode 100644
index 0000000..7333acf
--- /dev/null
+++ b/forms.py
@@ -0,0 +1,11 @@
+from wtforms import Form, TextField, validators
+from utils import Unique
+from models import Group
+
+class CreateGroup(Form):
+ name = TextField('group name', [
+ validators.Required(),
+ validators.Regexp('^[a-zA-Z-1-9_-]+$',
+ message=u'Invalid group name (only simple characters, numbers, - and _).'),
+ Unique(Group, Group.name,
+ message=u'A group with this name already exists.')])
diff --git a/models.py b/models.py
index b59ae66..5cc0d4e 100644
--- a/models.py
+++ b/models.py
@@ -1,7 +1,7 @@
from peewee import CharField, DateTimeField, BooleanField, ForeignKeyField
from peewee import create_model_tables
from datetime import datetime
-from app import db
+from app import db, pad
class User(db.Model):
username = CharField()
@@ -21,6 +21,13 @@ class Group(db.Model):
def __unicode__(self):
return self.name
+ def save(self, force_insert=False, only=None):
+ if self.id is None or force_insert:
+ self.api_id = pad.createGroup()
+
+ super(Group, self).save(force_insert=force_insert, only=only)
+
+
class Member(db.Model):
group = ForeignKeyField(Group, related_name='members')
user = ForeignKeyField(User, related_name='groups')
diff --git a/templates/index.html b/templates/index.html
index eef2f0c..6898a42 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -16,5 +16,23 @@
</div>
</div>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Create new group</h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal" role="form" method="POST">
+ {% for field in create_form %}
+ {{ render_field(field) }}
+ {% endfor %}
+ <div class="form-group">
+ <div class="col-lg-offset-2 col-lg-10">
+ <button type="submit" class="btn btn-default">Create group</button>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+
<a class="btn btn-default btn-block" href="{{ url_for('auth.logout') }}">Logout</a>
{% endblock %}
diff --git a/views.py b/views.py
index e918d3c..c6f4a8a 100644
--- a/views.py
+++ b/views.py
@@ -1,11 +1,18 @@
from app import app
from auth import auth
-from flask import g
+from flask import g, request
+from models import Group, Member
+from forms import CreateGroup
from utils import templated
-@app.route('/')
+@app.route('/', methods=['GET', 'POST'])
@templated('index.html')
@auth.login_required
def index():
+ form = CreateGroup(request.form)
+ if request.method == 'POST' and form.validate():
+ group = Group.create(name=form.name.data)
+ Member.create(user=g.user, group=group, admin=True)
+ form = CreateGroup()
groups = [member.group for member in g.user.groups]
- return {'groups': groups}
+ return {'groups': groups, 'create_form': form}