From: Michael Tremer {{ _("The official blog of the IPFire team") }}
+ {% block subtitle %}
+ {{ _("The official blog of the IPFire team") }}
+ {% end block %}
+ {{ _("IPFire Planet") }}
-
- - Subscribe to our RSS feed to stay up to date. - -
++ {{ _("No results found for '%s'") % query }} +
+ {% end %} +{% end block %} diff --git a/webapp/__init__.py b/webapp/__init__.py index 9422709..95c034d 100644 --- a/webapp/__init__.py +++ b/webapp/__init__.py @@ -122,6 +122,7 @@ class Application(tornado.web.Application): (r"/", PlanetMainHandler), (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler), (r"/user/([a-z0-9_-]+)", PlanetUserHandler), + (r"/search", PlanetSearchHandler), # RSS (r"/rss", RSSPlanetAllHandler), diff --git a/webapp/backend/planet.py b/webapp/backend/planet.py index 9dae689..62b8bf0 100644 --- a/webapp/backend/planet.py +++ b/webapp/backend/planet.py @@ -160,3 +160,8 @@ class Planet(object): "VALUES(%s, %s, %s, %s, UTC_TIMESTAMP())", entry.author.uid, entry.title, slug, entry.markdown) + def search(self, what): + entries = self.db.query("SELECT *, MATCH(markdown, title) AGAINST(%s) AS score \ + FROM planet WHERE MATCH(markdown, title) AGAINST(%s) ORDER BY score DESC", what, what) + + return [PlanetEntry(e) for e in entries] diff --git a/webapp/handlers_planet.py b/webapp/handlers_planet.py index f3e2703..0821c8c 100644 --- a/webapp/handlers_planet.py +++ b/webapp/handlers_planet.py @@ -56,3 +56,15 @@ class PlanetPostingHandler(PlanetBaseHandler): self.render("planet/posting.html", author=entry.author, entry=entry) + + +class PlanetSearchHandler(PlanetBaseHandler): + def get(self): + query = self.get_argument("q", "") + + if query: + entries = self.planet.search(query) + else: + entries = [] + + self.render("planet/search.html", entries=entries, query=query)