예제 #1
0
def createFolderAndContents(folder_directori, folder_data):
    # Create folder
    folder_props = {
        'title': folder_data[0],
        'checkConstraints': False,
        'exclude_from_nav': folder_data[2],
        'allow_discussion': folder_data[3]
    }
    if folder_data[5] is not None:
        folder_props['layout'] = folder_data[5]
    folder = createContentInContainer(folder_directori, folder_data[1],
                                      **folder_props)

    behavior = ISelectableConstrainTypes(folder)
    behavior.setConstrainTypesMode(1)
    behavior.setLocallyAllowedTypes(folder_data[4])
    behavior.setImmediatelyAddableTypes(folder_data[4])
    folder.reindexObject()

    # Create a contents
    for folder_content in folder_data[7]:
        createContentInFolder(folder, folder_content)

    if folder_data[6] is not None:
        folder.setDefaultPage(folder_data[6])
예제 #2
0
def createContentInFolder(folder_directori, folder_content):
    # Create content
    if folder_content[1] != "Folder":
        content_props = {
            'title': folder_content[0],
            'checkConstraints': False,
            'exclude_from_nav': folder_content[2],
            'allow_discussion': folder_content[3]
        }
        if folder_content[6] is not None:
            content_props['description'] = folder_content[6]
        if folder_content[7] is not None:
            content_props['text'] = IRichText['text'].fromUnicode(
                folder_content[7])
        if folder_content[5] is not None:
            content_props['layout'] = folder_content[5]
        content = createContentInContainer(folder_directori, folder_content[1],
                                           **content_props)
        if folder_content[4] is not None:
            behavior = ISelectableConstrainTypes(content)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(folder_content[4])
            behavior.setImmediatelyAddableTypes(folder_content[4])
    else:
        createFolderAndContents(folder_directori, folder_content)
예제 #3
0
    def render(self):
        try:
            from plone.protect.interfaces import IDisableCSRFProtection
            alsoProvides(self.request, IDisableCSRFProtection)
        except:
            pass
        portal = api.portal.get()
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')

        text = []
        for community_brain in communities:
            # We assume that there will be only communities in Portal Site Root
            community = portal[community_brain.id]

            # Set on them the allowable content types
            behavior = ISelectableConstrainTypes(community['documents'])
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Document', 'File', 'Folder', 'Link', 'Image', 'privateFolder', 'ulearn.video', 'ulearn.video_embed'))
            behavior.setImmediatelyAddableTypes(('Document', 'File', 'Folder', 'Link', 'Image', 'privateFolder', 'ulearn.video', 'ulearn.video_embed'))

            community.reindexObject()

            text.append('Migrated types community {}\n'.format(community.absolute_url()))

        return ''.join(text) + '\nDone!'
예제 #4
0
    def test_data_getter(self):
        self.maxDiff = None
        folder = create(Builder('folder').titled(u'The Folder'))
        constrain_types = ISelectableConstrainTypes(folder)
        constrain_types.setConstrainTypesMode(ENABLED)
        allowed_types = ['Collection', 'Folder']
        immediately_addable_types = ['Collection']
        constrain_types.setLocallyAllowedTypes(allowed_types)
        constrain_types.setImmediatelyAddableTypes(immediately_addable_types)

        adapter = getAdapter(folder,
                             IDataCollector,
                             name='constrain_types_adapter')

        expected_data = {
            'mode': ENABLED,
            'locally_allowed': allowed_types,
            'immediately_addable': immediately_addable_types
        }
        self.assertEquals(expected_data, adapter.getData())

        constrain_types.setConstrainTypesMode(DISABLED)
        expected_data = {'mode': DISABLED}
        self.assertEquals(expected_data, adapter.getData())

        constrain_types.setConstrainTypesMode(ACQUIRE)
        expected_data = {'mode': ACQUIRE}
        self.assertEquals(expected_data, adapter.getData())
예제 #5
0
    def render(self):
        try:
            from plone.protect.interfaces import IDisableCSRFProtection
            alsoProvides(self.request, IDisableCSRFProtection)
        except:
            pass
        portal = api.portal.get()
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')

        text = []
        for community_brain in communities:
            # We assume that there will be only communities in Portal Site Root
            community = portal[community_brain.id]

            # Set on them the allowable content types
            behavior = ISelectableConstrainTypes(community['documents'])
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(
                ('Document', 'File', 'Folder', 'Link', 'Image',
                 'privateFolder', 'ulearn.video', 'ulearn.video_embed'))
            behavior.setImmediatelyAddableTypes(
                ('Document', 'File', 'Folder', 'Link', 'Image',
                 'privateFolder', 'ulearn.video', 'ulearn.video_embed'))

            community.reindexObject()

            text.append('Migrated types community {}\n'.format(
                community.absolute_url()))

        return ''.join(text) + '\nDone!'
def post_install(context):
    """Post install script"""
    #if context.readDataFile('polklibraryslider_default.txt') is None:
    #    return

    print "Running Post Install"

    # Add Group plone.app.portlets.ManagePortlets
    # plone.api.group.create(groupname='slider_image_editor', title='Slider Image Editor', description='Can edit and manage slider content')

    # Add Slider Folder
    site = api.portal.get()
    obj = api.content.create(
        type='Folder',
        title='Slider Images',
        description=
        'This folder contains all the banner sliding images of your site. DO NOT DELETE, MOVE OR RENAME!',
        container=site)
    api.content.transition(obj, 'publish')
    obj.exclude_from_nav = True

    behavior = ISelectableConstrainTypes(obj)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setLocallyAllowedTypes(('linkable_image', ))
    behavior.setImmediatelyAddableTypes(('linkable_image', ))
    obj.reindexObject()
예제 #7
0
    def render(self):
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')
        for community in communities:
            community = community.getObject()
            if 'discussion' not in community.objectIds():
                # Create the default discussion container and set title
                discussion = createContentInContainer(community, 'Folder', title='discussion', checkConstraints=False)
                discussion.setTitle(community.translate(_(u'Discussion')))

                discussion.setLayout('discussion_folder_view')

                alsoProvides(discussion, IDiscussionFolder)

                behavior = ISelectableConstrainTypes(discussion)
                behavior.setConstrainTypesMode(1)
                behavior.setLocallyAllowedTypes(('ulearn.discussion', 'Folder'))
                behavior.setImmediatelyAddableTypes(('ulearn.discussion', 'Folder'))

                # Blacklist the right column portlets on discussion
                right_manager = queryUtility(IPortletManager, name=u'plone.rightcolumn')
                blacklist = getMultiAdapter((discussion, right_manager), ILocalPortletAssignmentManager)
                blacklist.setBlacklistStatus(CONTEXT_CATEGORY, True)

                discussion.reindexObject()

                logger.info('Created discussion folder in {}'.format(community.absolute_url()))

        return 'Done.'
    def __iter__(self):
        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            constrainkey = self.constrainkey(*item.keys())[0]

            if not pathkey or not constrainkey or \
               constrainkey not in item:    # not enough info
                yield item
                continue

            obj = self.context.unrestrictedTraverse(item[pathkey].lstrip('/'),
                                                    None)
            if obj is None:  # path doesn't exist
                yield item
                continue

            constr = ISelectableConstrainTypes(obj, None)
            if constr is not None:
                constrain_dict = item[constrainkey]
                mode = constrain_dict['mode']
                allowedtypes = constrain_dict['locallyallowedtypes']
                addabletypes = constrain_dict['immediatelyaddabletypes']
                if mode not in (constrains.ACQUIRE, constrains.DISABLED,
                                constrains.ENABLED):
                    # mode not valid [-1, 0, 1]
                    yield item
                    continue
                constr.setConstrainTypesMode(mode)
                if allowedtypes:
                    constr.setLocallyAllowedTypes(allowedtypes)
                if addabletypes:
                    constr.setImmediatelyAddableTypes(addabletypes)

            yield item
예제 #9
0
    def set_constraintypes_config(self, obj, config):
        self.assertEquals({'mode', 'locally allowed', 'immediately addable'},
                          set(config))

        ctypes = ISelectableConstrainTypes(obj)
        ctypes.setConstrainTypesMode(config['mode'])
        ctypes.setLocallyAllowedTypes(config['locally allowed'])
        ctypes.setImmediatelyAddableTypes(config['immediately addable'])
예제 #10
0
    def set_constraintypes_config(self, obj, config):
        self.assertEquals(
            {'mode', 'locally allowed', 'immediately addable'},
            set(config))

        ctypes = ISelectableConstrainTypes(obj)
        ctypes.setConstrainTypesMode(config['mode'])
        ctypes.setLocallyAllowedTypes(config['locally allowed'])
        ctypes.setImmediatelyAddableTypes(config['immediately addable'])
예제 #11
0
def initialize_servei(serveitic, event):
    # Configure portlets
    assignments = get_portlet_assignments(
        serveitic, 'plone.leftcolumn')
    assignments['banners_global'] = BannersAssignment(banner_type=u"Global")
    assignments['banners_local'] = BannersAssignment(banner_type=u"Local")

    assignments = get_portlet_assignments(
        serveitic, 'genweb.portlets.HomePortletManager3')
    assignments['notificacions'] = NotificacionsAssignment()

    assignments = get_portlet_assignments(
        serveitic, 'genweb.portlets.HomePortletManager4')
    assignments['problemes'] = ProblemesAssignment()

    assignments = get_portlet_assignments(
        serveitic, 'genweb.portlets.HomePortletManager5')
    assignments['indicadors'] = IndicadorsAssignment()

    # Create folder structure
    for folder_data in folder_structure:
        folder_props = {
            'title': folder_data[0],
            'checkConstraints': False,
            'exclude_from_nav': folder_data[2],
            'allow_discussion': folder_data[3]}
        if folder_data[5] is not None:
            folder_props['layout'] = folder_data[5]
        folder = createContentInContainer(
            serveitic, folder_data[1], **folder_props)

        for folder_content in folder_data[6]:
            content_props = {
                'title': folder_content[0],
                'checkConstraints': False,
                'exclude_from_nav': folder_content[2],
                'allow_discussion': folder_content[3]}
            if folder_content[5] is not None:
                content_props['layout'] = folder_content[5]
            content = createContentInContainer(
                folder, folder_content[1], **content_props)
            if folder_content[4] is not None:
                behavior = ISelectableConstrainTypes(content)
                behavior.setConstrainTypesMode(1)
                behavior.setLocallyAllowedTypes(folder_content[4])
                behavior.setImmediatelyAddableTypes(folder_content[4])

        behavior = ISelectableConstrainTypes(folder)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(folder_data[4])
        behavior.setImmediatelyAddableTypes(folder_data[4])
        folder.reindexObject()

    # Mark ServeiTIC as initialized to prevent previous folder creations from
    # triggering the modify event
    alsoProvides(serveitic, IInitializedServeiTIC)
예제 #12
0
def onEventsFolderCreate(context, event, sample=True):

    # restrict what this folder can contain
    behavior = ISelectableConstrainTypes(context)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setImmediatelyAddableTypes(['Event'])
    behavior.setLocallyAllowedTypes(['Event', 'Collection'])

    # Create sample event and set publishing date to 01-01-YYYY
    if sample:

        # Calculate dates
        now = DateTime()
        start_date = DateTime() + 30
        end_date = start_date + 1.0 / 24

        item = createContentInContainer(context,
                                        "Event",
                                        id="sample",
                                        title="Sample Event",
                                        description="This is a sample Event",
                                        checkConstraints=False)

        item.text = RichTextValue(raw='<p>You may delete this item</p>',
                                  mimeType=u'text/html',
                                  outputMimeType='text/x-html-safe')

        item.setEffectiveDate(now)

        acc = IEventAccessor(item)
        acc.start = localize(start_date)
        acc.end = localize(end_date)

    # create 'upcoming' collection
    if 'upcoming' not in context.objectIds():
        item = createContentInContainer(
            context,
            "Collection",
            id="upcoming",
            title='Upcoming Events',
        )

        item.setQuery([{
            u'i': u'path',
            u'o': u'plone.app.querystring.operation.string.absolutePath',
            u'v': u'%s::1' % context.UID()
        }, {
            u'i': u'portal_type',
            u'o': u'plone.app.querystring.operation.selection.any',
            u'v': [u'Event']
        }])

        item.setSort_on('start')

    # Set default page to the latest news collection
    context.setDefaultPage('upcoming')
예제 #13
0
    def test_allowedContentTypesExit4(self):
        """
        Constrains are enabled
        """
        behavior = ISelectableConstrainTypes(self.folder)

        behavior.setLocallyAllowedTypes(self.types_id_subset)
        behavior.setConstrainTypesMode(constrains.ENABLED)

        self.assertEqual(self.types_id_subset,
                          [x.getId() for x in behavior.allowedContentTypes()])
    def test_allowedContentTypesExit4(self):
        """
        Constrains are enabled
        """
        behavior = ISelectableConstrainTypes(self.folder)

        behavior.setLocallyAllowedTypes(self.types_id_subset)
        behavior.setConstrainTypesMode(constrains.ENABLED)

        self.assertEqual(self.types_id_subset,
                         [x.getId() for x in behavior.allowedContentTypes()])
예제 #15
0
파일: ens.py 프로젝트: UPCnet/genweb.ens
def create_folder(container, id, title, addable_types):
    folder = createContentInContainer(
        container,
        "Folder",
        id=id,
        title=title,
        exclude_from_nav=True)
    folder_constraints = ISelectableConstrainTypes(folder)
    folder_constraints.setConstrainTypesMode(1)
    folder_constraints.setLocallyAllowedTypes(addable_types)
    folder_constraints.setImmediatelyAddableTypes(addable_types)
 def import_constrains(self, obj, item):
     if not item.get("exportimport.constrains"):
         return
     constrains = ISelectableConstrainTypes(obj, None)
     if constrains is None:
         return
     constrains.setConstrainTypesMode(ENABLED)
     locally_allowed_types = item["exportimport.constrains"][
         "locally_allowed_types"]
     constrains.setLocallyAllowedTypes(locally_allowed_types)
     immediately_addable_types = item["exportimport.constrains"][
         "immediately_addable_types"]
     constrains.setImmediatelyAddableTypes(immediately_addable_types)
def set_up_content(site):
    """Create and configure some initial content"""
    if "talks" in site:
        return
    talks = api.content.create(container=site, type="Folder", id="talks", title="Talks")
    api.content.transition(talks, "publish")
    api.group.grant_roles(groupname="AuthenticatedUsers", roles=["Contributor"], obj=talks)
    # Enable constraining
    behavior = ISelectableConstrainTypes(talks)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setLocallyAllowedTypes(["talk"])
    behavior.setImmediatelyAddableTypes(["talk"])
    logger.info("Created and configured %s" % talks.absolute_url())
    def test_allowedContentTypesExit3(self):
        """
        Constrains are acquired, parent folder is of same type
        """
        outer_behavior = ISelectableConstrainTypes(self.folder)

        assert len(outer_behavior.getLocallyAllowedTypes()) > 2
        outer_behavior.setLocallyAllowedTypes(self.types_id_subset)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)

        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ACQUIRE)
        self.assertEquals(self.types_id_subset,
                          [x.getId() for x in behavior.allowedContentTypes()])
예제 #19
0
    def test_allowedContentTypesExit3(self):
        """
        Constrains are acquired, parent folder is of same type
        """
        outer_behavior = ISelectableConstrainTypes(self.folder)

        assert len(outer_behavior.getLocallyAllowedTypes()) > 2
        outer_behavior.setLocallyAllowedTypes(self.types_id_subset)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)

        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ACQUIRE)
        self.assertEqual(self.types_id_subset,
                          [x.getId() for x in behavior.allowedContentTypes()])
예제 #20
0
 def various_update(self):
     # replace front-page
     frontpage = getattr(self.portal, 'front-page')
     frontpage.title = _translate("front_page_title")
     frontpage.description = _translate("front_page_descr")
     frontpage.text = richtextval(_translate("front_page_text"))
     transitions(frontpage, ('retract', 'publish_internally'))
     frontpage.reindexObject()
     self.portal.templates.layout = 'dg-templates-listing'
     # plonegroup-organization
     pgo = get_own_organization()
     behaviour = ISelectableConstrainTypes(pgo)
     behaviour.setConstrainTypesMode(1)
     behaviour.setLocallyAllowedTypes([])
     behaviour.setImmediatelyAddableTypes([])
     ISelectableConstrainTypes(pgo['echevins']).setConstrainTypesMode(0)
     ISelectableConstrainTypes(pgo['services']).setConstrainTypesMode(0)
예제 #21
0
    def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        self.browser = Browser(self.app)

        # Create default GW directories
        setupview = getMultiAdapter((self.portal, self.request),
                                    name='setup-view')
        setupview.apply_default_language_settings()
        setupview.setup_multilingual()
        setupview.createContent('n4')

        # Enable the possibility to add Organs folder
        from Products.CMFPlone.interfaces.constrains import ISelectableConstrainTypes
        behavior = ISelectableConstrainTypes(self.portal['ca'])
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(['genweb.organs.organsfolder'])
        behavior.setImmediatelyAddableTypes(['genweb.organs.organsfolder'])

        # Create Base folder to create base test folders
        try:
            api.content.delete(obj=self.portal['ca']['testingfolder'],
                               check_linkintegrity=False)
        except:
            pass
        # Create default Organs Test Folder
        og_unit = api.content.create(type='genweb.organs.organsfolder',
                                     id='testingfolder',
                                     title='Organ Tests',
                                     container=self.portal['ca'])

        tools.create_organ_content(og_unit, 'open_organ', 'OG.OPEN',
                                   'Organ TEST Obert', 'obert')
        tools.create_organ_content(og_unit, 'restricted_to_affected_organ',
                                   'OG.AFFECTED',
                                   'Organ TEST restringit a AFECTATS',
                                   'afectats')
        tools.create_organ_content(og_unit, 'restricted_to_members_organ',
                                   'OG.MEMBERS',
                                   'Organ TEST restringit a MEMBRES',
                                   'membres')

        logout()
예제 #22
0
 def _addFileTypeToProjectSpaceConstrainedTypes(self):
     """We want to be able to add 'Files' in the 'pst' projectspace."""
     logger.info(
         "Adding 'File' to constrained types of projectspace 'pst'...")
     projectspace = self.portal.pst
     # we do not publish because, in published state, editors cannot more modify
     # do_transitions(projectspace, transitions=['publish_internally'], logger=logger)
     # set locally allowed types
     behaviour = ISelectableConstrainTypes(projectspace)
     behaviour.setConstrainTypesMode(1)
     behaviour.setLocallyAllowedTypes([
         'strategicobjective',
         'File',
     ])
     behaviour.setImmediatelyAddableTypes([
         'strategicobjective',
         'File',
     ])
     logger.info('Done.')
    def test_locallyAllowedTypesDefaultWhenDisabled(self):
        """
        Constrain Mode Disabled.
        We get the default constrains, independent of what our parent folder
        or we ourselves defined
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.DISABLED)
        behavior.setLocallyAllowedTypes([])

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes([])

        types = self.default_types
        type_ids = [t.getId() for t in types]

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
예제 #24
0
    def migrate(self, old, new):
        new_path = "/".join(new.getPhysicalPath())
        for iface in interfaces:
            if iface.providedBy(old):
                alsoProvides(new, iface)
                logger.warn("{0} also provides {1}".format(new_path, str(iface)))

        if old.getConstrainTypesMode() != 0:
            behaviour = ISelectableConstrainTypes(new)
            behaviour.setConstrainTypesMode(1)
            if old.getConstrainTypesMode() == 1:
                behaviour.setLocallyAllowedTypes(old.getLocallyAllowedTypes())
                behaviour.setImmediatelyAddableTypes(old.getImmediatelyAddableTypes())

        if IFacetedNavigable.providedBy(old):
            criteria = Criteria(new)
            criteria._update(ICriteria(old).criteria)
            IFacetedLayout(new).update_layout('faceted-table-items')
            logger.warn("Added faceted criteria and layout to {0}".format(new_path))
예제 #25
0
    def render(self):
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')

        text = []
        for community in communities:
            community = community.getObject()
            media_folder = community.media

            behavior = ISelectableConstrainTypes(media_folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Image', 'ulearn.video', 'Folder'))
            behavior.setImmediatelyAddableTypes(('Image', 'ulearn.video', 'Folder'))

            if media_folder.title != 'Media':
                media_folder.setTitle(community.translate(_(u'Media')))

            text.append('Added type video to {}\n'.format(community.absolute_url()))
        return ''.join(text)
예제 #26
0
def add_container(container,
                  type,
                  title,
                  allowed_types=None,
                  exclude_from_nav=False):
    folder_id = getUtility(IIDNormalizer).normalize(title)
    if folder_id not in container:
        folder = api.content.create(type=type,
                                    id=folder_id,
                                    title=title,
                                    container=container)
        api.content.transition(obj=folder, transition='publish')
        if allowed_types:
            behavior = ISelectableConstrainTypes(folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(allowed_types)
            behavior.setImmediatelyAddableTypes(allowed_types)
        folder.exclude_from_nav = exclude_from_nav
    return container[folder_id]
    def test_locallyAllowedTypesDefaultWhenDisabled(self):
        """
        Constrain Mode Disabled.
        We get the default constrains, independent of what our parent folder
        or we ourselves defined
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.DISABLED)
        behavior.setLocallyAllowedTypes([])

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes([])

        types = self.default_types
        type_ids = [t.getId() for t in types]

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
예제 #28
0
def add_container(container, type, title,
                  allowed_types=None, exclude_from_nav=False):
    folder_id = getUtility(IIDNormalizer).normalize(title)
    if folder_id not in container:
        folder = api.content.create(
            type=type,
            id=folder_id,
            title=title,
            container=container)
        api.content.transition(
            obj=folder,
            transition='publish')
        if allowed_types:
            behavior = ISelectableConstrainTypes(folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(allowed_types)
            behavior.setImmediatelyAddableTypes(allowed_types)
        folder.exclude_from_nav = exclude_from_nav
    return container[folder_id]
예제 #29
0
def set_up_content(site):
    """Create and configure some initial content"""
    if 'talks' in site:
        return
    talks = api.content.create(
        container=site,
        type='Folder',
        id='talks',
        title='Talks')
    api.content.transition(talks, 'publish')
    api.group.grant_roles(
        groupname='AuthenticatedUsers',
        roles=['Contributor'],
        obj=talks)
    # Enable constraining
    behavior = ISelectableConstrainTypes(talks)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setLocallyAllowedTypes(['talk'])
    behavior.setImmediatelyAddableTypes(['talk'])
    logger.info("Created and configured %s" % talks.absolute_url())
    def test_locallyAllowedTypesDefaultWhenEnabled(self):
        """
        Constrain Mode enabled
        We get the set constrains, independent of what our parent folder
        defined
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ENABLED)
        behavior.setLocallyAllowedTypes(self.types_id_subset)

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes([])

        types = [t for t in self.default_types
                 if t.getId() in self.types_id_subset]
        type_ids = self.types_id_subset

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
    def test_locallyAllowedTypesDefaultWhenEnabled(self):
        """
        Constrain Mode enabled
        We get the set constrains, independent of what our parent folder
        defined
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ENABLED)
        behavior.setLocallyAllowedTypes(self.types_id_subset)

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes([])

        types = [
            t for t in self.default_types if t.getId() in self.types_id_subset
        ]
        type_ids = self.types_id_subset

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
예제 #32
0
    def update(self, obj, data):
        if IS_PLONE_5 or IS_PLONE_APP_MULTILINGUAL_2:
            constrains = ISelectableConstrainTypes(obj)
            if constrains:
                constrains.setConstrainTypesMode(constraintypes.ENABLED)

                immediately = tuple(data['immediately'])
                constrains.setImmediatelyAddableTypes(immediately)

                locally = tuple(data['locally'])
                constrains.setLocallyAllowedTypes(locally)

        else:
            if base_hasattr(obj, 'getConstrainTypesMode'):
                obj.setConstrainTypesMode(constraintypes.ENABLED)

                immediately = tuple(data['immediately'])
                obj.setImmediatelyAddableTypes(immediately)

                locally = tuple(data['locally'])
                obj.setLocallyAllowedTypes(locally)
예제 #33
0
    def test_contextual_constrains(self):
        content = api.content.create(
            container=self.portal,
            id="images",
            type="Folder",
            title="Image Bank",
        )
        # Enable the ISelectableConstrainTypes behavior
        behavior = ISelectableConstrainTypes(content)
        behavior.setConstrainTypesMode(constrains.ENABLED)
        # Allow only Image and File to be added
        behavior.setLocallyAllowedTypes(["Image", "File"])
        # Only Images are immediately addable
        behavior.setImmediatelyAddableTypes(["Image"])
        transaction.commit()

        #
        response = self.api_session.get("/images/@types")
        response = response.json()
        self.assertEqual(len([a for a in response if a["immediately_addable"]]), 1)
        self.assertEqual(len([a for a in response if a["addable"]]), 2)
예제 #34
0
파일: setup.py 프로젝트: UPCnet/ulearn.core
    def render(self):
        portal = getSite()
        gestion = self.newPrivateFolder(portal, 'gestion', u'Gestión')
        gestion.exclude_from_nav = False
        gestion.setLayout('folder_listing')
        behavior = ISelectableConstrainTypes(gestion)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Folder', 'privateFolder',))
        behavior.setImmediatelyAddableTypes(('Folder', 'privateFolder',))

        enlaces_cabecera = self.newPrivateFolder(gestion, 'menu', u'Menu')
        enlaces_cabecera.exclude_from_nav = False
        enlaces_cabecera.reindexObject()

        for language in portal['portal_languages'].getSupportedLanguages():
            language_folder = self.newPrivateFolder(enlaces_cabecera, language, language)
            language_folder.exclude_from_nav = False
            language_folder.reindexObject()
            behavior = ISelectableConstrainTypes(language_folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'privateFolder', 'Link',))
            behavior.setImmediatelyAddableTypes(('Folder', 'privateFolder', 'Link',))
예제 #35
0
    def render(self):
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')

        text = []
        for community in communities:
            community = community.getObject()
            media_folder = community.media

            behavior = ISelectableConstrainTypes(media_folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(
                ('Image', 'ulearn.video', 'Folder'))
            behavior.setImmediatelyAddableTypes(
                ('Image', 'ulearn.video', 'Folder'))

            if media_folder.title != 'Media':
                media_folder.setTitle(community.translate(_(u'Media')))

            text.append('Added type video to {}\n'.format(
                community.absolute_url()))
        return ''.join(text)
예제 #36
0
    def render(self):
        pc = api.portal.get_tool(name='portal_catalog')
        communities = pc.searchResults(portal_type='ulearn.community')
        for community in communities:
            community = community.getObject()
            if 'discussion' not in community.objectIds():
                # Create the default discussion container and set title
                discussion = createContentInContainer(community,
                                                      'Folder',
                                                      title='discussion',
                                                      checkConstraints=False)
                discussion.setTitle(community.translate(_(u'Discussion')))

                discussion.setLayout('discussion_folder_view')

                alsoProvides(discussion, IDiscussionFolder)

                behavior = ISelectableConstrainTypes(discussion)
                behavior.setConstrainTypesMode(1)
                behavior.setLocallyAllowedTypes(
                    ('ulearn.discussion', 'Folder'))
                behavior.setImmediatelyAddableTypes(
                    ('ulearn.discussion', 'Folder'))

                # Blacklist the right column portlets on discussion
                right_manager = queryUtility(IPortletManager,
                                             name=u'plone.rightcolumn')
                blacklist = getMultiAdapter((discussion, right_manager),
                                            ILocalPortletAssignmentManager)
                blacklist.setBlacklistStatus(CONTEXT_CATEGORY, True)

                discussion.reindexObject()

                logger.info('Created discussion folder in {}'.format(
                    community.absolute_url()))

        return 'Done.'
예제 #37
0
    def render(self):
        portal = getSite()
        gestion = self.newPrivateFolder(portal, 'gestion', u'Gestión')
        gestion.exclude_from_nav = False
        gestion.setLayout('folder_listing')
        behavior = ISelectableConstrainTypes(gestion)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes((
            'Folder',
            'privateFolder',
        ))
        behavior.setImmediatelyAddableTypes((
            'Folder',
            'privateFolder',
        ))

        enlaces_cabecera = self.newPrivateFolder(gestion, 'menu', u'Menu')
        enlaces_cabecera.exclude_from_nav = False
        enlaces_cabecera.reindexObject()

        for language in portal['portal_languages'].getSupportedLanguages():
            language_folder = self.newPrivateFolder(enlaces_cabecera, language,
                                                    language)
            language_folder.exclude_from_nav = False
            language_folder.reindexObject()
            behavior = ISelectableConstrainTypes(language_folder)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes((
                'Folder',
                'privateFolder',
                'Link',
            ))
            behavior.setImmediatelyAddableTypes((
                'Folder',
                'privateFolder',
                'Link',
            ))
    def test_locallyAllowedTypesDefaultWhenAcquired(self):
        """
        Constrain Mode set to ACQUIRE
        Try to acquire the constrains, if that fails, use the defaults
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ACQUIRE)
        behavior.setLocallyAllowedTypes([])

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes(self.types_id_subset)

        types = self.types_id_subset

        self.assertEqual(types, behavior.getLocallyAllowedTypes())

        outer_behavior.setConstrainTypesMode(constrains.ACQUIRE)

        types = self.default_types
        type_ids = [t.getId() for t in types]

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
    def test_locallyAllowedTypesDefaultWhenAcquired(self):
        """
        Constrain Mode set to ACQUIRE
        Try to acquire the constrains, if that fails, use the defaults
        """
        behavior = ISelectableConstrainTypes(self.inner_folder)
        behavior.setConstrainTypesMode(constrains.ACQUIRE)
        behavior.setLocallyAllowedTypes([])

        outer_behavior = ISelectableConstrainTypes(self.folder)
        outer_behavior.setConstrainTypesMode(constrains.ENABLED)
        outer_behavior.setLocallyAllowedTypes(self.types_id_subset)

        types = self.types_id_subset

        self.assertEqual(types, behavior.getLocallyAllowedTypes())

        outer_behavior.setConstrainTypesMode(constrains.ACQUIRE)

        types = self.default_types
        type_ids = [t.getId() for t in types]

        self.assertEqual(types, behavior.allowedContentTypes())
        self.assertEqual(type_ids, behavior.getLocallyAllowedTypes())
    def createArea(self, id, title, portal_type, types=[]):
        """
        Create an area with the given parameters
        """
        area_id = api.content.create(
            container=self.context,
            type=portal_type,
            id=id,
            title=title,
            language=self.language
        )

        if not area_id:
            logger.error("Problem creating Area: %s" % title)
            return ""
        logger.info("Created Area: %s" % title)

        area_id_path = [x for x in area_id.getPhysicalPath()]

        area_obj = self.context.restrictedTraverse(area_id_path)

        # create topic before disallowing this type
        if portal_type not in ["PloneboardForum", "Blog", "DocumentsArea"]:
            portal_types = []
            if portal_type == "NewsArea":
                portal_types = [u'Folder', u'News Item']
            elif portal_type == "EventsArea":
                portal_types = [u'Event', u'Folder']
            elif portal_type == "PollsArea":
                portal_types = [u'Folder', u'PlonePopoll']
            self.createCollection(folder=area_obj,
                                  id=id,
                                  title=title,
                                  set_as_default_view=True,
                                  portal_types=portal_types)

        if portal_type == "DocumentsArea":
            self.createCollection(folder=area_obj,
                                  id=id,
                                  title=title,
                                  set_recurse="True",
                                  set_as_default_view=False,
                                  portal_types=[u'Document', u'File', u'Image'])

            self.createCollection(folder=area_obj,
                                  id=translate(
                                      _("documents-and-folders"), context=self.context.REQUEST, target_language=self.language),
                                  title=translate(
                                      _("Documents and folders"), context=self.context.REQUEST, target_language=self.language),
                                  set_as_default_view=True,
                                  portal_types=[u'Document', u'File', u'Image', u'Folder'])
        # set allowed types
        if types:
            behavior = ISelectableConstrainTypes(area_obj)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(types)
            behavior.setImmediatelyAddableTypes(types)

        alsoProvides(area_obj, IRoomArea)
        area_obj.reindexObject()
        return area_id
예제 #41
0
def projectAdded(content, event):
    """ Project created handler to assign geolocation.
        Copy value from behaviour fields to project fields.projectAnd create
        current year
    """

    logger.info('Create add project {} id {}'.format(content.title, content.id))

    # Grant Editor/Reader role to members in project
    if content.members:
        for user in content.members:
            api.user.grant_roles(username=user, obj=content, roles=['Reader'])
    if content.project_manager:
        for user in content.project_manager:
            api.user.grant_roles(username=user, obj=content, roles=['Reader'])
    if content.project_manager_admin:
        api.user.grant_roles(username=content.project_manager_admin, obj=content, roles=['Contributor', 'Editor', 'Reader'])

    logger.info('Permissions to members in project {} id {}'.format(content.title, content.id))

    wop_partners = getUsersRegionalWOPPlatform(content.wop_platform)
    if wop_partners:
        for user in wop_partners:
            api.user.grant_roles(username=user, obj=content, roles=['Editor', 'Reader'])

    logger.info('Permissions to wop_partners in project {} id {}'.format(content.title, content.id))

    wop_programs = getUsersWOPProgram(content.wop_program)
    if wop_programs:
        for user in wop_programs:
            api.user.grant_roles(username=user, obj=content, roles=['Editor', 'Reader'])

    logger.info('Permissions to wop_programs in project {} id {}'.format(content.title, content.id))

    # Assign fases to internal field
    content.gwopa_year_phases = int(
        math.ceil(float((content.completionactual - content.startactual).days) / float(365)))

    # Asign default image if not set
    if content.image is None:
        data = requests.get(api.portal.get().aq_parent.absolute_url(
        ) + '/++theme++gwopa.theme/assets/images/default_image.jpg', verify=False, timeout=10).content
        default_image = NamedBlobImage(data=data,
                                       filename=u'image.jpg',
                                       contentType='image/jpeg')
        content.image = default_image

    # Assign values to fases
    fases = int(math.ceil(float((content.completionactual - content.startactual).days) / float(365)))
    date1 = content.startactual
    date2 = content.completionactual
    if date2.month < date1.month or (date2.month == date1.month and date2.day < date1.day):
        rangeDates = range(date2.year - date1.year)
    else:
        rangeDates = range(date2.year - date1.year + 1)
    datas = [(date1 + relativedelta(years=i)).strftime("%B %d, %Y")
             for i in rangeDates] + [date2.strftime("%B %d, %Y")]
    isodate = [(date1 + relativedelta(years=i)).strftime("%Y-%m-%d")
               for i in rangeDates] + [date2.strftime("%Y-%m-%d")]
    patterndate = [(date1 - dateutil.relativedelta.relativedelta(months=1) + relativedelta(years=i)).strftime(
        "%Y %m %d").replace(' 0', ' ').replace(' ', ',') for i in rangeDates]
    patterndate.append((date2 - dateutil.relativedelta.relativedelta(months=1)
                        ).strftime("%Y %m %d").replace(' 0', ' ').replace(' ', ','))

    results = []
    if fases > 1:
        count = 0
        while count != fases:
            results.append(dict(
                start=datas[0 + count],
                end=datas[1 + count],
                start_iso=isodate[0 + count],
                end_iso=isodate[1 + count],
                pattern_start=patterndate[0 + count],
                pattern_end=patterndate[1 + count],
                fase=count + 1
            ))
            count = count + 1
    else:
        count = 0
        results.append(dict(
            start=datas[0],
            end=datas[1],
            start_iso=isodate[0],
            end_iso=isodate[1],
            pattern_start=patterndate[0],
            pattern_end=patterndate[1],
            fase=1
        ))
    content.gwopa_year_phases = results

    logger.info('Fases project {} id {}'.format(content.title, content.id))

    measuring_frequency = content.measuring_frequency
    if measuring_frequency:
        frequency = int(measuring_frequency[-1])

        if frequency == 4:
            N_MONTHS = 3
        elif frequency == 2:
            N_MONTHS = 6
        elif frequency == 1:
            N_MONTHS = 12
        reports = []
        N_DAYS_AGO = 15

        if content.project_manager_admin:
            user = api.user.get(content.project_manager_admin)
            email = user.getProperty('email')

        if fases > 1:
            count = 0
            while count != fases:
                count = count + 1
                date_start_year = datetime.strptime(results[count-1]['start'], "%B %d, %Y").date()
                for i in range(frequency):
                    date_generate_report = date_start_year + relativedelta(months=N_MONTHS)
                    if date2 >= date_generate_report and date2 != date_start_year:
                        data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                        reports.append(dict(
                            date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                            date_email_report=data_email_report.strftime("%B %d, %Y"),
                            num_report=i + 1,
                            project_year=count,
                            project_url=content.absolute_url(),
                            project_title=content.title,
                            email=email,
                            frequency=measuring_frequency[:-2],
                        ))
                        date_start_year = date_generate_report
                    elif date2 == date_start_year:
                        break
                    else:
                        date_generate_report = date2
                        data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                        reports.append(dict(
                            date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                            date_email_report=data_email_report.strftime("%B %d, %Y"),
                            num_report=i + 1,
                            project_year=count,
                            project_url=content.absolute_url(),
                            project_title=content.title,
                            email=email,
                            frequency=measuring_frequency[:-2],
                        ))
                        break
        else:
            count = 0
            for i in range(frequency):
                    date_generate_report = date1 + relativedelta(months=N_MONTHS)
                    if date2 > date_generate_report:
                        data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                        reports.append(dict(
                            date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                            date_email_report=data_email_report.strftime("%B %d, %Y"),
                            num_report=i + 1,
                            project_year=count + 1,
                            project_url=content.absolute_url(),
                            project_title=content.title,
                            email=email,
                            frequency=measuring_frequency[:-2],
                        ))
                        date1 = date_generate_report
                    elif date2 == date1:
                        break
                    else:
                        date_generate_report = date2
                        data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                        reports.append(dict(
                            date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                            date_email_report=data_email_report.strftime("%B %d, %Y"),
                            num_report=i + 1,
                            project_year=count + 1,
                            project_url=content.absolute_url(),
                            project_title=content.title,
                            email=email,
                            frequency=measuring_frequency[:-2],
                        ))
                        break

        content.gwopa_reporting = reports

        logger.info('Dates to reporting project {} id {}'.format(content.title, content.id))

    # Create default needed folders in the new project
    api.content.create(
        type='Folder',
        id='files',
        title='Files',
        container=content)

    logger.info('Create folder files in project {} id {}'.format(content.title, content.id))

    api.content.create(
        type='Folder',
        id='contribs',
        title='Contributors',
        container=content)

    logger.info('Create folder contributors in project {} id {}'.format(content.title, content.id))

    reports = api.content.create(
        type='Folder',
        id='reports',
        title='Reports',
        container=content)

    logger.info('Create folder reports in project {} id {}'.format(content.title, content.id))

    partnerships = api.content.create(
                        type='Folder',
                        id='partnerships',
                        title='Partnerships',
                        container=content)

    logger.info('Create folder partnerships in project {} id {}'.format(content.title, content.id))


    behavior = ISelectableConstrainTypes(reports)
    behavior.setConstrainTypesMode(1)
    behavior.setLocallyAllowedTypes(('File', 'Report'))
    behavior.setImmediatelyAddableTypes(('File', 'Report'))

    behaviorp = ISelectableConstrainTypes(partnerships)
    behaviorp.setConstrainTypesMode(1)
    behaviorp.setLocallyAllowedTypes(('PartnershipPractice', 'Folder'))
    behaviorp.setImmediatelyAddableTypes(('PartnershipPractice', 'Folder'))

    # Create Working Areas
    areas = content.areas
    if areas:
        for area in areas:
            data = api.content.find(portal_type="ItemArea", Title=quote_chars(area))[0]
            obj = api.content.create(
                type='ImprovementArea',
                title=data.Title,
                title_es=data.title_es,
                title_fr=data.title_fr,
                description=data.Description,
                image=data.getObject().image,
                container=content)

            logger.info('Create working area {} in project {} id {}'.format(data.Title, content.title, content.id))

    logger.info('Finish create working areas in project {} id {}'.format(content.title, content.id))

    partners = content.partners
    if partners:
        for partner in partners:
            obj = api.content.create(
                type='ContribPartner',
                title=partner,
                container=content.contribs)
            obj.incash = 0
            obj.inkind = 0

            logger.info('Create partner {} in project {} id {}'.format(partner, content.title, content.id))

    content.total_budget = 0
    donors = content.donors
    if donors:
        for donor in donors:
            obj = api.content.create(
                type='ContribDonor',
                title=donor,
                container=content.contribs)
            obj.incash = 0
            obj.inkind = 0

            logger.info('Create donor {} in project {} id {}'.format(donor, content.title, content.id))

    path_files = '/'.join(content.files.getPhysicalPath())
    folder_files = api.content.find(portal_type="Folder", path=path_files)
    obj_files = folder_files[0].getObject()

    # Grant Contributor role to members in folder files project
    if content.members:
        for user in content.members:
            api.user.grant_roles(username=user, obj=obj_files, roles=['Contributor'])
    if content.project_manager:
        for user in content.project_manager:
            api.user.grant_roles(username=user, obj=obj_files, roles=['Contributor'])

    # Create Partnership Practice
    config_folder = api.content.find(type='Folder',id='partnershippractice')
    config_folder = config_folder[0].getObject()
    items = api.content.find(
        portal_type=['PartnershipPractice'],
        context=config_folder,
        sort_on='getObjPositionInParent')
    if items:
        for item in items:
            partnership = item.getObject()
            obj = api.content.create(
                type='PartnershipPractice',
                title=partnership.title,
                title_es=partnership.title_es,
                title_fr=partnership.title_fr,
                description=partnership.description,
                description_es=partnership.description_es,
                description_fr=partnership.description_fr,
                container=content.partnerships)

            logger.info('Create parthership practice {} in project {} id {}'.format(data.Title, content.title, content.id))

    logger.info('Finish create parthership practice in project {} id {}'.format(content.title, content.id))

    logger.info('Finish add project {} id {}'.format(content.title, content.id))
예제 #42
0
def projectModified(content, event):
    """ Project modified handler.
        Create new areas.newSometimes this code is executed and the project is not edited.
        In example, changing permissions, this hook is executed.
        We check the transition when edit, and seems to be:
             zope.lifecycleevent.ObjectModifiedEvent

    """
    # Really check if project is modified
    if 'zope.lifecycleevent.ObjectModifiedEvent' in str(event):

        # Grant Editor/Reader role to members in project
        if content.members:
            for user in content.members:
                api.user.grant_roles(username=user, obj=content, roles=['Reader'])
        if content.project_manager:
            for user in content.project_manager:
                api.user.grant_roles(username=user, obj=content, roles=['Reader'])
        if content.project_manager_admin:
            api.user.grant_roles(username=content.project_manager_admin, obj=content, roles=['Contributor', 'Editor', 'Reader'])

        wop_partners = getUsersRegionalWOPPlatform(content.wop_platform)
        if wop_partners:
            for user in wop_partners:
                api.user.grant_roles(username=user, obj=content, roles=['Editor', 'Reader'])

        wop_programs = getUsersWOPProgram(content.wop_program)
        if wop_programs:
            for user in wop_programs:
                api.user.grant_roles(username=user, obj=content, roles=['Editor', 'Reader'])

        users = [perm[0] for perm in content.get_local_roles()]
        for user in users:
            members = [] if content.members == None else content.members
            project_manager = [] if content.project_manager == None else content.project_manager
            project_manager_admin = [] if content.project_manager_admin == None else content.project_manager_admin
            if user not in members and user not in project_manager and user not in project_manager_admin and user not in wop_partners and user not in wop_programs:
                 api.user.revoke_roles(username=user, obj=content, roles=['Contributor', 'Editor', 'Reader'])

        # Asign default image if not set
        if content.image is None:
            data = requests.get(api.portal.get().aq_parent.absolute_url(
            ) + '/++theme++gwopa.theme/assets/images/default_image.jpg', verify=False, timeout=10).content
            default_image = NamedBlobImage(data=data,
                                           filename=u'image.jpg',
                                           contentType='image/jpeg')
            content.image = default_image

        # Assign values to fases
        fases = int(math.ceil(float((content.completionactual - content.startactual).days) / float(365)))
        date1 = content.startactual
        date2 = content.completionactual
        if date2.month < date1.month or (date2.month == date1.month and date2.day < date1.day):
            rangeDates = range(date2.year - date1.year)
        else:
            rangeDates = range(date2.year - date1.year + 1)
        datas = [(date1 + relativedelta(years=i)).strftime("%B %d, %Y")
                 for i in rangeDates] + [date2.strftime("%B %d, %Y")]
        isodate = [(date1 + relativedelta(years=i)).strftime("%Y-%m-%d")
                   for i in rangeDates] + [date2.strftime("%Y-%m-%d")]
        patterndate = [(date1 - dateutil.relativedelta.relativedelta(months=1) + relativedelta(years=i)).strftime(
            "%Y %m %d").replace(' 0', ' ').replace(' ', ',') for i in rangeDates]
        patterndate.append((date2 - dateutil.relativedelta.relativedelta(months=1)
                            ).strftime("%Y %m %d").replace(' 0', ' ').replace(' ', ','))

        results = []
        if fases > 1:
            count = 0
            while count != fases:
                results.append(dict(
                    start=datas[0 + count],
                    end=datas[1 + count],
                    start_iso=isodate[0 + count],
                    end_iso=isodate[1 + count],
                    pattern_start=patterndate[0 + count],
                    pattern_end=patterndate[1 + count],
                    fase=count + 1
                ))
                count = count + 1
        else:
            count = 0
            results.append(dict(
                start=datas[0],
                end=datas[1],
                start_iso=isodate[0],
                end_iso=isodate[1],
                pattern_start=patterndate[0],
                pattern_end=patterndate[1],
                fase=1
            ))
        content.gwopa_year_phases = results

        measuring_frequency = content.measuring_frequency
        if measuring_frequency:
            frequency = int(measuring_frequency[-1])

            if frequency == 4:
                N_MONTHS = 3
            elif frequency == 2:
                N_MONTHS = 6
            elif frequency == 1:
                N_MONTHS = 12
            reports = []
            N_DAYS_AGO = 15

            if content.project_manager_admin:
                user = api.user.get(content.project_manager_admin)
                email = user.getProperty('email')

            if fases > 1:
                count = 0
                while count != fases:
                    count = count + 1
                    date_start_year = datetime.strptime(results[count-1]['start'], "%B %d, %Y").date()
                    # date_end_year = datetime.strptime(results[count-1]['end'], "%B %d, %Y").date()
                    for i in range(frequency):
                        date_generate_report = date_start_year + relativedelta(months=N_MONTHS)
                        if date2 >= date_generate_report and date2 != date_start_year:
                            data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                            reports.append(dict(
                                date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                                date_email_report=data_email_report.strftime("%B %d, %Y"),
                                num_report=i + 1,
                                project_year=count,
                                project_url=content.absolute_url(),
                                project_title=content.title,
                                email=email,
                                frequency=measuring_frequency[:-2],
                            ))
                            date_start_year = date_generate_report
                        elif date2 == date_start_year:
                            break
                        else:
                            date_generate_report = date2
                            data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                            reports.append(dict(
                                date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                                date_email_report=data_email_report.strftime("%B %d, %Y"),
                                num_report=i + 1,
                                project_year=count,
                                project_url=content.absolute_url(),
                                project_title=content.title,
                                email=email,
                                frequency=measuring_frequency[:-2],
                            ))
                            break
            else:
                count = 0
                for i in range(frequency):
                        date_generate_report = date1 + relativedelta(months=N_MONTHS)
                        if date2 > date_generate_report:
                            data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                            reports.append(dict(
                                date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                                date_email_report=data_email_report.strftime("%B %d, %Y"),
                                num_report=i + 1,
                                project_year=count + 1,
                                project_url=content.absolute_url(),
                                project_title=content.title,
                                email=email,
                                frequency=measuring_frequency[:-2],
                            ))
                            date1 = date_generate_report
                        elif date2 == date1:
                            break
                        else:
                            date_generate_report = date2
                            data_email_report = date_generate_report - relativedelta(days=N_DAYS_AGO)
                            reports.append(dict(
                                date_generate_report=date_generate_report.strftime("%B %d, %Y"),
                                date_email_report=data_email_report.strftime("%B %d, %Y"),
                                num_report=i + 1,
                                project_year=count + 1,
                                project_url=content.absolute_url(),
                                project_title=content.title,
                                email=email,
                                frequency=measuring_frequency[:-2],
                            ))
                            break

            content.gwopa_reporting = reports

            logger.info('Dates to reporting project {} id {}'.format(content.title.encode('utf-8'), content.id))

        # Assign Areas
        new_areas = content.areas
        current = [a.id for a in api.content.find(
            portal_type="ImprovementArea", context=content, depth=1)]

        new_areas = content.areas
        if new_areas is None:
            return
        else:
            for area in new_areas:
                if area not in current:
                    data = api.content.find(portal_type="ItemArea", id=quote_chars(area))[0]
                    if data.id not in content:
                        api.content.create(
                            type=u'ImprovementArea',
                            id=data.id,
                            title=data.Title.decode('utf-8'),
                            title_es=data.title_es,
                            title_fr=data.title_fr,
                            description=data.Description,
                            image=data.getObject().image,
                            container=content)

        # Delete Areas
        delete_areas = list(set(current) - set(new_areas))
        for area in delete_areas:
            item = api.content.find(portal_type="ImprovementArea", id=quote_chars(area), context=content)
            if item:
                api.content.delete(obj=item[0].getObject(), check_linkintegrity=False)

        # Modify project_dates and currency
        project_path = '/'.join(content.getPhysicalPath())
        activities = api.content.find(portal_type="Activity", path=project_path)
        for activity in activities:
            item = activity.getObject()
            project_dates = "The dates must be between the limits of this Project. Start: " + str(content.startactual) + " End: " + str(content.completionactual)
            if item.project_dates != project_dates:
                item.project_dates = project_dates

            item.currency = project_currency(content)
            item.reindexObject()

        path = '/'.join(content.contribs.getPhysicalPath())
        partners = content.partners
        if partners:
            for partner in partners:
                item = api.content.find(
                    portal_type='ContribPartner',
                    Title=quote_chars(partner),
                    path=path)
                if not item:
                    obj = api.content.create(
                        type='ContribPartner',
                        title=partner,
                        container=content.contribs)
                    obj.incash = 0
                    obj.inkind = 0
        else:
            partners = []

        all_partners = []
        items_partners = api.content.find(
                    portal_type='ContribPartner',
                    path=path)
        for item_partner in items_partners:
            item_partner_obj = item_partner.getObject()
            all_partners.append(item_partner_obj.title)

        for item in all_partners:
            if item not in partners:
                obj = api.content.find(
                    portal_type='ContribPartner',
                    Title=quote_chars(item),
                    path=path)
                api.content.delete(obj=obj[0].getObject(), check_linkintegrity=False)

        donors = content.donors
        if donors:
            for donor in donors:
                item = api.content.find(
                    portal_type='ContribDonor',
                    Title=quote_chars(donor),
                    path=path)
                if not item:
                    obj = api.content.create(
                        type='ContribDonor',
                        title=donor,
                        container=content.contribs)
                    obj.incash = 0
                    obj.inkind = 0
        else:
            donors = []

        all_donors = []
        items_donors = api.content.find(
                    portal_type='ContribDonor',
                    path=path)
        for item_donor in items_donors:
            item_donor_obj = item_donor.getObject()
            all_donors.append(item_donor_obj.title)

        for item in all_donors:
            if item not in donors:
                obj = api.content.find(
                    portal_type='ContribDonor',
                    Title=quote_chars(item),
                    path=path)
                api.content.delete(obj=obj[0].getObject(), check_linkintegrity=False)

        path_files = '/'.join(content.files.getPhysicalPath())
        folder_files = api.content.find(portal_type="Folder", path=path_files)
        obj_files = folder_files[0].getObject()

        # Grant Contributor role to members in folder files project
        if content.members:
            for user in content.members:
                api.user.grant_roles(username=user, obj=obj_files, roles=['Contributor'])
        if content.project_manager:
            for user in content.project_manager:
                api.user.grant_roles(username=user, obj=obj_files, roles=['Contributor'])

        # Partnership practice
        try:
            partnerships = content.partnerships
        except:
            partnerships = api.content.create(
                                type='Folder',
                                id='partnerships',
                                title='Partnerships',
                                container=content)

            logger.info('Create folder partnerships in project {} id {}'.format(content.title, content.id))

            behaviorp = ISelectableConstrainTypes(partnerships)
            behaviorp.setConstrainTypesMode(1)
            behaviorp.setLocallyAllowedTypes(('PartnershipPractice', 'Folder'))
            behaviorp.setImmediatelyAddableTypes(('PartnershipPractice', 'Folder'))


        current_partnerships = [a.id for a in api.content.find(
            portal_type="PartnershipPractice", context=content.partnerships, depth=1)]

        config_folder = api.content.find(type='Folder',id='partnershippractice')
        config_folder = config_folder[0].getObject()
        partnerships_default = api.content.find(
            portal_type=['PartnershipPractice'],
            context=config_folder,
            sort_on='getObjPositionInParent')

        for partnership in partnerships_default:
            if partnership.id not in current_partnerships:
                partnership = partnership.getObject()
                obj = api.content.create(
                            type='PartnershipPractice',
                            title=partnership.title,
                            title_es=partnership.title_es,
                            title_fr=partnership.title_fr,
                            description=partnership.description,
                            description_es=partnership.description_es,
                            description_fr=partnership.description_fr,
                            container=content.partnerships)
예제 #43
0
def _constrain(context, allowed_types):
    behavior = ISelectableConstrainTypes(context)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setLocallyAllowedTypes(allowed_types)
    behavior.setImmediatelyAddableTypes(allowed_types)
예제 #44
0
def _constrain(context, allowed_types):
    behavior = ISelectableConstrainTypes(context)
    behavior.setConstrainTypesMode(constrains.ENABLED)
    behavior.setLocallyAllowedTypes(allowed_types)
    behavior.setImmediatelyAddableTypes(allowed_types)
def create_item_runner(
        container,
        content_structure,
        auto_id=False,
        default_lang=None,
        default_wf_action=None,
        ignore_wf_types=['Image', 'File'],
        logger=logger):
    """Create Dexterity contents from plone.restapi compatible structures.

    :param container: The context in which the item should be created.
    :type container: Plone content object
    :param content_structure: Python dictionary with content structure.
    :type content_structure: dict
    :param default_lang: Default language.
    :type default_lang: string
    :param default_wf_action: Default workflow transition action.
    :type default_wf_action: string
    :param ignore_wf_types: Ignore to apply the workflow transition if item is
                            one of these types.
    :type ignore_wf_types: list (default: ['Image', 'File'])
    :param logger: Logger to use.
    :type logger: Python logging instance.

    The datastructure of content defined by plone.restapi:

    https://plonerestapi.readthedocs.io/en/latest/content.html#creating-a-resource-with-post

    [
        {
            "type": "",
            "id": "",
            "title": "",
            "description": ""
            "items": [],
            "opts": {
                "default_page": "",
                "locally_allowed_types": [],
                "immediately_allowed_types": [],
            }
        }
    ]

    Use the same structure for each child. Leave out, what you don't need.
    """

    request = getRequest()

    for data in content_structure:

        type_ = data.get('@type', None)
        id_ = data.get('id', None)
        title = data.get('title', None)

        if not type_:
            raise BadRequest("Property '@type' is required")

        obj = create(container, type_, id_=id_, title=title)

        # Acquisition wrap temporarily to satisfy things like vocabularies
        # depending on tools
        temporarily_wrapped = False
        if IAcquirer.providedBy(obj) and not safe_hasattr(obj, 'aq_base'):
            obj = obj.__of__(container)
            temporarily_wrapped = True

        deserializer = queryMultiAdapter((obj, request), IDeserializeFromJson)

        if deserializer is None:
            raise BadRequest(
                'Canno deserialize type {}'.format(obj.portal_type))

        # defaults
        if not data.get('language'):
            data['language'] = default_lang

        if not data.get('review_state'):
            data['review_state'] = default_wf_action

        deserializer(validate_all=True, data=data, create=True)

        if temporarily_wrapped:
            obj = aq_base(obj)

        if not getattr(deserializer, 'notifies_create', False):
            notify(ObjectCreatedEvent(obj))

        obj = add(container, obj, rename=not bool(id_))

        # set default
        opts = data.get('opts', {})
        if opts.get('default_page', False):
            container.setDefaultPage(obj.id)

        # CONSTRAIN TYPES
        locally_allowed_types = opts.get('locally_allowed_types', False)
        immediately_allowed_types = opts.get('immediately_allowed_types', False)
        if locally_allowed_types or immediately_allowed_types:
            be = ISelectableConstrainTypes(obj, None)
            if be:
                be.setConstrainTypesMode(behaviors.constrains.ENABLED)
                if locally_allowed_types:
                    be.setLocallyAllowedTypes = locally_allowed_types
                    logger.debug('{0}: locally_allowed_types {1}'.format(path, locally_allowed_types))  # noqa
                if immediately_allowed_types:
                    be.setImmediatelyAddableTypes = immediately_allowed_types
                    logger.debug('{0}: immediately_allowed_types {1}'.format(path, immediately_allowed_types))  # noqa

        id_ = obj.id  # get the real id
        path = '/'.join(obj.getPhysicalPath())
        logger.info('{0}: created'.format(path))

        # Call recursively
        create_item_runner(
            obj,
            content_structure=data.get('items', []),
            default_lang=default_lang,
            default_wf_action=default_wf_action,
            logger=logger,
        )
예제 #46
0
def set_constrain_types(obj, list_contraint):
    behavior = ISelectableConstrainTypes(obj)
    behavior.setConstrainTypesMode(1)
    behavior.setImmediatelyAddableTypes(list_contraint)
    behavior.setLocallyAllowedTypes(list_contraint)
예제 #47
0
    def render(self):
        """
        """
        portal = getSite()
        frontpage = portal['front-page']

        urltool = getToolByName(portal, 'portal_url')
        portal_catalog = getToolByName(portal, 'portal_catalog')
        path = urltool.getPortalPath()
        workflowTool = getToolByName(portal, "portal_workflow")
        pl = getToolByName(portal, 'portal_languages')

        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/noticies')
        if obj.actual_result_count == 0:
            noticies = self.newFolder(portal, 'noticies', 'Noticies')
            noticies.description = 'Noticies del lloc'
            noticies.exclude_from_nav = True
            self.publish(noticies)

            behavior = ISelectableConstrainTypes(noticies)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Collection', 'News Item'))
            behavior.setImmediatelyAddableTypes(('Collection', 'News Item'))

            noticies_destacades = self.newCollection(
                noticies,
                'noticies-destacades',
                u'Noticies Destacades',
                query=[{
                    u'i': u'portal_type',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': [u'News Item']
                }, {
                    u'i': u'review_state',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': u'published'
                }, {
                    u'i': u'destacat',
                    u'o': u'plone.app.querystring.operation.boolean.isTrue',
                    u'v': u'Sí'
                }])
            self.publish(noticies_destacades)

            noticies = self.newCollection(
                noticies,
                'noticies',
                u'Noticies',
                query=[{
                    u'i': u'portal_type',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': [u'News Item']
                }, {
                    u'i': u'review_state',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': u'published'
                }])
            self.publish(noticies)

        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/esdeveniments')
        if obj.actual_result_count == 0:
            esdeveniments = self.newFolder(portal, 'esdeveniments',
                                           'Esdeveniments')
            esdeveniments.description = 'Esdeveniments del lloc'
            esdeveniments.exclude_from_nav = True
            self.publish(esdeveniments)

            behavior = ISelectableConstrainTypes(esdeveniments)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Collection', 'Event'))
            behavior.setImmediatelyAddableTypes(('Collection', 'Event'))

            esdeveniments = self.newCollection(
                esdeveniments,
                'esdeveniments',
                u'Esdeveniments',
                query=[{
                    u'i': u'portal_type',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': [u'Event']
                }, {
                    u'i': u'review_state',
                    u'o': u'plone.app.querystring.operation.selection.is',
                    u'v': u'published'
                }])

            self.publish(esdeveniments)

        #Menú principal
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/menu-principal')
        if obj.actual_result_count == 0:
            menu_principal = self.newFolder(portal, 'menu-principal',
                                            u'Menú principal')
            menu_principal.language = pl.getDefaultLanguage()
            menu_principal.exclude_from_nav = True
            self.publish(menu_principal)
            alsoProvides(menu_principal, IHideFromBreadcrumbs)
            menu_principal.reindexObject()

            ajuntament = self.newFolder(menu_principal, 'ajuntament',
                                        u'Ajuntament')
            ajuntament.language = pl.getDefaultLanguage()
            self.publish(ajuntament)
            ajuntament.reindexObject()

            informacio_municipal = self.newFolder(menu_principal,
                                                  'informacio-municipal',
                                                  u'Informació Municipal')
            informacio_municipal.language = pl.getDefaultLanguage()
            self.publish(informacio_municipal)
            informacio_municipal.reindexObject()

            seu_electronica = self.newFolder(menu_principal, 'seu-electronica',
                                             u'Seu electrònica')
            seu_electronica.language = pl.getDefaultLanguage()
            self.publish(seu_electronica)
            seu_electronica.reindexObject()

            guia_de_la_ciutat = self.newFolder(menu_principal,
                                               'guia-de-la-ciutat',
                                               u'Guia de la ciutat')
            guia_de_la_ciutat.language = pl.getDefaultLanguage()
            self.publish(guia_de_la_ciutat)
            guia_de_la_ciutat.reindexObject()

            borsa_de_treball = self.newFolder(menu_principal,
                                              'borsa-de-treball',
                                              u'Borsa de treball')
            borsa_de_treball.language = pl.getDefaultLanguage()
            self.publish(borsa_de_treball)
            borsa_de_treball.reindexObject()

        #Menú Lateral
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/menu-lateral')
        if obj.actual_result_count == 0:
            menu_lateral = self.newFolder(portal, 'menu-lateral',
                                          u'Menú lateral')
            menu_lateral.language = pl.getDefaultLanguage()
            menu_lateral.exclude_from_nav = True
            self.publish(menu_lateral)
            alsoProvides(menu_lateral, IHideFromBreadcrumbs)
            menu_lateral.reindexObject()

            la_ciutat_per_temes = self.newFolder(menu_lateral,
                                                 'la-ciutat-per-temes',
                                                 u'La ciutat per temes')
            la_ciutat_per_temes.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_temes)
            la_ciutat_per_temes.reindexObject()

            la_ciutat_per_les_persones = self.newFolder(
                menu_lateral, 'la-ciutat-per-les-persones',
                u'La ciutat i les persones')
            la_ciutat_per_les_persones.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_les_persones)
            la_ciutat_per_les_persones.reindexObject()

            la_ciutat_en_xifres = self.newFolder(menu_lateral,
                                                 'la-ciutat-en-xifres',
                                                 u'La ciutat en xifres')
            la_ciutat_en_xifres.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_en_xifres)
            la_ciutat_en_xifres.reindexObject()

            la_ciutat_per_districtes = self.newFolder(
                menu_lateral, 'la-ciutat-per-districtes',
                u'La ciutat per districtes')
            la_ciutat_per_districtes.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_districtes)
            la_ciutat_per_districtes.reindexObject()

        #Material multimèdia
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/material-multimedia')
        if obj.actual_result_count == 0:
            material_multimedia = self.newFolder(portal, 'material-multimedia',
                                                 u'Material multimèdia')
            material_multimedia.language = pl.getDefaultLanguage()
            material_multimedia.exclude_from_nav = True
            self.publish(material_multimedia)
            material_multimedia.reindexObject()

        #Slider
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path +
                                           '/material-multimedia/sliders')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id='material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            slider = self.newFolder(material_multimedia, 'sliders', u'Sliders')
            slider.language = pl.getDefaultLanguage()
            slider.exclude_from_nav = True
            self.publish(slider)
            slider.reindexObject()

            behavior = ISelectableConstrainTypes(slider)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Slider'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Slider'))

        #Banners
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path +
                                           '/material-multimedia/banners')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id='material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            banners = self.newFolder(material_multimedia, 'banners',
                                     u'Banners')
            banners.language = pl.getDefaultLanguage()
            banners.exclude_from_nav = True
            self.publish(banners)
            banners.reindexObject()

            behavior = ISelectableConstrainTypes(banners)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Banner', 'BannerContainer'))
            behavior.setImmediatelyAddableTypes(('Banner', 'BannerContainer'))

        #Carrousel
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path +
                                           '/material-multimedia/carroussel')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id='material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            carroussel = self.newFolder(material_multimedia, 'carroussel',
                                        u'Carroussel')
            carroussel.language = pl.getDefaultLanguage()
            carroussel.exclude_from_nav = True
            self.publish(carroussel)
            carroussel.reindexObject()

            behavior = ISelectableConstrainTypes(carroussel)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Carrousel', 'Folder'))
            behavior.setImmediatelyAddableTypes(('Carrousel', 'Folder'))

        #Imatges Capçalera
        obj = portal_catalog.searchResults(
            portal_type='Folder',
            path=path + '/material-multimedia/imatges-capcalera')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id='material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            imatges_capcalera = self.newFolder(material_multimedia,
                                               'imatges-capcalera',
                                               u'Imatges capçalera')
            imatges_capcalera.language = pl.getDefaultLanguage()
            imatges_capcalera.exclude_from_nav = True
            self.publish(imatges_capcalera)
            imatges_capcalera.reindexObject()

            behavior = ISelectableConstrainTypes(imatges_capcalera)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Image'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Image'))

        #Banners dreta
        obj = portal_catalog.searchResults(
            portal_type='BannerContainer',
            path=path + '/material-multimedia/banners/banners_dreta')
        if obj.actual_result_count == 0:
            _createObjectByType('BannerContainer', banners, 'banners_dreta')
            banners['banners_dreta'].exclude_from_nav = True
            banners['banners_dreta'].setTitle('Banners-dreta')
            banners['banners_dreta'].reindexObject()
            workflowTool.doActionFor(banners.banners_dreta, "publish")

        #Banners esquerra
        obj = portal_catalog.searchResults(
            portal_type='BannerContainer',
            path=path + '/material-multimedia/banners/banners_esquerra')
        if obj.actual_result_count == 0:
            _createObjectByType('BannerContainer', banners, 'banners_esquerra')
            banners['banners_esquerra'].exclude_from_nav = True
            banners['banners_esquerra'].setTitle('Banners-esquerra')
            banners['banners_esquerra'].reindexObject()
            workflowTool.doActionFor(banners.banners_esquerra, "publish")

        #Documents
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/documents')
        if obj.actual_result_count == 0:
            documents = self.newFolder(portal, 'documents', u'Documents')
            documents.language = pl.getDefaultLanguage()
            documents.exclude_from_nav = True
            self.publish(documents)
            documents.reindexObject()

        #Directori equipaments
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path +
                                           '/directori-equipaments')
        if obj.actual_result_count == 0:
            directori_equipaments = self.newFolder(portal,
                                                   'directori-equipaments',
                                                   u'Directori equipaments')
            directori_equipaments.language = pl.getDefaultLanguage()
            directori_equipaments.exclude_from_nav = True
            self.publish(directori_equipaments)
            directori_equipaments.reindexObject()

            behavior = ISelectableConstrainTypes(directori_equipaments)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Equipament'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Equipament'))

        #Tràmits
        obj = portal_catalog.searchResults(portal_type='Folder',
                                           path=path + '/tramits')
        if obj.actual_result_count == 0:
            tramits = self.newFolder(portal, 'tramits', u'Tràmits')
            tramits.language = pl.getDefaultLanguage()
            tramits.exclude_from_nav = True
            self.publish(tramits)
            tramits.reindexObject()

            behavior = ISelectableConstrainTypes(tramits)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Tramit'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Tramit'))

        # # Add portlets programatically
        # from vilaix.theme.portlets.noticiaDestacada import Assignment as noticiaDestacadaAssignment
        # from vilaix.theme.portlets.news import Assignment as noticiaAssignment
        # from vilaix.theme.portlets.bannersportlet import Assignment as bannersVilaixAssignment
        # from vilaix.theme.portlets.agendaVilaix import Assignment as agendaVilaixAssignment
        # from vilaix.theme.portlets.navigationfixed import Assignment as navigationfixedAssignment
        # from plone.app.event.portlets.portlet_calendar import Assignment as calendarAssignment

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager1', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['navigationfixed'] = navigationfixedAssignment(root='/menu-lateral')
        # target_manager_assignments['bannersVilaix'] = bannersVilaixAssignment(content='/material-multimedia/banners/banners_esquerra')

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager2', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['noticiaDestacada'] = noticiaDestacadaAssignment()

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager3', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['noticies'] = noticiaAssignment()

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager6', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['bannersVilaix'] = bannersVilaixAssignment(content='/material-multimedia/banners/banners_dreta')

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager7', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['agendaVilaix'] = agendaVilaixAssignment()

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager10', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['calendari'] = calendarAssignment(state='published')

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager3')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '8'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager6')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '4'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager7')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '8'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager10')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '4'

        return 'Created'
예제 #48
0
    def render(self):
        """
        """
        portal = getSite()
        frontpage = portal['front-page']

        urltool = getToolByName(portal, 'portal_url')
        portal_catalog = getToolByName(portal, 'portal_catalog')
        path = urltool.getPortalPath()
        workflowTool = getToolByName(portal, "portal_workflow")
        pl = getToolByName(portal, 'portal_languages')

        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/noticies')
        if obj.actual_result_count == 0:
            noticies = self.newFolder(portal, 'noticies', 'Noticies')
            noticies.description = 'Noticies del lloc'
            noticies.exclude_from_nav = True
            self.publish(noticies)

            behavior = ISelectableConstrainTypes(noticies)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Collection', 'News Item'))
            behavior.setImmediatelyAddableTypes(('Collection', 'News Item'))

            noticies_destacades = self.newCollection(noticies, 'noticies-destacades', u'Noticies Destacades', query = [{u'i': u'portal_type', u'o': u'plone.app.querystring.operation.selection.is', u'v': [u'News Item']},
                                                                                                                       {u'i': u'review_state', u'o': u'plone.app.querystring.operation.selection.is', u'v': u'published'},
                                                                                                                       {u'i': u'destacat', u'o': u'plone.app.querystring.operation.boolean.isTrue', u'v': u'Sí'}])
            self.publish(noticies_destacades)

            noticies = self.newCollection(noticies, 'noticies', u'Noticies', query = [{u'i': u'portal_type', u'o': u'plone.app.querystring.operation.selection.is', u'v': [u'News Item']},
                                                                                      {u'i': u'review_state', u'o': u'plone.app.querystring.operation.selection.is', u'v': u'published'}])
            self.publish(noticies)


        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/esdeveniments')
        if obj.actual_result_count == 0:
            esdeveniments = self.newFolder(portal, 'esdeveniments', 'Esdeveniments')
            esdeveniments.description = 'Esdeveniments del lloc'
            esdeveniments.exclude_from_nav = True
            self.publish(esdeveniments)

            behavior = ISelectableConstrainTypes(esdeveniments)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Collection', 'Event'))
            behavior.setImmediatelyAddableTypes(('Collection', 'Event'))

            esdeveniments = self.newCollection(esdeveniments, 'esdeveniments', u'Esdeveniments', query = [{u'i': u'portal_type', u'o': u'plone.app.querystring.operation.selection.is', u'v': [u'Event']},
                                                                                                          {u'i': u'review_state', u'o': u'plone.app.querystring.operation.selection.is', u'v': u'published'}])

            self.publish(esdeveniments)


        #Menú principal
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/menu-principal')
        if obj.actual_result_count == 0:
            menu_principal = self.newFolder(portal, 'menu-principal', u'Menú principal')
            menu_principal.language = pl.getDefaultLanguage()
            menu_principal.exclude_from_nav = True
            self.publish(menu_principal)
            alsoProvides(menu_principal, IHideFromBreadcrumbs)
            menu_principal.reindexObject()

            ajuntament = self.newFolder(menu_principal, 'ajuntament', u'Ajuntament')
            ajuntament.language = pl.getDefaultLanguage()
            self.publish(ajuntament)
            ajuntament.reindexObject()

            informacio_municipal = self.newFolder(menu_principal, 'informacio-municipal', u'Informació Municipal')
            informacio_municipal.language = pl.getDefaultLanguage()
            self.publish(informacio_municipal)
            informacio_municipal.reindexObject()

            seu_electronica = self.newFolder(menu_principal, 'seu-electronica', u'Seu electrònica')
            seu_electronica.language = pl.getDefaultLanguage()
            self.publish(seu_electronica)
            seu_electronica.reindexObject()

            guia_de_la_ciutat = self.newFolder(menu_principal, 'guia-de-la-ciutat', u'Guia de la ciutat')
            guia_de_la_ciutat.language = pl.getDefaultLanguage()
            self.publish(guia_de_la_ciutat)
            guia_de_la_ciutat.reindexObject()


            borsa_de_treball = self.newFolder(menu_principal, 'borsa-de-treball', u'Borsa de treball')
            borsa_de_treball.language = pl.getDefaultLanguage()
            self.publish(borsa_de_treball)
            borsa_de_treball.reindexObject()


        #Menú Lateral
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/menu-lateral')
        if obj.actual_result_count == 0:
            menu_lateral = self.newFolder(portal, 'menu-lateral', u'Menú lateral')
            menu_lateral.language = pl.getDefaultLanguage()
            menu_lateral.exclude_from_nav = True
            self.publish(menu_lateral)
            alsoProvides(menu_lateral, IHideFromBreadcrumbs)
            menu_lateral.reindexObject()

            la_ciutat_per_temes = self.newFolder(menu_lateral, 'la-ciutat-per-temes', u'La ciutat per temes')
            la_ciutat_per_temes.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_temes)
            la_ciutat_per_temes.reindexObject()

            la_ciutat_per_les_persones = self.newFolder(menu_lateral, 'la-ciutat-per-les-persones', u'La ciutat i les persones')
            la_ciutat_per_les_persones.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_les_persones)
            la_ciutat_per_les_persones.reindexObject()

            la_ciutat_en_xifres = self.newFolder(menu_lateral, 'la-ciutat-en-xifres', u'La ciutat en xifres')
            la_ciutat_en_xifres.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_en_xifres)
            la_ciutat_en_xifres.reindexObject()

            la_ciutat_per_districtes = self.newFolder(menu_lateral, 'la-ciutat-per-districtes', u'La ciutat per districtes')
            la_ciutat_per_districtes.language = pl.getDefaultLanguage()
            self.publish(la_ciutat_per_districtes)
            la_ciutat_per_districtes.reindexObject()


        #Material multimèdia
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia')
        if obj.actual_result_count == 0:
            material_multimedia = self.newFolder(portal, 'material-multimedia', u'Material multimèdia')
            material_multimedia.language = pl.getDefaultLanguage()
            material_multimedia.exclude_from_nav = True
            self.publish(material_multimedia)
            material_multimedia.reindexObject()

        #Slider
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/sliders')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            slider = self.newFolder(material_multimedia, 'sliders', u'Sliders')
            slider.language = pl.getDefaultLanguage()
            slider.exclude_from_nav = True
            self.publish(slider)
            slider.reindexObject()

            behavior = ISelectableConstrainTypes(slider)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Slider'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Slider'))

        #Banners
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/banners')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            banners = self.newFolder(material_multimedia, 'banners', u'Banners')
            banners.language = pl.getDefaultLanguage()
            banners.exclude_from_nav = True
            self.publish(banners)
            banners.reindexObject()

            behavior = ISelectableConstrainTypes(banners)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Banner', 'BannerContainer'))
            behavior.setImmediatelyAddableTypes(('Banner', 'BannerContainer'))

        #Carrousel
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/carroussel')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            carroussel = self.newFolder(material_multimedia, 'carroussel', u'Carroussel')
            carroussel.language = pl.getDefaultLanguage()
            carroussel.exclude_from_nav = True
            self.publish(carroussel)
            carroussel.reindexObject()

            behavior = ISelectableConstrainTypes(carroussel)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Carrousel', 'Folder'))
            behavior.setImmediatelyAddableTypes(('Carrousel', 'Folder'))

        #Imatges Capçalera
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/imatges-capcalera')
        if obj.actual_result_count == 0:
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            imatges_capcalera = self.newFolder(material_multimedia, 'imatges-capcalera', u'Imatges capçalera')
            imatges_capcalera.language = pl.getDefaultLanguage()
            imatges_capcalera.exclude_from_nav = True
            self.publish(imatges_capcalera)
            imatges_capcalera.reindexObject()

            behavior = ISelectableConstrainTypes(imatges_capcalera)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Image'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Image'))

        #Banners dreta
        obj = portal_catalog.searchResults(portal_type = 'BannerContainer',
                                                path = path + '/material-multimedia/banners/banners_dreta')
        if obj.actual_result_count == 0:
            _createObjectByType('BannerContainer', banners, 'banners_dreta')
            banners['banners_dreta'].exclude_from_nav = True
            banners['banners_dreta'].setTitle('Banners-dreta')
            banners['banners_dreta'].reindexObject()
            workflowTool.doActionFor(banners.banners_dreta, "publish")


        #Banners esquerra
        obj = portal_catalog.searchResults(portal_type = 'BannerContainer',
                                                path = path + '/material-multimedia/banners/banners_esquerra')
        if obj.actual_result_count == 0:
            _createObjectByType('BannerContainer', banners, 'banners_esquerra')
            banners['banners_esquerra'].exclude_from_nav = True
            banners['banners_esquerra'].setTitle('Banners-esquerra')
            banners['banners_esquerra'].reindexObject()
            workflowTool.doActionFor(banners.banners_esquerra, "publish")


        #Documents
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/documents')
        if obj.actual_result_count == 0:
            documents = self.newFolder(portal, 'documents', u'Documents')
            documents.language = pl.getDefaultLanguage()
            documents.exclude_from_nav = True
            self.publish(documents)
            documents.reindexObject()

        #Directori equipaments
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/directori-equipaments')
        if obj.actual_result_count == 0:
            directori_equipaments = self.newFolder(portal, 'directori-equipaments', u'Directori equipaments')
            directori_equipaments.language = pl.getDefaultLanguage()
            directori_equipaments.exclude_from_nav = True
            self.publish(directori_equipaments)
            directori_equipaments.reindexObject()

            behavior = ISelectableConstrainTypes(directori_equipaments)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Equipament'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Equipament'))


        #Tràmits
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/tramits')
        if obj.actual_result_count == 0:
            tramits = self.newFolder(portal, 'tramits', u'Tràmits')
            tramits.language = pl.getDefaultLanguage()
            tramits.exclude_from_nav = True
            self.publish(tramits)
            tramits.reindexObject()

            behavior = ISelectableConstrainTypes(tramits)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('Folder', 'Tramit'))
            behavior.setImmediatelyAddableTypes(('Folder', 'Tramit'))


        # # Add portlets programatically
        # from vilaix.theme.portlets.noticiaDestacada import Assignment as noticiaDestacadaAssignment
        # from vilaix.theme.portlets.news import Assignment as noticiaAssignment
        # from vilaix.theme.portlets.bannersportlet import Assignment as bannersVilaixAssignment
        # from vilaix.theme.portlets.agendaVilaix import Assignment as agendaVilaixAssignment
        # from vilaix.theme.portlets.navigationfixed import Assignment as navigationfixedAssignment
        # from plone.app.event.portlets.portlet_calendar import Assignment as calendarAssignment


        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager1', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['navigationfixed'] = navigationfixedAssignment(root='/menu-lateral')
        # target_manager_assignments['bannersVilaix'] = bannersVilaixAssignment(content='/material-multimedia/banners/banners_esquerra')


        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager2', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['noticiaDestacada'] = noticiaDestacadaAssignment()


        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager3', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['noticies'] = noticiaAssignment()

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager6', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['bannersVilaix'] = bannersVilaixAssignment(content='/material-multimedia/banners/banners_dreta')

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager7', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['agendaVilaix'] = agendaVilaixAssignment()

        # target_manager = queryUtility(IPortletManager, name='genweb.portlets.HomePortletManager10', context=frontpage)
        # target_manager_assignments = getMultiAdapter((frontpage, target_manager), IPortletAssignmentMapping)
        # target_manager_assignments['calendari'] = calendarAssignment(state='published')

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager3')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '8'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager6')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '4'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager7')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '8'

        # portletManager = getUtility(IPortletManager, 'genweb.portlets.HomePortletManager10')
        # spanstorage = getMultiAdapter((frontpage, portletManager), ISpanStorage)
        # spanstorage.span = '4'


        return 'Created'
예제 #49
0
    def render(self):
        """
        """
        portal = getSite()
        frontpage = portal['front-page']  

        urltool = getToolByName(portal, 'portal_url')        
        portal_catalog = getToolByName(portal, 'portal_catalog')
        path = urltool.getPortalPath() 
        workflowTool = getToolByName(portal, "portal_workflow")
        pl = getToolByName(portal, 'portal_languages')

         
        # Delete old AT folders
        if getattr(portal, 'events', None):
            if portal.events.portal_type == 'Folder':
                portal.manage_delObjects(['events'])

        if getattr(portal, 'news', None):
            if portal.news.portal_type== 'Folder':
                portal.manage_delObjects(['news'])


        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/noticies')
        if obj.actual_result_count == 0:
            noticies = self.newFolder(portal, 'noticies', 'Noticies')
            noticies.description = 'Noticies del lloc'
            noticies.exclude_from_nav = True
            self.publish(noticies)

            # Set on them the allowable content types
            behavior = ISelectableConstrainTypes(noticies)
            behavior.setConstrainTypesMode(1)
            behavior.setLocallyAllowedTypes(('News Item', 'Collection'))
            behavior.setImmediatelyAddableTypes(('News Item', 'Collection'))

            noticies_destacades = self.newCollection(noticies, 'noticies-destacades', u'Noticies Destacades', query = [{u'i': u'portal_type', u'o': u'plone.app.querystring.operation.selection.is', u'v': [u'News Item']},
                                                                                                                       {u'i': u'review_state', u'o': u'plone.app.querystring.operation.selection.is', u'v': u'published'},
                                                                                                                       {u'i': u'destacat', u'o': u'plone.app.querystring.operation.boolean.isTrue', u'v': u'Sí'}])
            self.publish(noticies_destacades)

            noticies = self.newCollection(noticies, 'noticies', u'Noticies', query = [{u'i': u'portal_type', u'o': u'plone.app.querystring.operation.selection.is', u'v': [u'News Item']},
                                                                                      {u'i': u'review_state', u'o': u'plone.app.querystring.operation.selection.is', u'v': u'published'}])
            self.publish(noticies)          
                     
       
        #Menú Lateral       
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/menu-lateral')
        if obj.actual_result_count == 0:
            menu_lateral = self.newFolder(portal, 'menu-lateral', u'Menú lateral')
            menu_lateral.language = pl.getDefaultLanguage()
            menu_lateral.exclude_from_nav = True
            self.publish(menu_lateral)
            alsoProvides(menu_lateral, IHideFromBreadcrumbs)
            menu_lateral.reindexObject()

            lalcaldessa_per_la_transparencia = self.newFolder(menu_lateral, 'lalcaldessa-per-la-transparencia', u'L\'alcaldessa per la transparència')
            lalcaldessa_per_la_transparencia .language = pl.getDefaultLanguage()       
            self.publish(lalcaldessa_per_la_transparencia )
            lalcaldessa_per_la_transparencia .reindexObject() 
            
            els_carrecs_electes_municipals = self.newFolder(menu_lateral, 'els-carrecs-electes-municipals', u'Els càrrecs electes municipals')
            els_carrecs_electes_municipals.language = pl.getDefaultLanguage()       
            self.publish(els_carrecs_electes_municipals)
            els_carrecs_electes_municipals.reindexObject()  

            els_carrecs_de_lliure_designacio = self.newFolder(menu_lateral, 'els-carrecs-de-lliure-designacio', u'Els càrrecs de lliure designació')
            els_carrecs_de_lliure_designacio.language = pl.getDefaultLanguage()       
            self.publish(els_carrecs_de_lliure_designacio)
            els_carrecs_de_lliure_designacio.reindexObject()  

            indicadors_de_transparencia = self.newFolder(menu_lateral, 'indicadors-de-transparencia', u'Indicadors  de  transparència')
            indicadors_de_transparencia.language = pl.getDefaultLanguage()       
            self.publish(indicadors_de_transparencia)
            indicadors_de_transparencia.reindexObject()

            pressupostos_municipals = self.newFolder(menu_lateral, 'pressupostos-municipals', u'Pressupostos municipals')
            pressupostos_municipals.language = pl.getDefaultLanguage()       
            self.publish(pressupostos_municipals)
            pressupostos_municipals.reindexObject()

            patrimoni_municipal = self.newFolder(menu_lateral, 'patrimoni-municipal', u'Patrimoni municipal')
            patrimoni_municipal.language = pl.getDefaultLanguage()       
            self.publish(patrimoni_municipal)
            patrimoni_municipal.reindexObject()

            retiment_de_comptes = self.newFolder(menu_lateral, 'retiment-de-comptes', u'Retiment de comptes')
            retiment_de_comptes.language = pl.getDefaultLanguage()       
            self.publish(retiment_de_comptes)
            retiment_de_comptes.reindexObject()

            dret_dacces_a_la_informacio = self.newFolder(menu_lateral, 'dret-dacces-a-la-informacio', u'Dret d\'accés a la informació')
            dret_dacces_a_la_informacio.language = pl.getDefaultLanguage()       
            self.publish(dret_dacces_a_la_informacio)
            dret_dacces_a_la_informacio.reindexObject()

            dret_dacces_a_la_informacio = self.newFolder(menu_lateral, 'dret-dacces-a-la-informacio', u'Dret d\'accés a la informació')
            dret_dacces_a_la_informacio.language = pl.getDefaultLanguage()       
            self.publish(dret_dacces_a_la_informacio)
            dret_dacces_a_la_informacio.reindexObject()

            llei_de_transparencia = self.newFolder(menu_lateral, 'llei-de-transparencia', u'Llei de transparència')
            llei_de_transparencia.language = pl.getDefaultLanguage()       
            self.publish(llei_de_transparencia)
            llei_de_transparencia.reindexObject()

            novetats = self.newFolder(menu_lateral, 'novetats', u'Novetats')
            novetats.language = pl.getDefaultLanguage()       
            self.publish(novetats)
            novetats.reindexObject()

            enllacos_dinteres = self.newFolder(menu_lateral, 'enllacos-dinteres', u'Enllaços d\'interès')
            enllacos_dinteres.language = pl.getDefaultLanguage()       
            self.publish(enllacos_dinteres)
            enllacos_dinteres.reindexObject()



        
        #Material multimèdia
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia')
        if obj.actual_result_count == 0:
            material_multimedia = self.newFolder(portal, 'material-multimedia', u'Material multimèdia')
            material_multimedia.language = pl.getDefaultLanguage()
            material_multimedia.exclude_from_nav = True
            self.publish(material_multimedia)       
            material_multimedia.reindexObject()

        #Apartats
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/apartats')
        if obj.actual_result_count == 0:     
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()     
            apartats = self.newFolder(material_multimedia, 'apartats', u'Apartats')
            apartats.language = pl.getDefaultLanguage()
            apartats.exclude_from_nav = True
            self.publish(apartats)
            apartats.reindexObject()
        
        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(apartats)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Apartat', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Apartat', 'Folder'))
   
        #Slider
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/sliders')
        if obj.actual_result_count == 0:            
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()
            slider = self.newFolder(material_multimedia, 'sliders', u'Sliders')
            slider.language = pl.getDefaultLanguage()
            slider.exclude_from_nav = True
            self.publish(slider)       
            slider.reindexObject()

        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(slider)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Slider', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Slider', 'Folder'))

        # #Banners
        # obj = portal_catalog.searchResults(portal_type = 'Folder',
        #                                     path = path + '/material-multimedia/banners')
        # if obj.actual_result_count == 0:     
        #     res = portal_catalog.searchResults(id = 'material-multimedia')
        #     if res:
        #         material_multimedia = res[0].getObject()     
        #     banners = self.newFolder(material_multimedia, 'banners', u'Banners')
        #     banners.language = pl.getDefaultLanguage()
        #     banners.exclude_from_nav = True
        #     self.publish(banners)       
        #     banners.reindexObject()
      
        # #Carrousel
        # obj = portal_catalog.searchResults(portal_type = 'Folder',
        #                                     path = path + '/material-multimedia/carroussel')
        # if obj.actual_result_count == 0:  
        #     res = portal_catalog.searchResults(id = 'material-multimedia')
        #     if res:
        #         material_multimedia = res[0].getObject()         
        #     carroussel = self.newFolder(material_multimedia, 'carroussel', u'Carroussel')
        #     carroussel.language = pl.getDefaultLanguage()
        #     carroussel.exclude_from_nav = True
        #     self.publish(carroussel)       
        #     carroussel.reindexObject()

        #Imatges Capçalera
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                            path = path + '/material-multimedia/imatges-capcalera')
        if obj.actual_result_count == 0: 
            res = portal_catalog.searchResults(id = 'material-multimedia')
            if res:
                material_multimedia = res[0].getObject()          
            imatges_capcalera = self.newFolder(material_multimedia, 'imatges-capcalera', u'Imatges capçalera')
            imatges_capcalera.language = pl.getDefaultLanguage()
            imatges_capcalera.exclude_from_nav = True
            self.publish(imatges_capcalera)       
            imatges_capcalera.reindexObject()           
      
        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(imatges_capcalera)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Image', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Image', 'Folder'))

        # #Banners dreta
        # obj = portal_catalog.searchResults(portal_type = 'BannerContainer',
        #                                         path = path + '/material-multimedia/banners/banners_dreta')
        # if obj.actual_result_count == 0:
        #     _createObjectByType('BannerContainer', banners, 'banners_dreta')  
        #     banners['banners_dreta'].setExcludeFromNav(True)
        #     banners['banners_dreta'].setTitle('Banners-dreta')
        #     banners['banners_dreta'].reindexObject()
        #     workflowTool.doActionFor(banners.banners_dreta, "publish")  


        # #Banners esquerra
        # obj = portal_catalog.searchResults(portal_type = 'BannerContainer',
        #                                         path = path + '/material-multimedia/banners/banners_esquerra')
        # if obj.actual_result_count == 0:
        #     _createObjectByType('BannerContainer', banners, 'banners_esquerra')  
        #     banners['banners_esquerra'].setExcludeFromNav(True)
        #     banners['banners_esquerra'].setTitle('Banners-esquerra')
        #     banners['banners_esquerra'].reindexObject()
        #     workflowTool.doActionFor(banners.banners_esquerra, "publish")          
                
       
        # #Documents
        # obj = portal_catalog.searchResults(portal_type = 'Folder',
        #                                    path = path + '/documents')
        # if obj.actual_result_count == 0:                                
        #     documents = self.newFolder(portal, 'documents', u'Documents')
        #     documents.language = pl.getDefaultLanguage()
        #     documents.exclude_from_nav = True
        #     self.publish(documents)       
        #     documents.reindexObject()    

        # #Directori equipaments
        # obj = portal_catalog.searchResults(portal_type = 'Folder',
        #                                    path = path + '/directori-equipaments')
        # if obj.actual_result_count == 0:    
        #     directori_equipaments = self.newFolder(portal, 'directori-equipaments', u'Directori equipaments')
        #     directori_equipaments.language = pl.getDefaultLanguage()
        #     directori_equipaments.exclude_from_nav = True
        #     self.publish(directori_equipaments)       
        #     directori_equipaments.reindexObject()    

    
        # #Tràmits
        # obj = portal_catalog.searchResults(portal_type = 'Folder',
        #                                    path = path + '/tramits')
        # if obj.actual_result_count == 0:    
        #     tramits = self.newFolder(portal, 'tramits', u'Tràmits')
        #     tramits.language = pl.getDefaultLanguage()
        #     tramits.exclude_from_nav = True
        #     self.publish(tramits)       
        #     tramits.reindexObject()    

        #Categories
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/categories')
        if obj.actual_result_count == 0:    
            categories = self.newFolder(portal, 'categories', u'Categories')
            categories.language = pl.getDefaultLanguage()
            categories.exclude_from_nav = True
            self.publish(categories)       
            categories.reindexObject()   

        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(categories)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Categoria', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Categoria', 'Folder'))

        #Lleis
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/lleis')
        if obj.actual_result_count == 0:    
            lleis = self.newFolder(portal, 'lleis', u'Lleis')
            lleis.language = pl.getDefaultLanguage()
            lleis.exclude_from_nav = True
            self.publish(lleis)       
            lleis.reindexObject()          
  
        
        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(lleis)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Llei', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Llei', 'Folder'))


        #Indicadors
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/indicadors')
        if obj.actual_result_count == 0:    
            indicadors = self.newFolder(portal, 'indicadors', u'Indicadors')
            indicadors.language = pl.getDefaultLanguage()
            indicadors.exclude_from_nav = True
            self.publish(indicadors)       
            indicadors.reindexObject()  
        
        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(indicadors)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Indicador', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Indicador', 'Folder'))


        #Col·leccions Indicadors
        obj = portal_catalog.searchResults(portal_type = 'Folder',
                                           path = path + '/col-leccions-indicadors')
        if obj.actual_result_count == 0:    
            coleccions_indicadors = self.newFolder(portal, 'col-leccions-indicadors', u'Col·leccions Indicadors')
            coleccions_indicadors.language = pl.getDefaultLanguage()
            coleccions_indicadors.exclude_from_nav = True
            self.publish(coleccions_indicadors)       
            coleccions_indicadors.reindexObject()      
        
        # Set on them the allowable content types
        behavior = ISelectableConstrainTypes(coleccions_indicadors)
        behavior.setConstrainTypesMode(1)
        behavior.setLocallyAllowedTypes(('Collection', 'Folder'))
        behavior.setImmediatelyAddableTypes(('Collection', 'Folder'))

        
              
                   
        return 'Created'