140 entity = self.cw_rset.get_entity(row, col) |
140 entity = self.cw_rset.get_entity(row, col) |
141 rschema = schema.rschema(rtype) |
141 rschema = schema.rschema(rtype) |
142 lzone = self._build_landing_zone(landing_zone) |
142 lzone = self._build_landing_zone(landing_zone) |
143 # compute value, checking perms, build form |
143 # compute value, checking perms, build form |
144 if rschema.final: |
144 if rschema.final: |
145 form = self._build_form(entity, rtype, role, 'edition', default, reload, lzone) |
145 form = self._build_form(entity, rtype, role, 'base', default, reload, lzone) |
146 if not self.should_edit_attribute(entity, rschema, role, form): |
146 if not self.should_edit_attribute(entity, rschema, role, form): |
147 self.w(entity.printable_value(rtype)) |
147 self.w(entity.printable_value(rtype)) |
148 return |
148 return |
149 value = entity.printable_value(rtype) or default |
149 value = entity.printable_value(rtype) or default |
150 self.relation_form(lzone, value, form, |
|
151 self._build_renderer(entity, rtype, role)) |
|
152 else: |
150 else: |
153 rvid = self._compute_best_vid(entity.e_schema, rschema, role) |
151 rvid = self._compute_best_vid(entity.e_schema, rschema, role) |
154 rset = entity.related(rtype, role) |
152 rset = entity.related(rtype, role) |
155 if rset: |
153 if rset: |
156 value = self._cw.view(rvid, rset) |
154 value = self._cw.view(rvid, rset) |
158 value = default |
156 value = default |
159 if not self.should_edit_relation(entity, rschema, role, rvid): |
157 if not self.should_edit_relation(entity, rschema, role, rvid): |
160 if rset: |
158 if rset: |
161 self.w(value) |
159 self.w(value) |
162 return |
160 return |
|
161 # XXX do we really have to give lzone twice? |
163 form = self._build_form(entity, rtype, role, 'base', default, reload, lzone, |
162 form = self._build_form(entity, rtype, role, 'base', default, reload, lzone, |
164 dict(vid=rvid, lzone=lzone)) |
163 dict(vid=rvid, lzone=lzone)) |
165 field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role) |
164 field = form.field_by_name(rtype, role, entity.e_schema) |
166 form.append_field(field) |
165 form.append_field(field) |
167 self.relation_form(lzone, value, form, |
166 self.relation_form(lzone, value, form, |
168 self._build_renderer(entity, rtype, role)) |
167 self._build_renderer(entity, rtype, role)) |
169 |
168 |
170 def should_edit_attribute(self, entity, rschema, role, form): |
169 def should_edit_attribute(self, entity, rschema, role, form): |
171 rtype = str(rschema) |
170 rtype = str(rschema) |
172 ttype = rschema.targets(entity.__regid__, role)[0] |
171 ttype = rschema.targets(entity.__regid__, role)[0] |
173 afs = uicfg.autoform_section.etype_get(entity.__regid__, rtype, role, ttype) |
172 afs = uicfg.autoform_section.etype_get(entity.__regid__, rtype, role, ttype) |
174 if 'main_hidden' in afs or not entity.has_perm('update'): |
173 if 'main_hidden' in afs or not entity.has_perm('update'): |
175 return False |
174 return False |
176 try: |
175 try: |
177 form.field_by_name(rtype, role) |
176 form.field_by_name(rtype, role, entity.e_schema) |
178 except FieldNotFound: |
177 except FieldNotFound: |
179 return False |
178 return False |
180 return True |
179 return True |
181 |
180 |
182 def should_edit_relation(self, entity, rschema, role, rvid): |
181 def should_edit_relation(self, entity, rschema, role, rvid): |
260 return u'' |
259 return u'' |
261 def render(self, **_args): |
260 def render(self, **_args): |
262 return u'' |
261 return u'' |
263 def append_field(self, *args): |
262 def append_field(self, *args): |
264 pass |
263 pass |
265 def field_by_name(self, rtype, role): |
264 def field_by_name(self, rtype, role, eschema=None): |
266 return None |
265 return None |
267 |
266 |
268 |
267 |
269 class AutoClickAndEditFormView(ClickAndEditFormView): |
268 class AutoClickAndEditFormView(ClickAndEditFormView): |
270 """same as ClickAndEditFormView but checking if the view *should* be applied |
269 """same as ClickAndEditFormView but checking if the view *should* be applied |