def createSchoolsClassesFolder(context, logger=None): """Create schools & classes folder""" if logger is None: logger = logging.getLogger('tutorweb.content') if hasattr(context, 'readDataFile'): # Installing profile if context.readDataFile('tutorweb.content.marker.txt') is None: return portal = context.getSite() else: # Upgrade step portal = getToolByName(context, 'portal_url').getPortalObject() # Create folder if it doesn't already exist if 'schools-and-classes' not in portal: portal.invokeFactory( type_name='Folder', id='schools-and-classes', title=u'Schools and Classes', ) # Restrict folder so we have a structure of classes types = IConstrainTypes(portal['schools-and-classes']) types.setConstrainTypesMode(constrains.ENABLED) types.setLocallyAllowedTypes(['Folder', 'tw_class']) types.setImmediatelyAddableTypes(['Folder', 'tw_class'])
def createInstitutionsFolder(context, logger=None): """Create the institutions folder""" if logger is None: logger = logging.getLogger('tutorweb.content') if hasattr(context, 'readDataFile'): # Installing profile if context.readDataFile('tutorweb.content.marker.txt') is None: return portal = context.getSite() else: # Upgrade step portal = getToolByName(context, 'portal_url').getPortalObject() if 'institutions' in portal: logger.info("Institutions folder already exists") return logger.info("Creating Institutions folder") id = portal.invokeFactory( type_name="Folder", id="institutions", title="Institutions", ) instFolder = portal[id] instFolder.exclude_from_nav = True types = IConstrainTypes(instFolder, None) types.setConstrainTypesMode(constrains.ENABLED) types.setLocallyAllowedTypes(['tw_institution']) types.setImmediatelyAddableTypes(['tw_institution'])
def _migrateMeetingCategoryToDX(self): '''Migrate from AT MeetingCategory to DX meetingcategory.''' logger.info('Migrating MeetingCategory from AT to DX...') # update item classifier # migrate references pghandler = ZLogHandler(steps=100) brains = self.portal.reference_catalog( relationship='ItemClassification') pghandler.init('Updating field MeetingItem.classifier...', len(brains)) pghandler.info('Updating field MeetingItem.classifier...') i = 0 for brain in brains: i += 1 pghandler.report(i) relation = brain.getObject() item = relation.getSourceObject() classifier = relation.getTargetObject() item.setClassifier(classifier.getId()) item.reindexObject(idxs=['getRawClassifier']) # deleteReferences in a second phase for brain in brains: relation = brain.getObject() item = relation.getSourceObject() item.deleteReferences('ItemClassification') pghandler.finish() logger.info('Migrating categories and classifiers in configuration...') # make sure new portal_type meetingcategory is installed self.ps.runImportStepFromProfile( 'profile-Products.PloneMeeting:default', 'typeinfo') # make sure no workflow used for meetingcategory self.wfTool.setChainForPortalTypes(('meetingcategory', ), ('', )) # adapt allowed_types for each MeetingConfig.categories/classifiers folders for cfg in self.tool.objectValues('MeetingConfig'): for folder_id in ('categories', 'classifiers'): constrain = IConstrainTypes(getattr(cfg, folder_id)) constrain.setConstrainTypesMode(1) allowedTypes = ['meetingcategory'] constrain.setLocallyAllowedTypes(allowedTypes) constrain.setImmediatelyAddableTypes(allowedTypes) # migrate to DX pac_migrate(self.portal, MeetingCategoryMigrator) self.removeUnusedPortalTypes(portal_types=['MeetingCategory']) # add meetingcategory to types_not_searched props = api.portal.get_tool('portal_properties').site_properties nsTypes = props.getProperty('types_not_searched') if 'meetingcategory' not in nsTypes: nsTypes = list(nsTypes) # MeetingCategory was removed by removeUnusedPortalTypes nsTypes.append('meetingcategory') props.manage_changeProperties(types_not_searched=tuple(nsTypes)) logger.info('Done.')
def _fixFacetedFoldersConstrainTypes(self): """Fix constrainTypes for every faceted folder stored in user personnal folder.""" logger.info( 'Updating searches_... folders constraintypes for every users...') for cfg in self.tool.objectValues('MeetingConfig'): folders = cfg._get_all_meeting_folders() for folder in folders: sub_folders = [ sub_folder for sub_folder in folder.objectValues('ATFolder') if sub_folder.getId().startswith('searches_') ] for sub_folder in sub_folders: constrain = IConstrainTypes(sub_folder) constrain.setConstrainTypesMode(1) allowedTypes = [] constrain.setLocallyAllowedTypes(allowedTypes) constrain.setImmediatelyAddableTypes(allowedTypes) logger.info('Done.')
def install_demo(context): """ """ if context.readDataFile('collectivedocumentgenerator_demo_marker.txt') is None: return portal = api.portal.get() if not hasattr(portal, 'podtemplates'): templates_folder = api.content.create( type='Folder', title=_(u'POD Templates'), id='podtemplates', container=portal, exclude_from_nav=True ) templates_folder.setTitle('POD Templates') templates_folder.reindexObject() pod_folder = getattr(portal, 'podtemplates') constrain_types = IConstrainTypes(pod_folder) constrain_types.setConstrainTypesMode(1) constrain_types.setLocallyAllowedTypes(POD_TEMPLATE_TYPES.keys()) constrain_types.setImmediatelyAddableTypes(POD_TEMPLATE_TYPES.keys()) # Create some test content style_template_id = 'test_style_template' if not hasattr(pod_folder, style_template_id): api.content.create( type='StyleTemplate', id=style_template_id, title='Styles', odt_file=NamedBlobFile( data=context.readDataFile('templates/styles.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'styles.odt', ), container=pod_folder, exclude_from_nav=True ) style_template = getattr(pod_folder, style_template_id) style_template_id = 'test_style_template_2' if not hasattr(pod_folder, style_template_id): api.content.create( type='StyleTemplate', id=style_template_id, title=_(u'Styles n°2'), odt_file=NamedBlobFile( data=context.readDataFile('templates/styles_2.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'styles_2.odt', ), container=pod_folder, exclude_from_nav=True ) sub_template_id = 'sub_template' if not hasattr(pod_folder, sub_template_id): api.content.create( type='SubTemplate', id=sub_template_id, title=_(u'Header'), odt_file=NamedBlobFile( data=context.readDataFile('templates/sub_template.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'sub_template.odt', ), container=pod_folder, exclude_from_nav=True, style_template=[style_template.UID()], ) sub_template = getattr(pod_folder, sub_template_id) if not hasattr(pod_folder, 'loop_template'): api.content.create( type='MailingLoopTemplate', id='loop_template', title=_(u'Mailing loop template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/mailing.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'mailing.odt', ), container=pod_folder, exclude_from_nav=True, style_template=[style_template.UID()], ) loop_template = getattr(pod_folder, 'loop_template') if not hasattr(pod_folder, 'test_template'): api.content.create( type='PODTemplate', id='test_template', title=_(u'General template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/modele_general.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'modele_general.odt', ), container=pod_folder, exclude_from_nav=True, ) if not hasattr(pod_folder, 'test_template_multiple'): api.content.create( type='ConfigurablePODTemplate', id='test_template_multiple', title=_(u'Multiple format template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/modele_general.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'modele_general.odt', ), container=pod_folder, exclude_from_nav=True, pod_formats=['odt', 'pdf', 'doc', 'docx'], pod_portal_types=['Document'], style_template=[style_template.UID()], merge_templates=[ { 'template': sub_template.UID(), 'pod_context_name': 'header', 'do_rendering': True, } ], ) if not hasattr(pod_folder, 'test_template_bis'): api.content.create( type='ConfigurablePODTemplate', id='test_template_bis', title=_(u'Collection template'), odt_file=NamedBlobFile( data=context.readDataFile(safe_unicode('templates/modèle_collection.odt')), contentType='application/vnd.oasis.opendocument.text', filename=u'modèle_collection.odt', ), container=pod_folder, exclude_from_nav=True, pod_formats=['odt', 'pdf', ], pod_portal_types=['Collection', 'Folder'], style_template=[style_template.UID()], merge_templates=[ { 'template': sub_template.UID(), 'pod_context_name': 'header', 'do_rendering': False, } ], context_variables=[ { 'name': 'details', 'value': '1', } ], ) if not hasattr(pod_folder, 'test_ods_template'): api.content.create( type='ConfigurablePODTemplate', id='test_ods_template', title=_(u'Spreadsheet template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/modele_general.ods'), contentType='application/vnd.oasis.opendocument.spreadsheet', filename=u'modele_general.ods', ), container=pod_folder, exclude_from_nav=True, pod_formats=['ods', 'xls', ], pod_portal_types=['Document'], style_template=[style_template.UID()], ) if not hasattr(pod_folder, 'test_template_possibly_mailed'): api.content.create( type='ConfigurablePODTemplate', id='test_template_possibly_mailed', title=_(u'Possibly mailed template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/possibly_mailed_model.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'possibly_mailed_model.odt', ), container=pod_folder, exclude_from_nav=True, pod_formats=['odt'], pod_portal_types=['Folder'], mailing_loop_template=loop_template.UID(), context_variables=[ { 'name': 'details', 'value': '1', } ], ) if not hasattr(pod_folder, 'test_template_reusable'): api.content.create( type='ConfigurablePODTemplate', id='test_template_reusable', title=_(u'Reusable template'), odt_file=NamedBlobFile( data=context.readDataFile('templates/modele_general.odt'), contentType='application/vnd.oasis.opendocument.text', filename=u'modele_general.odt', ), is_reusable=True, container=pod_folder, pod_formats=['odt'], pod_portal_types=['Folder'], exclude_from_nav=True ) reusable_template = getattr(pod_folder, 'test_template_reusable') if not hasattr(pod_folder, 'test_template_reuse'): api.content.create( type='ConfigurablePODTemplate', id='test_template_reuse', title=_(u'Reuse Test Template'), container=pod_folder, exclude_from_nav=True, pod_formats=['odt', 'pdf', 'doc', 'docx'], pod_portal_types=['Document'], pod_template_to_use=reusable_template.UID() )