def configura_menu_apoio(portal): folder = portal["menu-de-apoio"] behavior = ISelectableConstrainTypes(folder) behavior.setConstrainTypesMode(constrains.ENABLED) # Permitimos apenas links behavior.setImmediatelyAddableTypes(["Link"]) folder.setLayout("folder_summary_view")
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])
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)
def configura_servicos(portal): folder = portal.servicos behavior = ISelectableConstrainTypes(folder) behavior.setConstrainTypesMode(constrains.ENABLED) # Permitimos apenas links behavior.setImmediatelyAddableTypes(['Link']) folder.setLayout('summary_view')
def _createObjects(parent, new_object): LOG.info("Creating %s in %s" % (new_object, parent)) existing = parent.objectIds() if new_object['id'] in existing: LOG.info("%s exists, skipping" % new_object['id']) else: _createObjectByType( new_object['type'], parent, id=new_object['id'], title=new_object['title'] ) LOG.info("Now to modify the new_object...") obj = parent.get(new_object['id'], None) if obj is None: msg = "can't get new_object %s to modify it!" % new_object['id'] LOG.info(msg) else: if obj.Type() != new_object['type']: LOG.info("types don't match!") else: if 'layout' in new_object: obj.setLayout(new_object['layout']) if 'exclude_from_nav' in new_object: obj.setExcludeFromNav(new_object['exclude_from_nav']) obj.reindexObject() aspect = ISelectableConstrainTypes(obj) addable = aspect.getImmediatelyAddableTypes() if "collective.history.useraction" not in addable: aspect.setConstrainTypesMode(1) # select manually aspect.setImmediatelyAddableTypes(["collective.history.useraction"])
def configura_imagens(portal): folder = portal.imagens behavior = ISelectableConstrainTypes(folder) behavior.setConstrainTypesMode(constrains.ENABLED) # Permitimos apenas imagens behavior.setImmediatelyAddableTypes(['Image']) folder.setLayout('summary_view')
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 configura_menu_relevancia(portal): folder = portal['menu-de-relevancia'] behavior = ISelectableConstrainTypes(folder) behavior.setConstrainTypesMode(constrains.ENABLED) # Permitimos apenas links behavior.setImmediatelyAddableTypes(['Link']) folder.setLayout('summary_view')
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())
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 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()
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
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'])
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'])
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')
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)
def get_dashboard(self): write = False with api.env.adopt_roles(['Manager']): if 'dashboards' not in self.context.objectIds(): write = True api.content.create(type='Folder', title='Dashboards', id='dashboards', container=self.context, exclude_from_nav=True) dashboards = self.context['dashboards'] if not IHideFromBreadcrumbs.providedBy(dashboards): alsoProvides(dashboards, IHideFromBreadcrumbs) if api.content.get_state( obj=dashboards, default='Unknown') not in ('published', 'publish_internally'): write = True publish_content(dashboards) member = api.user.get_current() user_id = member.getId() if user_id not in dashboards.objectIds(): with api.env.adopt_roles(['Manager']): write = True # first make sure it is in allowed types... pts = api.portal.get_tool('portal_types') Folder = pts['Folder'] if 'Dashboard' not in Folder.allowed_content_types: allowed = list(Folder.allowed_content_types) allowed.append('Dashboard') Folder.allowed_content_types = tuple(allowed) aspect = ISelectableConstrainTypes(dashboards) if (aspect.getConstrainTypesMode() != 1 or ['Dashboard'] != aspect.getImmediatelyAddableTypes()): aspect.setConstrainTypesMode(1) aspect.setImmediatelyAddableTypes(['Dashboard']) api.content.create(type='Dashboard', title='Dashboard', id=user_id, container=dashboards, exclude_from_nav=True) dashboard = dashboards[user_id] if dashboard.getOwner().getId() != user_id: with api.env.adopt_roles(['Manager']): write = True dashboard.changeOwnership(member.getUser(), recursive=False) dashboard.reindexObjectSecurity() if write: alsoProvides(self.request, IDisableCSRFProtection) return dashboard
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 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 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 test_template_not_addable(self): # Normal folder => image is allowed to add self._create_templates([{'id': 'i1', 'type': 'Image', 'title': 'Image1'}]) self._open_url("%s/create_from_template" % self.folder.absolute_url()) self.assertIn('>Image1</label>', self.browser.contents) # Image is not allowed anymore in this folder constrain = ISelectableConstrainTypes(self.folder) constrain.setConstrainTypesMode(constraintypes.ENABLED) constrain.setImmediatelyAddableTypes([self.folder_type]) transaction.commit() self._open_url("%s/create_from_template" % self.folder.absolute_url()) self.assertIn('No templates', self.browser.contents)
def create_event_event(obj, event): if IRegistration.providedBy(obj.aq_parent): parent = obj.aq_parent parent.setDefaultPage(obj.id) create_registration_form(parent) behavior = ISelectableConstrainTypes(parent) behavior.setConstrainTypesMode(1) behavior.setImmediatelyAddableTypes(("period", )) request = getattr(event.object, "REQUEST", getRequest()) link_translations(request, parent) url = obj.aq_parent.absolute_url() obj.REQUEST.RESPONSE.redirect(url)
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)
def test_immediatelyAllowedTypesDefaultWhenDisabled(self): """ Constrain Mode Disabled. We get the default addables, independent of what our parent folder or we ourselves defined """ behavior = ISelectableConstrainTypes(self.inner_folder) behavior.setConstrainTypesMode(constrains.DISABLED) behavior.setImmediatelyAddableTypes([]) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes([]) types = [t.getId() for t in self.default_types] self.assertEqual(types, behavior.getImmediatelyAddableTypes())
def test_immediatelyAllowedTypesDefaultWhenEnabled(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.setImmediatelyAddableTypes(self.types_id_subset) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes([]) types = self.types_id_subset self.assertEqual(types, behavior.getImmediatelyAddableTypes())
def test_immediatelyAllowedTypesDefaultWhenDisabled(self): """ Constrain Mode Disabled. We get the default addables, independent of what our parent folder or we ourselves defined """ behavior = ISelectableConstrainTypes(self.inner_folder) behavior.setConstrainTypesMode(constrains.DISABLED) behavior.setImmediatelyAddableTypes([]) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes([]) types = [t.getId() for t in self.default_types] self.assertEqual(types, behavior.getImmediatelyAddableTypes())
def test_immediatelyAllowedTypesDefaultWhenEnabled(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.setImmediatelyAddableTypes(self.types_id_subset) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes([]) types = self.types_id_subset self.assertEqual(types, behavior.getImmediatelyAddableTypes())
def updateContainer(container, layout, ptypes): container.unindexObject() container.setLayout(layout) if IExcludeFromNavigation.providedBy(container): container.exclude_from_nav = True else: container.setExcludeFromNav(True) aspect = ISelectableConstrainTypes(container) addable = aspect.getImmediatelyAddableTypes() for ptype in ptypes: if ptype not in addable: aspect.setConstrainTypesMode(1) # select manually if IDexterityContainer.providedBy(container): #bypass check for available types container.immediately_addable_types = ptypes else: aspect.setImmediatelyAddableTypes(ptypes)
def updateHistoryContainer(obj): obj.unindexObject() obj.setLayout("collective_history_view") if IExcludeFromNavigation.providedBy(obj): obj.exclude_from_nav = True else: obj.setExcludeFromNav(True) aspect = ISelectableConstrainTypes(obj) addable = aspect.getImmediatelyAddableTypes() if "collective.history.useraction" not in addable: aspect.setConstrainTypesMode(1) # select manually types = ["collective.history.useraction"] if IDexterityContainer.providedBy(obj): #bypass check for available types obj.immediately_addable_types = types else: aspect.setImmediatelyAddableTypes(types)
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()
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))
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 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 _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 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)
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 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)
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)
def test_immediatelyAllowedTypesDefaultWhenAcquired(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.setImmediatelyAddableTypes([]) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes(self.types_id_subset) types = self.types_id_subset self.assertEqual(types, behavior.getImmediatelyAddableTypes()) outer_behavior.setConstrainTypesMode(constrains.ACQUIRE) types = [t.getId() for t in self.default_types] self.assertEqual(types, outer_behavior.getImmediatelyAddableTypes())
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 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)
def test_immediatelyAllowedTypesDefaultWhenAcquired(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.setImmediatelyAddableTypes([]) outer_behavior = ISelectableConstrainTypes(self.folder) outer_behavior.setConstrainTypesMode(constrains.ENABLED) outer_behavior.setImmediatelyAddableTypes(self.types_id_subset) types = self.types_id_subset self.assertEqual(types, behavior.getImmediatelyAddableTypes()) outer_behavior.setConstrainTypesMode(constrains.ACQUIRE) types = [t.getId() for t in self.default_types] self.assertEqual(types, outer_behavior.getImmediatelyAddableTypes())
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 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 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
def _setup_constrains(container, allowed_types): if DEXTERITY_WITH_CONSTRAINS: behavior = ISelectableConstrainTypes(container) behavior.setConstrainTypesMode(constrains.ENABLED) behavior.setImmediatelyAddableTypes(allowed_types) return True
def _constrain(context, allowed_types): behavior = ISelectableConstrainTypes(context) behavior.setConstrainTypesMode(constrains.ENABLED) behavior.setLocallyAllowedTypes(allowed_types) behavior.setImmediatelyAddableTypes(allowed_types)
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'
def set_constrain_types(obj, list_contraint): behavior = ISelectableConstrainTypes(obj) behavior.setConstrainTypesMode(1) behavior.setImmediatelyAddableTypes(list_contraint) behavior.setLocallyAllowedTypes(list_contraint)
def _setup_constrains(container, allowed_types): behavior = ISelectableConstrainTypes(container) behavior.setConstrainTypesMode(constrains.ENABLED) behavior.setImmediatelyAddableTypes(allowed_types) return True
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'