From: Michael Tremer Date: Thu, 7 Mar 2013 15:12:31 +0000 (+0100) Subject: planet: Add fulltext search. X-Git-Url: http://git.ipfire.org/?p=people%2Fshoehn%2Fipfire.org.git;a=commitdiff_plain;h=2bdd073f769e095fcdaead0eab741a6bb98575af planet: Add fulltext search. --- diff --git a/templates/planet/base.html b/templates/planet/base.html index be96d4f..27d2545 100644 --- a/templates/planet/base.html +++ b/templates/planet/base.html @@ -4,7 +4,11 @@

{{ _("IPFire Planet") }}

-

{{ _("The official blog of the IPFire team") }}

+

+ {% block subtitle %} + {{ _("The official blog of the IPFire team") }} + {% end block %} +

-{% end header %} +{% end block %} diff --git a/templates/planet/index.html b/templates/planet/index.html index 94dcabf..3099413 100644 --- a/templates/planet/index.html +++ b/templates/planet/index.html @@ -10,11 +10,14 @@ new progress in the development or make some minor announcements.

-

- - Subscribe to our RSS feed to stay up to date. - -

+
+ +
+
+ + +
+

diff --git a/templates/planet/search.html b/templates/planet/search.html new file mode 100644 index 0000000..71de0a6 --- /dev/null +++ b/templates/planet/search.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% block title %}{{ _("IPFire Planet") }}{% end block %} + +{% block subtitle %} + {{ _("Search results for '%s'") % query }}

+{% end block %} + +{% block body %} + {% if entries %} + {% for entry in entries %} + {% module PlanetEntry(entry) %} + {% end %} + {% else %} +

+ {{ _("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)