web/views/basecontrollers.py
changeset 7605 48abeac162fd
parent 7562 cdef82ca9eab
child 7606 01b49ec8fe80
equal deleted inserted replaced
7604:1eb6090311ff 7605:48abeac162fd
    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