web/views/editforms.py
changeset 4236 9260403bfe0b
parent 4167 73e649a7797d
child 4252 6c4f109c2b03
equal deleted inserted replaced
4235:49eb7e87d36d 4236:9260403bfe0b
   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