]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - webapp/handlers_planet.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / handlers_planet.py
index 162359e9094b7623c3ab0cf3538b39a3d8fffc4f..d1a4f7ffd700181e8503a4cc24bf3bd1ad9cb590 100644 (file)
@@ -5,7 +5,21 @@ import tornado.web
 from handlers_base import *
 
 class PlanetBaseHandler(BaseHandler):
-       pass
+       def group_entries_by_month(self, entries):
+               months = {}
+
+               for entry in entries:
+                       key = (entry.published.year, entry.published.month)
+
+                       try:
+                               months[key].append(entry)
+                       except KeyError:
+                               months[key] = [entry]
+
+               months = months.items()
+               months.sort(reverse=True)
+
+               return months
 
 
 class PlanetMainHandler(PlanetBaseHandler):
@@ -20,31 +34,52 @@ class PlanetMainHandler(PlanetBaseHandler):
                self.render("planet/index.html", entries=entries, offset=offset + limit, limit=limit)
 
 
+class PlanetHotEntriesHandler(PlanetBaseHandler):
+       def get(self):
+               days = self.get_argument("days", None)
+               try:
+                       days = int(days)
+               except (TypeError, ValueError):
+                       days = 30
+
+               entries = self.planet.get_hot_entries(days, limit=25)
+
+               self.render("planet/hottest.html", entries=entries)
+
+
 class PlanetUserHandler(PlanetBaseHandler):
        def get(self, author):
                author = self.accounts.get_by_uid(author)
                if not author:
                        raise tornado.web.HTTPError(404, "User is unknown")
 
-               offset = int(self.get_argument("offset", 0))
-               limit = int(self.get_argument("limit", 4))
+               entries = self.planet.get_entries_by_author(author.uid)
+               entries = self.group_entries_by_month(entries)
 
-               entries = self.planet.get_entries_by_author(author.uid,
-                       offset=offset, limit=limit)
-
-               self.render("planet/user.html", author=author, entries=entries,
-                       offset=offset + limit, limit=limit, rss_url="/user/%s/rss" % author.uid)
+               self.render("planet/list.html", author=author, year=None,
+                       entries=entries, rss_url="/user/%s/rss" % author.uid)
 
 
 class PlanetPostingHandler(PlanetBaseHandler):
        def get(self, slug):
-               entry = self.planet.get_entry_by_slug(slug)
+               self.entry = self.planet.get_entry_by_slug(slug)
 
-               if not entry:
+               if not self.entry:
                        raise tornado.web.HTTPError(404)
 
                self.render("planet/posting.html",
-                       author=entry.author, entry=entry)
+                       author=self.entry.author, entry=self.entry)
+
+       def on_finish(self):
+               assert self.entry
+
+               # Get the referer and location for statistical purposes
+               referer = self.request.headers.get("Referer", None)
+               location = self.get_remote_location()
+               if location:
+                       location = location.country
+
+               self.entry.count_view(referer=referer, location=location)
 
 
 class PlanetSearchHandler(PlanetBaseHandler):
@@ -62,15 +97,7 @@ class PlanetSearchHandler(PlanetBaseHandler):
 class PlanetYearHandler(PlanetBaseHandler):
        def get(self, year):
                entries = self.planet.get_entries_by_year(year)
+               entries = self.group_entries_by_month(entries)
 
-               months = {}
-               for entry in entries:
-                       try:
-                               months[entry.month].append(entry)
-                       except KeyError:
-                               months[entry.month] = [entry]
-
-               months = months.items()
-               months.sort(reverse=True)
-
-               self.render("planet/year.html", months=months, year=year)
+               self.render("planet/list.html", author=None, year=year,
+                       entries=entries)