Пример #1
0
    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())
Пример #2
0
 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')