示例#1
0
 def update_tasks(self):
     # NOT USED !
     # change klass on task
     'collective.task.content.task.Task'
     for brain in self.catalog(portal_type='task'):
         migrate_base_class_to_new_class(
             brain.getObject(),
             old_class_name='collective.task.content.task.Task',
             new_class_name='imio.dms.mail.browser.task.Task')
    def handle_migrate(self, action):
        data, errors = self.extractData()

        if errors:
            return

        changed_base_classes = data.get('changed_base_classes', [])
        if not changed_base_classes:
            return

        migrate_to_folderish = data.get('changed_base_classes', False)
        catalog = getToolByName(self.context, "portal_catalog")
        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                if dxmigration.migrate_base_class_to_new_class(
                        obj, migrate_to_folderish=migrate_to_folderish):
                    migrated.append(obj)
                else:
                    not_migrated.append(obj)

        messages = IStatusMessage(self.request)
        info_message_template = 'There are {0} objects migrated.'
        warn_message_template = 'There are not {0} objects migrated.'
        if migrated:
            msg = info_message_template.format(len(migrated))
            messages.addStatusMessage(msg, type='info')
        if not_migrated:
            msg = warn_message_template.format(len(not_migrated))
            messages.addStatusMessage(msg, type='warn')
        self.request.response.redirect(self.request['ACTUAL_URL'])
示例#3
0
    def handle_migrate(self, action):
        data, errors = self.extractData()

        if errors:
            return

        changed_base_classes = data.get('changed_base_classes', [])
        if not changed_base_classes:
            return

        migrate_to_folderish = data.get('changed_base_classes', False)
        catalog = getToolByName(self.context, 'portal_catalog')
        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                if dxmigration.migrate_base_class_to_new_class(
                        obj, migrate_to_folderish=migrate_to_folderish):
                    migrated.append(obj)
                else:
                    not_migrated.append(obj)

        messages = IStatusMessage(self.request)
        info_message_template = 'There are {0} objects migrated.'
        warn_message_template = 'There are not {0} objects migrated.'
        if migrated:
            msg = info_message_template.format(len(migrated))
            messages.addStatusMessage(msg, type='info')
        if not_migrated:
            msg = warn_message_template.format(len(not_migrated))
            messages.addStatusMessage(msg, type='warn')
        self.request.response.redirect(self.request['ACTUAL_URL'])
示例#4
0
 def _migrateContactOrganizationPersonsKlass(self):
     """klass used by 'organization' portal_type changed, this is only relevant for
        users using beta versions..."""
     logger.info(
         'Migrating klass of collective.contact Organization to PMOrganization...'
     )
     for brain in self.catalog(portal_type='organization'):
         org = brain.getObject()
         if not isinstance(org, PMOrganization):
             logger.info('Migrating organization at {0}'.format('/'.join(
                 org.getPhysicalPath())))
             migrate_base_class_to_new_class(
                 org,
                 old_class_name=
                 'collective.contact.core.content.organization.Organization',
                 new_class_name=
                 'Products.PloneMeeting.content.organization.PMOrganization'
             )
     logger.info('Done.')
示例#5
0
    def __call__(self):
        log = self.mklog()
        real = timer()

        self.install_folderish_types()
        log("collective.folderishtypes installed.")

        changed_base_classes = [
            "plone.app.contenttypes.content.Document",
            "plone.app.contenttypes.content.NewsItem",
            "plone.app.contenttypes.content.Event",
        ]

        catalog = api.portal.get_tool("portal_catalog")
        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                if dxmigration.migrate_base_class_to_new_class(
                    obj, migrate_to_folderish=True
                ):
                    migrated.append(obj)
                else:
                    not_migrated.append(obj)

        if migrated:
            log("{0} objects have been migrated.".format(len(migrated)))
        if not_migrated:
            log(
                "{0} objects have NOT been migrated.".format(len(not_migrated)),
                level="warn",
            )

        catalog.clearFindAndRebuild()
        log("Portal catalog has been rebuilt.")

        msg = "Processed folderish types migration in {0}.".format(real.next())
        log(msg)
示例#6
0
    def migrate_projectspace_in_pstprojectspace(self):
        plan_values = [
            {
                'label': u"Agenda 21 local",
                'key': "agenda-21-local"
            },
            {
                'label': u"PCA Plan communal d'Aménagement",
                'key': "pca-plan-communal-d-amenagement"
            },
            {
                'label': u"Plan communal d'Urgence",
                'key': "plan-communal-d-urgence"
            },
            {
                'label': u"Plan communal de développement de la nature PCDN",
                'key': "plan-communal-de-developpement-de-la-nature-pcdn"
            },
            {
                'label': u"Plan communal de développement rural (PCDR)",
                'key': "plan-communal-de-developpement-rural-pcdn"
            },
            {
                'label': u"Plan d'ancrage communal",
                'key': "plan-d-ancrage-communal"
            },
            {
                'label': u"Plan de cohésion social (PCS)",
                'key': "plan-de-cohesion-social-pcs"
            },
            {
                'label': u"Plan de formation du personnel",
                'key': "plan-de-formation-du-personnel"
            },
            {
                'label': u"Plan de gestion",
                'key': "plan-de-gestion"
            },
            {
                'label': u"Plan de mobilité",
                'key': "plan-de-mobilite"
            },
            {
                'label': u"Plan global de prévention",
                'key': "plan-global-de-prevention"
            },
            {
                'label': u"Plan zonal de sécurité",
                'key': "plan-zonal-de-securite"
            },
            {
                'label': u"Schémas de développement commercial",
                'key': "schemas-de-developpement-commercial"
            },
        ]

        so_bdg_states = ['ongoing', 'achieved']
        oo_bdg_states = ['ongoing', 'achieved']
        a_bdg_states = ['ongoing', 'terminated', 'to_be_scheduled']

        strategicobjective_columns = [
            u'select_row', u'pretty_link', u'review_state', u'categories',
            u'ModificationDate', u'history_actions'
        ]
        operationalobjective_columns = [
            u'select_row', u'pretty_link', u'parents', u'review_state',
            u'manager', u'planned_end_date', u'priority', u'categories',
            u'sdgs', u'ModificationDate', u'history_actions'
        ]
        pstaction_columns = [
            u'select_row', u'pretty_link', u'parents', u'review_state',
            u'manager', u'responsible', u'planned_begin_date',
            u'planned_end_date', u'effective_begin_date',
            u'effective_end_date', u'progress', u'health_indicator',
            u'categories', u'sdgs', u'ModificationDate', u'history_actions'
        ]
        tasks_columns = [
            u'select_row', u'pretty_link', u'parents', u'review_state',
            u'assigned_group', u'assigned_user', u'due_date', u'CreationDate',
            u'ModificationDate', u'history_actions'
        ]

        registry = getUtility(IRegistry)
        prj_fld_record = registry.get('imio.project.settings.project_fields')
        so_record = registry.get(
            'imio.project.settings.strategicobjective_fields')
        oo_record = registry.get(
            'imio.project.settings.operationalobjective_fields')
        a_record = registry.get('imio.project.settings.pstaction_fields')
        sa_record = registry.get('imio.project.settings.pstsubaction_fields')
        if so_record and oo_record and a_record and sa_record:
            add_plan_to_lists_fields(so_record, oo_record, a_record)
            self.runProfileSteps('imio.project.pst',
                                 steps=['typeinfo'],
                                 profile='default',
                                 run_dependencies=False)
            projectspace_brains = self.catalog(
                object_provides=IProjectSpace.__identifier__)
            if projectspace_brains[0].getObject(
            ).__class__.__name__ == 'ProjectSpace':
                for projectspace_brain in projectspace_brains:
                    projectspace_obj = projectspace_brain.getObject()
                    migrate_base_class_to_new_class(
                        projectspace_obj,
                        new_class_name=
                        'imio.project.pst.content.pstprojectspace.PSTProjectSpace'
                    )
                    # projectspace is now pstprojectspace
                    projectspace_obj.portal_type = 'pstprojectspace'
                    projectspace_obj.project_fields = migrate_pst_fields(
                        prj_fld_record)
                    projectspace_obj.strategicobjective_fields = migrate_pst_fields(
                        so_record)
                    projectspace_obj.operationalobjective_fields = migrate_pst_fields(
                        oo_record)
                    projectspace_obj.pstaction_fields = migrate_pst_fields(
                        a_record)
                    projectspace_obj.pstsubaction_fields = migrate_pst_fields(
                        sa_record)
                    if not getattr(projectspace_obj, 'plan_values'):
                        setattr(projectspace_obj, 'plan_values', plan_values)
                    if not getattr(projectspace_obj,
                                   'strategicobjective_budget_states'):
                        setattr(projectspace_obj,
                                'strategicobjective_budget_states',
                                so_bdg_states)
                    if not getattr(projectspace_obj,
                                   'operationalobjective_budget_states'):
                        setattr(projectspace_obj,
                                'operationalobjective_budget_states',
                                oo_bdg_states)
                    if not getattr(projectspace_obj,
                                   'pstaction_budget_states'):
                        setattr(projectspace_obj, 'pstaction_budget_states',
                                a_bdg_states)
                    if not getattr(projectspace_obj,
                                   'pstsubaction_budget_states'):
                        setattr(projectspace_obj, 'pstsubaction_budget_states',
                                a_bdg_states)
                    if not getattr(projectspace_obj,
                                   'strategicobjectives_columns'):
                        setattr(projectspace_obj,
                                'strategicobjectives_columns',
                                strategicobjective_columns)
                    if not getattr(projectspace_obj,
                                   'operationalobjectives_columns'):
                        setattr(projectspace_obj,
                                'operationalobjectives_columns',
                                operationalobjective_columns)
                    if not getattr(projectspace_obj, 'pstactions_columns'):
                        setattr(projectspace_obj, 'pstactions_columns',
                                pstaction_columns)
                    if not getattr(projectspace_obj, 'tasks_columns'):
                        setattr(projectspace_obj, 'tasks_columns',
                                tasks_columns)
                    add_fti_configuration('pstprojectspace', {
                        'internally_published': {
                            'pst_readers': {
                                'roles': ['Reader']
                            }
                        }
                    },
                                          keyname='static_config',
                                          force=False)

                del registry.records['imio.project.settings.project_fields']
                del registry.records[
                    'imio.project.settings.strategicobjective_fields']
                del registry.records[
                    'imio.project.settings.operationalobjective_fields']
                del registry.records['imio.project.settings.pstaction_fields']
                del registry.records[
                    'imio.project.settings.pstsubaction_fields']
示例#7
0
    def __call__(self):
        log = self.mklog()
        real = timer()

        self.install_folderish_types()
        log("collective.folderishtypes installed.")

        catalog = api.portal.get_tool("portal_catalog")
        catalog.clearFindAndRebuild()
        log("Portal catalog has been rebuilt.")

        changed_base_classes = [
            "plone.app.contenttypes.content.Document",
            "plone.app.contenttypes.content.NewsItem",
            "plone.app.contenttypes.content.Event",
        ]

        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                prevented_delete = prevented_move = False
                obj_id = obj.getId()
                parent = aq_parent(aq_inner(obj))
                if IPreventDelete.providedBy(obj):
                    prevented_delete = True
                    noLongerProvides(obj, IPreventDelete)
                if IPreventMoveOrRename.providedBy(obj):
                    prevented_move = True
                    noLongerProvides(obj, IPreventMoveOrRename)
                position_in_parent = None
                ordered = IOrderedContainer(parent, None)
                if ordered is not None:
                    position_in_parent = ordered.getObjectPosition(obj_id)
                if dxmigration.migrate_base_class_to_new_class(
                        obj, migrate_to_folderish=True):
                    migrated.append(obj)
                    if position_in_parent is not None:
                        ordered.moveObject(obj_id, position_in_parent)
                    if prevented_delete:
                        alsoProvides(obj, IPreventDelete)
                    if prevented_move:
                        alsoProvides(obj, IPreventMoveOrRename)
                else:
                    not_migrated.append(obj)

        if migrated:
            log("{0} objects have been migrated.".format(len(migrated)))
        if not_migrated:
            log(
                "{0} objects have NOT been migrated.".format(
                    len(not_migrated)),
                level="warn",
            )

        catalog.clearFindAndRebuild()
        log("Portal catalog has been rebuilt.")

        msg = "Processed folderish types migration in {0}.".format(real.next())
        log(msg)