Skip to content

Commit

Permalink
#12286 Need (Plone 4.0 upgrade) migration step for hidden static text…
Browse files Browse the repository at this point in the history
… portlets

* added a migration step to the 4.0.1 release.  Only migrates contextual static text portlets, not group or content type portlets.
  • Loading branch information
Anthony Gerrard committed Mar 13, 2014
1 parent 656e39c commit 1501d9c
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 2 deletions.
4 changes: 4 additions & 0 deletions CHANGES.txt
Expand Up @@ -3,6 +3,10 @@ Changelog

1.3.7 (unreleased)
------------------

- #12286 Need (Plone 4.0 upgrade) migration step for hidden static text
portlets
[anthonygerrard]

- provide upgrade step for plone.protect
[vangheem]
Expand Down
32 changes: 32 additions & 0 deletions plone/app/upgrade/v40/alphas.py
@@ -1,5 +1,7 @@
import transaction

from zope.component import queryMultiAdapter
from zope.component import getUtilitiesFor
from zope.component import getSiteManager, getUtility
from zope.ramcache.interfaces.ram import IRAMCache
from zope.ramcache.ram import RAMCache
Expand All @@ -20,6 +22,11 @@
from plone.app.upgrade.utils import logger
from plone.app.upgrade.utils import loadMigrationProfile
from plone.app.upgrade.utils import unregisterSteps
from plone.portlet.static.static import IStaticPortlet
from plone.portlets.interfaces import IPortletAssignmentMapping
from plone.portlets.interfaces import IPortletAssignmentSettings
from plone.portlets.interfaces import IPortletManager

from Products.CMFCore.Expression import Expression


Expand Down Expand Up @@ -379,6 +386,31 @@ def cleanUpProductRegistry(context):
# Remove all product entries
for name in products.keys():
products._delObject(name)


def migrateStaticTextPortlets(context):
""" Missing import step from #9286 Allow to show/hide portlets """
def migrate_portlets_for_object(obj, path):
portlet_managers = getUtilitiesFor(IPortletManager, context=obj)
for portlet_manager_name, portlet_manager in portlet_managers:
assignments = queryMultiAdapter(
(obj, portlet_manager), IPortletAssignmentMapping, context=obj)
if assignments is None:
continue
for portlet_id, portlet in assignments.items():
if IStaticPortlet.providedBy(portlet) and \
getattr(portlet, 'hide', False):
logger.info(
'Found hidden static text portlet %s at %s' %
(portlet_id, path))
settings = IPortletAssignmentSettings(portlet)
settings['visible'] = False

logger.info('Migrating static text portlets')
portal = getToolByName(context, 'portal_url').getPortalObject()
portal.ZopeFindAndApply(
portal, search_sub=True, apply_func=migrate_portlets_for_object)
logger.info('Finished migrating static text portlets')


def migrateMailHost(context):
Expand Down
5 changes: 5 additions & 0 deletions plone/app/upgrade/v40/configure.zcml
Expand Up @@ -57,6 +57,11 @@
handler=".alphas.cleanUpProductRegistry"
/>

<genericsetup:upgradeStep
title="Ensure hidden static text portlets stay hidden."
handler=".alphas.migrateStaticTextPortlets"
/>

</genericsetup:upgradeSteps>

<!-- the source here needs to be kept in sync with the latest 3.x profile
Expand Down
41 changes: 39 additions & 2 deletions plone/app/upgrade/v40/tests.py
@@ -1,6 +1,9 @@
import time

from zope.component import getSiteManager, queryUtility
from zope.component import getMultiAdapter
from zope.component import getSiteManager
from zope.component import getUtility
from zope.component import queryUtility
from zope.ramcache.interfaces.ram import IRAMCache

from Products.CMFCore.ActionInformation import Action
Expand All @@ -22,11 +25,17 @@
from plone.app.upgrade.v40.alphas import updateLargeFolderType
from plone.app.upgrade.v40.alphas import addRecursiveGroupsPlugin
from plone.app.upgrade.v40.alphas import cleanUpClassicThemeResources
from plone.app.upgrade.v40.alphas import migrateStaticTextPortlets
from plone.app.upgrade.v40.betas import repositionRecursiveGroupsPlugin
from plone.app.upgrade.v40.betas import updateIconMetadata
from plone.app.upgrade.v40.betas import removeLargePloneFolder
from plone.app.upgrade.tests.base import MigrationTest

from plone.portlet.static import static
from plone.portlets.interfaces import IPortletAssignmentMapping
from plone.portlets.interfaces import IPortletAssignmentSettings
from plone.portlets.interfaces import IPortletManager


class FakeSecureMailHost(object):

Expand Down Expand Up @@ -330,7 +339,35 @@ def testFolderMigration(self):
self.assertTrue(isSaneBTreeFolder(folder))
self.assertEqual(folder.getId(), 'foo')
self.assertEqual(folder.Title(), 'Foo')


def testMigrateStaticTextPortlets(self):
class HiddenAssignment(static.Assignment):
hide = True

self.setRoles(["Manager"])
self.portal.invokeFactory('Folder', id="statictest")
folder = self.portal['statictest']

manager = getUtility(
IPortletManager, name='plone.rightcolumn',
context=folder)
assignments = getMultiAdapter(
(folder, manager), IPortletAssignmentMapping)
hidden_portlet = HiddenAssignment()
visible_portlet = static.Assignment()
assignments['hidden'] = hidden_portlet
assignments['visible'] = visible_portlet

migrateStaticTextPortlets(self.portal)

self.assertFalse(
IPortletAssignmentSettings(hidden_portlet).get(
'visible', True))
self.assertTrue(
IPortletAssignmentSettings(visible_portlet).get(
'visible', True))



class TestMigrations_v4_0alpha2(MigrationTest):

Expand Down

1 comment on commit 1501d9c

@mister-roboto
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TESTS FAILED
Mr.roboto url : http://jenkins.plone.org/roboto/get_info?push=416dcaaec04f4a93acc1e3745ba99245
plone-4.3-python-2.6 [FAILURE]
plone-4.3-python-2.7 [FAILURE]
plone-5.0-python-2.7 [FAILURE]

Please sign in to comment.