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') |