From ea7c2dda683b18cb646a5e4a80d1405cd3ec90f9 Mon Sep 17 00:00:00 2001
From: Subin Siby <mail@subinsb.com>
Date: Sat, 10 Aug 2019 21:17:38 +0530
Subject: [PATCH 1/2] Add permalinks for announcements

---
 mainapp/urls.py              |  1 +
 mainapp/views.py             | 12 ++++++++-
 templates/announcements.html | 51 ++++++++++++++++++++++--------------
 3 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/mainapp/urls.py b/mainapp/urls.py
index 4a6a86f8b..07367537c 100644
--- a/mainapp/urls.py
+++ b/mainapp/urls.py
@@ -58,6 +58,7 @@
     path('find_people/', views.find_people, name='find_people'),
     path('missing_persons/', views.missing_persons, name='missing_persons'),
     path('announcements/', views.announcements, name="Announcements"),
+    path('announcements/<int:id>', views.announcements_id, name="announcements_id"),
     path('announcements/<str:filter_>', views.announcements_filter, name="announcements_filter"),
     path('camp_requirements/', views.camp_requirements_list, name='camp_requirements_list'),
     path('submission_success/', views.SubmissionSuccess.as_view(), name='submission_success'),
diff --git a/mainapp/views.py b/mainapp/views.py
index 784910b16..e08bd1804 100644
--- a/mainapp/views.py
+++ b/mainapp/views.py
@@ -795,7 +795,17 @@ def announcements(request):
     return render(request, 'announcements.html', {'filter': filter, "data" : link_data,
                                                   'pinned_data': pinned_data, 'hashtags':hashtags})
 
-                                                  
+
+def announcements_id(request,id):
+    link_data = Announcements.objects.filter(id=id).all()
+
+    hashtags = get_hashtags(Announcements)
+    paginator = Paginator(link_data, 10)
+    page = request.GET.get('page')
+    link_data = paginator.get_page(page)
+    return render(request, 'announcements.html', {"data" : link_data, 'hashtags':hashtags, 'id': id})
+
+
 # Function to filter announcements based on hashtag
 def announcements_filter(request,filter_):
     link_data = Announcements.objects.filter(is_pinned=False,hashtags__icontains=filter_).order_by('-id').all()
diff --git a/templates/announcements.html b/templates/announcements.html
index 1a91920c1..77bb0d997 100644
--- a/templates/announcements.html
+++ b/templates/announcements.html
@@ -10,8 +10,13 @@
 </nav>
 
 <div class="container text-center">
-  <h2 class="main-logo">Important Announcements</h2>
+    {% if id %}
+    <h2 class="main-logo">Announcement {{ id }}</h2>
+    {% else %}
+    <h2 class="main-logo">Important Announcements</h2>
+    {% endif %}
     <div class="announcement-cards">
+        {% if not id %}
         <div class="card">
                 <span class="card-text">Tags<a href="{% url 'Announcements' %}" class="btn btn-info btn-xs pull-right" role="button">Clear Filters</a></span>
 
@@ -26,15 +31,15 @@ <h2 class="main-logo">Important Announcements</h2>
                     </span>
 
                 {% endfor %}
-
         </div>
+        {% endif %}
         {% for req in pinned_data %}
             <div class="card priority-very-important">
                 <span class="card-text">
                     {{ req.description | safe | urlize | linebreaks }}<br/>
                 </span>
                 <span class="card-priority">Very Important</span><br/>
-                <span class="card-time">{% bootstrap_icon "time" %} {{ req.dateadded }}</span>
+                <span class="card-time">{% bootstrap_icon "time" %}&nbsp;<a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a></span>
             </div>
         {% endfor %}
         
@@ -44,7 +49,7 @@ <h2 class="main-logo">Important Announcements</h2>
             
         {% for req in data %}
             <div class="card priority-{{ req.get_priority_display.lower }}">
-                <span class="card-title">{% bootstrap_icon "time" %} {{ req.dateadded }}&nbsp;<b title="Priority" class="card-priority">{{ req.get_priority_display.upper }} priority</b></span><br/><br/>
+                <span class="card-title">{% bootstrap_icon "time" %}&nbsp;<a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a>&nbsp;<b title="Priority" class="card-priority">{{ req.get_priority_display.upper }} priority</b></span><br/><br/>
                 <span class="card-text">
                     {{ req.description | safe | urlize }}<br/>
                     {% if req.image %}
@@ -56,7 +61,7 @@ <h2 class="main-logo">Important Announcements</h2>
                             class="btn btn-default card-link">{% bootstrap_icon "download" %} Download</a>
                     {% endif %}
                 </span>
-                <span class="card-time">{% bootstrap_icon "time" %} {{ req.dateadded }}</span>
+                <span class="card-time">{% bootstrap_icon "time" %}&nbsp;<a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a></span>
 
 
                 {% with req.hashtags|get_list as hashtags_ %}
@@ -72,21 +77,27 @@ <h2 class="main-logo">Important Announcements</h2>
         {% endfor %}
     </div>
 
-    <div class="pagination">
-        <span class="step-links">
-            {% if data.has_previous %}
-            <a href="?page=1">&laquo; first</a>
-            <a href="?page={{ data.previous_page_number }}">previous</a>
-            {% endif %} {% for i in data.paginator.page_range %} {% if data.number == i %}
-            <a class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></a>
-            {% else %}
-            <a href="?page={{ i }}">{{ i }}</a>
-            {% endif %} {% endfor %} {% if data.has_next %}
-            <a href="?page={{ data.next_page_number }}">next</a>
-            <a href="?page={{ data.paginator.num_pages }}">last &raquo;</a>
-            {% endif %}
-        </span>
-    </div>
+    {% if id %}
+        <div>
+            <a href="{% url 'Announcements' %}" class="btn btn-primary">See All Announcements</a>
+        </div>
+    {% else %}
+        <div class="pagination">
+            <span class="step-links">
+                {% if data.has_previous %}
+                <a href="?page=1">&laquo; first</a>
+                <a href="?page={{ data.previous_page_number }}">previous</a>
+                {% endif %} {% for i in data.paginator.page_range %} {% if data.number == i %}
+                <a class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></a>
+                {% else %}
+                <a href="?page={{ i }}">{{ i }}</a>
+                {% endif %} {% endfor %} {% if data.has_next %}
+                <a href="?page={{ data.next_page_number }}">next</a>
+                <a href="?page={{ data.paginator.num_pages }}">last &raquo;</a>
+                {% endif %}
+            </span>
+        </div>
+    {% endif %}
 </div>
 
 

From a175be57386a0d5c64bbaeda6eca59893b2b9767 Mon Sep 17 00:00:00 2001
From: Subin Siby <mail@subinsb.com>
Date: Sat, 10 Aug 2019 21:24:10 +0530
Subject: [PATCH 2/2] Fix pinned items not showing up in filter tags

---
 mainapp/views.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mainapp/views.py b/mainapp/views.py
index e08bd1804..d893c0a78 100644
--- a/mainapp/views.py
+++ b/mainapp/views.py
@@ -808,7 +808,7 @@ def announcements_id(request,id):
 
 # Function to filter announcements based on hashtag
 def announcements_filter(request,filter_):
-    link_data = Announcements.objects.filter(is_pinned=False,hashtags__icontains=filter_).order_by('-id').all()
+    link_data = Announcements.objects.filter(hashtags__icontains=filter_).order_by('-id').all()
     # Uncomment next line if you want to show pinned data in filtered view and add pinned data in render JSON
     # pinned_data = Announcements.objects.filter(is_pinned=True).order_by('-id').all()[:5]