def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return title = data['title'] description = data['description'] defaultSiteLayout = data['defaultSiteLayout'] defaultPageLayoutTemplate = data['defaultPageLayoutTemplate'] portal_types = getToolByName(self.context, 'portal_types') name = basename = getUtility(IIDNormalizer).normalize(title) idx = 1 while name in portal_types: name = "%s-%d" % (basename, idx,) idx += 1 clonePageType(portal_types, self.defaultType, name, title=title, description=description, default_site_layout=defaultSiteLayout, default_page_layout_template=defaultPageLayoutTemplate, ) IStatusMessage(self.request).add(_(u"Page type added"), type="info") self.request.response.redirect(self.context.absolute_url() + "/@@deco-controlpanel")
def test_clonePageType(self): from plone.app.page.utils import clonePageType portal = self.layer['portal'] portal_types = portal['portal_types'] oldFTI = portal_types['page'] self.assertFalse('new-page' in portal_types) clonePageType(portal_types, 'page', 'new-page', u"New page", "A new page type") newFTI = portal_types['new-page'] self.assertEqual(newFTI.title, u"New page") self.assertEqual(newFTI.description, u"A new page type") self.assertEqual(newFTI.add_view_expr, 'string:${folder_url}/++add++new-page') self.assertEqual(newFTI.immediate_view, oldFTI.immediate_view) self.assertEqual(newFTI.klass, oldFTI.klass) self.assertEqual(newFTI.schema, oldFTI.schema) self.assertEqual(newFTI.behaviors, oldFTI.behaviors) self.assertEqual(newFTI.default_site_layout, oldFTI.default_site_layout) self.assertEqual(newFTI.default_page_layout_template, oldFTI.default_page_layout_template) self.assertEqual(newFTI._aliases, oldFTI._aliases) self.assertEqual(len(newFTI.listActions()), 4)
def test_getPageTypes(self): from plone.app.page.utils import clonePageType from plone.app.page.utils import getPageTypes portal = self.layer['portal'] portal_types = portal['portal_types'] clonePageType(portal_types, 'page', 'new-page', u"New page", "A new page type") pageTypes = getPageTypes(portal_types) ids = sorted([p.getId() for p in pageTypes]) self.assertEqual(ids, ['new-page', 'page'])
def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return title = data["title"] description = data["description"] change = data["change"] layoutAware = ILayoutAware(self.context) content = layoutAware.content siteLayout = layoutAware.pageSiteLayout # Save the resource for the template page layout pagelayout = utils.createTemplatePageLayout(title, description, content) # Clone the page type portal_types = getToolByName(self.context, "portal_types") name = basename = getUtility(IIDNormalizer).normalize(title) idx = 1 while name in portal_types: name = "%s-%d" % (basename, idx) idx += 1 filename = PAGE_LAYOUT_FILE_NAME utils.clonePageType( portal_types, self.context.portal_type, name, title=title, description=description, default_site_layout=siteLayout, default_page_layout_template="/++%s++%s/%s" % (PAGE_LAYOUT_RESOURCE_NAME, pagelayout, filename), ) # Change the current item's page type if applicable if change: utils.changePageType(self.context, name) self.request.response.redirect(self.context.absolute_url())
def test_changePageType(self): from plone.app.page.utils import clonePageType from plone.app.page.utils import changePageType from plone.app.testing import TEST_USER_ID from plone.app.testing import setRoles portal = self.layer['portal'] portal_types = portal['portal_types'] clonePageType(portal_types, 'page', 'new-page', u"New page", "A new page type") setRoles(portal, TEST_USER_ID, ('Manager',)) portal.invokeFactory('page', 'p1', title=u"A page") setRoles(portal, TEST_USER_ID, ('Member',)) self.assertEqual(portal['p1'].portal_type, 'page') changePageType(portal['p1'], 'new-page') self.assertEqual(portal['p1'].portal_type, 'new-page')