diff --git a/docs/hosting/migration.md b/docs/hosting/migration.md index af5c0e87..c93f9b1a 100644 --- a/docs/hosting/migration.md +++ b/docs/hosting/migration.md @@ -31,6 +31,7 @@ Follow the steps below to migrate your farmOS 1.x data to farmOS 2.x: drush migrate:import --group=farm_migrate_taxonomy drush migrate:import --group=farm_migrate_asset drush migrate:import --group=farm_migrate_area + drush migrate:import --group=farm_migrate_quantity drush migrate:import --group=farm_migrate_log 7. Confirm that all the above migrations were successful before running the diff --git a/modules/core/migrate/config/install/migrate_plus.migration.farm_migrate_quantity.yml b/modules/core/migrate/config/install/migrate_plus.migration.farm_migrate_quantity.yml new file mode 100644 index 00000000..2ce77984 --- /dev/null +++ b/modules/core/migrate/config/install/migrate_plus.migration.farm_migrate_quantity.yml @@ -0,0 +1,37 @@ +langcode: en +status: true +dependencies: + enforced: + module: + - farm_migrate +id: farm_migrate_quantity +label: 'Quantities' +migration_group: farm_migrate_quantity +migration_tags: + - 'Drupal 7' + - 'farmOS 1.x' +class: Drupal\migrate\Plugin\Migration +field_plugin_method: null +cck_plugin_method: null +source: + plugin: d7_farm_quantity +destination: + plugin: 'entity:quantity' +process: + measure: measure + value/numerator: value_numerator + value/denominator: value_denominator + units: + plugin: migration_lookup + migration: farm_migrate_taxonomy_unit + source: units + label: label + uid: + plugin: migration_lookup + migration: farm_migrate_user + source: uid +migration_dependencies: + required: + - farm_migrate_user + - farm_migrate_taxonomy_unit + optional: { } diff --git a/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_log.yml b/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_log.yml index 7988cd2d..1044cd15 100644 --- a/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_log.yml +++ b/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_log.yml @@ -136,41 +136,16 @@ shared_configuration: title: title width: width height: height - # Create a quantity for each quantity field collection. quantity: - plugin: sub_process - source: log_quantities - process: - # Save the uid as a pseudo value. - _uid: - plugin: migration_lookup - migration: farm_migrate_user - source: uid - no_stub: true - # Save the units term as a pseudo value. - _units: - plugin: migration_lookup - migration: farm_migrate_taxonomy_unit - source: units - no_stub: true - # Create a quantity and save the ID. - target_id: - plugin: create_quantity - values: - uid: '@_uid' - created: created - changed: changed - units: '@_units' - label: label - measure: measure - value/numerator: value_numerator - value/denominator: value_denominator + plugin: migration_lookup + migration: farm_migrate_quantity + source: field_farm_quantity migration_dependencies: required: - farm_migrate_file - farm_migrate_file_private - farm_migrate_user - farm_migrate_taxonomy_log_category - - farm_migrate_taxonomy_unit + - farm_migrate_quantity optional: - farm_migrate_asset_equipment diff --git a/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_quantity.yml b/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_quantity.yml new file mode 100644 index 00000000..8c53bbec --- /dev/null +++ b/modules/core/migrate/config/install/migrate_plus.migration_group.farm_migrate_quantity.yml @@ -0,0 +1,12 @@ +langcode: en +status: true +dependencies: + enforced: + module: + - farm_migrate +id: farm_migrate_quantity +label: 'farmOS 1.x Quantity Migration' +description: 'Migrates quantity measurements from farmOS 1.x to farmOS 2.x' +source_type: 'farmOS 1.x' +module: null +shared_configuration : null diff --git a/modules/core/migrate/src/Plugin/migrate/source/d7/FarmLog.php b/modules/core/migrate/src/Plugin/migrate/source/d7/FarmLog.php index d1197f51..e5572601 100644 --- a/modules/core/migrate/src/Plugin/migrate/source/d7/FarmLog.php +++ b/modules/core/migrate/src/Plugin/migrate/source/d7/FarmLog.php @@ -141,60 +141,19 @@ class FarmLog extends Log { // Set the "is_movement" property for use in migrations. $row->setSourceProperty('is_movement', $is_movement); - // Get values from the log that will be inherited to created quantities. - $log_uid = $row->getSourceProperty('uid'); - $log_created = $row->getSourceProperty('created'); - $log_changed = $row->getSourceProperty('changed'); - // Get quantity log field value. $quantity_values = $this->getFieldvalues('log', 'field_farm_quantity', $id); // Iterate through quantity field values to collect field collection IDs. - $quantity_field_collection_item_ids = []; + $quantity_ids = []; foreach ($quantity_values as $quantity_value) { if (!empty($quantity_value['value'])) { - $quantity_field_collection_item_ids[] = $quantity_value['value']; + $quantity_ids[] = $quantity_value['value']; } } - // Iterate through the field collection IDs and load values. - $log_quantities = []; - foreach ($quantity_field_collection_item_ids as $item_id) { - $query = $this->select('field_collection_item', 'fci') - ->condition('fci.item_id', $item_id) - ->condition('fci.field_name', 'field_farm_quantity'); - - // Join the quantity label field. - $query->leftJoin('field_data_field_farm_quantity_label', 'fdffql', 'fdffql.entity_id = fci.item_id AND fdffql.deleted = 0'); - $query->addField('fdffql', 'field_farm_quantity_label_value', 'label'); - - // Join the quantity measure field. - $query->leftJoin('field_data_field_farm_quantity_measure', 'fdffqm', 'fdffqm.entity_id = fci.item_id AND fdffqm.deleted = 0'); - $query->addField('fdffqm', 'field_farm_quantity_measure_value', 'measure'); - - // Join the quantity units field. - $query->leftJoin('field_data_field_farm_quantity_units', 'fdffqu', 'fdffqu.entity_id = fci.item_id AND fdffqu.deleted = 0'); - $query->addField('fdffqu', 'field_farm_quantity_units_tid', 'units'); - - // Join the quantity value field. - $query->leftJoin('field_data_field_farm_quantity_value', 'fdffqv', 'fdffqv.entity_id = fci.item_id AND fdffqv.deleted = 0'); - $query->addField('fdffqv', 'field_farm_quantity_value_numerator', 'value_numerator'); - $query->addField('fdffqv', 'field_farm_quantity_value_denominator', 'value_denominator'); - - // Execute the query. - $quantity_data = $query->execute()->fetchAssoc(); - - // Add values to inherit from the log. - $quantity_data['uid'] = $log_uid; - $quantity_data['created'] = $log_created; - $quantity_data['changed'] = $log_changed; - - // Save the quantity to be created later. - $log_quantities[] = $quantity_data; - } - - // Add the quantity logs to the row for future processing. - $row->setSourceProperty('log_quantities', $log_quantities); + // Add the quantity IDs to the row for future processing. + $row->setSourceProperty('log_quantities', $quantity_ids); return parent::prepareRow($row); } diff --git a/modules/core/migrate/src/Plugin/migrate/source/d7/Quantity.php b/modules/core/migrate/src/Plugin/migrate/source/d7/Quantity.php new file mode 100644 index 00000000..c76b7ee4 --- /dev/null +++ b/modules/core/migrate/src/Plugin/migrate/source/d7/Quantity.php @@ -0,0 +1,83 @@ +select('field_collection_item', 'fci'); + $query->addField('fci', 'item_id', 'id'); + + // Join in the measure value. + $query->leftJoin('field_data_field_farm_quantity_measure', 'fdffqm', 'fci.item_id = fdffqm.entity_id'); + $query->addField('fdffqm', 'field_farm_quantity_measure_value', 'measure'); + + // Join in the numerator and denominator values. + $query->leftJoin('field_data_field_farm_quantity_value', 'fdffqv', 'fci.item_id = fdffqv.entity_id'); + $query->addField('fdffqv', 'field_farm_quantity_value_numerator', 'value_numerator'); + $query->addField('fdffqv', 'field_farm_quantity_value_denominator', 'value_denominator'); + + // Join in the units value. + $query->leftJoin('field_data_field_farm_quantity_units', 'fdffqu', 'fci.item_id = fdffqu.entity_id'); + $query->addField('fdffqu', 'field_farm_quantity_units_tid', 'units'); + + // Join in the label value. + $query->leftJoin('field_data_field_farm_quantity_label', 'fdffql', 'fci.item_id = fdffql.entity_id'); + $query->addField('fdffql', 'field_farm_quantity_label_value', 'label'); + + // Join in the log table to get the uid. + $query->leftJoin('field_data_field_farm_quantity', 'fdffq', 'fci.item_id = fdffq.field_farm_quantity_value'); + $query->leftJoin('log', 'l', "fdffq.entity_type = 'log' AND fdffq.entity_id = l.id"); + $query->addField('l', 'uid'); + + // Ensure we don't include archived/deleted fields. + $query->condition('fci.archived', '0'); + $query->condition('fdffq.deleted', '0'); + + // Distinct items only. + $query->distinct(); + + // Order by item_id. + $query->orderBy('fci.item_id'); + + return $query; + } + + /** + * {@inheritdoc} + */ + public function fields() { + $fields = [ + 'id' => $this->t('The quantity item ID.'), + 'measure' => $this->t('The quantity measure.'), + 'value_numerator' => $this->t('The quantity value numerator.'), + 'value_denominator' => $this->t('The quantity value denominator.'), + 'units' => $this->t('The quantity units.'), + 'label' => $this->t('The quantity label.'), + 'uid' => $this->t('The user ID that created the quantity.'), + ]; + return $fields; + } + + /** + * {@inheritdoc} + */ + public function getIds() { + $ids['id']['type'] = 'integer'; + return $ids; + } + +} diff --git a/modules/core/quantity/src/Plugin/migrate/process/CreateQuantity.php b/modules/core/quantity/src/Plugin/migrate/process/CreateQuantity.php deleted file mode 100644 index 43fa58b6..00000000 --- a/modules/core/quantity/src/Plugin/migrate/process/CreateQuantity.php +++ /dev/null @@ -1,78 +0,0 @@ -quantityStorage = $container->get('entity_type.manager')->getStorage('quantity'); - return $instance; - } - - /** - * {@inheritdoc} - */ - public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { - - // Start array of entity values. - $entity_values = []; - - // Gather any static default values for properties/fields. - if (isset($this->configuration['default_values']) && is_array($this->configuration['default_values'])) { - foreach ($this->configuration['default_values'] as $key => $value) { - $entity_values[$key] = $value; - } - } - - // Gather any additional properties/fields. - if (isset($this->configuration['values']) && is_array($this->configuration['values'])) { - foreach ($this->configuration['values'] as $key => $property) { - $source_value = $row->get($property); - NestedArray::setValue($entity_values, explode(Row::PROPERTY_SEPARATOR, $key), $source_value, TRUE); - } - } - - // Create the entity. - $entity = $this->quantityStorage->create($entity_values); - - // Save the entity so it has an ID. - $entity->save(); - - // Return the ID. - return $entity->id(); - } - -}