diff --git a/config/install/migrate_plus.migration.cdesai_basic_pages.yml b/config/install/migrate_plus.migration.cdesai_basic_pages.yml new file mode 100644 index 0000000..290b5da --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_basic_pages.yml @@ -0,0 +1,95 @@ +# Migration configuration for importing basic pages. +id: cdesai_basic_pages +label: Import Basic Pages from CSV +migration_group: CDESAI + +source: + # The custom CSV source plugin will fetch the source path from configs. + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: 'cdesai_migrate_csv' + source_config_key: cdesai_migrate_basic_pages_source + + delimiter: ',' + enclosure: '"' + header_offset: 0 + + ids: + - page + +process: + langcode: en + moderation_state: draft + title: title + + uid: + plugin: default_value + default_value: 1 + + field_content/target_id: + # Skips a row if skip_migration property is set to TRUE. + - + plugin: skip_on_value + equals: true + source: skip_migration + value: 'TRUE' + method: row + - + plugin: migration_lookup + migration: cdesai_paragraph_parents + no_stub: true + source: page + - + plugin: extract + index: + - '0' + field_content/target_revision_id: + - + plugin: migration_lookup + migration: cdesai_paragraph_parents + no_stub: true + source: page + - + plugin: extract + index: + - 1 + + field_category: + # Do not process further if the category value is empty. + - + plugin: skip_on_value + equals: true + source: category + value: '' + method: process + + # The plugin looks up for an exiting term based on the value_key property. + # If no matching term is found, it creates one on the fly. + - + plugin: entity_generate + source: category + entity_type: taxonomy_term + bundle_key: vid + bundle: category + value_key: name + ignore_case: true + + field_legacy_url: legacy_url + + type: + plugin: default_value + default_value: basic_page + +destination: + plugin: 'entity:node' + +# make sure these migration execute before running current migration +migration_dependencies: + required: + - cdesai_paragraphs + - cdesai_paragraph_parents + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_paragraph_parents.yml b/config/install/migrate_plus.migration.cdesai_paragraph_parents.yml new file mode 100644 index 0000000..64b6d2f --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_paragraph_parents.yml @@ -0,0 +1,60 @@ +# Migration configuration for attaching paragraphs to parent paragraphs (row). +id: cdesai_paragraph_parents +label: 'Parent (Row) Paragraphs' +migration_group: CDESAI + +source: + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: cdesai_paragraph_migrate_source + +process: + langcode: en + field_bundles/target_id: + # Skips a row if skip_migration property is set to TRUE. + - + plugin: skip_on_value + equals: true + source: skip_migration + value: 'TRUE' + method: row + # Skips a row if scrapped property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: scrapped + value: 'FALSE' + method: row + - + plugin: migration_lookup + migration: cdesai_paragraphs + no_stub: true + source: page + - + plugin: extract + index: + - '0' + field_bundles/target_revision_id: + - + plugin: migration_lookup + migration: cdesai_paragraphs + no_stub: true + source: page + - + plugin: extract + index: + - '1' + +destination: + plugin: 'entity_reference_revisions:paragraph' + default_bundle: row + +# make sure these migration execute before running current migration +migration_dependencies: + required: + - cdesai_paragraphs + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_paragraphs.yml b/config/install/migrate_plus.migration.cdesai_paragraphs.yml new file mode 100644 index 0000000..91d18e0 --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_paragraphs.yml @@ -0,0 +1,45 @@ +# Migration configuration for importing content paragraphs. +id: cdesai_paragraphs +label: Import Content Paragraphs from Text File Archive +migration_group: CDESAI + +source: + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: cdesai_paragraph_migrate_source + +process: + langcode: en + + field_body/value: + # Skips a row if skip_migration property is set to TRUE. + - + plugin: skip_on_value + equals: true + source: skip_migration + value: 'TRUE' + method: row + # Skips a row if scrapped property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: scrapped + value: 'FALSE' + method: row + # Uses the custom process plugin to extract paragraph contents from a text file. + - + plugin: extract_file_contents + source: content_file + + field_body/format: + plugin: default_value + default_value: rich_text + +destination: + plugin: 'entity_reference_revisions:paragraph' + default_bundle: basic + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_profile_pages.yml b/config/install/migrate_plus.migration.cdesai_profile_pages.yml new file mode 100644 index 0000000..2f06d9f --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_profile_pages.yml @@ -0,0 +1,145 @@ +# Migration configuration for importing profile pages. +id: cdesai_profile_pages +label: Import Profile Pages from CSV +migration_group: CDESAI + +source: + # The custom CSV source plugin will fetch the source path from configs. + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: 'cdesai_migrate_csv' + source_config_key: cdesai_migrate_profile_pages_source + + delimiter: ',' + enclosure: '"' + header_offset: 0 + + ids: + - page + +process: + langcode: en + moderation_state: draft + title: title + field_legacy_url: legacy_url + field_year_birth: year_birth + field_year_death: year_death + + uid: + plugin: default_value + default_value: 1 + + body/value: + # Skips a row if skip_migration property is set to TRUE. + - + plugin: skip_on_value + equals: true + source: skip_migration + value: 'TRUE' + method: row + # Skips a row if scrapped property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: scrapped + value: 'FALSE' + method: row + - + plugin: migration_lookup + migration: cdesai_paragraphs + no_stub: true + source: page + - + plugin: extract_cdesai_migrate_paragraph + + field_body/format: + plugin: default_value + default_value: rich_text + + field_position: + # Do not process further if the position value is empty. + - + plugin: skip_on_value + equals: true + source: position + value: '' + method: process + + # The plugin looks up for an exiting term based on the value_key property. + # If no matching term is found, it creates one on the fly. + - + plugin: entity_generate + source: position + entity_type: taxonomy_term + bundle_key: vid + bundle: position + value_key: name + ignore_case: true + + field_agency: + # Do not process further if the position value is empty. + - + plugin: skip_on_value + equals: true + source: agency + value: '' + method: process + + # The plugin looks up for an exiting term based on the value_key property. + # If no matching term is found, it creates one on the fly. + - + plugin: entity_generate + source: agency + entity_type: taxonomy_term + bundle_key: vid + bundle: agency + value_key: name + ignore_case: true + + field_years_in_office: + - + plugin: skip_on_empty + source: years_in_office + method: process + message: 'Row does not contain years_in_office.' + - + plugin: explode + delimiter: ',' + - + plugin: callback + callable: trim + + field_media/target_id: + # Skips a row if has_images property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: has_images + value: 'FALSE' + method: row + - + plugin: skip_on_empty + method: row + message: 'Cannot import image file with an empty url.' + - + plugin: migration_lookup + migration: cdesai_profile_pages_media_items + source: page + + type: + plugin: default_value + default_value: profile + +destination: + plugin: 'entity:node' + +# make sure these migration execute before running current migration +migration_dependencies: + required: + - cdesai_profile_pages_media_items + - cdesai_basic_pages + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_profile_pages_image_files.yml b/config/install/migrate_plus.migration.cdesai_profile_pages_image_files.yml new file mode 100644 index 0000000..d18b291 --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_profile_pages_image_files.yml @@ -0,0 +1,73 @@ +# Migration configuration for importing image files. +id: cdesai_profile_pages_image_files +label: Import Profile Page Files +migration_group: CDESAI_MEDIA + +source: + # The custom CSV source plugin will fetch the source path from configs. + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: 'cdesai_migrate_csv' + source_config_key: cdesai_migrate_profile_pages_source + + delimiter: ',' + enclosure: '"' + header_offset: 0 + + constants: + DRUPAL_FILE_DIRECTORY: 'public://images/profile/' + + ids: + - page + +process: + uid: + plugin: default_value + default_value: 1 + + pseudo_destination_filename: + # Skips a row if has_images property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: has_images + value: 'FALSE' + method: row + - + plugin: skip_on_empty + method: row + message: 'Cannot import image file with an empty url.' + - + plugin: callback + callable: basename + source: image_url + pseudo_destination_path: + - + plugin: concat + source: + - constants/DRUPAL_FILE_DIRECTORY + - '@pseudo_destination_filename' + uri: + - + plugin: skip_on_empty + method: process + source: image_url + - + plugin: file_copy + source: + - image_url + - '@pseudo_destination_path' + file_exists: rename + move: false + +destination: + plugin: 'entity:file' + + +# make sure these migration execute before running current migration +migration_dependencies: null + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_profile_pages_media_items.yml b/config/install/migrate_plus.migration.cdesai_profile_pages_media_items.yml new file mode 100644 index 0000000..1b7dbb8 --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_profile_pages_media_items.yml @@ -0,0 +1,72 @@ +# Migration configuration for creating media items. +id: cdesai_profile_pages_media_items +label: Import Profile Page Media +migration_group: CDESAI_MEDIA + +source: + # The custom CSV source plugin will fetch the source path from configs. + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: 'cdesai_migrate_csv' + source_config_key: cdesai_migrate_profile_pages_source + + delimiter: ',' + enclosure: '"' + header_offset: 0 + + ids: + - page + +process: + pseudo_destination_filename: + # Skips a row if has_images property is set to FALSE. + - + plugin: skip_on_value + equals: true + source: has_images + value: 'FALSE' + method: row + - + plugin: skip_on_empty + method: row + message: 'Cannot import image file with an empty url.' + - + plugin: callback + callable: basename + source: image_url + + name: '@pseudo_destination_filename' + + field_media_image/target_id: + plugin: migration_lookup + migration: cdesai_profile_pages_image_files + source: page + + field_media_image/alt: title + + thumbnail/target_id: + plugin: migration_lookup + migration: cdesai_profile_pages_image_files + source: page + + thumbnail/alt: title + + uid: + plugin: default_value + default_value: 1 + + langcode: en + +destination: + plugin: 'entity:media' + default_bundle: image + +# make sure these migration execute before running current migration +migration_dependencies: + required: + - cdesai_profile_pages_image_files + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate diff --git a/config/install/migrate_plus.migration.cdesai_redirects.yml b/config/install/migrate_plus.migration.cdesai_redirects.yml new file mode 100644 index 0000000..bada2d2 --- /dev/null +++ b/config/install/migrate_plus.migration.cdesai_redirects.yml @@ -0,0 +1,65 @@ +# Migration configuration for generating redirects from legacy url to Drupal nodes. +id: cdesai_migrate_page_redirects +label: 'Legacy Page Redirects' +migration_group: CDESAI + +source: + # Upload source files at /admin/config/development/cdesai/migrate. + plugin: cdesai_paragraph_migrate_source + +process: + language: + plugin: default_value + source: language + default_value: und + + uid: + plugin: default_value + default_value: 1 + + status_code: + plugin: default_value + default_value: 301 + + redirect_source/path: + # Skips a row if skip_migration property is set to TRUE. + - + plugin: skip_on_value + equals: true + source: skip_migration + value: 'TRUE' + method: row + # Skips a row if legacy_url property is EMPTY. + - + plugin: skip_on_value + equals: true + source: legacy_url + value: '' + method: row + - + plugin: substr + source: legacy_url + start: 1 + + redirect_redirect/title: '' + + redirect_redirect/uri: + # Uses the custom process plugin to extract paragraph contents from a text file. + - + plugin: generate_redirect_uri + source: legacy_url + +destination: + plugin: entity:redirect + +# make sure these migration execute before running current migration +migration_dependencies: + required: + - cdesai_articles + - cdesai_basic_pages + +# use forced module dependency so uninstall/reinstall works properly +dependencies: + enforced: + module: + - cdesai_migrate