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