From abb2918d77f03dc6348ccac82efe8b9b10a949f3 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Thu, 7 Mar 2019 17:17:24 +0100
Subject: [PATCH] Improve forum detail permissions handling

---
 forums/templates/forums/forum_detail.html     | 53 +++++++++++--------
 .../templates/forums/forum_permissions.html   |  4 +-
 forums/urls.py                                |  5 ++
 forums/views.py                               | 18 ++++---
 4 files changed, 49 insertions(+), 31 deletions(-)

diff --git a/forums/templates/forums/forum_detail.html b/forums/templates/forums/forum_detail.html
index 7ffaf8e84..000f5fb3c 100644
--- a/forums/templates/forums/forum_detail.html
+++ b/forums/templates/forums/forum_detail.html
@@ -19,32 +19,39 @@
   <div class="col-12">
     <h3 class="highlight">{{ forum.name }}</h3>
 
-    <div>
-      {% if perms.forums.add_forum or "can_change_forum" in user_perms %}
-      <h4 class="highlight">Permissions on this Forum instance</h4>
-
-      <p>Groups with permissions [click on the Group's name to manage permissions]:</p>
-      <ul>
-	{% for group in groups_with_perms %}
-	{% get_obj_perms group for forum as "group_perms" %}
-	<li><a href="{% url 'forums:forum_permissions' slug=forum.slug group_id=group.id %}">{{ group.name }}</a>: {{ group_perms }}</li>
-	{% empty %}
-	<li>No group has permissions on this Forum</li>
-	{% endfor %}
-      </ul>
-
-      <p>Users with permissions:</p>
-      <ul>
-	{% for u in users_with_perms %}
-	{% get_obj_perms u for forum as "u_perms" %}
-	<li>{{ u.first_name }} {{ u.last_name }}: {{ u_perms }}</li>
-	{% endfor %}
-      </ul>
-    </div>
-
+    {% if perms.forums.add_forum or "can_change_forum" in user_perms %}
     <ul>
       <li><a href="{% url 'forums:forum_create' parent_model='forum' parent_id=forum.id %}">Create a (sub)Forum within this one</a></li>
     </ul>
+
+    <div class="card">
+      <div class="card-header">
+	Permissions on this Forum instance
+	<button class="btn btn-link small" data-toggle="collapse" data-target="#permissionsCard">
+	View/manage</button>
+      </div>
+      <div class="card-body collapse" id="permissionsCard">
+	<p><a href="{% url 'forums:forum_permissions' slug=forum.slug %}">Grant permissions to a new group</a></p>
+	<p>Groups with permissions [click on the Group's name to manage permissions]:</p>
+	<ul>
+	  {% for group in groups_with_perms %}
+	  {% get_obj_perms group for forum as "group_perms" %}
+	  <li><a href="{% url 'forums:forum_permissions' slug=forum.slug group_id=group.id %}">{{ group.name }}</a>: {{ group_perms }}</li>
+	  {% empty %}
+	  <li>No group has permissions on this Forum</li>
+	  {% endfor %}
+	</ul>
+
+	<p>Users with permissions:</p>
+	<ul>
+	  {% for u in users_with_perms %}
+	  {% get_obj_perms u for forum as "u_perms" %}
+	  <li>{{ u.first_name }} {{ u.last_name }}: {{ u_perms }}</li>
+	  {% endfor %}
+	</ul>
+      </div>
+    </div>
+
     {% endif %}
 
     {% for post in forum.posts.all %}
diff --git a/forums/templates/forums/forum_permissions.html b/forums/templates/forums/forum_permissions.html
index 5a4ed9333..55f0c5580 100644
--- a/forums/templates/forums/forum_permissions.html
+++ b/forums/templates/forums/forum_permissions.html
@@ -18,9 +18,9 @@
 <div class="row">
   <div class="col-12">
 
-    <h3 class="highlight">{{ forum.name }}: permissions for Group {{ group.name }}</h3>
+    <h3 class="highlight">{{ forum.name }}: permissions{% if group %} for Group {{ group.name }}{% endif %}</h3>
 
-    <form action="{% url 'forums:forum_permissions' slug=forum.slug group_id=group.id %}" method="post">
+    <form action="{% url 'forums:forum_permissions' slug=forum.slug %}" method="post">
       {% csrf_token %}
       {{ form|bootstrap }}
       <input type="submit" value="Assign permissions" class="btn btn-primary">
diff --git a/forums/urls.py b/forums/urls.py
index 486cbdeec..5a99fd280 100644
--- a/forums/urls.py
+++ b/forums/urls.py
@@ -27,6 +27,11 @@ urlpatterns = [
         views.ForumPermissionsView.as_view(),
         name='forum_permissions'
     ),
+    url(
+        r'^(?P<slug>[\w-]+)/permissions/$',
+        views.ForumPermissionsView.as_view(),
+        name='forum_permissions'
+    ),
     url(
         r'^$',
         views.ForumListView.as_view(),
diff --git a/forums/views.py b/forums/views.py
index cb7093352..d96a99905 100644
--- a/forums/views.py
+++ b/forums/views.py
@@ -65,16 +65,22 @@ class ForumPermissionsView(PermissionRequiredMixin, UpdateView):
 
     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
-        context['group'] = get_object_or_404(Group, pk=self.kwargs.get('group_id'))
+        try:
+            context['group'] = Group.objects.get(pk=self.kwargs.get('group_id'))
+        except Group.DoesNotExist:
+            pass
         return context
 
     def get_initial(self, *args, **kwargs):
         initial = super().get_initial(*args, **kwargs)
-        group = get_object_or_404(Group, pk=self.kwargs.get('group_id'))
-        perms = get_perms (group, self.object)
-        initial['group'] = group.id
-        initial['can_view'] = 'can_view_forum' in perms
-        initial['can_post'] = 'can_post_to_forum' in perms
+        try:
+            group = Group.objects.get(pk=self.kwargs.get('group_id'))
+            perms = get_perms (group, self.object)
+            initial['group'] = group.id
+            initial['can_view'] = 'can_view_forum' in perms
+            initial['can_post'] = 'can_post_to_forum' in perms
+        except Group.DoesNotExist:
+            pass
         return initial
 
     def form_valid(self, form):
-- 
GitLab