Switch to side-by-side view

--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -15,11 +15,10 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import re
 import json
 import logging
-import pymongo
-from urllib import urlencode, unquote
+from urllib import unquote
+from itertools import imap
 
 from tg import expose, validate, redirect, flash, response
 from tg.decorators import with_trailing_slash
@@ -31,7 +30,7 @@
 
 from allura.lib.security import require_access, has_access, require_authenticated
 from allura.model import Feed
-from allura.lib.search import search, SearchError
+from allura.lib.search import search_app
 from allura.lib import helpers as h
 from allura.lib.utils import AntiSpam
 from allura.lib.decorators import require_post
@@ -130,40 +129,31 @@
                    project=validators.StringBool(if_empty=False),
                    limit=validators.Int(if_empty=None),
                    page=validators.Int(if_empty=0)))
-    def search(self, q=None, history=False, project=False, limit=None, page=0, **kw):
-        'local tool search'
-        if project:
-            redirect(c.project.url() + 'search?' + urlencode(dict(q=q, history=history)))
-        results = []
-        search_error = None
-        count=0
-        limit, page, start = g.handle_paging(limit, page, default=25)
-        if not q:
-            q = ''
-        else:
-            try:
-                results = search(
-                    q, rows=limit, start=start,
-                    fq=[
-                        'is_history_b:%s' % history,
-                        'project_id_s:%s' % c.project._id,
-                        'mount_point_s:%s'% c.app.config.options.mount_point,
-                        '-deleted_b:true'],
-                    short_timeout=True,
-                    ignore_errors=False)
-            except SearchError as e:
-                search_error = e
-            if results: count=results.hits
+    def search(self, q=None, history=None, project=None, limit=None, page=0, **kw):
         c.search_results = self.W.search_results
+        search_params = kw
+        search_params.update({
+            'q': q or '',
+            'history': history,
+            'project': project,
+            'limit': limit,
+            'page': page,
+            'allowed_types': ['Post', 'Post Snapshot', 'Discussion', 'Thread'],
+        })
+        d = search_app(**search_params)
+        results = d.get('results')
+        def prettify_urls(doc):
+            if doc.get('type_s', '') == 'Post':
+                _id = doc.get('id').split('#')
+                _id = _id[-1].replace('/', '.') if _id else ''
+                p = model.ForumPost.query.get(_id=_id)
+                doc['url_paginated'] = p.url_paginated()
+            return doc
         if results is not None:
-            for doc in results:
-                if doc.get('type_s', '') == 'Post':
-                    _id = doc.get('id').split('#')
-                    _id = _id[-1].replace('/', '.') if _id else ''
-                    p = model.ForumPost.query.get(_id=_id)
-                    doc['url_paginated'] = p.url_paginated()
-        return dict(q=q, history=history, results=results or [],
-                    count=count, limit=limit, page=page, search_error=search_error)
+            results = imap(prettify_urls, results)
+        d['results'] = results
+        d['search_comments_disable'] = True
+        return d
 
     @expose('jinja:allura:templates/markdown_syntax.html')
     def markdown_syntax(self):