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'])
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'])
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.')
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)
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']
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)