[Testbot] Plone 5.0 - Python 2.7 - Build # 2857 - Fixed! - 0 failure(s)

jenkins at plone.org jenkins at plone.org
Thu Jul 24 10:57:36 UTC 2014


-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 2857 - Fixed!
-------------------------------------------------------------------------------

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


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

Repository: Products.CMFPlone
Branch: refs/heads/master
Date: 2014-07-24T11:56:34+02:00
Author: Timo Stollenwerk (tisto) <tisto at plone.org>
Commit: https://github.com/plone/Products.CMFPlone/commit/5ede2d6f4e6bcdb6adfa260ce86895b45724ae42

Move editing control panel from p.a.contenttypes to CMFPlone (also formlib -> z3cform).

Files changed:
A Products/CMFPlone/controlpanel/bbb/editing.py
A Products/CMFPlone/controlpanel/browser/editing.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_editing_adapter.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_editing.py
A Products/CMFPlone/controlpanel/tests/test_controlpanel_editing.py
M Products/CMFPlone/controlpanel/bbb/configure.zcml
M Products/CMFPlone/controlpanel/browser/configure.zcml
M Products/CMFPlone/controlpanel/tests/test_controlpanel_navigation.py
M Products/CMFPlone/interfaces/__init__.py
M Products/CMFPlone/interfaces/controlpanel.py
M Products/CMFPlone/profiles/dependencies/registry.xml

diff --git a/Products/CMFPlone/controlpanel/bbb/configure.zcml b/Products/CMFPlone/controlpanel/bbb/configure.zcml
index 6a48182..c647f0b 100644
--- a/Products/CMFPlone/controlpanel/bbb/configure.zcml
+++ b/Products/CMFPlone/controlpanel/bbb/configure.zcml
@@ -3,6 +3,7 @@
     xmlns:five="http://namespaces.zope.org/five"
     xmlns:browser="http://namespaces.zope.org/browser">
 
+  <adapter factory=".editing.EditingControlPanelAdapter" />
   <adapter factory=".maintenance.MaintenanceControlPanelAdapter" />
   <adapter factory=".navigation.NavigationControlPanelAdapter" />
   <adapter factory=".search.SearchControlPanelAdapter" />
diff --git a/Products/CMFPlone/controlpanel/bbb/editing.py b/Products/CMFPlone/controlpanel/bbb/editing.py
new file mode 100644
index 0000000..d595d33
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/bbb/editing.py
@@ -0,0 +1,59 @@
+from zope.component import adapts
+from Products.CMFDefault.formlib.schema import ProxyFieldProperty
+from zope.interface import implements
+from zope.site.hooks import getSite
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+from Products.CMFCore.utils import getToolByName
+from Products.CMFPlone.interfaces import IPloneSiteRoot
+
+from Products.CMFPlone.interfaces import IEditingSchema
+
+
+class EditingControlPanelAdapter(object):
+
+    adapts(IPloneSiteRoot)
+    implements(IEditingSchema)
+
+    def __init__(self, context):
+        registry = getUtility(IRegistry)
+        self.settings = registry.forInterface(IEditingSchema, prefix='plone')
+
+    def get_visible_ids(self):
+        return self.settings.visible_ids
+
+    def set_visible_ids(self, value):
+        self.settings.visible_ids = value
+
+    def get_enable_link_integrity_checks(self):
+        return self.settings.enable_link_integrity_checks
+
+    def set_enable_link_integrity_checks(self, value):
+        self.settings.enable_link_integrity_checks = value
+
+    def get_ext_editor(self):
+        return self.settings.ext_editor
+
+    def set_ext_editor(self, value):
+        self.settings.ext_editor = value
+
+    def get_default_editor(self):
+        return self.settings.default_editor
+
+    def set_default_editor(self, value):
+        self.settings.default_editor = value
+
+    def get_lock_on_ttw_edit(self):
+        return self.settings.lock_on_ttw_edit
+
+    def set_lock_on_ttw_edit(self, value):
+        self.settings.lock_on_ttw_edit = value
+
+    visible_ids = property(get_visible_ids, set_visible_ids)
+    enable_link_integrity_checks = property(
+        get_enable_link_integrity_checks,
+        set_enable_link_integrity_checks
+    )
+    ext_editor = property(get_ext_editor, set_ext_editor)
+    default_editor = property(get_default_editor, set_default_editor)
+    lock_on_ttw_edit = property(get_lock_on_ttw_edit, set_lock_on_ttw_edit)
diff --git a/Products/CMFPlone/controlpanel/browser/configure.zcml b/Products/CMFPlone/controlpanel/browser/configure.zcml
index cf67166..204346a 100644
--- a/Products/CMFPlone/controlpanel/browser/configure.zcml
+++ b/Products/CMFPlone/controlpanel/browser/configure.zcml
@@ -3,6 +3,14 @@
     xmlns:five="http://namespaces.zope.org/five"
     xmlns:browser="http://namespaces.zope.org/browser">
 
+  <!-- Editing Control Panel -->
+  <browser:page
+    name="editing-controlpanel"
+    for="Products.CMFPlone.interfaces.IPloneSiteRoot"
+    class=".editing.EditingControlPanel"
+    permission="plone.app.controlpanel.Editing"
+    />
+
   <!-- Maintenance Control Panel -->
   <browser:page
     name="maintenance-controlpanel"
diff --git a/Products/CMFPlone/controlpanel/browser/editing.py b/Products/CMFPlone/controlpanel/browser/editing.py
new file mode 100644
index 0000000..7d0e8e7
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/browser/editing.py
@@ -0,0 +1,16 @@
+from plone.app.registry.browser import controlpanel
+
+from Products.CMFPlone import PloneMessageFactory as _
+from Products.CMFPlone.interfaces import IEditingSchema
+
+
+class EditingControlPanelForm(controlpanel.RegistryEditForm):
+
+    id = "EditingControlPanel"
+    label = _(u"Editing settings")
+    schema = IEditingSchema
+    schema_prefix = "plone"
+
+
+class EditingControlPanel(controlpanel.ControlPanelFormWrapper):
+    form = EditingControlPanelForm
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_editing_adapter.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_editing_adapter.py
new file mode 100644
index 0000000..d93cf93
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_bbb_editing_adapter.py
@@ -0,0 +1,136 @@
+import unittest
+from plone.app.testing import setRoles
+from zope.component import getAdapter
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+from plone.app.testing import TEST_USER_ID
+from Products.CMFCore.utils import getToolByName
+
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+from Products.CMFPlone.interfaces import IEditingSchema
+
+
+class EditingControlPanelAdapterTest(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.settings = registry.forInterface(IEditingSchema, prefix='plone')
+
+    def test_adapter_lookup(self):
+        self.assertTrue(getAdapter(self.portal, IEditingSchema))
+
+    def test_get_visible_ids(self):
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).visible_ids,
+            False
+        )
+        self.settings.visible_ids = True
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).visible_ids,
+            True
+        )
+
+    def test_set_visible_ids(self):
+        self.assertEqual(
+            self.settings.visible_ids,
+            False
+        )
+        getAdapter(self.portal, IEditingSchema).visible_ids = True
+        self.assertEqual(
+            self.settings.visible_ids,
+            True
+        )
+
+    def test_get_enable_link_integrity_checks_setting(self):
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).enable_link_integrity_checks,
+            True
+        )
+        self.settings.enable_link_integrity_checks = False
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).enable_link_integrity_checks,
+            False
+        )
+
+    def test_set_enable_link_integrity_checks_setting(self):
+        self.assertEqual(
+            self.settings.enable_link_integrity_checks,
+            True
+        )
+        getAdapter(self.portal, IEditingSchema).enable_link_integrity_checks = False
+        self.assertEqual(
+            self.settings.enable_link_integrity_checks,
+            False
+        )
+
+    def test_get_ext_editor_setting(self):
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).ext_editor,
+            False
+        )
+        self.settings.ext_editor = True
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).ext_editor,
+            True
+        )
+
+    def test_set_ext_editor_setting(self):
+        self.assertEqual(
+            self.settings.ext_editor,
+            False
+        )
+        getAdapter(self.portal, IEditingSchema).ext_editor = True
+        self.assertEqual(
+            self.settings.ext_editor,
+            True
+        )
+
+    def test_get_default_editor_setting(self):
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).default_editor,
+            u'TinyMCE'
+        )
+        self.settings.default_editor = u'None'
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).default_editor,
+            u'None'
+        )
+
+    def test_set_default_editor_setting(self):
+        self.assertEqual(
+            self.settings.default_editor,
+            u'TinyMCE'
+        )
+        getAdapter(self.portal, IEditingSchema).default_editor = u'None'
+        self.assertEqual(
+            self.settings.default_editor,
+            u'None'
+        )
+
+    def test_get_lock_on_ttw_edit_setting(self):
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).lock_on_ttw_edit,
+            True
+        )
+        self.settings.lock_on_ttw_edit = False
+        self.assertEqual(
+            getAdapter(self.portal, IEditingSchema).lock_on_ttw_edit,
+            False
+        )
+    def test_set_lock_on_ttw_edit_setting(self):
+        self.assertEqual(
+            self.settings.lock_on_ttw_edit,
+            True
+        )
+        getAdapter(self.portal, IEditingSchema).lock_on_ttw_edit = False
+        self.assertEqual(
+            self.settings.lock_on_ttw_edit,
+            False
+        )
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_editing.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_editing.py
new file mode 100644
index 0000000..d817029
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_editing.py
@@ -0,0 +1,125 @@
+# -*- coding: utf-8 -*-
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+from plone.app.testing import SITE_OWNER_PASSWORD
+from plone.app.testing import SITE_OWNER_NAME
+from plone.testing.z2 import Browser
+from Products.CMFPlone.interfaces import IEditingSchema
+from plone.app.linkintegrity.interfaces import ILinkIntegrityInfo
+
+import unittest2 as unittest
+
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
+
+
+class EditingControlPanelFunctionalTest(unittest.TestCase):
+    """Test that changes in the editing control panel are actually
+    stored in the registry.
+    """
+
+    layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING
+
+    def setUp(self):
+        self.app = self.layer['app']
+        self.request = self.layer['request']
+        self.portal = self.layer['portal']
+        self.portal_url = self.portal.absolute_url()
+
+        registry = getUtility(IRegistry)
+        self.settings = registry.forInterface(IEditingSchema, prefix='plone')
+
+        self.browser = Browser(self.app)
+        self.browser.handleErrors = False
+        self.browser.addHeader(
+            'Authorization',
+            'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,)
+        )
+
+    def test_editing_control_panel_link(self):
+        self.browser.open(
+            "%s/plone_control_panel" % self.portal_url)
+        self.browser.getLink('Editing').click()
+
+    def test_editing_control_panel_backlink(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.assertTrue("Plone Configuration" in self.browser.contents)
+
+    def test_editing_control_panel_sidebar(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getLink('Site Setup').click()
+        self.assertEqual(
+            self.browser.url,
+            'http://nohost/plone/@@overview-controlpanel')
+
+    def test_visible_ids(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Show 'Short Name' on content?")\
+            .selected = True
+        self.browser.getControl('Save').click()
+
+        self.assertEqual(self.settings.visible_ids, True)
+
+    @unittest.skip("TODO: Not implemented yet.")
+    def test_visible_ids_active(self):
+        pass
+
+    def test_default_editor(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Default editor").value = ["None"]
+        self.browser.getControl('Save').click()
+
+        self.assertEqual(self.settings.default_editor, "None")
+
+    @unittest.skip("TODO: Not implemented yet.")
+    def test_default_editor_active(self):
+        pass
+
+    def test_ext_editor(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Enable External Editor feature")\
+            .selected = True
+        self.browser.getControl('Save').click()
+
+        self.assertEqual(self.settings.ext_editor, True)
+
+    @unittest.skip("TODO: Not implemented yet.")
+    def test_ext_editor_active(self):
+        pass
+
+    def test_enable_link_integrity_checks(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Enable link integrity checks")\
+            .selected = True
+        self.browser.getControl('Save').click()
+
+        self.assertEqual(self.settings.enable_link_integrity_checks, True)
+
+    def test_enable_link_integrity_checks_active(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Enable link integrity checks")\
+            .selected = True
+        self.browser.getControl('Save').click()
+
+        self.assertTrue(
+            ILinkIntegrityInfo(self.request).integrityCheckingEnabled())
+
+    def test_lock_on_ttw_edit(self):
+        self.browser.open(
+            "%s/@@editing-controlpanel" % self.portal_url)
+        self.browser.getControl("Enable locking for through-the-web edits")\
+            .selected = True
+        self.browser.getControl('Save').click()
+
+        self.assertEqual(self.settings.lock_on_ttw_edit, True)
+
+    @unittest.skip("TODO: Not implemented yet.")
+    def test_lock_on_ttw_edit_active(self):
+        pass
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_editing.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_editing.py
new file mode 100644
index 0000000..7a591ef
--- /dev/null
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_editing.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+from plone.registry import Registry
+from Products.CMFPlone.interfaces import IEditingSchema
+import unittest2 as unittest
+
+from zope.component import getMultiAdapter
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+
+from Products.CMFCore.utils import getToolByName
+
+from Products.CMFPlone.testing import \
+    PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+
+class EditingRegistryIntegrationTest(unittest.TestCase):
+    """Tests that the editing settings are stored as plone.app.registry
+    settings.
+    """
+
+    layer = PRODUCTS_CMFPLONE_INTEGRATION_TESTING
+
+    def setUp(self):
+        self.portal = self.layer['portal']
+        self.request = self.layer['request']
+        registry = getUtility(IRegistry)
+        self.settings = registry.forInterface(
+            IEditingSchema, prefix="plone")
+
+    def test_editing_controlpanel_view(self):
+        view = getMultiAdapter((self.portal, self.portal.REQUEST),
+                               name="editing-controlpanel")
+        view = view.__of__(self.portal)
+        self.assertTrue(view())
+
+    def test_editing_in_controlpanel(self):
+        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
+        self.assertTrue('EditingSettings' in [
+            a.getAction(self)['id']
+            for a in self.controlpanel.listActions()
+        ])
+
+    def test_visible_ids_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'visible_ids'))
+
+    def test_default_editor_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'default_editor'))
+
+    def test_ext_editor_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'ext_editor'))
+
+    def test_enable_link_integrity_checks_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'enable_link_integrity_checks'))
+
+    def test_lock_on_ttw_edit_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'lock_on_ttw_edit'))
diff --git a/Products/CMFPlone/controlpanel/tests/test_controlpanel_navigation.py b/Products/CMFPlone/controlpanel/tests/test_controlpanel_navigation.py
index 52776c4..e51dec4 100644
--- a/Products/CMFPlone/controlpanel/tests/test_controlpanel_navigation.py
+++ b/Products/CMFPlone/controlpanel/tests/test_controlpanel_navigation.py
@@ -1,4 +1,14 @@
 # -*- coding: utf-8 -*-
+from plone.registry import Registry
+from Products.CMFPlone.interfaces import IEditingSchema
+import unittest2 as unittest
+
+from zope.component import getMultiAdapter
+from zope.component import getUtility
+from plone.registry.interfaces import IRegistry
+
+from Products.CMFCore.utils import getToolByName
+
 from Products.CMFPlone.interfaces import INavigationSchema
 from Products.CMFPlone.testing import \
     PRODUCTS_CMFPLONE_INTEGRATION_TESTING
@@ -13,20 +23,40 @@ class NavigationRegistryIntegrationTest(unittest.TestCase):
 
     layer = PRODUCTS_CMFPLONE_INTEGRATION_TESTING
 
-    def test_generate_tabs(self):
-        self.assertTrue('generate_tabs' in INavigationSchema.names())
+    def setUp(self):
+        self.portal = self.layer['portal']
+        self.request = self.layer['request']
+        registry = getUtility(IRegistry)
+        self.settings = registry.forInterface(
+            INavigationSchema, prefix="plone")
+
+    def test_navigation_controlpanel_view(self):
+        view = getMultiAdapter((self.portal, self.portal.REQUEST),
+                               name="navigation-controlpanel")
+        view = view.__of__(self.portal)
+        self.assertTrue(view())
+
+    def test_navigation_in_controlpanel(self):
+        self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
+        self.assertTrue('NavigationSettings' in [
+            a.getAction(self)['id']
+            for a in self.controlpanel.listActions()
+        ])
+
+    def test_generate_tabs_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'generate_tabs'))
 
-    def test_nonfolderish_tabs(self):
-        self.assertTrue('nonfolderish_tabs' in INavigationSchema.names())
+    def test_nonfolderish_tabs_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'nonfolderish_tabs'))
 
-    def test_displayed_types(self):
-        self.assertTrue('displayed_types' in INavigationSchema.names())
+    def test_displayed_types_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'displayed_types'))
 
-    def test_filter_on_workflow(self):
-        self.assertTrue('filter_on_workflow' in INavigationSchema.names())
+    def test_filter_on_workflow_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'filter_on_workflow'))
 
-    def test_workflow_states_to_show(self):
-        self.assertTrue('workflow_states_to_show' in INavigationSchema.names())
+    def test_workflow_states_to_show_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'workflow_states_to_show'))
 
-    def test_show_excluded_items(self):
-        self.assertTrue('show_excluded_items' in INavigationSchema.names())
+    def test_show_excluded_items_attribute_exists(self):
+        self.assertTrue(hasattr(self.settings, 'show_excluded_items'))
diff --git a/Products/CMFPlone/interfaces/__init__.py b/Products/CMFPlone/interfaces/__init__.py
index 3837f1b..e6edee3 100644
--- a/Products/CMFPlone/interfaces/__init__.py
+++ b/Products/CMFPlone/interfaces/__init__.py
@@ -5,6 +5,7 @@
 from basetool import IPloneCatalogTool
 from controlpanel import IControlPanel
 from controlpanel import IDateAndTimeSchema
+from controlpanel import IEditingSchema
 from controlpanel import IMaintenanceSchema
 from controlpanel import INavigationSchema
 from controlpanel import ISearchSchema
diff --git a/Products/CMFPlone/interfaces/controlpanel.py b/Products/CMFPlone/interfaces/controlpanel.py
index 1785003..973778a 100644
--- a/Products/CMFPlone/interfaces/controlpanel.py
+++ b/Products/CMFPlone/interfaces/controlpanel.py
@@ -30,6 +30,61 @@ def enumConfiglets(group=None):
             calling .getAction() on each of them """
 
 
+class IEditingSchema(Interface):
+
+    visible_ids = schema.Bool(
+        title=_(u"Show 'Short Name' on content?"),
+        description=_(
+            u"Display and allow users to edit the "
+            u"'Short name' content identifiers, which form the "
+            u"URL part of a content item's address. Once "
+            u"enabled, users will then be able to enable this "
+            u"option in their preferences."),
+        default=False,
+        required=False)
+
+    default_editor = schema.Choice(
+        title=_(u'Default editor'),
+        description=_(
+            u"Select the default wysiwyg "
+            u"editor. Users will be able to choose their "
+            u"own or select to use the site default."),
+        default=u'TinyMCE',
+        missing_value=set(),
+        vocabulary="plone.app.vocabularies.AvailableEditors",
+        required=True)
+
+    ext_editor = schema.Bool(
+        title=_(u'Enable External Editor feature'),
+        description=_(
+            u"Determines if the external editor "
+            u"feature is enabled. This feature requires a "
+            u"special client-side application installed. The "
+            u"users also have to enable this in their "
+            u"preferences."),
+        default=False,
+        required=False)
+
+    enable_link_integrity_checks = schema.Bool(
+        title=_(u"Enable link integrity checks"),
+        description=_(
+            u"Determines if the users should get "
+            u"warnings when they delete or move content that "
+            u"is linked from inside the site."),
+        default=True,
+        required=False)
+
+    lock_on_ttw_edit = schema.Bool(
+        title=_(u"Enable locking for through-the-web edits"),
+        description=_(
+            u"Disabling locking here will only "
+            u"affect users editing content through the "
+            u"Plone web UI.  Content edited via WebDAV "
+            u"clients will still be subject to locking."),
+        default=True,
+        required=False)
+
+
 class IMaintenanceSchema(Interface):
 
     days = schema.Int(
diff --git a/Products/CMFPlone/profiles/dependencies/registry.xml b/Products/CMFPlone/profiles/dependencies/registry.xml
index ae1df50..09916f8 100644
--- a/Products/CMFPlone/profiles/dependencies/registry.xml
+++ b/Products/CMFPlone/profiles/dependencies/registry.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0"?>
 <registry>
+  <records interface="Products.CMFPlone.interfaces.IEditingSchema"
+           prefix="plone" />
   <records interface="Products.CMFPlone.interfaces.IMaintenanceSchema"
            prefix="plone" />
   <records interface="Products.CMFPlone.interfaces.INavigationSchema"




-------------------------------------------------------------------------------


More information about the Testbot mailing list