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')