diff --git a/src/collective/cover/profiles/default/metadata.xml b/src/collective/cover/profiles/default/metadata.xml index 79f652f3a..dc59034e2 100644 --- a/src/collective/cover/profiles/default/metadata.xml +++ b/src/collective/cover/profiles/default/metadata.xml @@ -1,6 +1,6 @@ - 21 + 22 profile-collective.js.galleria:default profile-collective.js.jqueryui:default diff --git a/src/collective/cover/tests/test_collection_tile.py b/src/collective/cover/tests/test_collection_tile.py index 0841f9eda..2764ab420 100644 --- a/src/collective/cover/tests/test_collection_tile.py +++ b/src/collective/cover/tests/test_collection_tile.py @@ -142,7 +142,7 @@ def test_number_of_items(self): self.assertEqual(len(self.tile.results()), 3) tile_conf = self.tile.get_tile_configuration() - tile_conf['number_to_show']['size'] = 2 + tile_conf['count']['size'] = 2 self.tile.set_tile_configuration(tile_conf) # Collection has three images and shows the first two items. @@ -166,7 +166,7 @@ def test_offset(self): self.assertEqual(items[1].getId(), 'my-image2') # Add a size, so only one item is left. - tile_conf['number_to_show']['size'] = 1 + tile_conf['count']['size'] = 1 self.tile.set_tile_configuration(tile_conf) items = self.tile.results() diff --git a/src/collective/cover/tiles/collection.py b/src/collective/cover/tiles/collection.py index 6aaeec4f7..12738a59f 100644 --- a/src/collective/cover/tiles/collection.py +++ b/src/collective/cover/tiles/collection.py @@ -55,10 +55,9 @@ class ICollectionTile(IPersistentCoverTile): required=False, ) - # FIXME: this field should be named 'count' - form.omitted('number_to_show') - form.no_omit(IDefaultConfigureForm, 'number_to_show') - number_to_show = schema.List( + form.omitted('count') + form.no_omit(IDefaultConfigureForm, 'count') + count = schema.List( title=_(u'Number of items to display'), value_type=schema.TextLine(), required=False, @@ -106,7 +105,7 @@ def get_title(self): def results(self): self.configured_fields = self.get_configured_fields() - size_conf = [i for i in self.configured_fields if i['id'] == 'number_to_show'] + size_conf = [i for i in self.configured_fields if i['id'] == 'count'] if size_conf and 'size' in size_conf[0].keys(): size = int(size_conf[0]['size']) diff --git a/src/collective/cover/tiles/list.py b/src/collective/cover/tiles/list.py index 66fb806f3..61af476d3 100644 --- a/src/collective/cover/tiles/list.py +++ b/src/collective/cover/tiles/list.py @@ -40,13 +40,12 @@ class IListTile(IPersistentCoverTile): ) form.omitted('uuids') - # XXX: this field should be used to replace the 'limit' attribute form.omitted('count') form.no_omit(IDefaultConfigureForm, 'count') - count = schema.Int( + count = schema.List( title=_(u'Number of items to display'), + value_type=schema.TextLine(), required=False, - default=5, ) form.omitted('title') @@ -153,11 +152,12 @@ def Date(self, obj): assert len(brain) == 1 return super(ListTile, self).Date(brain[0]) - # TODO: get rid of this by replacing it with the 'count' field def set_limit(self): - for field in self.get_configured_fields(): - if field and field.get('id') == 'uuids': - self.limit = int(field.get('size', self.limit)) + self.config_fields = self.get_tile_configuration() + limit_conf = self.config_fields.get('count', None) + + if limit_conf and 'size' in limit_conf.keys(): + self.limit = int(limit_conf.get('size', self.limit)) def populate_with_object(self, obj): """ Add an object to the list of items diff --git a/src/collective/cover/upgrades/configure.zcml b/src/collective/cover/upgrades/configure.zcml index e4ca499a6..7951d5496 100644 --- a/src/collective/cover/upgrades/configure.zcml +++ b/src/collective/cover/upgrades/configure.zcml @@ -7,4 +7,5 @@ + diff --git a/src/collective/cover/upgrades/v22/__init__.py b/src/collective/cover/upgrades/v22/__init__.py new file mode 100644 index 000000000..dd79d16b5 --- /dev/null +++ b/src/collective/cover/upgrades/v22/__init__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from collective.cover.logger import logger +from plone.tiles.interfaces import ITileType +from zope.component import getUtility +from zope.dottedname.resolve import resolve +from zope.schema.interfaces import IVocabularyFactory + + +def fix_fields(context): + """tiles here""" + + # Get covers + covers = context.portal_catalog(portal_type='collective.cover.content') + iface = 'collective.cover.tiles.collection.ICollectionTile' + logger.info('About to update {0} objects'.format(len(covers))) + tiles_to_update = _get_tiles_inherit_from_interface(context, iface=iface) + logger.info('{0} tile types will be updated ({1})'.format( + len(tiles_to_update), ', '.join(tiles_to_update))) + for cover in covers: + obj = cover.getObject() + tile_ids = obj.list_tiles(types=tiles_to_update) + for tile_id in tile_ids: + tile = obj.get_tile(tile_id) + tile_conf = tile.get_tile_configuration() + + if 'number_to_show' in tile_conf.keys(): + tile_conf['count'] = tile_conf['number_to_show'] + tile_conf.pop('number_to_show') + tile.set_tile_configuration(tile_conf) + + msg = 'Tile {0} at {1} updated' + logger.info(msg.format(tile_id, cover.getPath())) + + logger.info('Done') + + +def _get_tiles_inherit_from_interface(context, iface=None): + """Returns a list of all tiles inherited from a given interface.""" + name = 'collective.cover.EnabledTiles' + tiles_to_update = [] + if iface: + Iface = resolve(iface) + enabled_tiles = getUtility(IVocabularyFactory, name)(context) + tiles_to_update = [] + for i in enabled_tiles: + tile = getUtility(ITileType, i.value) + if issubclass(tile.schema, Iface): + tiles_to_update.append(i.value) + return tiles_to_update diff --git a/src/collective/cover/upgrades/v22/configure.zcml b/src/collective/cover/upgrades/v22/configure.zcml new file mode 100644 index 000000000..7600b6b1f --- /dev/null +++ b/src/collective/cover/upgrades/v22/configure.zcml @@ -0,0 +1,20 @@ + + + + + + + + +