98 """publish a request, returning an encoded string""" |
98 """publish a request, returning an encoded string""" |
99 view, rset = self._select_view_and_rset(rset) |
99 view, rset = self._select_view_and_rset(rset) |
100 self.add_to_breadcrumbs(view) |
100 self.add_to_breadcrumbs(view) |
101 self.validate_cache(view) |
101 self.validate_cache(view) |
102 template = self.appli.main_template_id(self.req) |
102 template = self.appli.main_template_id(self.req) |
103 return self.vreg.main_template(self.req, template, rset=rset, view=view) |
103 return self.vreg['views'].main_template(self.req, template, |
|
104 rset=rset, view=view) |
104 |
105 |
105 def _select_view_and_rset(self, rset): |
106 def _select_view_and_rset(self, rset): |
106 req = self.req |
107 req = self.req |
107 if rset is None and not hasattr(req, '_rql_processed'): |
108 if rset is None and not hasattr(req, '_rql_processed'): |
108 req._rql_processed = True |
109 req._rql_processed = True |
117 except Exception, ex: |
118 except Exception, ex: |
118 self.exception('while handling __method') |
119 self.exception('while handling __method') |
119 req.set_message(req._("error while handling __method: %s") % req._(ex)) |
120 req.set_message(req._("error while handling __method: %s") % req._(ex)) |
120 vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema) |
121 vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema) |
121 try: |
122 try: |
122 view = self.vreg.select('views', vid, req, rset=rset) |
123 view = self.vreg['views'].select(vid, req, rset=rset) |
123 except ObjectNotFound: |
124 except ObjectNotFound: |
124 self.warning("the view %s could not be found", vid) |
125 self.warning("the view %s could not be found", vid) |
125 req.set_message(req._("The view %s could not be found") % vid) |
126 req.set_message(req._("The view %s could not be found") % vid) |
126 vid = vid_from_rset(req, rset, self.schema) |
127 vid = vid_from_rset(req, rset, self.schema) |
127 view = self.vreg.select('views', vid, req, rset=rset) |
128 view = self.vreg['views'].select(vid, req, rset=rset) |
128 except NoSelectableObject: |
129 except NoSelectableObject: |
129 if rset: |
130 if rset: |
130 req.set_message(req._("The view %s can not be applied to this query") % vid) |
131 req.set_message(req._("The view %s can not be applied to this query") % vid) |
131 else: |
132 else: |
132 req.set_message(req._("You have no access to this view or it's not applyable to current data")) |
133 req.set_message(req._("You have no access to this view or it's not applyable to current data")) |
133 self.warning("the view %s can not be applied to this query", vid) |
134 self.warning("the view %s can not be applied to this query", vid) |
134 vid = vid_from_rset(req, rset, self.schema) |
135 vid = vid_from_rset(req, rset, self.schema) |
135 view = self.vreg.select('views', vid, req, rset=rset) |
136 view = self.vreg['views'].select(vid, req, rset=rset) |
136 return view, rset |
137 return view, rset |
137 |
138 |
138 def add_to_breadcrumbs(self, view): |
139 def add_to_breadcrumbs(self, view): |
139 # update breadcrumps **before** validating cache, unless the view |
140 # update breadcrumps **before** validating cache, unless the view |
140 # specifies explicitly it should not be added to breadcrumb or the |
141 # specifies explicitly it should not be added to breadcrumb or the |
181 return (foreid, ex.errors) |
182 return (foreid, ex.errors) |
182 |
183 |
183 def _validate_form(req, vreg): |
184 def _validate_form(req, vreg): |
184 # XXX should use the `RemoteCallFailed` mechanism |
185 # XXX should use the `RemoteCallFailed` mechanism |
185 try: |
186 try: |
186 ctrl = vreg.select('controllers', 'edit', req=req) |
187 ctrl = vreg['controllers'].select('edit', req=req) |
187 except NoSelectableObject: |
188 except NoSelectableObject: |
188 return (False, {None: req._('not authorized')}) |
189 return (False, {None: req._('not authorized')}) |
189 try: |
190 try: |
190 ctrl.publish(None) |
191 ctrl.publish(None) |
191 except ValidationError, ex: |
192 except ValidationError, ex: |
307 rset = self._exec(rql) |
308 rset = self._exec(rql) |
308 else: |
309 else: |
309 rset = None |
310 rset = None |
310 vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema) |
311 vid = req.form.get('vid') or vid_from_rset(req, rset, self.schema) |
311 try: |
312 try: |
312 view = self.vreg.select('views', vid, req, rset=rset) |
313 view = self.vreg['views'].select(vid, req, rset=rset) |
313 except NoSelectableObject: |
314 except NoSelectableObject: |
314 vid = req.form.get('fallbackvid', 'noresult') |
315 vid = req.form.get('fallbackvid', 'noresult') |
315 view = self.vreg.select('views', vid, req, rset=rset) |
316 view = self.vreg['views'].select(vid, req, rset=rset) |
316 divid = req.form.get('divid', 'pageContent') |
317 divid = req.form.get('divid', 'pageContent') |
317 # we need to call pagination before with the stream set |
318 # we need to call pagination before with the stream set |
318 stream = view.set_stream() |
319 stream = view.set_stream() |
319 if req.form.get('paginate'): |
320 if req.form.get('paginate'): |
320 if divid == 'pageContent': |
321 if divid == 'pageContent': |
337 return stream.getvalue() |
338 return stream.getvalue() |
338 |
339 |
339 @xhtmlize |
340 @xhtmlize |
340 def js_prop_widget(self, propkey, varname, tabindex=None): |
341 def js_prop_widget(self, propkey, varname, tabindex=None): |
341 """specific method for CWProperty handling""" |
342 """specific method for CWProperty handling""" |
342 entity = self.vreg.etype_class('CWProperty')(self.req, None, None) |
343 entity = self.vreg['etypes'].etype_class('CWProperty')(self.req) |
343 entity.eid = varname |
344 entity.eid = varname |
344 entity['pkey'] = propkey |
345 entity['pkey'] = propkey |
345 form = self.vreg.select('forms', 'edition', self.req, entity=entity) |
346 form = self.vreg['forms'].select('edition', self.req, entity=entity) |
346 form.form_build_context() |
347 form.form_build_context() |
347 vfield = form.field_by_name('value') |
348 vfield = form.field_by_name('value') |
348 renderer = FormRenderer(self.req) |
349 renderer = FormRenderer(self.req) |
349 return vfield.render(form, renderer, tabindex=tabindex) \ |
350 return vfield.render(form, renderer, tabindex=tabindex) \ |
350 + renderer.render_help(form, vfield) |
351 + renderer.render_help(form, vfield) |
353 def js_component(self, compid, rql, registry='components', extraargs=None): |
354 def js_component(self, compid, rql, registry='components', extraargs=None): |
354 if rql: |
355 if rql: |
355 rset = self._exec(rql) |
356 rset = self._exec(rql) |
356 else: |
357 else: |
357 rset = None |
358 rset = None |
358 comp = self.vreg.select(registry, compid, self.req, rset=rset) |
359 comp = self.vreg[registry].select(compid, self.req, rset=rset) |
359 if extraargs is None: |
360 if extraargs is None: |
360 extraargs = {} |
361 extraargs = {} |
361 else: # we receive unicode keys which is not supported by the **syntax |
362 else: # we receive unicode keys which is not supported by the **syntax |
362 extraargs = dict((str(key), value) |
363 extraargs = dict((str(key), value) |
363 for key, value in extraargs.items()) |
364 for key, value in extraargs.items()) |
365 return comp.render(**extraargs) |
366 return comp.render(**extraargs) |
366 |
367 |
367 @check_pageid |
368 @check_pageid |
368 @xhtmlize |
369 @xhtmlize |
369 def js_inline_creation_form(self, peid, ttype, rtype, role): |
370 def js_inline_creation_form(self, peid, ttype, rtype, role): |
370 view = self.vreg.select('views', 'inline-creation', self.req, |
371 view = self.vreg['views'].select('inline-creation', self.req, |
371 etype=ttype, peid=peid, rtype=rtype, role=role) |
372 etype=ttype, peid=peid, rtype=rtype, |
|
373 role=role) |
372 return view.render(etype=ttype, peid=peid, rtype=rtype, role=role) |
374 return view.render(etype=ttype, peid=peid, rtype=rtype, role=role) |
373 |
375 |
374 @jsonize |
376 @jsonize |
375 def js_validate_form(self, action, names, values): |
377 def js_validate_form(self, action, names, values): |
376 return self.validate_form(action, names, values) |
378 return self.validate_form(action, names, values) |