web/views/basecontrollers.py
brancholdstable
changeset 8462 a14b6562082b
parent 8116 6510654269a6
child 8128 0a927fe4541b
equal deleted inserted replaced
8231:1bb43e31032d 8462:a14b6562082b
    29                       AuthenticationError, typed_eid)
    29                       AuthenticationError, typed_eid)
    30 from cubicweb.utils import UStringIO, json, json_dumps
    30 from cubicweb.utils import UStringIO, json, json_dumps
    31 from cubicweb.uilib import exc_message
    31 from cubicweb.uilib import exc_message
    32 from cubicweb.selectors import authenticated_user, anonymous_user, match_form_params
    32 from cubicweb.selectors import authenticated_user, anonymous_user, match_form_params
    33 from cubicweb.mail import format_mail
    33 from cubicweb.mail import format_mail
    34 from cubicweb.web import Redirect, RemoteCallFailed, DirectResponse
    34 from cubicweb.web import Redirect, RemoteCallFailed, DirectResponse, facet
    35 from cubicweb.web.controller import Controller
    35 from cubicweb.web.controller import Controller
    36 from cubicweb.web.views import vid_from_rset, formrenderers
    36 from cubicweb.web.views import vid_from_rset, formrenderers
    37 
    37 
    38 try:
       
    39     from cubicweb.web import facet as facetbase
       
    40 except ImportError: # gae
       
    41     facetbase = None
       
    42 
    38 
    43 def jsonize(func):
    39 def jsonize(func):
    44     """decorator to sets correct content_type and calls `json_dumps` on
    40     """decorator to sets correct content_type and calls `json_dumps` on
    45     results
    41     results
    46     """
    42     """
   351             stream.write(u'<div id="pageContent">')
   347             stream.write(u'<div id="pageContent">')
   352             vtitle = self._cw.form.get('vtitle')
   348             vtitle = self._cw.form.get('vtitle')
   353             if vtitle:
   349             if vtitle:
   354                 stream.write(u'<h1 class="vtitle">%s</h1>\n' % vtitle)
   350                 stream.write(u'<h1 class="vtitle">%s</h1>\n' % vtitle)
   355             paginate = True
   351             paginate = True
   356         if paginate:
   352         nav_html = UStringIO()
   357             view.paginate()
   353         if paginate and not view.handle_pagination:
       
   354             view.paginate(w=nav_html.write)
       
   355         stream.write(nav_html.getvalue())
   358         if divid == 'pageContent':
   356         if divid == 'pageContent':
   359             stream.write(u'<div id="contentmain">')
   357             stream.write(u'<div id="contentmain">')
   360         view.render(**kwargs)
   358         view.render(**kwargs)
   361         extresources = self._cw.html_headers.getvalue(skiphead=True)
   359         extresources = self._cw.html_headers.getvalue(skiphead=True)
   362         if extresources:
   360         if extresources:
   363             stream.write(u'<div class="ajaxHtmlHead">\n') # XXX use a widget ?
   361             stream.write(u'<div class="ajaxHtmlHead">\n') # XXX use a widget ?
   364             stream.write(extresources)
   362             stream.write(extresources)
   365             stream.write(u'</div>\n')
   363             stream.write(u'</div>\n')
   366         if divid == 'pageContent':
   364         if divid == 'pageContent':
   367             stream.write(u'</div></div>')
   365             stream.write(u'</div>%s</div>' % nav_html.getvalue())
   368         return stream.getvalue()
   366         return stream.getvalue()
   369 
   367 
   370     @xhtmlize
   368     @xhtmlize
   371     def js_view(self):
   369     def js_view(self):
   372         # XXX try to use the page-content template
   370         # XXX try to use the page-content template
   487             cb = page_data[cbname]
   485             cb = page_data[cbname]
   488         except KeyError:
   486         except KeyError:
   489             return None
   487             return None
   490         return cb(self._cw)
   488         return cb(self._cw)
   491 
   489 
   492     if facetbase is not None:
   490     @jsonize
   493         @jsonize
   491     def js_filter_build_rql(self, names, values):
   494         def js_filter_build_rql(self, names, values):
   492         form = self._rebuild_posted_form(names, values)
   495             form = self._rebuild_posted_form(names, values)
   493         self._cw.form = form
   496             self._cw.form = form
   494         builder = facet.FilterRQLBuilder(self._cw)
   497             builder = facetbase.FilterRQLBuilder(self._cw)
   495         return builder.build_rql()
   498             return builder.build_rql()
   496 
   499 
   497     @jsonize
   500         @jsonize
   498     def js_filter_select_content(self, facetids, rql, mainvar):
   501         def js_filter_select_content(self, facetids, rql, mainvar):
   499         # Union unsupported yet
   502             # Union unsupported yet
   500         select = self._cw.vreg.parse(self._cw, rql).children[0]
   503             select = self._cw.vreg.parse(self._cw, rql).children[0]
   501         filtered_variable = facet.get_filtered_variable(select, mainvar)
   504             filtered_variable = facetbase.get_filtered_variable(select, mainvar)
   502         facet.prepare_select(select, filtered_variable)
   505             facetbase.prepare_select(select, filtered_variable)
   503         update_map = {}
   506             update_map = {}
   504         for fid in facetids:
   507             for facetid in facetids:
   505             fobj = facet.get_facet(self._cw, fid, select, filtered_variable)
   508                 facet = facetbase.get_facet(self._cw, facetid, select, filtered_variable)
   506             update_map[fid] = fobj.possible_values()
   509                 update_map[facetid] = facet.possible_values()
   507         return update_map
   510             return update_map
       
   511 
   508 
   512     def js_unregister_user_callback(self, cbname):
   509     def js_unregister_user_callback(self, cbname):
   513         self._cw.unregister_callback(self._cw.pageid, cbname)
   510         self._cw.unregister_callback(self._cw.pageid, cbname)
   514 
   511 
   515     def js_unload_page_data(self):
   512     def js_unload_page_data(self):
   581 class MailBugReportController(Controller):
   578 class MailBugReportController(Controller):
   582     __regid__ = 'reportbug'
   579     __regid__ = 'reportbug'
   583     __select__ = match_form_params('description')
   580     __select__ = match_form_params('description')
   584 
   581 
   585     def publish(self, rset=None):
   582     def publish(self, rset=None):
   586         body = self._cw.form['description']
   583         req = self._cw
   587         self.sendmail(self._cw.config['submit-mail'],
   584         self.sendmail(req.vreg.config['submit-mail'],
   588                       self._cw._('%s error report') % self._cw.config.appid,
   585                       req._('%s error report') % req.vreg.config.appid,
   589                       body)
   586                       req.form['description'])
   590         url = self._cw.build_url(__message=self._cw._('bug report sent'))
   587         raise Redirect(req.build_url(__message=req._('bug report sent')))
   591         raise Redirect(url)
       
   592 
   588 
   593 
   589 
   594 class UndoController(Controller):
   590 class UndoController(Controller):
   595     __regid__ = 'undo'
   591     __regid__ = 'undo'
   596     __select__ = authenticated_user() & match_form_params('txuuid')
   592     __select__ = authenticated_user() & match_form_params('txuuid')