]> git.ipfire.org Git - ipfire.org.git/blobdiff - webapp/backend/planet.py
planet: Slight face-lift and add hottest posts
[ipfire.org.git] / webapp / backend / planet.py
index c4f432075bacc20b6ddbf764cf44fad86fd87349..d116ced35610528550c61958cb9d0026281948ac 100644 (file)
@@ -115,8 +115,9 @@ class PlanetEntry(Object):
        def is_published(self):
                return self.status == "published"
 
-       def increase_view_counter(self):
-               self.db.execute("UPDATE planet SET views = views + 1 WHERE id = %s", self.id)
+       def count_view(self, referer=None, location=None):
+               self.db.execute("INSERT INTO planet_views(post_id, referer, location) \
+                       VALUES(%s, %s, %s)", self.id, referer, location)
 
 
 class Planet(Object):
@@ -196,6 +197,17 @@ class Planet(Object):
 
                return [PlanetEntry(self.backend, e) for e in entries]
 
+       def get_hot_entries(self, days=30, limit=8):
+               entries = self.db.query("WITH hottest AS (SELECT post_id, COUNT(post_id) AS count \
+                       FROM planet_views WHERE \"when\" >= NOW() - INTERVAL '%s days' \
+                       GROUP BY post_id ORDER BY count DESC) SELECT * FROM planet \
+                       LEFT JOIN hottest ON planet.id = hottest.post_id \
+                       WHERE hottest.count IS NOT NULL \
+                       ORDER BY hottest.count DESC LIMIT %s",
+                       days, limit)
+
+               return [PlanetEntry(self.backend, e) for e in entries]
+
        def render(self, text, limit=0):
                if limit and len(text) >= limit:
                        text = text[:limit] + "..."