[Testbot] Plone 5.0 - Python 2.7 - Build # 1671 - Regression! - 1 failure(s)

jenkins at plone.org jenkins at plone.org
Fri Feb 21 21:03:35 UTC 2014


-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 1671 - Failure!
-------------------------------------------------------------------------------

http://jenkins.plone.org/job/plone-5.0-python-2.7/1671/


-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------

Repository: Products.CMFPlone
Branch: refs/heads/master
Date: 2014-02-21T09:50:00-08:00
Author: tisto (tisto) <tisto at plone.org>
Commit: https://github.com/plone/Products.CMFPlone/commit/043be3ac44db66bde188dd55ffd0cc6bdd3aedd1

Pep8

Files changed:
M Products/CMFPlone/tests/test_controlpanel.py

diff --git a/Products/CMFPlone/tests/test_controlpanel.py b/Products/CMFPlone/tests/test_controlpanel.py
index 82e1f86..b6862e4 100644
--- a/Products/CMFPlone/tests/test_controlpanel.py
+++ b/Products/CMFPlone/tests/test_controlpanel.py
@@ -9,7 +9,6 @@
 from plone.app.testing import TEST_USER_ID, setRoles
 
 from plone.registry import Registry
-from plone.registry.interfaces import IRegistry
 
 from zope.component import getMultiAdapter
 
@@ -50,8 +49,8 @@ def test_search_controlpanel_view(self):
     def test_plone_app_registry_in_controlpanel(self):
         self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
         self.assertTrue(
-            'plone.app.registry' in [a.getAction(self)['id']
-            for a in self.controlpanel.listActions()]
+            'plone.app.registry' in
+            [a.getAction(self)['id'] for a in self.controlpanel.listActions()]
         )
 
     def test_controlpanel_registry_is_available(self):


Repository: Products.CMFPlone
Branch: refs/heads/master
Date: 2014-02-21T11:40:37-08:00
Author: tisto (tisto) <tisto at plone.org>
Commit: https://github.com/plone/Products.CMFPlone/commit/cf9373809e9453a199802f7d154333ff965fcd51

Add SearchControlPanelAdapter implementation.

Files changed:
A Products/CMFPlone/controlpanel/README.rst
A Products/CMFPlone/controlpanel/bbb/configure.zcml
A Products/CMFPlone/controlpanel/bbb/search.py
A Products/CMFPlone/controlpanel/browser/__init__.py
A Products/CMFPlone/controlpanel/tests/__init__.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_search_adapter.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_search.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_search.py
A __init__.py b/Products/CMFPlone/controlpanel/bbb/__init__.py
M Products/CMFPlone/controlpanel/configure.zcml
D Products/CMFPlone/tests/test_controlpanel.py

diff --git a/Products/CMFPlone/controlpanel/README.rst b/Products/CMFPlone/controlpanel/README.rst
new file mode 100644
index 0000000..1853fe7
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/README.rst
@@ -0,0 +1,29 @@
+Plone Controlpanel
+==================
+
+All control panel related settings are stored in plone.app.registry and
+can be looked up like this::
+
+  >>> from zope.component import getUtility
+  >>> from plone.registry.interfaces import IRegistry
+  >>> registry = getUtility(IRegistry)
+
+  >>> from Products.CMFPlone.interfaces import ISearchSchema
+  >>> search_settings = registry.forInterface(ISearchSchema)
+
+  >>> site_settings.enable_livesearch
+  True
+
+If you want to change the settings, just change the attribute::
+
+  >>> search_settings.enable_livesearch = False
+
+
+Search Control Panel
+--------------------
+
+  >>> from plone.app.controlpanel.interfaces import ISearchSchema
+  >>> site_settings = registry.forInterface(ISearchSchema)
+
+  >>> site_settings.enable_livesearch = True
+  >>> site_settings.types_not_searched = ('Discussion Item', 'Folder')
diff --git a/Products/CMFPlone/controlpanel/bbb/__init__.py b/Products/CMFPlone/controlpanel/bbb/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Products/CMFPlone/controlpanel/bbb/configure.zcml b/Products/CMFPlone/controlpanel/bbb/configure.zcml
new file mode 100644
index 0000000..44bd0f3
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/bbb/configure.zcml
@@ -0,0 +1,8 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:five="http://namespaces.zope.org/five"
+    xmlns:browser="http://namespaces.zope.org/browser">
+
+  <adapter factory=".search.SearchControlPanelAdapter" />
+
+</configure>
diff --git a/Products/CMFPlone/controlpanel/bbb/search.py b/Products/CMFPlone/controlpanel/bbb/search.py
new file mode 100644
index 0000000..80a7e16
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/bbb/search.py
@@ -0,0 +1,45 @@
+from zope.site.hooks import getSite
+from Products.CMFPlone.interfaces.siteroot import IPloneSiteRoot
+from zope.component import adapts
+from zope.interface import implements
+from Products.CMFPlone.interfaces import ISearchSchema
+from Products.CMFCore.utils import getToolByName
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+
+
+class SearchControlPanelAdapter(object):
+
+    adapts(IPloneSiteRoot)
+    implements(ISearchSchema)
+
+    def __init__(self, context):
+        self.portal = getSite()
+        self.jstool = getToolByName(context, 'portal_javascripts')
+        registry = getUtility(IRegistry)
+        self.search_settings = registry.forInterface(ISearchSchema)
+
+    def get_enable_livesearch(self):
+        return self.search_settings.enable_livesearch
+
+    def set_enable_livesearch(self, value):
+        if value:
+            self.search_settings.enable_livesearch = True
+            #self.jstool.getResource('livesearch.js').setEnabled(True)
+        else:
+            self.search_settings.enable_livesearch = False
+            #self.jstool.getResource('livesearch.js').setEnabled(False)
+        self.jstool.cookResources()
+
+    enable_livesearch = property(get_enable_livesearch, set_enable_livesearch)
+
+    def get_types_not_searched(self):
+        return self.search_settings.types_not_searched
+
+    def set_types_not_searched(self, value):
+        self.search_settings.types_not_searched = value
+
+    types_not_searched = property(
+        get_types_not_searched,
+        set_types_not_searched
+    )
diff --git a/Products/CMFPlone/controlpanel/browser/__init__.py b/Products/CMFPlone/controlpanel/browser/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Products/CMFPlone/controlpanel/configure.zcml b/Products/CMFPlone/controlpanel/configure.zcml
index 7dd73bd..20023c8 100644
--- a/Products/CMFPlone/controlpanel/configure.zcml
+++ b/Products/CMFPlone/controlpanel/configure.zcml
@@ -5,6 +5,9 @@
 
   <include package="plone.app.registry" />
 
+  <include package=".bbb" />
+  <!--<include package=".browser" />-->
+
   <!-- Search Control Panel -->
   <browser:page
       name="search-controlpanel"
diff --git a/Products/CMFPlone/controlpanel/tests/__init__.py b/Products/CMFPlone/controlpanel/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_search_adapter.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_search_adapter.py
new file mode 100644
index 0000000..5086856
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_search_adapter.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+from Products.CMFPlone.interfaces import ISearchSchema
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+from plone.app.testing import TEST_USER_ID, setRoles
+from plone.registry.interfaces import IRegistry
+from zope.component import getUtility
+from zope.component import getAdapter
+
+import unittest2 as unittest
+
+
+class SearchControlPanelAdapterTest(unittest.TestCase):
+
+    layer = PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+    def setUp(self):
+        self.portal = self.layer['portal']
+        self.request = self.layer['request']
+        setRoles(self.portal, TEST_USER_ID, ['Manager'])
+        registry = getUtility(IRegistry)
+        self.search_settings = registry.forInterface(ISearchSchema)
+
+    def test_adapter_lookup(self):
+        self.assertTrue(getAdapter(self.portal, ISearchSchema))
+
+    def test_get_enable_livesearch(self):
+        self.assertEqual(
+            getAdapter(self.portal, ISearchSchema).enable_livesearch,
+            True
+        )
+        self.search_settings.enable_livesearch = False
+        self.assertEquals(
+            getAdapter(self.portal, ISearchSchema).enable_livesearch,
+            False
+        )
+
+    def test_set_enable_livesearch(self):
+        self.assertEquals(
+            self.search_settings.enable_livesearch,
+            True
+        )
+        getAdapter(self.portal, ISearchSchema).enable_livesearch = False
+        self.assertEquals(
+            self.search_settings.enable_livesearch,
+            False
+        )
+
+    def test_get_types_not_searched(self):
+        self.assertTrue(
+            'Folder' not in
+            getAdapter(self.portal, ISearchSchema).types_not_searched
+        )
+        self.search_settings.types_not_searched = ('Folder',)
+        self.assertTrue(
+            'Folder' in
+            getAdapter(self.portal, ISearchSchema).types_not_searched
+        )
+
+    def test_set_types_not_searched(self):
+        self.assertTrue(
+            'Folder' not in self.search_settings.types_not_searched
+        )
+        getAdapter(self.portal, ISearchSchema).types_not_searched = ('Folder',)
+        self.assertTrue(
+            'Folder' in self.search_settings.types_not_searched
+        )
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_search.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_search.py
new file mode 100644
index 0000000..e77b5ee
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_search.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+import unittest2 as unittest
+
+from plone.testing.z2 import Browser
+from plone.app.testing import SITE_OWNER_NAME, SITE_OWNER_PASSWORD
+
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+from plone.registry import Registry
+from Products.CMFPlone.interfaces import ISearchSchema
+
+from zope.component import getMultiAdapter
+
+from Products.CMFCore.utils import getToolByName
+
+from plone.app.testing import TEST_USER_ID, setRoles
+
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
+
+
+class SearchControlPanelFunctionalTest(unittest.TestCase):
+    """Test that changes in the search control panel are actually
+    stored in the registry.
+    """
+
+    layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
+
+    def setUp(self):
+        self.app = self.layer['app']
+        self.portal = self.layer['portal']
+        self.portal_url = self.portal.absolute_url()
+        self.browser = Browser(self.app)
+        self.browser.handleErrors = False
+        self.browser.addHeader(
+            'Authorization',
+            'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,)
+        )
+
+    def test_search_control_panel_link(self):
+        self.browser.open(
+            "%s/plone_control_panel" % self.portal_url)
+        self.browser.getLink('Search').click()
+
+    def test_search_control_panel_backlink(self):
+        self.browser.open(
+            "%s/@@search-controlpanel" % self.portal_url)
+        self.assertTrue("Plone Configuration" in self.browser.contents)
+
+    def test_search_control_panel_sidebar(self):
+        self.browser.open(
+            "%s/@@search-controlpanel" % self.portal_url)
+        self.browser.getLink('Site Setup').click()
+        self.assertEqual(
+            self.browser.url,
+            'http://nohost/plone/@@overview-controlpanel')
+
+    def test_enable_livesearch(self):
+        self.browser.open(
+            "%s/@@search-controlpanel" % self.portal_url)
+        self.browser.getControl('Enable LiveSearch').selected = True
+        self.browser.getControl('Save').click()
+
+        registry = getUtility(IRegistry)
+        settings = registry.forInterface(ISearchSchema)
+        self.assertEqual(settings.enable_livesearch, True)
+
+    def test_types_not_searched(self):
+        self.browser.open(
+            "%s/@@search-controlpanel" % self.portal_url)
+        self.browser.getControl(
+            name='form.widgets.types_not_searched:list').value = ['Discussion Item', 'News Item']
+        self.browser.getControl('Save').click()
+
+        registry = getUtility(IRegistry)
+        settings = registry.forInterface(ISearchSchema)
+        self.assertFalse('Discussion Item' in settings.types_not_searched)
+        self.assertFalse('News Item Item' in settings.types_not_searched)
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py
new file mode 100644
index 0000000..08b41ea
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+"""Functional Doctests for control panel.
+"""
+import doctest
+
+import unittest2 as unittest
+import pprint
+
+from plone.testing import layered
+
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
+
+
+optionflags = (
+    doctest.ELLIPSIS |
+    doctest.NORMALIZE_WHITESPACE |
+    doctest.REPORT_ONLY_FIRST_FAILURE)
+normal_testfiles = [
+    '../README.rst',
+]
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTests([
+        layered(doctest.DocFileSuite(test,
+                                     optionflags=optionflags,
+                                     globs={'pprint': pprint.pprint,
+                                            }
+                                     ),
+                layer=PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING)
+        for test in normal_testfiles])
+    return suite
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_search.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_search.py
new file mode 100644
index 0000000..b6862e4
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_search.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+import unittest2 as unittest
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFPlone.interfaces import ISearchSchema
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+from plone.app.testing import TEST_USER_ID, setRoles
+
+from plone.registry import Registry
+
+from zope.component import getMultiAdapter
+
+
+class ProductsCMFPloneSetupTest(unittest.TestCase):
+
+    layer = PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+    def setUp(self):
+        self.portal = self.layer['portal']
+        self.request = self.layer['request']
+        setRoles(self.portal, TEST_USER_ID, ['Manager'])
+        self.types = self.portal.portal_types
+        self.qi_tool = getToolByName(self.portal, 'portal_quickinstaller')
+
+    def test_plone_app_registry_installed(self):
+        pid = 'plone.app.registry'
+        installed = [p['id'] for p in self.qi_tool.listInstalledProducts()]
+        self.assertTrue(
+            pid in installed,
+            'Package %s appears not to have been installed' % pid)
+
+    def test_plone_app_registry_is_listed_in_the_controlpanel(self):
+        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
+        self.assertTrue(
+            'plone.app.registry' in [
+                a.getAction(self)['id']
+                for a in self.controlpanel.listActions()
+            ]
+        )
+
+    def test_search_controlpanel_view(self):
+        view = getMultiAdapter((self.portal, self.portal.REQUEST),
+                               name="search-controlpanel")
+        view = view.__of__(self.portal)
+        self.assertTrue(view())
+
+    def test_plone_app_registry_in_controlpanel(self):
+        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
+        self.assertTrue(
+            'plone.app.registry' in
+            [a.getAction(self)['id'] for a in self.controlpanel.listActions()]
+        )
+
+    def test_controlpanel_registry_is_available(self):
+        self.registry = Registry()
+        self.registry.registerInterface(ISearchSchema)
+
+    def test_enable_livesearch_setting(self):
+        self.assertTrue('enable_livesearch' in ISearchSchema.names())
+
+    def test_types_not_searched(self):
+        self.assertTrue('types_not_searched' in ISearchSchema.names())
diff --git a/Products/CMFPlone/tests/test_controlpanel.py b/Products/CMFPlone/tests/test_controlpanel.py
deleted file mode 100644
index b6862e4..0000000
--- a/Products/CMFPlone/tests/test_controlpanel.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-import unittest2 as unittest
-
-from Products.CMFCore.utils import getToolByName
-from Products.CMFPlone.interfaces import ISearchSchema
-from Products.CMFPlone.testing import \
-    PRODUCTS_CMFPLONE_INTEGRATION_TESTING
-
-from plone.app.testing import TEST_USER_ID, setRoles
-
-from plone.registry import Registry
-
-from zope.component import getMultiAdapter
-
-
-class ProductsCMFPloneSetupTest(unittest.TestCase):
-
-    layer = PRODUCTS_CMFPLONE_INTEGRATION_TESTING
-
-    def setUp(self):
-        self.portal = self.layer['portal']
-        self.request = self.layer['request']
-        setRoles(self.portal, TEST_USER_ID, ['Manager'])
-        self.types = self.portal.portal_types
-        self.qi_tool = getToolByName(self.portal, 'portal_quickinstaller')
-
-    def test_plone_app_registry_installed(self):
-        pid = 'plone.app.registry'
-        installed = [p['id'] for p in self.qi_tool.listInstalledProducts()]
-        self.assertTrue(
-            pid in installed,
-            'Package %s appears not to have been installed' % pid)
-
-    def test_plone_app_registry_is_listed_in_the_controlpanel(self):
-        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
-        self.assertTrue(
-            'plone.app.registry' in [
-                a.getAction(self)['id']
-                for a in self.controlpanel.listActions()
-            ]
-        )
-
-    def test_search_controlpanel_view(self):
-        view = getMultiAdapter((self.portal, self.portal.REQUEST),
-                               name="search-controlpanel")
-        view = view.__of__(self.portal)
-        self.assertTrue(view())
-
-    def test_plone_app_registry_in_controlpanel(self):
-        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
-        self.assertTrue(
-            'plone.app.registry' in
-            [a.getAction(self)['id'] for a in self.controlpanel.listActions()]
-        )
-
-    def test_controlpanel_registry_is_available(self):
-        self.registry = Registry()
-        self.registry.registerInterface(ISearchSchema)
-
-    def test_enable_livesearch_setting(self):
-        self.assertTrue('enable_livesearch' in ISearchSchema.names())
-
-    def test_types_not_searched(self):
-        self.assertTrue('types_not_searched' in ISearchSchema.names())


Repository: Products.CMFPlone
Branch: refs/heads/master
Date: 2014-02-21T11:40:44-08:00
Author: tisto (tisto) <tisto at plone.org>
Commit: https://github.com/plone/Products.CMFPlone/commit/58b794b7a3c051d77a68e5719088735553da93a9

Merge branch 'master' of git://github.com/plone/Products.CMFPlone

Files changed:
M Products/CMFPlone/tests/testPortalCreation.py

diff --git a/Products/CMFPlone/tests/testPortalCreation.py b/Products/CMFPlone/tests/testPortalCreation.py
index db2272d..bd12d48 100644
--- a/Products/CMFPlone/tests/testPortalCreation.py
+++ b/Products/CMFPlone/tests/testPortalCreation.py
@@ -121,6 +121,10 @@ def testMembersFolderOrdering(self):
         members = self.membership.getMembersFolder()
         self.assertEqual(members._ordering, 'unordered')
 
+    def testMembersFolderDefaultView(self):
+        members = self.membership.getMembersFolder()
+        self.assertEqual(members.layout, '@@member-search')
+
     def testMailHost(self):
         # MailHost should be of the standard variety
         mailhost = self.portal.MailHost
@@ -901,40 +905,9 @@ class TestPortalBugs(PloneTestCase.PloneTestCase):
 
     def afterSetUp(self):
         self.membership = self.portal.portal_membership
-        self.members = self.membership.getMembersFolder()
         self.catalog = self.portal.portal_catalog
-        self.mem_index_type = "Script (Python)"
         self.setupAuthenticator()
 
-    def testMembersIndexHtml(self):
-        # index_html for Members folder should be a Page Template
-        members = self.members
-        self.assertEqual(aq_base(members).meta_type, 'ATFolder')
-        self.assertTrue(hasattr(aq_base(members), 'index_html'))
-        # getitem works
-        self.assertEqual(aq_base(members)['index_html'].meta_type,
-                         self.mem_index_type)
-        self.assertEqual(members['index_html'].meta_type, self.mem_index_type)
-        # _getOb works
-        self.assertEqual(aq_base(members)._getOb('index_html').meta_type,
-                         self.mem_index_type)
-        self.assertEqual(members._getOb('index_html').meta_type,
-                         self.mem_index_type)
-        # getattr works when called explicitly
-        self.assertEqual(aq_base(members).__getattr__('index_html').meta_type,
-                         self.mem_index_type)
-        self.assertEqual(members.__getattr__('index_html').meta_type,
-                         self.mem_index_type)
-
-    def testLargePloneFolderHickup(self):
-        # Attribute access for 'index_html' acquired the Document from the
-        # portal instead of returning the local Page Template. This was due to
-        # special treatment of 'index_html' in the PloneFolder base class and
-        # got fixed by hazmat.
-        members = self.members
-        self.assertEqual(aq_base(members).meta_type, 'ATFolder')
-        self.assertEqual(members.index_html.meta_type, self.mem_index_type)
-
     def testSubsequentProfileImportSucceeds(self):
         # Subsequent profile imports fail (#5439)
         self.loginAsPortalOwner()


Repository: Products.CMFPlone
Branch: refs/heads/master
Date: 2014-02-21T11:56:11-08:00
Author: tisto (tisto) <tisto at plone.org>
Commit: https://github.com/plone/Products.CMFPlone/commit/f4745e827567855cbf6644238582d5ca6d0e7a1c

Move search control panel to browser dir.

Files changed:
A Products/CMFPlone/controlpanel/browser/configure.zcml
A Products/CMFPlone/controlpanel/browser/search.py
M Products/CMFPlone/controlpanel/README.rst
M Products/CMFPlone/controlpanel/configure.zcml
D Products/CMFPlone/controlpanel/search.py

diff --git a/Products/CMFPlone/controlpanel/README.rst b/Products/CMFPlone/controlpanel/README.rst
index 1853fe7..d48a54f 100644
--- a/Products/CMFPlone/controlpanel/README.rst
+++ b/Products/CMFPlone/controlpanel/README.rst
@@ -11,7 +11,7 @@ can be looked up like this::
   >>> from Products.CMFPlone.interfaces import ISearchSchema
   >>> search_settings = registry.forInterface(ISearchSchema)
 
-  >>> site_settings.enable_livesearch
+  >>> search_settings.enable_livesearch
   True
 
 If you want to change the settings, just change the attribute::
diff --git a/Products/CMFPlone/controlpanel/browser/configure.zcml b/Products/CMFPlone/controlpanel/browser/configure.zcml
new file mode 100644
index 0000000..67314ed
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/browser/configure.zcml
@@ -0,0 +1,14 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:five="http://namespaces.zope.org/five"
+    xmlns:browser="http://namespaces.zope.org/browser">
+
+  <!-- Search Control Panel -->
+  <browser:page
+    name="search-controlpanel"
+    for="Products.CMFPlone.interfaces.IPloneSiteRoot"
+    class=".search.SearchControlPanel"
+    permission="plone.app.controlpanel.Search"
+    />
+
+</configure>
diff --git a/Products/CMFPlone/controlpanel/browser/search.py b/Products/CMFPlone/controlpanel/browser/search.py
new file mode 100644
index 0000000..fde8187
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/browser/search.py
@@ -0,0 +1,49 @@
+from Products.CMFPlone import PloneMessageFactory as _
+from Products.CMFPlone.interfaces import ISearchSchema
+from Products.CMFPlone.controlpanel.widgets import ReverseCheckBoxFieldWidget
+from plone.app.registry.browser import controlpanel
+from zope.component import queryUtility
+from zope.schema.interfaces import IVocabularyFactory
+
+
+class SearchControlPanelForm(controlpanel.RegistryEditForm):
+
+    id = "SearchControlPanel"
+    label = _(u"Search settings")
+    schema = ISearchSchema
+
+    def updateFields(self):
+        super(SearchControlPanelForm, self).updateFields()
+        self.fields['types_not_searched'].widgetFactory = \
+            ReverseCheckBoxFieldWidget
+
+    def updateWidgets(self):
+        super(SearchControlPanelForm, self).updateWidgets()
+        # Replace vocabulary for 'types_not_searched' with user friendly types
+        # to hide "bad" types in control panel.
+        vocab = self._friendly_types_vocabulary()
+        self.widgets['types_not_searched'].terms.terms = vocab(self.context)
+        self.widgets['types_not_searched'].update()
+
+    def applyChanges(self, data):
+        # We only get "friendly" types. Add "bad" types from current settings.
+        current_types = self.fields['types_not_searched'].field.get(
+            self.getContent())
+        all_vocab = queryUtility(IVocabularyFactory,
+                                 'plone.app.vocabularies.PortalTypes')
+        all_types = [t.value for t in all_vocab(self.context)]
+        friendly_vocab = self._friendly_types_vocabulary()
+        friendly_types = [t.value for t in friendly_vocab(self.context)]
+        submitted_types = data['types_not_searched'] or []
+        new_types = [t for t in all_types if t in submitted_types
+                     or (t in current_types and t not in friendly_types)]
+        data['types_not_searched'] = tuple(new_types)
+        super(SearchControlPanelForm, self).applyChanges(data)
+
+    def _friendly_types_vocabulary(self):
+        return queryUtility(IVocabularyFactory,
+                            'plone.app.vocabularies.ReallyUserFriendlyTypes')
+
+
+class SearchControlPanel(controlpanel.ControlPanelFormWrapper):
+    form = SearchControlPanelForm
diff --git a/Products/CMFPlone/controlpanel/configure.zcml b/Products/CMFPlone/controlpanel/configure.zcml
index 20023c8..1b49eda 100644
--- a/Products/CMFPlone/controlpanel/configure.zcml
+++ b/Products/CMFPlone/controlpanel/configure.zcml
@@ -1,19 +1,10 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
-    xmlns:five="http://namespaces.zope.org/five"
-    xmlns:browser="http://namespaces.zope.org/browser">
+    xmlns:five="http://namespaces.zope.org/five">
 
   <include package="plone.app.registry" />
 
   <include package=".bbb" />
-  <!--<include package=".browser" />-->
-
-  <!-- Search Control Panel -->
-  <browser:page
-      name="search-controlpanel"
-      for="Products.CMFPlone.interfaces.IPloneSiteRoot"
-      class=".search.SearchControlPanel"
-      permission="plone.app.controlpanel.Search"
-      />
+  <include package=".browser" />
 
 </configure>
diff --git a/Products/CMFPlone/controlpanel/search.py b/Products/CMFPlone/controlpanel/search.py
deleted file mode 100644
index fde8187..0000000
--- a/Products/CMFPlone/controlpanel/search.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from Products.CMFPlone import PloneMessageFactory as _
-from Products.CMFPlone.interfaces import ISearchSchema
-from Products.CMFPlone.controlpanel.widgets import ReverseCheckBoxFieldWidget
-from plone.app.registry.browser import controlpanel
-from zope.component import queryUtility
-from zope.schema.interfaces import IVocabularyFactory
-
-
-class SearchControlPanelForm(controlpanel.RegistryEditForm):
-
-    id = "SearchControlPanel"
-    label = _(u"Search settings")
-    schema = ISearchSchema
-
-    def updateFields(self):
-        super(SearchControlPanelForm, self).updateFields()
-        self.fields['types_not_searched'].widgetFactory = \
-            ReverseCheckBoxFieldWidget
-
-    def updateWidgets(self):
-        super(SearchControlPanelForm, self).updateWidgets()
-        # Replace vocabulary for 'types_not_searched' with user friendly types
-        # to hide "bad" types in control panel.
-        vocab = self._friendly_types_vocabulary()
-        self.widgets['types_not_searched'].terms.terms = vocab(self.context)
-        self.widgets['types_not_searched'].update()
-
-    def applyChanges(self, data):
-        # We only get "friendly" types. Add "bad" types from current settings.
-        current_types = self.fields['types_not_searched'].field.get(
-            self.getContent())
-        all_vocab = queryUtility(IVocabularyFactory,
-                                 'plone.app.vocabularies.PortalTypes')
-        all_types = [t.value for t in all_vocab(self.context)]
-        friendly_vocab = self._friendly_types_vocabulary()
-        friendly_types = [t.value for t in friendly_vocab(self.context)]
-        submitted_types = data['types_not_searched'] or []
-        new_types = [t for t in all_types if t in submitted_types
-                     or (t in current_types and t not in friendly_types)]
-        data['types_not_searched'] = tuple(new_types)
-        super(SearchControlPanelForm, self).applyChanges(data)
-
-    def _friendly_types_vocabulary(self):
-        return queryUtility(IVocabularyFactory,
-                            'plone.app.vocabularies.ReallyUserFriendlyTypes')
-
-
-class SearchControlPanel(controlpanel.ControlPanelFormWrapper):
-    form = SearchControlPanelForm




-------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CHANGES.log
Type: application/octet-stream
Size: 29475 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20140221/b1e9b39a/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build.log
Type: application/octet-stream
Size: 133925 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20140221/b1e9b39a/attachment-0003.obj>


More information about the Testbot mailing list