22 from cubicweb.common import tags |
22 from cubicweb.common import tags |
23 from cubicweb.web import INTERNAL_FIELD_VALUE, stdmsgs, eid_param |
23 from cubicweb.web import INTERNAL_FIELD_VALUE, stdmsgs, eid_param |
24 from cubicweb.web.form import CompositeForm, EntityFieldsForm, FormViewMixIn |
24 from cubicweb.web.form import CompositeForm, EntityFieldsForm, FormViewMixIn |
25 from cubicweb.web.formfields import RelationField |
25 from cubicweb.web.formfields import RelationField |
26 from cubicweb.web.formwidgets import Button, SubmitButton, ResetButton, Select |
26 from cubicweb.web.formwidgets import Button, SubmitButton, ResetButton, Select |
27 from cubicweb.web.formrenderers import (FormRenderer, EntityFormRenderer, |
27 from cubicweb.web.views.formrenderers import FormRenderer |
28 EntityCompositeFormRenderer, |
|
29 EntityInlinedFormRenderer) |
|
30 |
28 |
31 |
29 |
32 def relation_id(eid, rtype, role, reid): |
30 def relation_id(eid, rtype, role, reid): |
33 """return an identifier for a relation between two entities""" |
31 """return an identifier for a relation between two entities""" |
34 if role == 'subject': |
32 if role == 'subject': |
112 value = html_escape(self.view(vid, rset, 'null') or default) |
110 value = html_escape(self.view(vid, rset, 'null') or default) |
113 if not entity.has_perm('update'): |
111 if not entity.has_perm('update'): |
114 self.w(value) |
112 self.w(value) |
115 return |
113 return |
116 if rschema.is_final(): |
114 if rschema.is_final(): |
117 form = self._build_attribute_form(entity, value, rtype, role, reload, row, col, default) |
115 form = self._build_attribute_form(entity, value, rtype, role, |
|
116 reload, row, col, default) |
118 else: |
117 else: |
119 form = self._build_relation_form(entity, value, rtype, role, row, col, vid, default) |
118 form = self._build_relation_form(entity, value, rtype, role, |
|
119 row, col, vid, default) |
120 form.form_add_hidden(u'__maineid', entity.eid) |
120 form.form_add_hidden(u'__maineid', entity.eid) |
121 renderer = FormRenderer(display_label=False, display_help=False, |
121 renderer = FormRenderer(self.req, display_label=False, display_help=False, |
122 display_fields=[(rtype, role)], |
122 display_fields=[(rtype, role)], |
123 table_class='', button_bar_class='buttonbar', |
123 table_class='', button_bar_class='buttonbar', |
124 display_progress_div=False) |
124 display_progress_div=False) |
125 self.w(form.form_render(renderer=renderer)) |
125 self.w(form.form_render(renderer=renderer)) |
126 |
126 |
127 def _build_relation_form(self, entity, value, rtype, role, row, col, vid, default): |
127 def _build_relation_form(self, entity, value, rtype, role, row, col, vid, default): |
128 entity = self.entity(row, col) |
128 entity = self.entity(row, col) |
129 divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid)) |
129 divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid)) |
130 event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : vid, |
130 event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : vid, |
131 'default' : default, 'role' : role} |
131 'default' : default, 'role' : role} |
132 form = EntityFieldsForm(self.req, None, entity=entity, action='#', |
132 form = EntityFieldsForm(self.req, entity=entity, action='#', |
133 domid='%s-form' % divid, |
133 domid='%s-form' % divid, |
134 cssstyle='display: none', |
134 cssstyle='display: none', |
135 onsubmit=("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', " |
135 onsubmit=("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', " |
136 "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s');" % |
136 "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s');" % |
137 event_data), |
137 event_data), |
184 self.form_title(entity) |
183 self.form_title(entity) |
185 form = self.vreg.select_object('forms', 'edition', self.req, entity.rset, |
184 form = self.vreg.select_object('forms', 'edition', self.req, entity.rset, |
186 row=entity.row, col=entity.col, entity=entity, |
185 row=entity.row, col=entity.col, entity=entity, |
187 submitmsg=self.submited_message()) |
186 submitmsg=self.submited_message()) |
188 self.init_form(form, entity) |
187 self.init_form(form, entity) |
189 self.w(form.form_render(renderer=self.renderer, formvid=u'edition')) |
188 self.w(form.form_render(formvid=u'edition')) |
190 |
189 |
191 def init_form(self, form, entity): |
190 def init_form(self, form, entity): |
192 """customize your form before rendering here""" |
191 """customize your form before rendering here""" |
193 form.form_add_hidden(u'__maineid', entity.eid) |
192 form.form_add_hidden(u'__maineid', entity.eid) |
194 |
193 |
318 """a view to edit multiple entities of the same type the first column |
317 """a view to edit multiple entities of the same type the first column |
319 should be the eid |
318 should be the eid |
320 """ |
319 """ |
321 #self.form_title(entity) |
320 #self.form_title(entity) |
322 form = self.vreg.select_object('forms', self.id, self.req, self.rset) |
321 form = self.vreg.select_object('forms', self.id, self.req, self.rset) |
323 self.w(form.form_render(renderer=EntityCompositeFormRenderer())) |
322 self.w(form.form_render()) |
324 |
323 |
325 |
324 |
326 class InlineEntityEditionFormView(FormViewMixIn, EntityView): |
325 class InlineEntityEditionFormView(FormViewMixIn, EntityView): |
327 id = 'inline-edition' |
326 id = 'inline-edition' |
328 __select__ = non_final_entity() & match_kwargs('peid', 'rtype') |
327 __select__ = non_final_entity() & match_kwargs('peid', 'rtype') |
349 self.render_form(entity, peid, rtype, role, divonclick=divonclick) |
348 self.render_form(entity, peid, rtype, role, divonclick=divonclick) |
350 |
349 |
351 def render_form(self, entity, peid, rtype, role, **kwargs): |
350 def render_form(self, entity, peid, rtype, role, **kwargs): |
352 """fetch and render the form""" |
351 """fetch and render the form""" |
353 form = self.vreg.select_object('forms', 'edition', self.req, None, |
352 form = self.vreg.select_object('forms', 'edition', self.req, None, |
354 entity=entity, set_error_url=False, |
353 entity=entity, form_renderer_id='inline', |
|
354 set_error_url=False, |
355 copy_nav_params=False) |
355 copy_nav_params=False) |
356 self.add_hiddens(form, entity, peid, rtype, role) |
356 self.add_hiddens(form, entity, peid, rtype, role) |
357 divid = '%s-%s-%s' % (peid, rtype, entity.eid) |
357 divid = '%s-%s-%s' % (peid, rtype, entity.eid) |
358 title = self.schema.rschema(rtype).display_name(self.req, role) |
358 title = self.schema.rschema(rtype).display_name(self.req, role) |
359 removejs = self.removejs % (peid, rtype,entity.eid) |
359 removejs = self.removejs % (peid, rtype,entity.eid) |
360 self.w(form.form_render(renderer=EntityInlinedFormRenderer(), divid=divid, |
360 self.w(form.form_render(divid=divid, title=title, removejs=removejs, |
361 title=title, removejs=removejs,**kwargs)) |
361 **kwargs)) |
362 |
362 |
363 def add_hiddens(self, form, entity, peid, rtype, role): |
363 def add_hiddens(self, form, entity, peid, rtype, role): |
364 # to ease overriding (see cubes.vcsfile.views.forms for instance) |
364 # to ease overriding (see cubes.vcsfile.views.forms for instance) |
365 if self.keep_entity(form, entity, peid, rtype): |
365 if self.keep_entity(form, entity, peid, rtype): |
366 if entity.has_eid(): |
366 if entity.has_eid(): |