From 660cc9cd743d49bb082adf51906a543250b6be05 Mon Sep 17 00:00:00 2001
From: Fredrik Jonsson <frjo@xdeb.org>
Date: Mon, 29 Apr 2019 15:56:32 +0200
Subject: [PATCH] Adding news feed for all news and for each news type.

---
 opentech/public/news/models.py |  3 +++
 opentech/public/news/views.py  | 46 ++++++++++++++++++++++++++++++++++
 opentech/public/urls.py        |  3 +++
 3 files changed, 52 insertions(+)
 create mode 100644 opentech/public/news/views.py

diff --git a/opentech/public/news/models.py b/opentech/public/news/models.py
index b3871fdf1..4edcd2663 100644
--- a/opentech/public/news/models.py
+++ b/opentech/public/news/models.py
@@ -123,6 +123,9 @@ class NewsPage(BasePage):
         else:
             return self.first_published_at
 
+    def get_absolute_url(self):
+        return self.full_url
+
 
 class NewsIndex(BasePage):
     subpage_types = ['NewsPage']
diff --git a/opentech/public/news/views.py b/opentech/public/news/views.py
new file mode 100644
index 000000000..20ca9e0e3
--- /dev/null
+++ b/opentech/public/news/views.py
@@ -0,0 +1,46 @@
+from django.contrib.syndication.views import Feed
+
+from opentech.public.news.models import NewsPage, NewsType
+
+
+class NewsFeed(Feed):
+    link = "https://www.opentech.fund/news/"
+    title = "OTF – News, updates, and announcements"
+    description = "News, updates, and announcements from The Open Technology Fund"
+
+    def items(self):
+        return NewsPage.objects.live().order_by('-first_published_at')[:20]
+
+    def item_title(self, item):
+        return item.title
+
+    def item_description(self, item):
+        return item.body
+
+    def item_pubdate(self, item):
+        return item.display_date
+
+
+class NewsTypesFeed(Feed):
+    link = "https://www.opentech.fund/news/"
+
+    def get_object(self, request, type):
+        return NewsType.objects.get(id=type)
+
+    def title(self, type):
+        return f"OTF – News of type {type}"
+
+    def description(self, type):
+        return f"News, updates, and announcements of type {type} from The Open Technology Fund"
+
+    def items(self, type):
+        return NewsPage.objects.live().filter(news_types__news_type=type).order_by('-first_published_at')[:20]
+
+    def item_title(self, item):
+        return item.title
+
+    def item_description(self, item):
+        return item.body
+
+    def item_pubdate(self, item):
+        return item.display_date
diff --git a/opentech/public/urls.py b/opentech/public/urls.py
index 40b2bb96a..81eedaf14 100644
--- a/opentech/public/urls.py
+++ b/opentech/public/urls.py
@@ -1,10 +1,13 @@
 from django.urls import include, path
 
+from .news import views as news_views
 from .search import views as search_views
 from .mailchimp import urls as newsletter_urls
 
 
 urlpatterns = [
     path('search/', search_views.search, name='search'),
+    path('news/feed/', news_views.NewsFeed(), name='news_feed'),
+    path('news/<int:type>/feed/', news_views.NewsTypesFeed(), name='news_types_feed'),
     path('newsletter/', include(newsletter_urls))
 ]
-- 
GitLab