equal
deleted
inserted
replaced
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 |