# HG changeset patch # User Philippe Pepiot # Date 1485350900 -3600 # Node ID 01eeea97e5499ca3c0bebc2eb821b77f840649b6 # Parent 64ecd4d96ac7e6051cb48b71304024d6d933f0d8 [web/views] show composite entities in delete view Disabled by default, can be activated with show_composite = True Display first level of composite entities in a treeview, limited to the current (page_size - 1), so the maximum of displayed entities bump to page_size * (page_size - 1). diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/i18n/de.po --- a/cubicweb/i18n/de.po Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/i18n/de.po Wed Jan 25 14:28:20 2017 +0100 @@ -198,6 +198,9 @@ msgid "Added relation : %(entity_from)s %(rtype)s %(entity_to)s" msgstr "" +msgid "And more composite entities" +msgstr "" + msgid "Attributes permissions:" msgstr "Rechte der Attribute" diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/i18n/en.po --- a/cubicweb/i18n/en.po Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/i18n/en.po Wed Jan 25 14:28:20 2017 +0100 @@ -187,6 +187,9 @@ msgid "Added relation : %(entity_from)s %(rtype)s %(entity_to)s" msgstr "" +msgid "And more composite entities" +msgstr "" + msgid "Attributes permissions:" msgstr "" diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/i18n/es.po --- a/cubicweb/i18n/es.po Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/i18n/es.po Wed Jan 25 14:28:20 2017 +0100 @@ -201,6 +201,9 @@ msgid "Added relation : %(entity_from)s %(rtype)s %(entity_to)s" msgstr "Relación agregada : %(entity_from)s %(rtype)s %(entity_to)s" +msgid "And more composite entities" +msgstr "" + msgid "Attributes permissions:" msgstr "Permisos de atributos:" diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/i18n/fr.po --- a/cubicweb/i18n/fr.po Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/i18n/fr.po Wed Jan 25 14:28:20 2017 +0100 @@ -195,6 +195,9 @@ msgid "Added relation : %(entity_from)s %(rtype)s %(entity_to)s" msgstr "Relation ajoutée : %(entity_from)s %(rtype)s %(entity_to)s" +msgid "And more composite entities" +msgstr "Et d'autres entités" + msgid "Attributes permissions:" msgstr "Permissions des attributs" diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/web/test/unittest_views_editforms.py --- a/cubicweb/web/test/unittest_views_editforms.py Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/web/test/unittest_views_editforms.py Wed Jan 25 14:28:20 2017 +0100 @@ -20,7 +20,9 @@ from logilab.common import tempattr from cubicweb.devtools.testlib import CubicWebTC +from cubicweb.predicates import is_instance from cubicweb.web.views import uicfg +from cubicweb.web.views.editforms import DeleteConfFormView from cubicweb.web.formwidgets import AutoCompletionWidget from cubicweb.schema import RRQLExpression @@ -239,6 +241,59 @@ rset = req.execute('CWGroup X') self.view('deleteconf', rset, template=None, req=req).source + def test_delete_conf_formview_composite(self): + with self.admin_access.cnx() as cnx: + d1 = cnx.create_entity('Directory', name=u'dtest1') + d2 = cnx.create_entity('Directory', name=u'dtest2', parent=d1) + d3 = cnx.create_entity('Directory', name=u'dtest3', parent=d2) + d4 = cnx.create_entity('Directory', name=u'dtest4', parent=d1) + for i in range(3): + cnx.create_entity('Directory', name=u'child%s' % (i,), + parent=d3) + cnx.commit() + + class DirectoryDeleteView(DeleteConfFormView): + __select__ = (DeleteConfFormView.__select__ & + is_instance('Directory')) + show_composite = True + + self.vreg['propertyvalues']['navigation.page-size'] = 3 + with self.admin_access.web_request() as req, \ + self.temporary_appobjects(DirectoryDeleteView): + rset = req.execute('Directory X WHERE X name "dtest1"') + source = self.view('deleteconf', rset, + template=None, req=req).source.decode('utf-8') + # Show composite object at depth 1 + # Don't display "And more composite entities" since their are equal + # to page size + expected = ( + '
  • ' + 'dtest1' + '
  • ') % (d1.eid, d4.eid, d2.eid) + self.assertIn(expected, source) + + # Page size is reached, show "And more composite entities" + rset = req.execute('Directory X WHERE X name "dtest3"') + source = self.view('deleteconf', rset, + template=None, req=req).source.decode('utf-8') + expected = ( + '
  • ' + 'dtest3' + '
  • ') % ( + d3.eid, + req.find('Directory', name='child2').one().eid, + req.find('Directory', name='child1').one().eid) + self.assertIn(expected, source) + def test_automatic_edition_formview(self): with self.admin_access.web_request() as req: rset = req.execute('CWUser X') diff -r 64ecd4d96ac7 -r 01eeea97e549 cubicweb/web/views/editforms.py --- a/cubicweb/web/views/editforms.py Mon May 11 13:57:34 2015 +0200 +++ b/cubicweb/web/views/editforms.py Wed Jan 25 14:28:20 2017 +0100 @@ -71,11 +71,23 @@ # don't use navigation, all entities asked to be deleted should be displayed # else we will only delete the displayed page paginable = False + # show first level of composite relations in a treeview + show_composite = False + + @staticmethod + def _iter_composite_entities(entity, limit=None): + for rdef, role in entity.e_schema.composite_rdef_roles: + for centity in entity.related( + rdef.rtype, role, limit=limit + ).entities(): + yield centity def call(self, onsubmit=None): """ask for confirmation before real deletion""" req, w = self._cw, self.w _ = req._ + if self.show_composite: + req.add_css(('jquery-treeview/jquery.treeview.css', 'cubicweb.treeview.css')) w(u'\n' % _('this action is not reversible!')) # XXX above message should have style of a warning @@ -84,11 +96,30 @@ rset=self.cw_rset, onsubmit=onsubmit) w(u'' % content) + w(u'\n') w(u'\n') form.render(w=self.w)