From 761202f415626af06caa5395eb9a2113b0003c80 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Sat, 9 Mar 2019 11:20:17 +0100
Subject: [PATCH] Improve forum_list

---
 forums/models.py                        | 14 +++++++-------
 forums/templates/forums/forum_list.html | 10 +++++++---
 forums/views.py                         | 14 ++++++++++++--
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/forums/models.py b/forums/models.py
index ef03914f2..44117bd82 100644
--- a/forums/models.py
+++ b/forums/models.py
@@ -63,7 +63,7 @@ class Forum(models.Model):
         ]
 
     def __str__(self):
-        return self.slug
+        return self.name
 
     def get_absolute_url(self):
         return reverse('forums:forum_detail', kwargs={'slug': self.slug})
@@ -129,17 +129,17 @@ class Meeting(Forum):
                                    self.date_until.strftime('%Y-%m-%d'))
 
     @property
-    def context_color(self):
-        """If meeting is future: primary; ongoing: green; voting: orange; finished: info."""
+    def context_colors(self):
+        """If meeting is future: primary; ongoing: success; voting: warning; finished: info."""
         today = datetime.date.today()
         if today < self.date_from:
-            return 'primary'
+            return {'bg': 'primary', 'text': 'white', 'message': 'Meeting is coming up'}
         elif today <= self.date_until:
-            return 'success'
+            return {'bg': 'success', 'text': 'light', 'message': 'Meeting is ongoing'}
         elif today < self.date_until + datetime.timedelta(days=8):
-            return 'warning'
+            return {'bg': 'warning', 'text': 'dark', 'message': 'Meeting is finished, voting open'}
         else:
-            return 'info'
+            return {'bg': 'info', 'text': 'dark', 'message': 'Meeting is finished'}
 
 
 class Post(models.Model):
diff --git a/forums/templates/forums/forum_list.html b/forums/templates/forums/forum_list.html
index f7806ccea..9df6817b4 100644
--- a/forums/templates/forums/forum_list.html
+++ b/forums/templates/forums/forum_list.html
@@ -28,11 +28,15 @@
     <div class="card-columns">
       {% for forum in object_list %}
       <div class="card">
-	<div class="card-header d-flex justify-content-between">
+	<div class="card-header">
 	  {% if forum.meeting %}
-	  <span class="badge badge-{{ forum.meeting.context_color }}">Meeting:</span>
+	  {% with context_colors=forum.meeting.context_colors %}
+	  <span class="badge badge-{{ context_colors.bg }} mx-0 mb-2 p-2 text-{{ context_colors.text }}">{{ context_colors.message }}</span>
+	  {% endwith %}
+	  <br/>
 	  {% endif %}
-	  <a href="{{ forum.get_absolute_url }}">{{ forum }}</a>
+	  <span class="d-flex justify-content-between">
+	    <a href="{{ forum.get_absolute_url }}">{{ forum|truncatechars:30 }}</a>
 	  <span class="badge badge-primary badge-pill">{{ forum.nr_posts }} post{{ forum.nr_posts|pluralize }}</span>
 	</div>
 	<div class="card-body">
diff --git a/forums/views.py b/forums/views.py
index 2607f47a4..f1a88aa74 100644
--- a/forums/views.py
+++ b/forums/views.py
@@ -56,10 +56,20 @@ class MeetingCreateView(ForumCreateView):
 
 class ForumUpdateView(PermissionRequiredMixin, UpdateView):
     permission_required = 'forums.update_forum'
-    model = Forum
-    form_class = ForumForm
     template_name = 'forums/forum_form.html'
 
+    def get_object(self, queryset=None):
+        try:
+            return Meeting.objects.get(slug=self.kwargs['slug'])
+        except Meeting.DoesNotExist:
+            return Forum.objects.get(slug=self.kwargs['slug'])
+
+    def get_form(self, form_class=None):
+        try:
+            self.object.meeting
+            return MeetingForm(**self.get_form_kwargs())
+        except Meeting.DoesNotExist:
+            return ForumForm(**self.get_form_kwargs())
 
 class ForumDeleteView(PermissionRequiredMixin, DeleteView):
     permission_required = 'forums.delete_forum'
-- 
GitLab