def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return title = data['title'] description = data['description'] content = data['content'] createTemplatePageLayout(title, description, content) IStatusMessage(self.request).add(_(u"Changes saved"), type="info") self.request.response.redirect(self.context.absolute_url() + "/@@deco-controlpanel#fieldset")
def test_createTemplatePageLayout(self): from plone.app.page.interfaces import PAGE_LAYOUT_MANIFEST_FORMAT from plone.app.page.utils import createTemplatePageLayout from plone.resource.utils import queryResourceDirectory from plone.resource.manifest import getManifest from plone.app.testing import TEST_USER_ID from plone.app.testing import setRoles portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Manager',)) createTemplatePageLayout(u"A title", u"A description", u"<html><body><p>Stuff</p></body></html>") setRoles(portal, TEST_USER_ID, ('Member',)) directory = queryResourceDirectory('pagelayout', 'a-title') self.assertTrue('page.html' in directory) self.assertTrue('manifest.cfg' in directory) self.assertEqual(directory.readFile('page.html'), "<html><body><p>Stuff</p></body></html>") manifest = getManifest(directory.openFile('manifest.cfg'), PAGE_LAYOUT_MANIFEST_FORMAT) self.assertEqual(manifest, {'title': "A title", 'description': "A description", 'file': 'page.html'}) # Create a second one with the same title setRoles(portal, TEST_USER_ID, ('Manager',)) createTemplatePageLayout(u"A title", u"Another description", u"<html><body><p>Other stuff</p></body></html>") setRoles(portal, TEST_USER_ID, ('Member',)) directory = queryResourceDirectory('pagelayout', 'a-title-1') self.assertTrue('page.html' in directory) self.assertTrue('manifest.cfg' in directory) self.assertEqual(directory.readFile('page.html'), "<html><body><p>Other stuff</p></body></html>") manifest = getManifest(directory.openFile('manifest.cfg'), PAGE_LAYOUT_MANIFEST_FORMAT) self.assertEqual(manifest, {'title': "A title", 'description': "Another description", 'file': 'page.html'})
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())