web/views/editforms.py
changeset 1995 ec95eaa2b711
parent 1977 606923dff11b
child 2005 e8032965f37a
equal deleted inserted replaced
1994:56a235af050e 1995:ec95eaa2b711
    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),
   171     # add yes() so it takes precedence over deprecated views in baseforms,
   171     # add yes() so it takes precedence over deprecated views in baseforms,
   172     # though not baseforms based customized view
   172     # though not baseforms based customized view
   173     __select__ = one_line_rset() & non_final_entity() & yes()
   173     __select__ = one_line_rset() & non_final_entity() & yes()
   174 
   174 
   175     title = _('edition')
   175     title = _('edition')
   176     renderer = EntityFormRenderer()
       
   177 
   176 
   178     def cell_call(self, row, col, **kwargs):
   177     def cell_call(self, row, col, **kwargs):
   179         entity = self.complete_entity(row, col)
   178         entity = self.complete_entity(row, col)
   180         self.render_form(entity)
   179         self.render_form(entity)
   181 
   180 
   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():