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): |