10 |
10 |
11 from logilab.common.decorators import iclassmethod |
11 from logilab.common.decorators import iclassmethod |
12 |
12 |
13 from cubicweb import typed_eid |
13 from cubicweb import typed_eid |
14 from cubicweb.web import stdmsgs, uicfg |
14 from cubicweb.web import stdmsgs, uicfg |
15 from cubicweb.web.form import FieldNotFound, EntityFieldsForm |
15 from cubicweb.web.form import FieldNotFound |
16 from cubicweb.web.formfields import guess_field |
16 from cubicweb.web.formfields import guess_field |
17 from cubicweb.web.formwidgets import Button, SubmitButton |
17 from cubicweb.web.formwidgets import Button, SubmitButton |
18 from cubicweb.web.views.editforms import toggleable_relation_link, relation_id |
18 from cubicweb.web.views import forms, editforms |
19 |
19 |
20 |
20 |
21 class AutomaticEntityForm(EntityFieldsForm): |
21 class AutomaticEntityForm(forms.EntityFieldsForm): |
22 """base automatic form to edit any entity. |
22 """base automatic form to edit any entity. |
23 |
23 |
24 Designed to be fully generated from schema but highly configurable through: |
24 Designed to be fully generated from schema but highly configurable through: |
25 * rtags (rcategories, rfields, rwidgets, inlined, rpermissions) |
25 * rtags (rcategories, rfields, rwidgets, inlined, rpermissions) |
26 * various standard form parameters |
26 * various standard form parameters |
233 entity = self.edited_entity |
233 entity = self.edited_entity |
234 pending_deletes = self.req.get_pending_deletes(entity.eid) |
234 pending_deletes = self.req.get_pending_deletes(entity.eid) |
235 for label, rschema, role in self.srelations_by_category('generic', 'add'): |
235 for label, rschema, role in self.srelations_by_category('generic', 'add'): |
236 relatedrset = entity.related(rschema, role, limit=self.related_limit) |
236 relatedrset = entity.related(rschema, role, limit=self.related_limit) |
237 if rschema.has_perm(self.req, 'delete'): |
237 if rschema.has_perm(self.req, 'delete'): |
238 toggleable_rel_link_func = toggleable_relation_link |
238 toggleable_rel_link_func = editforms.toggleable_relation_link |
239 else: |
239 else: |
240 toggleable_rel_link_func = lambda x, y, z: u'' |
240 toggleable_rel_link_func = lambda x, y, z: u'' |
241 related = [] |
241 related = [] |
242 for row in xrange(relatedrset.rowcount): |
242 for row in xrange(relatedrset.rowcount): |
243 nodeid = relation_id(entity.eid, rschema, role, |
243 nodeid = editforms.relation_id(entity.eid, rschema, role, |
244 relatedrset[row][0]) |
244 relatedrset[row][0]) |
245 if nodeid in pending_deletes: |
245 if nodeid in pending_deletes: |
246 status = u'pendingDelete' |
246 status = u'pendingDelete' |
247 label = '+' |
247 label = '+' |
248 else: |
248 else: |
249 status = u'' |
249 status = u'' |