]> git.ipfire.org Git - people/shoehn/ipfire.org.git/commitdiff
planet: Add fulltext search.
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 7 Mar 2013 15:12:31 +0000 (16:12 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 7 Mar 2013 15:12:50 +0000 (16:12 +0100)
templates/planet/base.html
templates/planet/index.html
templates/planet/search.html [new file with mode: 0644]
webapp/__init__.py
webapp/backend/planet.py
webapp/handlers_planet.py

index be96d4ffd36d0cc3df7f57a944a01faf1c6ff65f..27d2545f951310db714749a627521cc057ebc3e2 100644 (file)
@@ -4,7 +4,11 @@
        <header class="jumbotron subhead" id="overview">
                <div class="container">
                        <h1>{{ _("IPFire Planet") }}</h1>
        <header class="jumbotron subhead" id="overview">
                <div class="container">
                        <h1>{{ _("IPFire Planet") }}</h1>
-                       <p class="lead">{{ _("The official blog of the IPFire team") }}</p>
+                       <p class="lead">
+                               {% block subtitle %}
+                                       {{ _("The official blog of the IPFire team") }}
+                               {% end block %}
+                       </p>
                </div>
        </header>
                </div>
        </header>
-{% end header %}
+{% end block %}
index 94dcabfb4d7927ebca81fa1cef541c4eaf95422b..30994132c0c00cb7043933a08357adcb81f3d3cc 100644 (file)
                        new progress in the development or make some minor announcements.
                </p>
 
                        new progress in the development or make some minor announcements.
                </p>
 
-               <p>
-                       <a class="btn btn-primary btn-large" href="http://planet.ipfire.org/rss">
-                               Subscribe to our RSS feed to stay up to date.
-                       </a>
-               </p>
+               <br>
+
+               <form action="/search" method="GET">
+                       <div class="input-append">
+                               <input type="text" class="input-medium" name="q" placeholder="{{ _("Search") }}">
+                               <button type="submit" class="btn"><i class="icon-search"></i></button>
+                       </div>
+               </form>
        </div>
 
        <hr class="separator">
        </div>
 
        <hr class="separator">
diff --git a/templates/planet/search.html b/templates/planet/search.html
new file mode 100644 (file)
index 0000000..71de0a6
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends "base.html" %}
+
+{% block title %}{{ _("IPFire Planet") }}{% end block %}
+
+{% block subtitle %}
+       {{ _("Search results for '%s'") % query }}</p>
+{% end block %}
+
+{% block body %}
+       {% if entries %}
+               {% for entry in entries %}
+                       {% module PlanetEntry(entry) %}
+               {% end %}
+       {% else %}
+               <p class="lead muted ac">
+                       {{ _("No results found for '%s'") % query }}
+               </p>
+       {% end %}
+{% end block %}
index 942270928f2f9393ba5d98088bfcd4888371f744..95c034d783819f81c189588b7a679cbb84884c96 100644 (file)
@@ -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"/", PlanetMainHandler),
                        (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler),
                        (r"/user/([a-z0-9_-]+)", PlanetUserHandler),
+                       (r"/search", PlanetSearchHandler),
 
                        # RSS
                        (r"/rss", RSSPlanetAllHandler),
 
                        # RSS
                        (r"/rss", RSSPlanetAllHandler),
index 9dae689da82dfcd51a9d4bac0e79aa26ddfd81fb..62b8bf0ca4fd05b613e141a9a1d7347044c8393f 100644 (file)
@@ -160,3 +160,8 @@ class Planet(object):
                        "VALUES(%s, %s, %s, %s, UTC_TIMESTAMP())", entry.author.uid, entry.title,
                        slug, entry.markdown)
 
                        "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]
index f3e27036617d44bb8ab8a507d290629991f773bd..0821c8c74d31ab17126fa19c9311f05f98358e4f 100644 (file)
@@ -56,3 +56,15 @@ class PlanetPostingHandler(PlanetBaseHandler):
 
                self.render("planet/posting.html",
                        author=entry.author, entry=entry)
 
                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)