[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