web/views/autoform.py
branchtls-sprint
changeset 1528 864ae7c15ef5
parent 1498 2c6eec0b46b9
child 1533 bcd4bfff658b
equal deleted inserted replaced
1527:c8ca1782e252 1528:864ae7c15ef5
    11 from cubicweb import typed_eid
    11 from cubicweb import typed_eid
    12 from cubicweb.web import stdmsgs, uicfg
    12 from cubicweb.web import stdmsgs, uicfg
    13 from cubicweb.web.form import FieldNotFound, EntityFieldsForm
    13 from cubicweb.web.form import FieldNotFound, EntityFieldsForm
    14 from cubicweb.web.formfields import guess_field
    14 from cubicweb.web.formfields import guess_field
    15 from cubicweb.web.formwidgets import Button, SubmitButton
    15 from cubicweb.web.formwidgets import Button, SubmitButton
       
    16 from cubicweb.web.views.editforms import toggleable_relation_link, relation_id
       
    17 
    16 _ = unicode
    18 _ = unicode
    17 
    19 
    18 class AutomaticEntityForm(EntityFieldsForm):
    20 class AutomaticEntityForm(EntityFieldsForm):
    19     """base automatic form to edit any entity.
    21     """base automatic form to edit any entity.
    20 
    22 
   239     action = property(action, set_action)
   241     action = property(action, set_action)
   240 
   242 
   241     def editable_attributes(self):
   243     def editable_attributes(self):
   242         """return a list of (relation schema, role) to edit for the entity"""
   244         """return a list of (relation schema, role) to edit for the entity"""
   243         return [(rschema, x) for rschema, _, x in self.relations_by_category(
   245         return [(rschema, x) for rschema, _, x in self.relations_by_category(
   244             self.attrcategories, 'add') if rschema != 'eid']
   246                 self.attrcategories, 'add') if rschema != 'eid']
   245 
   247 
   246     def relations_table(self):
   248     def relations_table(self):
   247         """yiels 3-tuples (rtype, target, related_list)
   249         """yiels 3-tuples (rtype, target, related_list)
   248         where <related_list> itself a list of :
   250         where <related_list> itself a list of :
   249           - node_id (will be the entity element's DOM id)
   251           - node_id (will be the entity element's DOM id)
   254         entity = self.edited_entity
   256         entity = self.edited_entity
   255         pending_deletes = self.req.get_pending_deletes(entity.eid)
   257         pending_deletes = self.req.get_pending_deletes(entity.eid)
   256         for label, rschema, role in self.srelations_by_category('generic', 'add'):
   258         for label, rschema, role in self.srelations_by_category('generic', 'add'):
   257             relatedrset = entity.related(rschema, role, limit=self.related_limit)
   259             relatedrset = entity.related(rschema, role, limit=self.related_limit)
   258             if rschema.has_perm(self.req, 'delete'):
   260             if rschema.has_perm(self.req, 'delete'):
   259                 toggable_rel_link_func = toggable_relation_link
   261                 toggleable_rel_link_func = toggleable_relation_link
   260             else:
   262             else:
   261                 toggable_rel_link_func = lambda x, y, z: u''
   263                 toggleable_rel_link_func = lambda x, y, z: u''
   262             related = []
   264             related = []
   263             for row in xrange(relatedrset.rowcount):
   265             for row in xrange(relatedrset.rowcount):
   264                 nodeid = relation_id(entity.eid, rschema, role,
   266                 nodeid = relation_id(entity.eid, rschema, role,
   265                                      relatedrset[row][0])
   267                                      relatedrset[row][0])
   266                 if nodeid in pending_deletes:
   268                 if nodeid in pending_deletes:
   267                     status = u'pendingDelete'
   269                     status = u'pendingDelete'
   268                     label = '+'
   270                     label = '+'
   269                 else:
   271                 else:
   270                     status = u''
   272                     status = u''
   271                     label = 'x'
   273                     label = 'x'
   272                 dellink = toggable_rel_link_func(entity.eid, nodeid, label)
   274                 dellink = toggleable_rel_link_func(entity.eid, nodeid, label)
   273                 eview = self.view('oneline', relatedrset, row=row)
   275                 eview = self.view('oneline', relatedrset, row=row)
   274                 related.append((nodeid, dellink, status, eview))
   276                 related.append((nodeid, dellink, status, eview))
   275             yield (rschema, role, related)
   277             yield (rschema, role, related)
   276 
   278 
   277     def restore_pending_inserts(self, cell=False):
   279     def restore_pending_inserts(self, cell=False):