From 0566b34a87ed4d7166d0f66ff56544219b4fc020 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Mon, 2 Sep 2019 18:43:55 +0200
Subject: [PATCH] Add function to create group. Closes #66.

---
 biscuit/core/templates/core/create_group.html | 14 +++++++++++
 biscuit/core/templates/core/groups.html       |  3 +++
 biscuit/core/urls.py                          |  1 +
 biscuit/core/views.py                         | 24 +++++++++++++++++++
 4 files changed, 42 insertions(+)
 create mode 100644 biscuit/core/templates/core/create_group.html

diff --git a/biscuit/core/templates/core/create_group.html b/biscuit/core/templates/core/create_group.html
new file mode 100644
index 000000000..8bd6dc7d4
--- /dev/null
+++ b/biscuit/core/templates/core/create_group.html
@@ -0,0 +1,14 @@
+{% extends "core/base.html" %}
+{% load bootstrap4 i18n %}
+
+{% block page_title %}{% blocktrans %}Create group{% endblocktrans %}{% endblock %}
+
+{% block content %}
+
+ <form method="post">
+  {% csrf_token %}
+  {% bootstrap_form create_group_form %}
+  <input type="submit" value="Edit" />
+ </form>
+
+{% endblock %}
diff --git a/biscuit/core/templates/core/groups.html b/biscuit/core/templates/core/groups.html
index fbcadfbb5..e6fa8116c 100644
--- a/biscuit/core/templates/core/groups.html
+++ b/biscuit/core/templates/core/groups.html
@@ -8,6 +8,9 @@
  <h2>
   {% blocktrans %}List of all groups{% endblocktrans %}
  </h2>
+ <p>
+  <a href="{% url 'create_group' %}">{% blocktrans %}Create new group{% endblocktrans %}</a>
+ </p>
 
  {% render_table groups_table %}
 
diff --git a/biscuit/core/urls.py b/biscuit/core/urls.py
index f7d7df552..9dd4ca9ff 100644
--- a/biscuit/core/urls.py
+++ b/biscuit/core/urls.py
@@ -19,6 +19,7 @@ urlpatterns = [
          {'template': 'card'}, name='person_by_id_card'),
     path('person/<int:id_>/edit', views.edit_person, name='edit_person_by_id'),
     path('groups', views.groups, name='groups'),
+    path('group/create', views.create_group, name='create_group'),
     path('group/<int:id_>', views.group,
          {'template': 'full'}, name='group_by_id'),
     path('group/<int:id_>/edit', views.edit_group, name='edit_group_by_id'),
diff --git a/biscuit/core/views.py b/biscuit/core/views.py
index 987c538fd..5006ddc9b 100644
--- a/biscuit/core/views.py
+++ b/biscuit/core/views.py
@@ -188,3 +188,27 @@ def edit_group(request: HttpRequest, id_: int) -> HttpResponse:
 def data_management(request: HttpRequest) -> HttpResponse:
     context = {}
     return render(request, 'core/data_management.html', context)
+
+
+@admin_required
+def create_group(request: HttpRequest) -> HttpResponse:
+    context = {}
+
+    create_group_form = EditGroupForm(request.POST or None)
+
+    if request.method == 'POST':
+        create_group_form=EditGroupForm(request.POST)
+        if create_group_form.is_valid():
+            create_group = Group.objects.create(
+                name = create_group_form.cleaned_data['name'],
+                short_name = create_group_form.cleaned_data['short_name'],
+                members = create_group_form.cleaned_data['members'],
+                owners = create_group_form.cleaned_data['owners']
+            )
+
+            messages.success(request, _('The group has been created.'))
+            return redirect('groups')
+
+    context['create_group_form'] = create_group_form
+
+    return render(request, 'core/create_group.html', context)
-- 
GitLab