web/views/editforms.py
branchstable
changeset 3927 b2a6c25b8429
parent 3880 88fc53eb5b5f
child 3930 c0ae3148b893
equal deleted inserted replaced
3926:0585694c1896 3927:b2a6c25b8429
    26 from cubicweb.web.form import FormViewMixIn, FieldNotFound
    26 from cubicweb.web.form import FormViewMixIn, FieldNotFound
    27 from cubicweb.web.formfields import guess_field
    27 from cubicweb.web.formfields import guess_field
    28 from cubicweb.web.formwidgets import Button, SubmitButton, ResetButton
    28 from cubicweb.web.formwidgets import Button, SubmitButton, ResetButton
    29 from cubicweb.web.views import forms
    29 from cubicweb.web.views import forms
    30 
    30 
       
    31 _pvdc = uicfg.primaryview_display_ctrl
    31 
    32 
    32 def relation_id(eid, rtype, role, reid):
    33 def relation_id(eid, rtype, role, reid):
    33     """return an identifier for a relation between two entities"""
    34     """return an identifier for a relation between two entities"""
    34     if role == 'subject':
    35     if role == 'subject':
    35         return u'%s:%s:%s' % (eid, rtype, reid)
    36         return u'%s:%s:%s' % (eid, rtype, reid)
   148                 return
   149                 return
   149             value = entity.printable_value(rtype) or default
   150             value = entity.printable_value(rtype) or default
   150             self.relation_form(lzone, value, form,
   151             self.relation_form(lzone, value, form,
   151                                self._build_renderer(entity, rtype, role))
   152                                self._build_renderer(entity, rtype, role))
   152         else:
   153         else:
   153             if rvid is None:
   154             rvid = self._compute_best_vid(entity.e_schema, rschema, role)
   154                 rvid = self._compute_best_vid(entity.e_schema, rschema, role)
       
   155             rset = entity.related(rtype, role)
   155             rset = entity.related(rtype, role)
   156             if rset:
   156             if rset:
   157                 value = self.view(rvid, rset)
   157                 value = self.view(rvid, rset)
   158             else:
   158             else:
   159                 value = default
   159                 value = default
   210         w(lzone)
   210         w(lzone)
   211         w(u'</div>')
   211         w(u'</div>')
   212         w(u'</div>')
   212         w(u'</div>')
   213 
   213 
   214     def _compute_best_vid(self, eschema, rschema, role):
   214     def _compute_best_vid(self, eschema, rschema, role):
       
   215         dispctrl = _pvdc.etype_get(eschema, rschema, role)
       
   216         if dispctrl.get('rvid'):
       
   217             return dispctrl['rvid']
   215         if eschema.cardinality(rschema, role) in '+*':
   218         if eschema.cardinality(rschema, role) in '+*':
   216             return self._many_rvid
   219             return self._many_rvid
   217         return self._one_rvid
   220         return self._one_rvid
   218 
   221 
   219     def _build_landing_zone(self, lzone):
   222     def _build_landing_zone(self, lzone):
   275 
   278 
   276     def should_edit_relation(self, entity, rschema, role, rvid):
   279     def should_edit_relation(self, entity, rschema, role, rvid):
   277         eschema = entity.e_schema
   280         eschema = entity.e_schema
   278         rtype = str(rschema)
   281         rtype = str(rschema)
   279         # XXX check autoform_section. what if 'generic'?
   282         # XXX check autoform_section. what if 'generic'?
   280         dispctrl = uicfg.primaryview_display_ctrl.etype_get(eschema, rtype, role)
   283         dispctrl = _pvdc.etype_get(eschema, rtype, role)
   281         vid = dispctrl.get('vid', 'reledit')
   284         vid = dispctrl.get('vid', 'reledit')
   282         if vid != 'reledit': # reledit explicitly disabled
   285         if vid != 'reledit': # reledit explicitly disabled
   283             return False
   286             return False
   284         if eschema.role_rproperty(role, rschema, 'composite') == role:
   287         if eschema.role_rproperty(role, rschema, 'composite') == role:
   285             return False
   288             return False