Exemplo n.º 1
0
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'])
Exemplo n.º 2
0
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'])
Exemplo n.º 3
0
    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.')
Exemplo n.º 4
0
 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.')
Exemplo n.º 5
0
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()
        )