33 from cubicweb.web import Redirect, RemoteCallFailed, DirectResponse |
33 from cubicweb.web import Redirect, RemoteCallFailed, DirectResponse |
34 from cubicweb.web.controller import Controller |
34 from cubicweb.web.controller import Controller |
35 from cubicweb.web.views import vid_from_rset, formrenderers |
35 from cubicweb.web.views import vid_from_rset, formrenderers |
36 |
36 |
37 try: |
37 try: |
38 from cubicweb.web.facet import (FilterRQLBuilder, get_facet, |
38 from cubicweb.web import facet as facetbase |
39 prepare_facets_rqlst) |
|
40 HAS_SEARCH_RESTRICTION = True |
|
41 except ImportError: # gae |
39 except ImportError: # gae |
42 HAS_SEARCH_RESTRICTION = False |
40 facetbase = None |
43 |
41 |
44 def jsonize(func): |
42 def jsonize(func): |
45 """decorator to sets correct content_type and calls `json_dumps` on |
43 """decorator to sets correct content_type and calls `json_dumps` on |
46 results |
44 results |
47 """ |
45 """ |
488 cb = page_data[cbname] |
486 cb = page_data[cbname] |
489 except KeyError: |
487 except KeyError: |
490 return None |
488 return None |
491 return cb(self._cw) |
489 return cb(self._cw) |
492 |
490 |
493 if HAS_SEARCH_RESTRICTION: |
491 if facetbase is not None: |
494 @jsonize |
492 @jsonize |
495 def js_filter_build_rql(self, names, values): |
493 def js_filter_build_rql(self, names, values): |
496 form = self._rebuild_posted_form(names, values) |
494 form = self._rebuild_posted_form(names, values) |
497 self._cw.form = form |
495 self._cw.form = form |
498 builder = FilterRQLBuilder(self._cw) |
496 builder = facetbase.FilterRQLBuilder(self._cw) |
499 return builder.build_rql() |
497 return builder.build_rql() |
500 |
498 |
501 @jsonize |
499 @jsonize |
502 def js_filter_select_content(self, facetids, rql): |
500 def js_filter_select_content(self, facetids, rql, mainvar): |
503 rqlst = self._cw.vreg.parse(self._cw, rql) # XXX Union unsupported yet |
501 # Union unsupported yet |
504 mainvar = prepare_facets_rqlst(rqlst)[0] |
502 select = self._cw.vreg.parse(self._cw, rql).children[0] |
|
503 filtered_variable = facetbase.get_filtered_variable(select, mainvar) |
|
504 facetbase.prepare_select(select, filtered_variable) |
505 update_map = {} |
505 update_map = {} |
506 for facetid in facetids: |
506 for facetid in facetids: |
507 facet = get_facet(self._cw, facetid, rqlst.children[0], mainvar) |
507 facet = get_facet(self._cw, facetid, rqlst.children[0], mainvar) |
508 update_map[facetid] = facet.possible_values() |
508 update_map[facetid] = facet.possible_values() |
509 return update_map |
509 return update_map |