def testThemeSpecificLayerTakesHighestPrecedence(self):
        register_layer(IAdditiveLayer, 'Plone.testlayer')
        iro = self._get_request_interfaces()
        unregister_layer('Plone.testlayer')

        self.failUnless(iro.index(IThemeSpecific) < iro.index(IAdditiveLayer),
            'Theme-specific browser layers should take precedence over other browser layers.')
Пример #2
0
    def setUp(cls):
        """Set up additional products and ZCML required to test this product.
        """
        #ztc.installProduct('RichDocument')
        ztc.installProduct('LinguaPlone')
        ztc.installProduct('PlacelessTranslationService')
        ztc.installPackage('slc.linguatools')
        ptc.setupPloneSite(products=[
            'LinguaPlone',
            'slc.linguatools',
            'Products.RichDocument',
            ])

        # Load the ZCML configuration for this package and its dependencies

        # register the Browserlayer from slc.linguatools, so that our
        # schema-extensions using IBrowserLayerAwareExtender work
        browserlayerutils.register_layer(ILinguaToolsLayer,
            name='slc.linguatools')

        fiveconfigure.debug_mode = True
        import slc.linguatools
        import Products.LinguaPlone
        zcml.load_config('configure.zcml', slc.linguatools)
        import Products.LinguaPlone
        zcml.load_config('configure.zcml', Products.LinguaPlone)
        fiveconfigure.debug_mode = False

        SiteLayer.setUp()
Пример #3
0
    def test_remove_broken_browserlayer(self):
        from plone.browserlayer.utils import registered_layers
        from plone.browserlayer.interfaces import ILocalBrowserLayerType
        register_layer(IMyProductLayer, 'my.product')

        class Step(UpgradeStep):
            def __call__(self):
                self.remove_broken_browserlayer('my.product',
                                                'IMyProductLayer')

        Step(self.portal_setup)

        # Check that it worked.  Note that this check fails if you have called
        # registered_layers earlier in this test before calling
        # remove_broken_browserlayer: the previous answer is cached.
        self.assertFalse(IMyProductLayer in registered_layers())
        # Check it a bit more low level.
        sm = self.portal.getSiteManager()

        adapters = sm.utilities._adapters
        self.assertFalse('my.product' in adapters[0][ILocalBrowserLayerType])
        subscribers = sm.utilities._subscribers
        layer_subscribers = subscribers[0][ILocalBrowserLayerType]
        iface_name = 'IMyProductLayer'
        self.assertEqual(
            len([
                layer for layer in layer_subscribers['']
                if layer.__name__ == iface_name
            ]), 0)
        self.assertNotIn((ILocalBrowserLayerType, 'my.product'),
                         sm._utility_registrations)
    def testCustomBrowserLayerHasPrecedenceOverDefaultLayer(self):
        register_layer(IAdditiveLayer, 'Plone.testlayer')
        iro = self._get_request_interfaces()
        unregister_layer('Plone.testlayer')

        self.assertTrue(iro.index(IAdditiveLayer) <
                        iro.index(IDefaultBrowserLayer))
def migrateTo031(context):
    """Add new custom browserlayer."""

    if not IPrettyPhotoSpecific in layerutils.registered_layers():
        layerutils.register_layer(IPrettyPhotoSpecific,
                                  name='collective.prettyphoto')
        logger.info('Browser layer "collective.prettyphoto" installed.')
    def testCustomBrowserLayerHasPrecedenceOverDefaultLayer(self):
        register_layer(IAdditiveLayer, 'Plone.testlayer')
        iro = self._get_request_interfaces()
        unregister_layer('Plone.testlayer')

        self.assertTrue(
            iro.index(IAdditiveLayer) < iro.index(IDefaultBrowserLayer))
    def testThemeSpecificLayerTakesHighestPrecedence(self):
        register_layer(IAdditiveLayer, 'Plone.testlayer')
        iro = self._get_request_interfaces()
        unregister_layer('Plone.testlayer')

        self.assertTrue(iro.index(IThemeSpecific) < iro.index(IAdditiveLayer),
            'Theme-specific browser layers should take precedence over other '
            'browser layers.')
Пример #8
0
def registerDiscussionLayer(context):
    """ Register browser layer for extending discussion
        with quintagroup captcha
    """
    from quintagroup.plonecaptchas.interfaces import IQGDiscussionCaptchas
    from plone.browserlayer.utils import register_layer
    name = "QGCaptchaDiscussionLayer"
    site = getSiteManager(context)
    register_layer(IQGDiscussionCaptchas, name, site_manager=site)
Пример #9
0
 def _initLayers(self, node):
     for child in node.childNodes:
         if child.nodeName.lower() == 'layer':
             name = child.getAttribute('name')
             if child.getAttribute('remove'):
                 unregister_layer(name, site_manager=self.context)
                 continue
             interface = _resolveDottedName(child.getAttribute('interface'))
             register_layer(interface, name, site_manager=self.context)
Пример #10
0
    def test_remove_broken_browserlayer(self):
        # TODO: Currently, this test doesn't really test that the removal
        # works, it only checks that the Step method can be called without
        # causing problems.

        register_layer(IMyProductLayer, 'my.product')

        class Step(UpgradeStep):
            def __call__(self):
                self.remove_broken_browserlayer('my.product',
                                                'IMyProductLayer')
        Step(self.portal_setup)
Пример #11
0
 def _initLayers(self, node):
     for child in node.childNodes:
         if child.nodeName.lower() == 'layer':
             name = child.getAttribute('name')
             if child.getAttribute('remove'):
                 try:
                     unregister_layer(name, site_manager=self.context)
                 except KeyError as e:
                     self._logger.info(e)
                 continue
             interface = _resolveDottedName(child.getAttribute('interface'))
             register_layer(interface, name, site_manager=self.context)
Пример #12
0
 def setUp(cls):
     """ """
     fiveconfigure.debug_mode = True
     import slc.calendarfetcher
     zcml.load_config('configure.zcml', slc.calendarfetcher)
     fiveconfigure.debug_mode = False
     ztc.installPackage('slc.calendarfetcher')
     browserlayerutils.register_layer(
                             ICalendarFetcherLayer,
                             name='slc.calendarfetcher'
                             )
     PloneSite.setUp()
Пример #13
0
def migrate_to_1003(context):
    """Migrate from 1002 to 1003.

    * Add plone.mls.listing browser layer.
    * Register custom stylesheet.
    """
    if IListingSpecific not in layerutils.registered_layers():
        layerutils.register_layer(IListingSpecific, name='plone.mls.listing')

    portal_css = api.portal.get_tool(name='portal_css')
    stylesheet_id = '++resource++plone.mls.listing.stylesheets/main.css'
    portal_css.registerStylesheet(stylesheet_id, media='screen')
Пример #14
0
    def afterSetUp(self):
        super(JsonClientTestCase, self).afterSetUp()
        register_layer(IPMR2JsonClientTestLayer, 'pmr2.jsonclient.tests')
        request = TestRequest()

        # Ensure that the most basic scope managers are being used.
        cmf = factory(ConsumerManager)
        tmf = factory(TokenManager)
        smf = factory(MockScopeManager)

        zope.component.provideAdapter(cmf, (
            IAnnotatable,
            IPMR2JsonClientTestLayer,
        ), IConsumerManager)
        zope.component.provideAdapter(tmf, (
            IAnnotatable,
            IPMR2JsonClientTestLayer,
        ), ITokenManager)
        zope.component.provideAdapter(smf, (
            IAnnotatable,
            IPMR2JsonClientTestLayer,
        ), IScopeManager)

        # assuming none of these are overridden.
        self.consumer = Consumer('test.example.com', 'consumer-secret',
                                 u'PMR2 Test JSON Client', None)
        cm = zope.component.getMultiAdapter((self.portal, request),
                                            IConsumerManager)
        cm.add(self.consumer)

        token = Token('pmr2token', 'token-secret')
        token.access = True
        token.consumer_key = self.consumer.key
        token.user = default_user

        self.token = token
        tm = zope.component.getMultiAdapter((self.portal, request),
                                            ITokenManager)
        tm.add(self.token)

        # XXX especially this one.
        sm = zope.component.getMultiAdapter((self.portal, request),
                                            IScopeManager)
        sm.permitted = '^.*$'  # permit everything.

        b = Browser()
        portal_url = self.portal.absolute_url()
        b.open(portal_url + '/login')
        b.getControl(name='__ac_name').value = default_user
        b.getControl(name='__ac_password').value = default_password
        b.getControl(name='submit').click()
        self.user_browser = b
Пример #15
0
    def test_remove_broken_browserlayer(self):
        # TODO: Currently, this test doesn't really test that the removal
        # works, it only checks that the Step method can be called without
        # causing problems.

        register_layer(IMyProductLayer, 'my.product')

        class Step(UpgradeStep):
            def __call__(self):
                self.remove_broken_browserlayer('my.product',
                                                'IMyProductLayer')

        Step(self.portal_setup)
Пример #16
0
    def setUpPloneSite(self, portal):
        # Needed to get the workflows
        applyProfile(portal, 'Products.CMFPlone:plone')

        applyProfile(portal, 'slc.seminarportal:default')

        # Login as manager and create a test folder
        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)
        portal.invokeFactory('Folder', 'folder')

        browserlayerutils.register_layer(IThemeLayer,
                                         name="slc.seminarportal.browserlayer")
Пример #17
0
def migrate_to_1003(context):
    """Migrate from 1002 to 1003.

    * Add plone.mls.listing browser layer.
    * Register custom stylesheet.
    """
    site = getUtility(IPloneSiteRoot)

    if IListingSpecific not in layerutils.registered_layers():
        layerutils.register_layer(IListingSpecific, name='plone.mls.listing')

    portal_css = getToolByName(site, 'portal_css')
    stylesheet_id = '++resource++plone.mls.listing.stylesheets/main.css'
    portal_css.registerStylesheet(stylesheet_id, media='screen')
Пример #18
0
def migrateTo021(context):
    """Add new custom browserlayer."""
    
    if not IATMediaPageSpecific in layerutils.registered_layers():
        layerutils.register_layer(IATMediaPageSpecific, name='Products.ATMediaPage')
        logger.info('Browser layer "Products.ATMediaPage" installed.')

    site = getUtility(IPloneSiteRoot)

    # skip kupu configuration on sites that don't have kupu installed
    kupu = getToolByName(site, 'kupu_library_tool', None)
    if kupu is not None:
        configureKupu(kupu)
        logger.info('Kupu configured for Products.ATMediaPage')
Пример #19
0
    def setUpPloneSite(self, portal):
        # Needed to get the workflows
        applyProfile(portal, 'Products.CMFPlone:plone')

        applyProfile(portal, 'slc.seminarportal:default')

        # Login as manager and create a test folder
        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)
        portal.invokeFactory('Folder', 'folder')

        browserlayerutils.register_layer(
            IThemeLayer,
            name="slc.seminarportal.browserlayer"
        )
Пример #20
0
    def test_childsite_browserlayer(self):
        """
        Child sites can have their own browser layer.
        """
        utils.enable_childsite(self.childsite)
        layer_utils.register_layer(IChildSiteLayer,
                                   'collective.lineage.childsite.layer',
                                   site_manager=component.getSiteManager(
                                       (self.childsite)))

        self.assertFalse(
            IChildSiteLayer.providedBy(self.portal.REQUEST),
            'Child site browser layer applied prior to traversing')
        self.portal.REQUEST.traverse('/'.join(
            self.childsite.getPhysicalPath()))
        self.assertTrue(IChildSiteLayer.providedBy(self.portal.REQUEST),
                        'Child site browser layer not applied to the request')
Пример #21
0
    def test_childsite_browserlayer(self):
        """
        Child sites can have their own browser layer.
        """
        utils.enable_childsite(self.childsite)
        layer_utils.register_layer(
            IChildSiteLayer,
            'collective.lineage.childsite.layer',
            site_manager=component.getSiteManager((self.childsite)))

        self.assertFalse(
            IChildSiteLayer.providedBy(self.portal.REQUEST),
            'Child site browser layer applied prior to traversing')
        self.portal.REQUEST.traverse(
            '/'.join(self.childsite.getPhysicalPath()))
        self.assertTrue(
            IChildSiteLayer.providedBy(self.portal.REQUEST),
            'Child site browser layer not applied to the request')
Пример #22
0
    def afterSetUp(self):
        super(JsonClientTestCase, self).afterSetUp()
        register_layer(IPMR2JsonClientTestLayer, "pmr2.jsonclient.tests")
        request = TestRequest()

        # Ensure that the most basic scope managers are being used.
        cmf = factory(ConsumerManager)
        tmf = factory(TokenManager)
        smf = factory(MockScopeManager)

        zope.component.provideAdapter(cmf, (IAnnotatable, IPMR2JsonClientTestLayer), IConsumerManager)
        zope.component.provideAdapter(tmf, (IAnnotatable, IPMR2JsonClientTestLayer), ITokenManager)
        zope.component.provideAdapter(smf, (IAnnotatable, IPMR2JsonClientTestLayer), IScopeManager)

        # assuming none of these are overridden.
        self.consumer = Consumer("test.example.com", "consumer-secret", u"PMR2 Test JSON Client", None)
        cm = zope.component.getMultiAdapter((self.portal, request), IConsumerManager)
        cm.add(self.consumer)

        token = Token("pmr2token", "token-secret")
        token.access = True
        token.consumer_key = self.consumer.key
        token.user = default_user

        self.token = token
        tm = zope.component.getMultiAdapter((self.portal, request), ITokenManager)
        tm.add(self.token)

        # XXX especially this one.
        sm = zope.component.getMultiAdapter((self.portal, request), IScopeManager)
        sm.permitted = "^.*$"  # permit everything.

        b = Browser()
        portal_url = self.portal.absolute_url()
        b.open(portal_url + "/login")
        b.getControl(name="__ac_name").value = default_user
        b.getControl(name="__ac_password").value = default_password
        b.getControl(name="submit").click()
        self.user_browser = b
Пример #23
0
 def setUp(self):
     super(DocTestCase, self).setUp()
     register_layer(IPMR2TestRequest, 'pmr2.z3cform.tests')
Пример #24
0
def install(self):
    out=StringIO()

    Layers = []
    mtool = getToolByName(self, 'portal_migration')
    plone_version = mtool.getFileSystemVersion()
    if plone_version.startswith('2.1'):
        plone_version = '2.1'
    elif plone_version.startswith('2.0'):
        plone_version = '2.0.5'
    elif plone_version.startswith('2.5') or plone_version.startswith('3.0'):
        plone_version = '2.5'
    else:
        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3.0")

    product_path = package_home(GLOBALS)
    versioned_skin = path_join(product_path, 'skins', PROJECTNAME, plone_version)

    Layers.append(SKIN_NAME)
    Layers.append('%s/%s' % (SKIN_NAME, plone_version) )
    out.write('Call setupSkin... \n')
    setupSkin(self, out, Layers)
    
    # register our browser layer
    register_layer(IPloneCommentsLayer, name='qPloneComments')

    # add Property sheet to portal_properies
    pp = getToolByName(self, 'portal_properties')
    if not 'qPloneComments' in pp.objectIds():
        pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments')
        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' )
    props_sheet = pp['qPloneComments']
    updateProperties(props_sheet, out, PROPERTIES)
    # Tern on Anonymous commenting
    self.manage_permission(ReplyToItem, ['Anonymous','Manager','Member'], 1)

    out.write("Updating properties of %s property sheet\n" % 'qPloneComments' )

    # Add Configlet. Delete old version before adding, if exist one.
    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
                                        appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif')

    # Add DiscussionManager role to Portal
    if plone_version == '2.5':
        uf = getToolByName(self, 'acl_users')
        rmanager = uf.portal_role_manager
        existing = rmanager.listRoleIds()
        if not 'DiscussionManager' in existing:
            rmanager.addRole('DiscussionManager')
            out.write("Added DiscussionManager role top portal.\n")
    else:
        roles = list(self.__ac_roles__)
        if not 'DiscussionManager' in roles:
            roles.append('DiscussionManager')
            roles = tuple(roles)
            self.__ac_roles__ = roles
            out.write("Added DiscussionManager role top portal.\n")

    self.manage_permission('Moderate Discussion', ['DiscussionManager', 'Manager'])
    #  Add 'DiscussionManagers' group
    gtool = getToolByName(self, 'portal_groups')
    existing = gtool.listGroupIds()
    if not 'DiscussionManager' in existing:
        gtool.addGroup('DiscussionManager', roles=['DiscussionManager'])
        out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n")

    # Remove workflow-chain for Discussion Item
    wf_tool = getToolByName(self, 'portal_workflow')
    wf_tool.setChainForPortalTypes( ('Discussion Item',), []) 
    out.write("Removed workflow chain for Discussion Item type.\n")

    out.write('Installation successfully completed.\n')
    return out.getvalue()
Пример #25
0
 def _initLayers(self, node):
     for child in node.childNodes:
         if child.nodeName.lower() == "layer":
             name = child.getAttribute("name")
             interface = _resolveDottedName(child.getAttribute("interface"))
             register_layer(interface, name, site_manager=self.context)