web/views/reledit.py
branchstable
changeset 6110 7c419cbe9809
parent 5946 9cbde75fefe8
child 6111 06c96a79c3c0
equal deleted inserted replaced
6109:47d9c0e0f7b7 6110:7c419cbe9809
    40     def append_field(self, *args):
    40     def append_field(self, *args):
    41         pass
    41         pass
    42     def field_by_name(self, rtype, role, eschema=None):
    42     def field_by_name(self, rtype, role, eschema=None):
    43         return None
    43         return None
    44 
    44 
    45 class ClickAndEditFormView(FormViewMixIn, EntityView):
    45 class ClickAndEditFormView(EntityView):
    46     __regid__ = 'doreledit'
    46     __regid__ = 'doreledit'
    47     __select__ = non_final_entity() & match_kwargs('rtype')
    47     __select__ = non_final_entity() & match_kwargs('rtype')
    48 
    48 
    49     # ui side continuations
    49     # ui side continuations
    50     _onclick = (u"cw.reledit.loadInlineEditionForm('%(formid)s', %(eid)s, '%(rtype)s', '%(role)s', "
    50     _onclick = (u"cw.reledit.loadInlineEditionForm('%(formid)s', %(eid)s, '%(rtype)s', '%(role)s', "
   167     def _may_add_related(self, related_rset, entity, rschema, role, ttypes):
   167     def _may_add_related(self, related_rset, entity, rschema, role, ttypes):
   168         """ ok for attribute-like composite entities """
   168         """ ok for attribute-like composite entities """
   169         if self._is_composite(entity.e_schema, rschema, role):
   169         if self._is_composite(entity.e_schema, rschema, role):
   170             if len(ttypes) > 1: # wrong cardinality: do not handle
   170             if len(ttypes) > 1: # wrong cardinality: do not handle
   171                 return False
   171                 return False
   172             ttype = ttypes[0]
   172             rdef = rschema.role_rdef(entity.e_schema, ttypes[0], role)
   173             card = rschema.rdef(entity.e_schema, ttype).role_cardinality(role)
   173             card = rdef.role_cardinality(role)
   174             if related_rset and card in '?1':
   174             if related_rset and card in '?1':
   175                 return False
   175                 return False
   176             if rschema.has_perm(self._cw, 'add', toetype=ttype):
   176             if role == 'subject':
       
   177                 kwargs = {'fromeid': entity.eid}
       
   178             else:
       
   179                 kwargs = {'toeid': entity.eid}
       
   180             if rdef.has_perm(self._cw, 'add', **kwargs):
   177                 return True
   181                 return True
   178         return False
   182         return False
   179 
   183 
   180     def _may_edit_related_entity(self, related_rset, entity, rschema, role, ttypes):
   184     def _may_edit_related_entity(self, related_rset, entity, rschema, role, ttypes):
   181         """ controls the edition of the related entity """
   185         """ controls the edition of the related entity """