Issue #3382616: Remove v1 migrations from farmOS 3.x
This commit is contained in:
parent
e417ee9ad6
commit
2336e172a3
|
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- [Issue #3382616: Remove v1 migrations from farmOS 3.x](https://www.drupal.org/project/farm/issues/3382616)
|
||||
|
||||
## [2.2.2] 2023-10-25
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
# Migrating from farmOS 1.x to 2.x
|
||||
# Migrating from farmOS v1
|
||||
|
||||
The upgrade path from farmOS 1.x to 2.x is performed via a database migration.
|
||||
**Note: Migrating directly from farmOS v1 to v3+ is not supported. Migrate from
|
||||
v1 to v2 first, then *update* to future versions using the normal
|
||||
[update process](update).**
|
||||
|
||||
The upgrade path from farmOS v1 to v2 is performed via a database migration.
|
||||
farmOS 2.x includes a **farmOS Migrate** module that leverage's Drupal core's
|
||||
[Migrate API](https://drupal.org/docs/drupal-apis/migrate-api) to provide
|
||||
migrations for each asset type, log type, etc. These migrations are defined in
|
||||
|
|
|
@ -64,7 +64,7 @@ nav:
|
|||
- Composer: hosting/composer.md
|
||||
- Email: hosting/email.md
|
||||
- Translations: hosting/localization.md
|
||||
- 1.x Migration: hosting/migration.md
|
||||
- v1 Migration: hosting/migration.md
|
||||
theme:
|
||||
name: material
|
||||
palette:
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"extra": {
|
||||
"drush": {
|
||||
"services": {
|
||||
"drush.services.yml": "^10"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- asset
|
||||
- farm_migrate
|
||||
id: farm_migrate_area_field_parent
|
||||
label: 'Area parent references'
|
||||
migration_group: farm_migrate_asset_parent
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_area
|
||||
area_type: any
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Look up assets created by type-specific migrations.
|
||||
id:
|
||||
-
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_area
|
||||
source: tid
|
||||
no_stub: true
|
||||
# If no asset was found in previous migrations, skip the row.
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: row
|
||||
parent:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_area
|
||||
source: parent
|
||||
no_stub: true
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,44 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- asset
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_field_parent
|
||||
label: 'Asset parent references'
|
||||
migration_group: farm_migrate_asset_parent
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_asset
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Look up assets created by type-specific migrations.
|
||||
id:
|
||||
-
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: id
|
||||
no_stub: true
|
||||
# If no asset was found in previous migrations, skip the row.
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: row
|
||||
parent:
|
||||
plugin: sub_process
|
||||
source: field_farm_parent
|
||||
process:
|
||||
target_id:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: target_id
|
||||
no_stub: true
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,64 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_file
|
||||
label: 'Public files'
|
||||
migration_group: farm_migrate_file
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_file
|
||||
scheme: public
|
||||
constants:
|
||||
source_base_path: '/'
|
||||
destination:
|
||||
plugin: 'entity:file'
|
||||
process:
|
||||
fid:
|
||||
plugin: get
|
||||
source: fid
|
||||
filename:
|
||||
plugin: get
|
||||
source: filename
|
||||
source_full_path:
|
||||
plugin: str_replace
|
||||
source: uri
|
||||
search: 'public://'
|
||||
replace: 'public://migrate/'
|
||||
uri:
|
||||
plugin: file_copy
|
||||
source:
|
||||
- '@source_full_path'
|
||||
- uri
|
||||
filemime:
|
||||
plugin: get
|
||||
source: filemime
|
||||
status:
|
||||
plugin: get
|
||||
source: status
|
||||
created:
|
||||
plugin: get
|
||||
source: timestamp
|
||||
changed:
|
||||
plugin: get
|
||||
source: timestamp
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_user
|
||||
optional: { }
|
|
@ -1,64 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_file_private
|
||||
label: 'Private files'
|
||||
migration_group: farm_migrate_file
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_file
|
||||
scheme: private
|
||||
constants:
|
||||
source_base_path: '/'
|
||||
destination:
|
||||
plugin: 'entity:file'
|
||||
process:
|
||||
fid:
|
||||
plugin: get
|
||||
source: fid
|
||||
filename:
|
||||
plugin: get
|
||||
source: filename
|
||||
source_full_path:
|
||||
plugin: str_replace
|
||||
source: uri
|
||||
search: 'private://'
|
||||
replace: 'private://migrate/'
|
||||
uri:
|
||||
plugin: file_copy
|
||||
source:
|
||||
- '@source_full_path'
|
||||
- uri
|
||||
filemime:
|
||||
plugin: get
|
||||
source: filemime
|
||||
status:
|
||||
plugin: get
|
||||
source: status
|
||||
created:
|
||||
plugin: get
|
||||
source: timestamp
|
||||
changed:
|
||||
plugin: get
|
||||
source: timestamp
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_user
|
||||
optional: { }
|
|
@ -1,28 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_quantity_system
|
||||
label: 'Quantity system of measurement'
|
||||
migration_group: farm_migrate_config
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: variable
|
||||
variables:
|
||||
- farm_quantity_unit_system
|
||||
source_module: farm_quantity
|
||||
destination:
|
||||
plugin: config
|
||||
config_name: quantity.settings
|
||||
process:
|
||||
system_of_measurement: farm_quantity_unit_system
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,38 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_system_date
|
||||
label: 'System date configuration'
|
||||
migration_group: farm_migrate_config
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: variable
|
||||
variables:
|
||||
- site_default_country
|
||||
- date_first_day
|
||||
- date_default_timezone
|
||||
- configurable_timezones
|
||||
- empty_timezone_message
|
||||
- user_default_timezone
|
||||
source_module: system
|
||||
destination:
|
||||
plugin: config
|
||||
config_name: system.date
|
||||
process:
|
||||
'country/default': site_default_country
|
||||
first_day: date_first_day
|
||||
'timezone/default': date_default_timezone
|
||||
'timezone/user/configurable': configurable_timezones
|
||||
'timezone/user/warn': empty_timezone_message
|
||||
'timezone/user/default': user_default_timezone
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,71 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_user
|
||||
label: 'User accounts'
|
||||
migration_group: farm_migrate_user
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\user\Plugin\migrate\User
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_user
|
||||
destination:
|
||||
plugin: 'entity:user'
|
||||
process:
|
||||
uid:
|
||||
plugin: get
|
||||
source: uid
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
pass:
|
||||
plugin: get
|
||||
source: pass
|
||||
mail:
|
||||
plugin: get
|
||||
source: mail
|
||||
created:
|
||||
plugin: get
|
||||
source: created
|
||||
access:
|
||||
plugin: get
|
||||
source: access
|
||||
login:
|
||||
plugin: get
|
||||
source: login
|
||||
status:
|
||||
plugin: get
|
||||
source: status
|
||||
timezone:
|
||||
plugin: get
|
||||
source: timezone
|
||||
langcode:
|
||||
plugin: user_langcode
|
||||
source: entity_language
|
||||
fallback_to_site_default: false
|
||||
preferred_langcode:
|
||||
plugin: user_langcode
|
||||
source: language
|
||||
fallback_to_site_default: true
|
||||
preferred_admin_langcode:
|
||||
plugin: user_langcode
|
||||
source: language
|
||||
fallback_to_site_default: true
|
||||
init:
|
||||
plugin: get
|
||||
source: init
|
||||
roles:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_role
|
||||
source: roles
|
||||
no_stub: true
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional:
|
||||
- farm_migrate_system_date
|
|
@ -1,83 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_area
|
||||
label: 'farmOS 1.x Area Migration'
|
||||
description: 'Migrates areas from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
destination:
|
||||
validate: true
|
||||
process:
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
uid:
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
status:
|
||||
plugin: default_value
|
||||
default_value: active
|
||||
notes:
|
||||
plugin: sub_process
|
||||
source: description
|
||||
process:
|
||||
value:
|
||||
plugin: get
|
||||
source: value
|
||||
format:
|
||||
plugin: static_map
|
||||
source: format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
intrinsic_geometry:
|
||||
plugin: geofield_d7d8
|
||||
source: field_farm_geofield
|
||||
is_location:
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
is_fixed:
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
flag:
|
||||
plugin: get
|
||||
source: field_farm_flags
|
||||
file:
|
||||
plugin: sub_process
|
||||
source: field_farm_files
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
display: display
|
||||
description: description
|
||||
image:
|
||||
plugin: sub_process
|
||||
source: field_farm_images
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
alt: alt
|
||||
title: title
|
||||
width: width
|
||||
height: height
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
optional: { }
|
|
@ -1,106 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset
|
||||
label: 'farmOS 1.x Asset Migration'
|
||||
description: 'Migrates assets from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
destination:
|
||||
validate: true
|
||||
process:
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
created:
|
||||
plugin: get
|
||||
source: created
|
||||
changed:
|
||||
plugin: get
|
||||
source: changed
|
||||
# Map the old archived value to both an archived timestamp and a status.
|
||||
# If the old value is 0, status is active. Otherwise, it is archived.
|
||||
archived:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: archived
|
||||
-
|
||||
plugin: get
|
||||
source: archived
|
||||
status:
|
||||
plugin: static_map
|
||||
source: archived
|
||||
map:
|
||||
0: active
|
||||
default_value: archived
|
||||
notes:
|
||||
plugin: sub_process
|
||||
source: field_farm_description
|
||||
process:
|
||||
value:
|
||||
plugin: get
|
||||
source: value
|
||||
format:
|
||||
plugin: static_map
|
||||
source: format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
data:
|
||||
plugin: get
|
||||
source: field_farm_data
|
||||
flag:
|
||||
plugin: get
|
||||
source: field_farm_flags
|
||||
file:
|
||||
plugin: sub_process
|
||||
source: field_farm_files
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
display: display
|
||||
description: description
|
||||
image:
|
||||
plugin: sub_process
|
||||
source: field_farm_images
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
alt: alt
|
||||
title: title
|
||||
width: width
|
||||
height: height
|
||||
quick:
|
||||
plugin: get
|
||||
source: quick
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
- farm_migrate_user
|
||||
optional: { }
|
|
@ -1,12 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_parent
|
||||
label: 'farmOS 1.x Asset Parents'
|
||||
description: 'Migrates asset parent references from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration: null
|
|
@ -1,12 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_config
|
||||
label: 'farmOS 1.x Config Migration'
|
||||
description: 'Migrate config from farmOS 1.x to 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration: null
|
|
@ -1,12 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_file
|
||||
label: 'farmOS 1.x File Migration'
|
||||
description: 'Migrates files from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration: null
|
|
@ -1,182 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_log
|
||||
label: 'farmOS 1.x Log Migration'
|
||||
description: 'Migrates logs from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
destination:
|
||||
validate: true
|
||||
process:
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
timestamp:
|
||||
plugin: get
|
||||
source: timestamp
|
||||
created:
|
||||
plugin: get
|
||||
source: created
|
||||
changed:
|
||||
plugin: get
|
||||
source: changed
|
||||
status:
|
||||
plugin: static_map
|
||||
source: done
|
||||
map:
|
||||
0: pending
|
||||
1: done
|
||||
notes:
|
||||
plugin: sub_process
|
||||
source: field_farm_notes
|
||||
process:
|
||||
value:
|
||||
plugin: get
|
||||
source: value
|
||||
format:
|
||||
plugin: static_map
|
||||
source: format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
data:
|
||||
plugin: get
|
||||
source: field_farm_data
|
||||
asset:
|
||||
plugin: sub_process
|
||||
source: field_farm_asset
|
||||
process:
|
||||
target_id:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: target_id
|
||||
location:
|
||||
plugin: sub_process
|
||||
source: field_farm_area
|
||||
process:
|
||||
target_id:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_area
|
||||
source: tid
|
||||
geometry:
|
||||
plugin: geofield_d7d8
|
||||
source: field_farm_geofield
|
||||
is_movement:
|
||||
plugin: get
|
||||
source: is_movement
|
||||
# Equipment used field.
|
||||
# This is added by the farm_equipment_field module in farmOS 1.x, and the
|
||||
# farm_equipment module in farmOS 2.x.
|
||||
equipment:
|
||||
plugin: sub_process
|
||||
source: field_farm_equipment
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_asset_equipment
|
||||
source: target_id
|
||||
# Group reference field.
|
||||
# This is added by the farm_group module in farmOS, which is required in
|
||||
# 1.x and optional in 2.x.
|
||||
group:
|
||||
plugin: sub_process
|
||||
source: log_groups
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_asset_group
|
||||
source: target_id
|
||||
is_group_assignment:
|
||||
plugin: get
|
||||
source: is_group_assignment
|
||||
category:
|
||||
plugin: sub_process
|
||||
source: field_farm_log_category
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_log_category
|
||||
source: tid
|
||||
flag:
|
||||
plugin: get
|
||||
source: field_farm_flags
|
||||
owner:
|
||||
plugin: sub_process
|
||||
source: field_farm_log_owner
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: target_id
|
||||
no_stub: true
|
||||
file:
|
||||
plugin: sub_process
|
||||
source: field_farm_files
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
display: display
|
||||
description: description
|
||||
image:
|
||||
plugin: sub_process
|
||||
source: field_farm_images
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
alt: alt
|
||||
title: title
|
||||
width: width
|
||||
height: height
|
||||
# Save quantities as a pseudo field and let log types migrate themselves.
|
||||
_log_quantities:
|
||||
-
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_quantity
|
||||
source: log_quantities
|
||||
no_stub: true
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
-
|
||||
plugin: sub_process
|
||||
process:
|
||||
target_id: '0'
|
||||
target_revision_id: '1'
|
||||
quick:
|
||||
plugin: get
|
||||
source: quick
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
- farm_migrate_user
|
||||
- farm_migrate_taxonomy_log_category
|
||||
- farm_migrate_quantity_standard
|
||||
optional:
|
||||
- farm_migrate_asset_equipment
|
||||
- farm_migrate_asset_group
|
|
@ -1,88 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_plan
|
||||
label: 'farmOS 1.x Plan Migration'
|
||||
description: 'Migrates plans from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
destination:
|
||||
validate: true
|
||||
process:
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
created:
|
||||
plugin: get
|
||||
source: created
|
||||
changed:
|
||||
plugin: get
|
||||
source: changed
|
||||
status:
|
||||
plugin: static_map
|
||||
source: archived
|
||||
map:
|
||||
0: archived
|
||||
1: active
|
||||
default_value: archived
|
||||
notes:
|
||||
plugin: sub_process
|
||||
source: field_farm_notes
|
||||
process:
|
||||
value:
|
||||
plugin: get
|
||||
source: value
|
||||
format:
|
||||
plugin: static_map
|
||||
source: format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
file:
|
||||
plugin: sub_process
|
||||
source: field_farm_files
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
display: display
|
||||
description: description
|
||||
image:
|
||||
plugin: sub_process
|
||||
source: field_farm_images
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
alt: alt
|
||||
title: title
|
||||
width: width
|
||||
height: height
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
- farm_migrate_user
|
||||
optional: { }
|
|
@ -1,12 +0,0 @@
|
|||
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
|
|
@ -1,32 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_role
|
||||
label: 'farmOS 1.x Role Migration'
|
||||
description: 'Migrates roles from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
process:
|
||||
# This role field is a placeholder, and should be replaced in the specific
|
||||
# migration process configuration. This makes it easier for custom/contrib
|
||||
# modules to provide role migrations. See the farm_migrate_user migration
|
||||
# for an example that can be copied.
|
||||
role:
|
||||
- plugin: default_value
|
||||
default_value: false
|
||||
id:
|
||||
-
|
||||
plugin: get
|
||||
source: '@role'
|
||||
-
|
||||
plugin: entity_lookup
|
||||
value_key: id
|
||||
entity_type: user_role
|
||||
ignore_case: true
|
||||
-
|
||||
plugin: skip_map_on_empty
|
||||
method: row
|
|
@ -1,12 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_sensor_data
|
||||
label: 'farmOS 1.x Sensor Data Migration'
|
||||
description: 'Migrates sensor data from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration: null
|
|
@ -1,37 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_taxonomy
|
||||
label: 'farmOS 1.x Taxonomy Migration'
|
||||
description: 'Migrates taxonomy terms from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration:
|
||||
destination:
|
||||
validate: true
|
||||
process:
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
description/value:
|
||||
plugin: get
|
||||
source: description
|
||||
description/format:
|
||||
plugin: static_map
|
||||
source: format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
weight:
|
||||
plugin: get
|
||||
source: weight
|
||||
langcode:
|
||||
plugin: get
|
||||
source: language
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,12 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
id: farm_migrate_user
|
||||
label: 'farmOS 1.x User Migration'
|
||||
description: 'Migrates users from farmOS 1.x to farmOS 2.x'
|
||||
source_type: 'farmOS 1.x'
|
||||
module: null
|
||||
shared_configuration: null
|
|
@ -1,39 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_land
|
||||
- farm_land_types
|
||||
id: farm_migrate_area_land
|
||||
label: 'Land assets (from areas)'
|
||||
migration_group: farm_migrate_area
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_area
|
||||
area_type:
|
||||
- property
|
||||
- field
|
||||
- bed
|
||||
- paddock
|
||||
- landmark
|
||||
- other
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: land
|
||||
land_type:
|
||||
plugin: get
|
||||
source: field_farm_area_type
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,32 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_land
|
||||
id: farm_migrate_area_none
|
||||
label: 'Areas of unknown type'
|
||||
migration_group: farm_migrate_area
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_area
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: land
|
||||
# Hard-code the land type to "other".
|
||||
land_type:
|
||||
plugin: default_value
|
||||
default_value: other
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,35 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_structure
|
||||
- farm_structure_types
|
||||
id: farm_migrate_area_structure
|
||||
label: 'Structure assets (from areas)'
|
||||
migration_group: farm_migrate_area
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_area
|
||||
area_type:
|
||||
- building
|
||||
- greenhouse
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: structure
|
||||
structure_type:
|
||||
plugin: get
|
||||
source: field_farm_area_type
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,30 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_water
|
||||
id: farm_migrate_area_water
|
||||
label: 'Water assets (from areas)'
|
||||
migration_group: farm_migrate_area
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_area
|
||||
area_type:
|
||||
- water
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: water
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,81 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_animal
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_animal
|
||||
label: 'Assets (Animals)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_animal_asset
|
||||
bundle: animal
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: animal
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Animal specific fields.
|
||||
animal_type:
|
||||
plugin: sub_process
|
||||
source: field_farm_animal_type
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_animal_type
|
||||
source: tid
|
||||
birthdate:
|
||||
plugin: get
|
||||
source: field_farm_date
|
||||
nickname:
|
||||
plugin: get
|
||||
source: field_farm_animal_nicknames
|
||||
sex:
|
||||
plugin: get
|
||||
source: field_farm_animal_sex
|
||||
is_castrated:
|
||||
plugin: get
|
||||
source: field_farm_animal_castrated
|
||||
id_tag:
|
||||
plugin: sub_process
|
||||
source: animal_tags
|
||||
process:
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
type:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
source: type
|
||||
method: process
|
||||
-
|
||||
plugin: static_map
|
||||
source: type
|
||||
map:
|
||||
Brand: brand
|
||||
Ear tag: ear_tag
|
||||
Tattoo: tattoo
|
||||
Leg band: leg_band
|
||||
Chip: eid
|
||||
Other: other
|
||||
default_value: other
|
||||
location:
|
||||
plugin: get
|
||||
source: location
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_taxonomy_animal_type
|
||||
optional: { }
|
|
@ -1,33 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_compost
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_compost
|
||||
label: 'Assets (Compost)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_asset
|
||||
bundle: compost
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: compost
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,43 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_equipment
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_equipment
|
||||
label: 'Assets (Equipment)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_asset
|
||||
bundle: equipment
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: equipment
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Equipment specific fields.
|
||||
manufacturer:
|
||||
plugin: get
|
||||
source: field_farm_manufacturer
|
||||
model:
|
||||
plugin: get
|
||||
source: field_farm_model
|
||||
serial_number:
|
||||
plugin: get
|
||||
source: field_farm_serial_number
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,33 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_group
|
||||
- farm_migrate
|
||||
id: farm_migrate_asset_group
|
||||
label: 'Assets (Groups)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_asset
|
||||
bundle: group
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: group
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,52 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_plant
|
||||
id: farm_migrate_asset_plant
|
||||
label: 'Assets (Plants)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_asset
|
||||
bundle: planting
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: plant
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Plant specific fields.
|
||||
plant_type:
|
||||
plugin: sub_process
|
||||
source: field_farm_crop
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_plant_type
|
||||
source: tid
|
||||
season:
|
||||
plugin: sub_process
|
||||
source: field_farm_season
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_season
|
||||
source: tid
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_taxonomy_plant_type
|
||||
- farm_migrate_taxonomy_season
|
||||
optional: { }
|
|
@ -1,33 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_sensor
|
||||
id: farm_migrate_asset_sensor
|
||||
label: 'Assets (Sensors)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_sensor_asset
|
||||
sensor_type: ''
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: sensor
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,48 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_sensor
|
||||
- farm_sensor_listener
|
||||
id: farm_migrate_asset_sensor_listener
|
||||
label: 'Assets (Listener sensors)'
|
||||
migration_group: farm_migrate_asset
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_sensor_asset
|
||||
sensor_type: 'listener'
|
||||
destination:
|
||||
plugin: 'entity:asset'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: sensor
|
||||
# Maintain the asset ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Extract the private_key from sensor settings.
|
||||
private_key:
|
||||
plugin: extract
|
||||
source: sensor_settings
|
||||
default: ''
|
||||
index:
|
||||
- private_key
|
||||
# Extract the public_key from sensor settings.
|
||||
public_key:
|
||||
plugin: extract
|
||||
source: sensor_settings
|
||||
default: ''
|
||||
index:
|
||||
- public_key
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,61 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_inventory
|
||||
id: farm_migrate_inventory
|
||||
label: 'Inventories'
|
||||
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_inventory
|
||||
destination:
|
||||
plugin: 'entity_reference_revisions:quantity'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: standard
|
||||
# Hard-code the measure.
|
||||
measure:
|
||||
plugin: default_value
|
||||
default_value: count
|
||||
# The inventory value should always be positive because we only
|
||||
# migrate increment or decrement adjustments.
|
||||
value/numerator:
|
||||
plugin: callback
|
||||
callable: abs
|
||||
source: value_numerator
|
||||
value/denominator: value_denominator
|
||||
uid:
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_user
|
||||
source: uid
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
inventory_asset:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: inventory_asset
|
||||
inventory_adjustment:
|
||||
plugin: static_map
|
||||
source: inventory_value_sign
|
||||
map:
|
||||
-1: decrement
|
||||
0: increment
|
||||
1: increment
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_user
|
||||
- farm_migrate_taxonomy_unit
|
||||
optional: { }
|
|
@ -1,37 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_activity
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_activity
|
||||
label: 'Logs (Activities)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_activity
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: activity
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_birth
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_birth
|
||||
label: 'Logs (Birth)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_birth
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: birth
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
# Birth specific fields.
|
||||
mother:
|
||||
plugin: sub_process
|
||||
source: field_farm_mother
|
||||
process:
|
||||
target_id:
|
||||
plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: target_id
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,41 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_harvest
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_harvest
|
||||
label: 'Logs (Harvests)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_harvest
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: harvest
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
# Harvest specific fields.
|
||||
lot_number:
|
||||
plugin: get
|
||||
source: field_farm_lot_number
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,74 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_input
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_input
|
||||
label: 'Logs (Inputs)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_input
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: input
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Input specific fields.
|
||||
lot_number:
|
||||
plugin: get
|
||||
source: field_farm_lot_number
|
||||
method:
|
||||
plugin: get
|
||||
source: field_farm_input_method
|
||||
purchase_date:
|
||||
plugin: get
|
||||
source: field_farm_date_purchase
|
||||
source:
|
||||
plugin: get
|
||||
source: field_farm_input_source
|
||||
# Save the material_type in a pseudo field.
|
||||
_material_type:
|
||||
plugin: sub_process
|
||||
source: field_farm_material
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_material_type
|
||||
source: tid
|
||||
# Migrate the field_farm_material term reference into a material quantity.
|
||||
_material_quantities:
|
||||
# Build the quantity.
|
||||
plugin: create_quantity
|
||||
source: '@_material_type'
|
||||
default_values:
|
||||
type: 'material'
|
||||
values:
|
||||
uid: '@uid'
|
||||
created: '@created'
|
||||
changed: '@changed'
|
||||
material_type: target_id
|
||||
# Merge the material quantity with other log quantities.
|
||||
quantity:
|
||||
plugin: merge
|
||||
source:
|
||||
- '@_log_quantities'
|
||||
- '@_material_quantities'
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_taxonomy_material_type
|
||||
optional: { }
|
|
@ -1,71 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_lab_test
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_lab_test
|
||||
label: 'Logs (Lab tests)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle:
|
||||
- farm_soil_test
|
||||
- farm_water_test
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: lab_test
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
# Lab test specific fields.
|
||||
lab:
|
||||
-
|
||||
plugin: get_lab
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
-
|
||||
plugin: entity_generate
|
||||
value_key: name
|
||||
entity_type: taxonomy_term
|
||||
bundle_key: vid
|
||||
bundle: lab
|
||||
lab_test_type:
|
||||
plugin: static_map
|
||||
source: type
|
||||
map:
|
||||
farm_soil_test: soil
|
||||
farm_water_test: water
|
||||
# Concatenate the 1.x "Soil names" field summary into Notes.
|
||||
notes/0/value:
|
||||
plugin: concat
|
||||
source:
|
||||
- field_farm_notes/0/value
|
||||
- soil_name_summary
|
||||
notes/0/format:
|
||||
plugin: static_map
|
||||
source: field_farm_notes/0/format
|
||||
map:
|
||||
farm_format: default
|
||||
plain_text: plain_text
|
||||
default_value: default
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,37 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_maintenance
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_maintenance
|
||||
label: 'Logs (Maintenance)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_maintenance
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: maintenance
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,41 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_medical
|
||||
- farm_migrate
|
||||
id: farm_migrate_log_medical
|
||||
label: 'Logs (Medical)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_medical
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: medical
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Medical specific fields.
|
||||
vet:
|
||||
plugin: get
|
||||
source: field_farm_vet
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,37 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_observation
|
||||
id: farm_migrate_log_observation
|
||||
label: 'Logs (Observations)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_observation
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: observation
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,44 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_seeding
|
||||
id: farm_migrate_log_seeding
|
||||
label: 'Logs (Seedings)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_seeding
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: seeding
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
# Seeding specific fields.
|
||||
lot_number:
|
||||
plugin: get
|
||||
source: field_farm_lot_number
|
||||
source:
|
||||
plugin: get
|
||||
source: field_farm_seed_source
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,37 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_transplanting
|
||||
id: farm_migrate_log_transplanting
|
||||
label: 'Logs (Transplantings)'
|
||||
migration_group: farm_migrate_log
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_farm_log
|
||||
bundle: farm_transplanting
|
||||
destination:
|
||||
plugin: 'entity:log'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: transplanting
|
||||
# Maintain the log ID.
|
||||
id:
|
||||
plugin: get
|
||||
source: id
|
||||
# Migrate log quantities.
|
||||
quantity:
|
||||
plugin: get
|
||||
source: '@_log_quantities'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,47 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_quantity_standard
|
||||
id: farm_migrate_quantity_standard
|
||||
label: 'Quantities (Standard)'
|
||||
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_reference_revisions:quantity'
|
||||
process:
|
||||
# Hard-code the bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: standard
|
||||
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
|
||||
no_stub: true
|
||||
-
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_user
|
||||
- farm_migrate_taxonomy_unit
|
||||
optional: { }
|
|
@ -1,32 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_role_roles
|
||||
id: farm_migrate_role
|
||||
label: 'Roles'
|
||||
migration_group: farm_migrate_role
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_user_role
|
||||
destination:
|
||||
plugin: 'entity:user_role'
|
||||
process:
|
||||
role:
|
||||
plugin: static_map
|
||||
source: name
|
||||
map:
|
||||
Farm Manager: farm_manager
|
||||
Farm Worker: farm_worker
|
||||
Farm Viewer: farm_viewer
|
||||
bypass: true
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,43 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- data_stream
|
||||
- farm_sensor
|
||||
- farm_sensor_listener
|
||||
id: farm_migrate_sensor_listener_data_streams
|
||||
label: 'Listener sensor data streams'
|
||||
migration_group: farm_migrate_sensor_data
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_sensor_listener_data_names
|
||||
destination:
|
||||
plugin: data_stream
|
||||
process:
|
||||
# Hard-code the data stream bundle.
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: basic
|
||||
# Use the old sensor ID to find the migrated sensor ID.
|
||||
providing_asset:
|
||||
- plugin: farm_migration_group_lookup
|
||||
migration_group: farm_migrate_asset
|
||||
source: id
|
||||
no_stub: true
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
# Build a name for the data stream.
|
||||
name:
|
||||
plugin: get
|
||||
source: name
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_asset_sensor_listener
|
||||
optional: { }
|
|
@ -1,129 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- data_stream
|
||||
- data_stream_notification
|
||||
- farm_sensor
|
||||
- farm_sensor_listener
|
||||
id: farm_migrate_sensor_listener_notifications
|
||||
label: 'Listener sensor notifications'
|
||||
migration_group: farm_migrate_sensor_data
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_sensor_asset
|
||||
sensor_type: 'listener'
|
||||
constants:
|
||||
NOTIFICATION_ID_PREFIX: 'sensor'
|
||||
NOTIFICATION_LABEL_SEPARATOR: ': '
|
||||
destination:
|
||||
plugin: 'entity:data_stream_notification'
|
||||
process:
|
||||
# Do not create a notification if there are no configured notifications.
|
||||
# In practice there will only be one notification, but it is stored as an array.
|
||||
_notifications:
|
||||
- plugin: extract
|
||||
source: sensor_settings
|
||||
default: false
|
||||
index:
|
||||
- notifications
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
# Save the first notification value name as a pseudo field.
|
||||
_value_name:
|
||||
- plugin: extract
|
||||
source: '@_notifications'
|
||||
default: false
|
||||
index:
|
||||
- 0
|
||||
- name
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
# Build an id of the format sensor_{asset_id}_{value name}
|
||||
id:
|
||||
plugin: concat
|
||||
delimiter: '_'
|
||||
source:
|
||||
- constants/NOTIFICATION_ID_PREFIX
|
||||
- id
|
||||
- '@_value_name'
|
||||
# Build a label of the format {Sensor name}: {value name}
|
||||
label:
|
||||
plugin: concat
|
||||
source:
|
||||
- name
|
||||
- constants/NOTIFICATION_LABEL_SEPARATOR
|
||||
- '@_value_name'
|
||||
# Lookup the data stream to reference.
|
||||
# Use the sensor asset id and notification value name as source ids.
|
||||
data_stream:
|
||||
- plugin: migration_lookup
|
||||
migration: farm_migrate_sensor_listener_data_streams
|
||||
no_stub: true
|
||||
source_ids:
|
||||
farm_migrate_sensor_listener_data_streams:
|
||||
- id
|
||||
- '@_value_name'
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
# Configure default values.
|
||||
# Only send an email the first time a threshold is crossed.
|
||||
activation_threshold:
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
deactivation_threshold:
|
||||
plugin: default_value
|
||||
default_value: 1
|
||||
condition_operator:
|
||||
plugin: default_value
|
||||
default_value: or
|
||||
delivery_interval:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
# Build numeric condition.
|
||||
condition:
|
||||
plugin: sub_process
|
||||
source: '@_notifications'
|
||||
process:
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: numeric
|
||||
negagte:
|
||||
plugin: default_value
|
||||
default_value: false
|
||||
condition:
|
||||
- plugin: get
|
||||
source: condition
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
threshold:
|
||||
- plugin: get
|
||||
source: threshold
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
# Build email delivery.
|
||||
delivery:
|
||||
plugin: sub_process
|
||||
source: '@_notifications'
|
||||
process:
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: email
|
||||
email:
|
||||
- plugin: get
|
||||
source: email
|
||||
- plugin: skip_on_empty
|
||||
method: row
|
||||
- plugin: explode
|
||||
delimiter: ','
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_sensor_listener_data_streams
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_animal
|
||||
id: farm_migrate_taxonomy_animal_type
|
||||
label: 'Taxonomy terms (Animal type)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_animal_types
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: animal_type
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_animal_type
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_plant
|
||||
id: farm_migrate_taxonomy_crop_family
|
||||
label: 'Taxonomy terms (Crop family)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_crop_families
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: crop_family
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_crop_family
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_log_category
|
||||
- farm_migrate
|
||||
id: farm_migrate_taxonomy_log_category
|
||||
label: 'Taxonomy terms (Log categories)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_log_categories
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: log_category
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_log_category
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_material_type
|
||||
- farm_migrate
|
||||
id: farm_migrate_taxonomy_material_type
|
||||
label: 'Taxonomy terms (Material types)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_materials
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: material_type
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_material_type
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,85 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_plant
|
||||
id: farm_migrate_taxonomy_plant_type
|
||||
label: 'Taxonomy terms (Plant type)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_crops
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: plant_type
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_plant_type
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
# Plant type specific fields.
|
||||
companions:
|
||||
plugin: sub_process
|
||||
source: field_farm_companions
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_plant_type
|
||||
source: tid
|
||||
crop_family:
|
||||
plugin: sub_process
|
||||
source: field_farm_crop_family
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_crop_family
|
||||
source: tid
|
||||
transplant_days:
|
||||
plugin: get
|
||||
source: field_farm_transplant_days
|
||||
maturity_days:
|
||||
plugin: get
|
||||
source: field_farm_maturity_days
|
||||
image:
|
||||
plugin: sub_process
|
||||
source: field_farm_images
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration:
|
||||
- farm_migrate_file
|
||||
- farm_migrate_file_private
|
||||
no_stub: true
|
||||
source: fid
|
||||
alt: alt
|
||||
title: title
|
||||
width: width
|
||||
height: height
|
||||
migration_dependencies:
|
||||
required:
|
||||
- farm_migrate_taxonomy_crop_family
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_season
|
||||
id: farm_migrate_taxonomy_season
|
||||
label: 'Taxonomy terms (Seasons)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_season
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: season
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_season
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,46 +0,0 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- farm_migrate
|
||||
- farm_unit
|
||||
id: farm_migrate_taxonomy_unit
|
||||
label: 'Taxonomy terms (Units)'
|
||||
migration_group: farm_migrate_taxonomy
|
||||
migration_tags:
|
||||
- 'Drupal 7'
|
||||
- 'farmOS 1.x'
|
||||
class: Drupal\migrate\Plugin\Migration
|
||||
field_plugin_method: null
|
||||
cck_plugin_method: null
|
||||
source:
|
||||
plugin: d7_taxonomy_term
|
||||
bundle: farm_quantity_units
|
||||
destination:
|
||||
plugin: 'entity:taxonomy_term'
|
||||
process:
|
||||
# Hard-code the vocabulary.
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: unit
|
||||
# Maintain the term ID.
|
||||
tid:
|
||||
plugin: get
|
||||
source: tid
|
||||
# Term parent.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: farm_migrate_taxonomy_unit
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
migration_dependencies:
|
||||
required: { }
|
||||
optional: { }
|
|
@ -1,6 +0,0 @@
|
|||
services:
|
||||
farm_migrate.commands:
|
||||
class: Drupal\farm_migrate\Commands\FarmMigrateCommands
|
||||
arguments: ['@plugin.manager.migration', '@date.formatter', '@entity_type.manager', '@keyvalue']
|
||||
tags:
|
||||
- { name: drush.command }
|
|
@ -5,8 +5,4 @@ package: farmOS
|
|||
core_version_requirement: ^9
|
||||
dependencies:
|
||||
- drupal:migrate
|
||||
- drupal:migrate_drupal
|
||||
- farm:asset
|
||||
- log:log
|
||||
- migrate_plus:migrate_plus
|
||||
- migrate_tools:migrate_tools
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Hooks and customizations for the farm_migrate module.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_access().
|
||||
*/
|
||||
function farm_migrate_file_access(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
|
||||
// Allow access to private file referencing during migration.
|
||||
// @see FarmMigrationSubscriber::allowPrivateFileReferencing()
|
||||
if (\Drupal::state()->get('farm_migrate_allow_file_referencing')) {
|
||||
return AccessResult::allowed();
|
||||
}
|
||||
}
|
|
@ -5,260 +5,72 @@
|
|||
* Post update hooks for the farm_migrate module.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\Core\Site\Settings;
|
||||
use Drupal\Core\Utility\UpdateException;
|
||||
|
||||
/**
|
||||
* Fix migrated input log quantity materials.
|
||||
* Uninstall farmOS v1 migrations.
|
||||
*/
|
||||
function farm_migrate_post_update_fix_input_log_quantity_materials(&$sandbox) {
|
||||
function farm_migrate_post_update_uninstall_v1_migrations(&$sandbox) {
|
||||
|
||||
// For more information see https://github.com/farmOS/farmOS/issues/579.
|
||||
|
||||
// This update can be skipped by adding:
|
||||
// $settings['farm_migrate_skip_input_log_migration_fix'] = TRUE;
|
||||
// to settings.php.
|
||||
if (Settings::get('farm_migrate_skip_input_log_migration_fix', FALSE) === TRUE) {
|
||||
return t("Skipping automatic fix of input log material quantities because of this line in settings.php: \$settings['farm_migrate_skip_input_log_migration_fix'] = TRUE;");
|
||||
// Delete migration and migration_group configurations.
|
||||
$configurations = [
|
||||
'migrate_plus.migration.farm_migrate_area_land',
|
||||
'migrate_plus.migration.farm_migrate_area_none',
|
||||
'migrate_plus.migration.farm_migrate_area_structure',
|
||||
'migrate_plus.migration.farm_migrate_area_water',
|
||||
'migrate_plus.migration.farm_migrate_asset_animal',
|
||||
'migrate_plus.migration.farm_migrate_asset_compost',
|
||||
'migrate_plus.migration.farm_migrate_asset_equipment',
|
||||
'migrate_plus.migration.farm_migrate_asset_group',
|
||||
'migrate_plus.migration.farm_migrate_asset_plant',
|
||||
'migrate_plus.migration.farm_migrate_asset_sensor',
|
||||
'migrate_plus.migration.farm_migrate_asset_sensor_listener',
|
||||
'migrate_plus.migration.farm_migrate_inventory',
|
||||
'migrate_plus.migration.farm_migrate_log_activity',
|
||||
'migrate_plus.migration.farm_migrate_log_birth',
|
||||
'migrate_plus.migration.farm_migrate_log_harvest',
|
||||
'migrate_plus.migration.farm_migrate_log_input',
|
||||
'migrate_plus.migration.farm_migrate_log_lab_test',
|
||||
'migrate_plus.migration.farm_migrate_log_maintenance',
|
||||
'migrate_plus.migration.farm_migrate_log_medical',
|
||||
'migrate_plus.migration.farm_migrate_log_observation',
|
||||
'migrate_plus.migration.farm_migrate_log_seeding',
|
||||
'migrate_plus.migration.farm_migrate_log_transplanting',
|
||||
'migrate_plus.migration.farm_migrate_quantity_standard',
|
||||
'migrate_plus.migration.farm_migrate_role',
|
||||
'migrate_plus.migration.farm_migrate_sensor_listener_data_streams',
|
||||
'migrate_plus.migration.farm_migrate_sensor_listener_notifications',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_animal_type',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_crop_family',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_log_category',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_material_type',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_plant_type',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_season',
|
||||
'migrate_plus.migration.farm_migrate_taxonomy_unit',
|
||||
'migrate_plus.migration.farm_migrate_area_field_parent',
|
||||
'migrate_plus.migration.farm_migrate_asset_field_parent',
|
||||
'migrate_plus.migration.farm_migrate_file',
|
||||
'migrate_plus.migration.farm_migrate_file_private',
|
||||
'migrate_plus.migration.farm_migrate_quantity_system',
|
||||
'migrate_plus.migration.farm_migrate_system_date',
|
||||
'migrate_plus.migration.farm_migrate_user',
|
||||
'migrate_plus.migration_group.farm_migrate_area',
|
||||
'migrate_plus.migration_group.farm_migrate_asset',
|
||||
'migrate_plus.migration_group.farm_migrate_asset_parent',
|
||||
'migrate_plus.migration_group.farm_migrate_config',
|
||||
'migrate_plus.migration_group.farm_migrate_file',
|
||||
'migrate_plus.migration_group.farm_migrate_log',
|
||||
'migrate_plus.migration_group.farm_migrate_plan',
|
||||
'migrate_plus.migration_group.farm_migrate_quantity',
|
||||
'migrate_plus.migration_group.farm_migrate_role',
|
||||
'migrate_plus.migration_group.farm_migrate_sensor_data',
|
||||
'migrate_plus.migration_group.farm_migrate_taxonomy',
|
||||
'migrate_plus.migration_group.farm_migrate_user',
|
||||
];
|
||||
foreach ($configurations as $name) {
|
||||
\Drupal::configFactory()->getEditable($name)->delete();
|
||||
}
|
||||
|
||||
// This function will run as a batch operation, so ensure that the initial
|
||||
// setup only runs once.
|
||||
if (!isset($sandbox['current_log'])) {
|
||||
|
||||
// If the material quantity module is not enabled, there is nothing to fix.
|
||||
if (!\Drupal::moduleHandler()->moduleExists('farm_quantity_material')) {
|
||||
return NULL;
|
||||
// Uninstall the migrate_drupal module.
|
||||
if (\Drupal::service('module_handler')->moduleExists('migrate_drupal')) {
|
||||
\Drupal::service('module_installer')->uninstall(['migrate_drupal']);
|
||||
}
|
||||
|
||||
// Check to see if there are logs that suffer from the issue described in
|
||||
// https://github.com/farmOS/farmOS/issues/579 (logs with multiple material
|
||||
// quantities that all reference the same material term).
|
||||
$database = \Drupal::database();
|
||||
$query = $database->select('log', 'l');
|
||||
$query->addField('l', 'id');
|
||||
$query->join('log__quantity', 'lq', 'l.id = lq.entity_id AND l.revision_id = lq.revision_id');
|
||||
$query->join('quantity', 'q', 'lq.quantity_target_id = q.id');
|
||||
$query->join('quantity__material_type', 'mt', 'q.id = mt.entity_id AND q.revision_id = mt.revision_id AND mt.deleted = 0');
|
||||
$query->condition('l.type', 'input');
|
||||
$query->condition('lq.deleted', 0);
|
||||
$query->condition('q.type', 'material');
|
||||
$query->groupBy('l.id');
|
||||
$query->groupBy('mt.material_type_target_id');
|
||||
$query->having('COUNT(lq.quantity_target_id) > 1');
|
||||
$log_ids = $query->execute()->fetchCol();
|
||||
|
||||
// If there are no affected logs, bail.
|
||||
if (empty($log_ids)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Query the mapping of v1 to v2 input logs, filtering out logs that are
|
||||
// not in the affected list. This serves to ensure that the only logs we
|
||||
// act upon are those that a) are currently affected, and b) were migrated.
|
||||
// We do not want to act upon logs that were not migrated. This also serves
|
||||
// to throw an exception if the migrate mapping table is missing from the
|
||||
// database.
|
||||
$log_map = [];
|
||||
$result = $database->query("SELECT sourceid1, destid1 FROM {migrate_map_farm_migrate_log_input} WHERE destid1 IN (:ids[])", [':ids[]' => $log_ids])->fetchAll();
|
||||
foreach ($result as $row) {
|
||||
if (!empty($row->sourceid1) && !empty($row->destid1)) {
|
||||
$log_map[$row->sourceid1] = $row->destid1;
|
||||
}
|
||||
}
|
||||
|
||||
// If there are no logs in the mapping, bail.
|
||||
if (empty($log_map)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Take a moment to explain what is happening, and how to skip this update
|
||||
// from running.
|
||||
\Drupal::logger('farm_migrate')->notice(t("This update will attempt to fix an issue with the migration of input log material data from farmOS v1. To skip this update, add this line to settings.php: \$settings['farm_migrate_skip_input_log_migration_fix'] = TRUE;"));
|
||||
\Drupal::logger('farm_migrate')->notice(t('There are @count logs affected by this issue.', ['@count' => count($log_map)]));
|
||||
|
||||
// Check to see if a 1.x database connection is available.
|
||||
// This assumes that the site admin followed the recommended steps in the
|
||||
// migration docs.
|
||||
try {
|
||||
$migrate_database = Database::getConnection('default', 'migrate');
|
||||
$migrate_database->query("SELECT COUNT(*) FROM {log} WHERE type = 'farm_input'")->fetchField();
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
throw new UpdateException('Could not connect to the farmOS v1 database. Add `migrate` database to settings.php and re-run this update to continue.');
|
||||
}
|
||||
|
||||
// Build a map of v1 log IDs to their v1 material term IDs.
|
||||
// Order by the original v1 deltas.
|
||||
// Create an index of term IDs that were affected.
|
||||
$material_tids = [];
|
||||
$v1_log_materials = [];
|
||||
$result = $migrate_database->query("SELECT entity_id as log_id, field_farm_material_tid as tid FROM {field_data_field_farm_material} WHERE entity_type = 'log' AND bundle = 'farm_input' AND entity_id IN (:ids[]) ORDER BY delta ASC", [':ids[]' => array_keys($log_map)])->fetchAll();
|
||||
foreach ($result as $row) {
|
||||
if (!empty($row->tid) && !empty($row->log_id)) {
|
||||
$material_tids[] = $row->tid;
|
||||
$v1_log_materials[$row->log_id][] = $row->tid;
|
||||
}
|
||||
}
|
||||
|
||||
// Build a map of migrated v1 to v2 term IDs.
|
||||
$material_map = [];
|
||||
$result = $database->query('SELECT sourceid1, destid1 FROM {migrate_map_farm_migrate_taxonomy_material_type} WHERE sourceid1 IN (:ids[])', [':ids[]' => $material_tids])->fetchAll();
|
||||
foreach ($result as $row) {
|
||||
if (!empty($row->sourceid1) && !empty($row->destid1)) {
|
||||
$material_map[$row->sourceid1] = $row->destid1;
|
||||
}
|
||||
}
|
||||
|
||||
// Build a map of v2 log IDs to their expected v2 material term IDs.
|
||||
$v2_log_materials = [];
|
||||
foreach ($v1_log_materials as $v1_log_id => $v1_tids) {
|
||||
foreach ($v1_tids as $v1_tid) {
|
||||
$v2_log_materials[$log_map[$v1_log_id]][] = $material_map[$v1_tid];
|
||||
}
|
||||
}
|
||||
|
||||
// Save maps to the sandbox for future iterations.
|
||||
$sandbox['log_map'] = $log_map;
|
||||
$sandbox['material_map'] = $material_map;
|
||||
$sandbox['v1_log_materials'] = $v1_log_materials;
|
||||
$sandbox['v2_log_materials'] = $v2_log_materials;
|
||||
|
||||
// Keep track of which logs are skipped.
|
||||
// In some situations, we need to be careful about our assumptions, and
|
||||
// err on the side of caution. Things may have changed since the migration,
|
||||
// so we'll look for a few hints and skip the log if there is any doubt.
|
||||
$sandbox['skipped_logs'] = [];
|
||||
|
||||
// Track progress.
|
||||
$sandbox['current_log'] = 0;
|
||||
$sandbox['#finished'] = 0;
|
||||
}
|
||||
|
||||
// Iterate over logs, 10 at a time.
|
||||
$log_ids = array_values($sandbox['log_map']);
|
||||
$log_count = count($log_ids);
|
||||
$end_log = $sandbox['current_log'] + 10;
|
||||
$end_log = $end_log > $log_count ? $log_count : $end_log;
|
||||
for ($i = $sandbox['current_log']; $i < $end_log; $i++) {
|
||||
|
||||
// Iterate the global counter.
|
||||
$sandbox['current_log']++;
|
||||
|
||||
// Load the log.
|
||||
$id = $log_ids[$i];
|
||||
$log = \Drupal::service('entity_type.manager')->getStorage('log')->load($id);
|
||||
|
||||
// If the log didn't load, throw an update exception.
|
||||
if (empty($log)) {
|
||||
throw new UpdateException('Could not load log. ID: @id', ['@id' => $id]);
|
||||
}
|
||||
|
||||
// Load log quantities and filter out all but material quantities.
|
||||
/** @var \Drupal\quantity\Entity\QuantityInterface[] $quantities */
|
||||
$quantities = $log->get('quantity')->referencedEntities();
|
||||
/** @var \Drupal\quantity\Entity\QuantityInterface[] $material_quantities */
|
||||
$material_quantities = array_filter($quantities, function ($quantity) {
|
||||
return $quantity->bundle() == 'material';
|
||||
});
|
||||
|
||||
// If the number of material quantities does not match the number of
|
||||
// material terms that were referenced on the v1 log, skip the log.
|
||||
if (count($material_quantities) != count($sandbox['v1_log_materials'][$id])) {
|
||||
$sandbox['skipped_logs'][] = $id;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Iterate over the material quantities and perform some rough checks to be
|
||||
// confident that this log has not been touched since migration. If there is
|
||||
// any doubt, we skip it.
|
||||
foreach ($material_quantities as $quantity) {
|
||||
|
||||
// If the quantity label, value, or units are not empty, skip the log.
|
||||
// Material quantities created by the migration ONLY fill in the material
|
||||
// term reference. If any other quantity fields are filled it, it would
|
||||
// indicate that this quantity has been edited by the user afterwards.
|
||||
// If this is the case we can't be sure we know what the term should be.
|
||||
if (!($quantity->get('label')->isEmpty() && $quantity->get('value')->isEmpty() && $quantity->get('units')->isEmpty())) {
|
||||
$sandbox['skipped_logs'][] = $id;
|
||||
continue 2;
|
||||
}
|
||||
|
||||
// Load the referenced material term. If empty, skip the log.
|
||||
$material_term = $quantity->get('material_type')->referencedEntities()[0];
|
||||
if (empty($material_term)) {
|
||||
$sandbox['skipped_logs'][] = $id;
|
||||
continue 2;
|
||||
}
|
||||
|
||||
// If the term is not in the list of expected terms, skip the log.
|
||||
if (!in_array($material_term->id(), $sandbox['v2_log_materials'][$id])) {
|
||||
$sandbox['skipped_logs'][] = $id;
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Now that we are confident that we can proceed, iterate over the material
|
||||
// quantities again. This time we will update them. We do this in a
|
||||
// separate loop to ensure that we only start updating quantities when we
|
||||
// are sure all of them passed the tests above.
|
||||
// Keep track of which quantities get updated, and the delta order.
|
||||
$quantities_updated = [];
|
||||
$delta = 0;
|
||||
foreach ($material_quantities as $quantity) {
|
||||
|
||||
// Load the currently referenced material term.
|
||||
/** @var \Drupal\taxonomy\TermInterface $current_term */
|
||||
$current_term = $quantity->get('material_type')->referencedEntities()[0];
|
||||
|
||||
// Load the expected material term.
|
||||
$expected_tid = $sandbox['v2_log_materials'][$id][$delta];
|
||||
/** @var \Drupal\taxonomy\TermInterface $expected_term */
|
||||
$expected_term = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term')->load($expected_tid);
|
||||
|
||||
// If the quantity's material term ID does not match the expected value,
|
||||
// update it and save a new revision.
|
||||
if ($current_term->id() != $expected_term->id()) {
|
||||
$quantity->set('material_type', $expected_term);
|
||||
$quantity->setNewRevision(TRUE);
|
||||
$quantity->setRevisionLogMessage(t('Changed @old_term to @new_term. See: https://github.com/farmOS/farmOS/issues/579', ['@old_term' => $current_term->label(), '@new_term' => $expected_term->label()]));
|
||||
$quantity->save();
|
||||
$quantities_updated[$quantity->id()] = $quantity;
|
||||
}
|
||||
|
||||
// Increment the delta.
|
||||
$delta++;
|
||||
}
|
||||
|
||||
// If none of the quantities were updated, mark the log as skipped.
|
||||
if (empty($quantities_updated)) {
|
||||
$sandbox['skipped_logs'][] = $id;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update the log's entity reference revision IDs for updated quantities.
|
||||
foreach ($log->get('quantity') as $qty_ref) {
|
||||
if (array_key_exists($qty_ref->target_id, $quantities_updated)) {
|
||||
$qty_ref->setValue($quantities_updated[$qty_ref->target_id]);
|
||||
}
|
||||
}
|
||||
|
||||
// Save a new revision of the log.
|
||||
$log->setNewRevision(TRUE);
|
||||
$log->setRevisionLogMessage(t('Automatically fixed quantity material term references. See: https://github.com/farmOS/farmOS/issues/579'));
|
||||
$log->save();
|
||||
|
||||
// Declare that the log has been fixed.
|
||||
\Drupal::logger('farm_migrate')->notice(t('Log @id has been fixed.', ['@id' => $id]));
|
||||
}
|
||||
|
||||
// Update progress.
|
||||
$sandbox['#finished'] = $sandbox['current_log'] / count($sandbox['log_map']);
|
||||
|
||||
// Log the list of IDs that were skipped at the end.
|
||||
if ($sandbox['#finished'] == 1 && !empty($sandbox['skipped_logs'])) {
|
||||
\Drupal::logger('farm_migrate')->warning(t('The following logs were skipped: @log_ids', ['@log_ids' => implode(', ', $sandbox['skipped_logs'])]));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
services:
|
||||
farm_migrate_event_subscriber:
|
||||
class: Drupal\farm_migrate\EventSubscriber\FarmMigrationSubscriber
|
||||
arguments:
|
||||
[ '@database', '@datetime.time', '@entity_type.manager', '@config.factory', '@state', '@plugin.manager.migration' ]
|
||||
tags:
|
||||
- { name: 'event_subscriber' }
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Commands;
|
||||
|
||||
use Drupal\migrate_tools\Drush\MigrateToolsCommands;
|
||||
|
||||
/**
|
||||
* Farm Migrate Drush commands.
|
||||
*
|
||||
* @ingroup farm
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmMigrateCommands extends MigrateToolsCommands {
|
||||
|
||||
/**
|
||||
* Perform a 1.x data migration.
|
||||
*
|
||||
* @command farm_migrate:import
|
||||
*
|
||||
* @usage farm_migrate:import
|
||||
*/
|
||||
public function farmMigrate() {
|
||||
$this->executeFarmMigrations();
|
||||
}
|
||||
|
||||
/**
|
||||
* Rollback a 1.x data migration.
|
||||
*
|
||||
* @command farm_migrate:rollback
|
||||
*
|
||||
* @usage farm_migrate:rollback
|
||||
*/
|
||||
public function farmRollback() {
|
||||
$this->executeFarmRollback();
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the farmOS migration groups in the order they should be executed.
|
||||
*
|
||||
* @return array
|
||||
* Array of migration group names.
|
||||
*/
|
||||
protected function farmMigrationGroups() {
|
||||
return [
|
||||
'farm_migrate_config',
|
||||
'farm_migrate_role',
|
||||
'farm_migrate_user',
|
||||
'farm_migrate_file',
|
||||
'farm_migrate_taxonomy',
|
||||
'farm_migrate_asset',
|
||||
'farm_migrate_area',
|
||||
'farm_migrate_asset_parent',
|
||||
'farm_migrate_sensor_data',
|
||||
'farm_migrate_quantity',
|
||||
'farm_migrate_log',
|
||||
'farm_migrate_plan',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes all farmOS migrations.
|
||||
*
|
||||
* @throws \Exception
|
||||
* If some migrations failed during execution.
|
||||
*/
|
||||
protected function executeFarmMigrations() {
|
||||
$groups = $this->farmMigrationGroups();
|
||||
foreach ($groups as $group) {
|
||||
$options = [
|
||||
'group' => $group,
|
||||
];
|
||||
$this->logger()->notice('Importing migration group: ' . $group);
|
||||
$this->import('', $options);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rollback all farmOS migrations.
|
||||
*
|
||||
* @throws \Exception
|
||||
* If some rollbacks failed during execution.
|
||||
*/
|
||||
protected function executeFarmRollback() {
|
||||
$groups = $this->farmMigrationGroups();
|
||||
$groups = array_reverse($groups);
|
||||
foreach ($groups as $group) {
|
||||
$options = [
|
||||
'group' => $group,
|
||||
];
|
||||
$this->logger()->notice('Rolling back migration group: ' . $group);
|
||||
$this->rollback('', $options);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,543 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\EventSubscriber;
|
||||
|
||||
use Drupal\Component\Datetime\TimeInterface;
|
||||
use Drupal\Core\Config\ConfigFactoryInterface;
|
||||
use Drupal\Core\Database\Connection;
|
||||
use Drupal\Core\Database\Database;
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\migrate\Event\MigrateEvents;
|
||||
use Drupal\migrate\Event\MigrateImportEvent;
|
||||
use Drupal\migrate\Event\MigratePostRowSaveEvent;
|
||||
use Drupal\migrate\Event\MigrateRowDeleteEvent;
|
||||
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
|
||||
/**
|
||||
* Farm migration event subscriber.
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmMigrationSubscriber implements EventSubscriberInterface {
|
||||
|
||||
/**
|
||||
* The database service.
|
||||
*
|
||||
* @var \Drupal\Core\Database\Connection
|
||||
*/
|
||||
protected $database;
|
||||
|
||||
/**
|
||||
* The time service.
|
||||
*
|
||||
* @var \Drupal\Component\Datetime\TimeInterface
|
||||
*/
|
||||
protected $time;
|
||||
|
||||
/**
|
||||
* The entity type manager service.
|
||||
*
|
||||
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
|
||||
*/
|
||||
protected $entityTypeManager;
|
||||
|
||||
/**
|
||||
* The configuration factory.
|
||||
*
|
||||
* @var \Drupal\Core\Config\ConfigFactoryInterface
|
||||
*/
|
||||
protected $configFactory;
|
||||
|
||||
/**
|
||||
* The state key/value store.
|
||||
*
|
||||
* @var \Drupal\Core\State\StateInterface
|
||||
*/
|
||||
protected $state;
|
||||
|
||||
/**
|
||||
* Migration plugin manager service.
|
||||
*
|
||||
* @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
|
||||
*/
|
||||
protected $migrationPluginManager;
|
||||
|
||||
/**
|
||||
* FarmMigrationSubscriber Constructor.
|
||||
*
|
||||
* @param \Drupal\Core\Database\Connection $database
|
||||
* The database service.
|
||||
* @param \Drupal\Component\Datetime\TimeInterface $time
|
||||
* The time service.
|
||||
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
|
||||
* The entity type manager service.
|
||||
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
|
||||
* The configuration factory.
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key/value store.
|
||||
* @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager
|
||||
* Migration plugin manager service.
|
||||
*/
|
||||
public function __construct(Connection $database, TimeInterface $time, EntityTypeManagerInterface $entity_type_manager, ConfigFactoryInterface $config_factory, StateInterface $state, MigrationPluginManagerInterface $migration_plugin_manager) {
|
||||
$this->database = $database;
|
||||
$this->time = $time;
|
||||
$this->entityTypeManager = $entity_type_manager;
|
||||
$this->configFactory = $config_factory;
|
||||
$this->state = $state;
|
||||
$this->migrationPluginManager = $migration_plugin_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get subscribed events.
|
||||
*
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static function getSubscribedEvents() {
|
||||
$events[MigrateEvents::PRE_IMPORT][] = ['onMigratePreImport'];
|
||||
$events[MigrateEvents::POST_IMPORT][] = ['onMigratePostImport'];
|
||||
$events[MigrateEvents::POST_ROW_SAVE][] = ['onMigratePostRowSave'];
|
||||
$events[MigrateEvents::PRE_ROW_DELETE][] = ['onMigratePreRowDelete'];
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run pre-migration logic.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function onMigratePreImport(MigrateImportEvent $event) {
|
||||
$this->unblockUsers($event);
|
||||
$this->grantTextFormatPermission($event);
|
||||
$this->allowPrivateFileReferencing($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run post-migration logic.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function onMigratePostImport(MigrateImportEvent $event) {
|
||||
$this->blockUsers($event);
|
||||
$this->revokeTextFormatPermission($event);
|
||||
$this->preventPrivateFileReferencing($event);
|
||||
$this->addRevisionLogMessage($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run row post-save logic.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event
|
||||
* The row save event object.
|
||||
*/
|
||||
public function onMigratePostRowSave(MigratePostRowSaveEvent $event) {
|
||||
$this->migrateSensorListenerData($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run row pre-deletion logic.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function onMigratePreRowDelete(MigrateRowDeleteEvent $event) {
|
||||
$this->deleteAssetParentReferences($event);
|
||||
$this->deleteLogQuantityReferences($event);
|
||||
$this->deleteTermParentReferences($event);
|
||||
$this->deletePlantTypeCompanionReferences($event);
|
||||
$this->deleteSensorDataStreamReferences($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unblock users that were blocked in the 1.x instance.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function unblockUsers(MigrateImportEvent $event) {
|
||||
|
||||
// When records are migrated, Drupal will switch to the user that created
|
||||
// them in order to perform validation. If that user was blocked, then it
|
||||
// the record will not validate, and will not be migrated. To work around
|
||||
// this we will temporarily unblock all users, and then block them again
|
||||
// after the migration finishes. We use Drupal's state system to remember
|
||||
// which users need to be blocked.
|
||||
// @see blockUsers()
|
||||
$migration = $event->getMigration();
|
||||
if ($migration->migration_group == 'farm_migrate_user') {
|
||||
return;
|
||||
}
|
||||
$user_settings = $this->configFactory->getEditable('user.settings');
|
||||
$status_activated = $user_settings->get('notify.status_activated');
|
||||
$user_settings->set('notify.status_activated', FALSE)->save();
|
||||
$storage = $this->entityTypeManager->getStorage('user');
|
||||
$user_ids = $storage->getQuery()->condition('status', FALSE)->accessCheck(FALSE)->execute();
|
||||
$this->state->set('farm_migrate_blocked_users', $user_ids);
|
||||
foreach ($user_ids as $id) {
|
||||
if (!empty($id)) {
|
||||
$user = $storage->load($id);
|
||||
$user->activate();
|
||||
$user->save();
|
||||
}
|
||||
}
|
||||
$user_settings->set('notify.status_activated', $status_activated)->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Block users that were unblocked via unblockUsers().
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function blockUsers(MigrateImportEvent $event) {
|
||||
|
||||
// Block users that were temporarily unblocked.
|
||||
// @see unblockUsers()
|
||||
$migration = $event->getMigration();
|
||||
if ($migration->migration_group == 'farm_migrate_user') {
|
||||
return;
|
||||
}
|
||||
$storage = $this->entityTypeManager->getStorage('user');
|
||||
$user_ids = $this->state->get('farm_migrate_blocked_users', []);
|
||||
foreach ($user_ids as $id) {
|
||||
if (!empty($id)) {
|
||||
$user = $storage->load($id);
|
||||
$user->block();
|
||||
$user->save();
|
||||
}
|
||||
}
|
||||
$this->state->delete('farm_migrate_blocked_users');
|
||||
}
|
||||
|
||||
/**
|
||||
* Grant default text format permission to anonymous role.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function grantTextFormatPermission(MigrateImportEvent $event) {
|
||||
|
||||
// If the migration is in the farm_migrate_taxonomy migration group,
|
||||
// grant the 'use text format default' permission to anonymous role.
|
||||
// This allows entity validation to pass even when the migration is run
|
||||
// via Drush (which runs as the anonymous user). The permission is revoked
|
||||
// in post-migration.
|
||||
// @see revokeTextFormatPermission()
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && $migration->migration_group == 'farm_migrate_taxonomy') {
|
||||
$storage = $this->entityTypeManager->getStorage('user_role');
|
||||
$anonymous = $storage->load('anonymous');
|
||||
$anonymous->grantPermission('use text format default');
|
||||
$anonymous->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Revoke default text format permission from anonymous role.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function revokeTextFormatPermission(MigrateImportEvent $event) {
|
||||
|
||||
// If the migration is in the farm_migrate_taxonomy migration group,
|
||||
// revoke the 'use text format default' permission to anonymous role.
|
||||
// This permission was added in pre-migration.
|
||||
// @see grantTextFormatPermission()
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && $migration->migration_group == 'farm_migrate_taxonomy') {
|
||||
$storage = $this->entityTypeManager->getStorage('user_role');
|
||||
$anonymous = $storage->load('anonymous');
|
||||
$anonymous->revokePermission('use text format default');
|
||||
$anonymous->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporarily allow private files to be referenced by entities.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function allowPrivateFileReferencing(MigrateImportEvent $event) {
|
||||
|
||||
// During farmOS 1.x -> 2.x migrations, Drupal's FileAccessControlHandler
|
||||
// will not allow file entities to be referenced unless they were originally
|
||||
// uploaded by the same user that created the entity that references them.
|
||||
// In farmOS, it is common for an entity to be created by one user, and
|
||||
// photos to be uploaded to it later by a different user. With entity
|
||||
// validation enabled on the migration, this throws a validation error and
|
||||
// doesn't allow the file to be referenced.
|
||||
// We work around this by setting a Drupal state variable during our
|
||||
// migrations, and check for it in hook_ENTITY_TYPE_access(), so we can
|
||||
// explicitly grant access to the files.
|
||||
// This state is removed post-migration.
|
||||
// @see \Drupal\file\FileAccessControlHandler
|
||||
// @see farm_migrate_file_access()
|
||||
// @see preventPrivateFileReferencing()
|
||||
$migration_groups = [
|
||||
'farm_migrate_area',
|
||||
'farm_migrate_asset',
|
||||
'farm_migrate_log',
|
||||
'farm_migrate_plan',
|
||||
'farm_migrate_taxonomy',
|
||||
];
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && in_array($migration->migration_group, $migration_groups)) {
|
||||
$this->state->set('farm_migrate_allow_file_referencing', TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent private files from being referenced by entities.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function preventPrivateFileReferencing(MigrateImportEvent $event) {
|
||||
|
||||
// Unset the Drupal state variable that was set to temporarily allow private
|
||||
// files to be referenced by entities.
|
||||
// @see farm_migrate_file_access()
|
||||
// @see allowPrivateFileReferencing()
|
||||
$this->state->delete('farm_migrate_allow_file_referencing');
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a revision log message to imported entities.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateImportEvent $event
|
||||
* The import event object.
|
||||
*/
|
||||
public function addRevisionLogMessage(MigrateImportEvent $event) {
|
||||
|
||||
// Define the migration groups that we will post-process and their
|
||||
// corresponding entity revision tables.
|
||||
$groups_revision_tables = [
|
||||
'farm_migrate_asset' => 'asset_revision',
|
||||
'farm_migrate_area' => 'asset_revision',
|
||||
'farm_migrate_log' => 'log_revision',
|
||||
'farm_migrate_plan' => 'plan_revision',
|
||||
'farm_migrate_quantity' => 'quantity_revision',
|
||||
'farm_migrate_taxonomy' => 'taxonomy_term_revision',
|
||||
];
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && array_key_exists($migration->migration_group, $groups_revision_tables)) {
|
||||
|
||||
// Define the entity id column name. This will be "id" in all cases
|
||||
// except taxonomy_terms, which use "tid".
|
||||
$id_column = 'id';
|
||||
if ($migration->migration_group == 'farm_migrate_taxonomy') {
|
||||
$id_column = 'tid';
|
||||
}
|
||||
|
||||
// Build a query to set the revision log message.
|
||||
$revision_table = $groups_revision_tables[$migration->migration_group];
|
||||
$migration_id = $migration->id();
|
||||
$query = "UPDATE {$revision_table}
|
||||
SET revision_log_message = :revision_log_message
|
||||
WHERE revision_id IN (
|
||||
SELECT r.revision_id
|
||||
FROM {migrate_map_$migration_id} mm
|
||||
INNER JOIN {$revision_table} r ON mm.destid1 = r.$id_column
|
||||
)";
|
||||
$args = [
|
||||
':revision_log_message' => 'Migrated from farmOS 1.x on ' . date('Y-m-d', $this->time->getRequestTime()),
|
||||
];
|
||||
$this->database->query($query, $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate sensor listener data.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event
|
||||
* The post row save migrate event.
|
||||
*/
|
||||
public function migrateSensorListenerData(MigratePostRowSaveEvent $event) {
|
||||
|
||||
$migration = $event->getMigration();
|
||||
$migration_id = $migration->id();
|
||||
|
||||
// Migrate listener sensor data for each data stream.
|
||||
if ($migration_id === "farm_migrate_sensor_listener_data_streams") {
|
||||
|
||||
// Get values to identify the source data.
|
||||
$migration_row = $event->getRow();
|
||||
$source_id = $migration_row->getSourceProperty('id');
|
||||
$source_name = $migration_row->getSourceProperty('name');
|
||||
|
||||
// Get the destination data stream ID.
|
||||
$destination_id = $event->getDestinationIdValues()[0];
|
||||
|
||||
// Query the source for data. Override the ID field that is returned with
|
||||
// each row to be the ID of the migrated data stream.
|
||||
$query = "SELECT :id as id, timestamp, value_numerator, value_denominator
|
||||
FROM {farm_sensor_data} fsd
|
||||
WHERE fsd.id = :sensor_id and fsd.name = :name
|
||||
";
|
||||
$args = [
|
||||
'id' => $destination_id,
|
||||
'sensor_id' => $source_id,
|
||||
'name' => $source_name,
|
||||
];
|
||||
$source_db = Database::getConnection('default', 'migrate');
|
||||
$source_data = $source_db->query($query, $args);
|
||||
$source_data->setFetchMode(\PDO::FETCH_ASSOC);
|
||||
|
||||
// Start an insert statement.
|
||||
$insert = $this->database->insert('data_stream_basic')
|
||||
->fields(['id', 'timestamp', 'value_numerator', 'value_denominator']);
|
||||
|
||||
// Loop through the source data and insert in batches.
|
||||
$batch_size = 10000;
|
||||
$count = 0;
|
||||
foreach ($source_data as $data) {
|
||||
$insert->values($data);
|
||||
$count++;
|
||||
if ($count >= $batch_size) {
|
||||
$insert->execute();
|
||||
$count = 0;
|
||||
$insert = $this->database->insert('data_stream_basic')
|
||||
->fields(['id', 'timestamp', 'value_numerator', 'value_denominator']);
|
||||
}
|
||||
}
|
||||
$insert->execute();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete references to quantities from logs.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function deleteLogQuantityReferences(MigrateRowDeleteEvent $event) {
|
||||
|
||||
// If the migration is in the farm_migrate_log migration group, delete all
|
||||
// references to quantity entities from the log that is being deleted.
|
||||
// This prevents the quantity entity itself from being deleted by
|
||||
// LogEventSubscriber in the farm_log_quantity module.
|
||||
// We limit this to quantities that were created via migrations in the
|
||||
// farm_migrate_quantity migration group to ensure that quantities created
|
||||
// via the create_quantity process plugin can be deleted normally with logs.
|
||||
// @see \Drupal\farm_log_quantity\EventSubscriber\LogEventSubscriber
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && $migration->migration_group == 'farm_migrate_log') {
|
||||
$id_values = $event->getDestinationIdValues();
|
||||
if (!empty($id_values['id'])) {
|
||||
$migration_plugins = $this->migrationPluginManager->createInstances([]);
|
||||
foreach ($migration_plugins as $migration_id => $migration_plugin) {
|
||||
if (isset($migration_plugin->migration_group) && $migration_plugin->migration_group == 'farm_migrate_quantity') {
|
||||
$table = 'migrate_map_' . $migration_id;
|
||||
$this->database->query('DELETE FROM {log__quantity} WHERE entity_id = :id AND quantity_target_id IN (SELECT destid1 FROM ' . $table . ')', [':id' => $id_values['id']]);
|
||||
$this->database->query('DELETE FROM {log_revision__quantity} WHERE entity_id = :id AND quantity_target_id IN (SELECT destid1 FROM ' . $table . ')', [':id' => $id_values['id']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete parent references from assets.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function deleteAssetParentReferences(MigrateRowDeleteEvent $event) {
|
||||
|
||||
// If the migration is in the farm_migrate_asset or farm_migrate_area
|
||||
// migration groups, delete all parent references to the destination asset.
|
||||
// This is necessary because the field is populated by migrations in the
|
||||
// farm_migrate_asset_parent group, which ONLY set the parent field on
|
||||
// existing assets, and rolling back those migrations does not remove the
|
||||
// parent references. This causes entity reference integrity constraint
|
||||
// errors if an attempt is made to roll back assets that are referenced as
|
||||
// parents.
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && in_array($migration->migration_group, ['farm_migrate_asset', 'farm_migrate_area'])) {
|
||||
$id_values = $event->getDestinationIdValues();
|
||||
if (!empty($id_values['id'])) {
|
||||
$this->database->query('DELETE FROM {asset__parent} WHERE parent_target_id = :id', [':id' => $id_values['id']]);
|
||||
$this->database->query('DELETE FROM {asset_revision__parent} WHERE parent_target_id = :id', [':id' => $id_values['id']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete parent references to taxonomy pterms.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function deleteTermParentReferences(MigrateRowDeleteEvent $event) {
|
||||
|
||||
// If the migration is in the farm_migrate_taxonomy migration group, delete
|
||||
// all parent references to the destination term.
|
||||
// This is necessary to prevent entity reference integrity constraint errors
|
||||
// if an attempt is made to roll back terms that are referenced as parents.
|
||||
$migration = $event->getMigration();
|
||||
if (isset($migration->migration_group) && $migration->migration_group == 'farm_migrate_taxonomy') {
|
||||
$id_values = $event->getDestinationIdValues();
|
||||
if (!empty($id_values['tid'])) {
|
||||
$this->database->query('DELETE FROM {taxonomy_term__parent} WHERE parent_target_id = :tid', [':tid' => $id_values['tid']]);
|
||||
$this->database->query('DELETE FROM {taxonomy_term_revision__parent} WHERE parent_target_id = :tid', [':tid' => $id_values['tid']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete companion references to plant type terms.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function deletePlantTypeCompanionReferences(MigrateRowDeleteEvent $event) {
|
||||
|
||||
// If this is the farm_migrate_taxonomy_plant_type migration, delete all
|
||||
// companion references to the destination term.
|
||||
// This is necessary to prevent entity reference integrity constraint errors
|
||||
// if an attempt is made to roll back terms that are referenced as
|
||||
// companions.
|
||||
$migration = $event->getMigration();
|
||||
if ($migration->id() == 'farm_migrate_taxonomy_plant_type') {
|
||||
$id_values = $event->getDestinationIdValues();
|
||||
if (!empty($id_values['tid'])) {
|
||||
$this->database->query('DELETE FROM {taxonomy_term__companions} WHERE companions_target_id = :tid', [':tid' => $id_values['tid']]);
|
||||
$this->database->query('DELETE FROM {taxonomy_term_revision__companions} WHERE companions_target_id = :tid', [':tid' => $id_values['tid']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete data stream references from sensor assets.
|
||||
*
|
||||
* @param \Drupal\migrate\Event\MigrateRowDeleteEvent $event
|
||||
* The row delete event object.
|
||||
*/
|
||||
public function deleteSensorDataStreamReferences(MigrateRowDeleteEvent $event) {
|
||||
|
||||
// If this is the farm_migrate_sensor_listener_data_streams migration,
|
||||
// delete all references to the destination data_stream from sensor assets.
|
||||
// This is necessary to prevent entity reference integrity constraint errors
|
||||
// if an attempt is made to roll back data_streams that are referenced by
|
||||
// sensor assets. During migration, these references are created by the
|
||||
// DataStream migrate destination plugin, so they will be recreated if this
|
||||
// migration is imported again after rollback.
|
||||
// @see \Drupal\data_stream\Plugin\migrate\destination\DataStream
|
||||
$migration = $event->getMigration();
|
||||
if ($migration->id() == 'farm_migrate_sensor_listener_data_streams') {
|
||||
$id_values = $event->getDestinationIdValues();
|
||||
if (!empty($id_values['id'])) {
|
||||
$this->database->query('DELETE FROM {asset__data_stream} WHERE data_stream_target_id = :id', [':id' => $id_values['id']]);
|
||||
$this->database->query('DELETE FROM {asset_revision__data_stream} WHERE data_stream_target_id = :id', [':id' => $id_values['id']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\process;
|
||||
|
||||
use Drupal\migrate\MigrateExecutableInterface;
|
||||
use Drupal\migrate\ProcessPluginBase;
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Gets the testing lab from a soil/water test log.
|
||||
*
|
||||
* @MigrateProcessPlugin(
|
||||
* id = "get_lab"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmMigrateGetLab extends ProcessPluginBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
|
||||
// First try to get a soil lab.
|
||||
$lab = $row->get('field_farm_soil_lab');
|
||||
|
||||
// If that failed, try to get a water lab.
|
||||
if (empty($lab)) {
|
||||
$lab = $row->get('field_farm_water_lab');
|
||||
}
|
||||
|
||||
// If a lab was found, return it.
|
||||
if (!empty($lab[0]['value'])) {
|
||||
return $lab[0]['value'];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\process;
|
||||
|
||||
use Drupal\migrate\MigrateExecutableInterface;
|
||||
use Drupal\migrate\MigrateLookupInterface;
|
||||
use Drupal\migrate\MigrateStubInterface;
|
||||
use Drupal\migrate\Plugin\migrate\process\MigrationLookup;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
|
||||
use Drupal\migrate\Row;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Looks up the value of a property based on a previous migration group.
|
||||
*
|
||||
* @MigrateProcessPlugin(
|
||||
* id = "farm_migration_group_lookup"
|
||||
* )
|
||||
*
|
||||
* This extends from the core migration_lookup process plugin, loads a list of
|
||||
* all migrations in the specified migration_group, then passes that to the
|
||||
* parent class, along with all other configuration keys.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* @code
|
||||
* process:
|
||||
* uid:
|
||||
* plugin: farm_migration_group_lookup
|
||||
* migration_group: users
|
||||
* source: author
|
||||
* @endcode
|
||||
*
|
||||
* @todo Remove if migrate_plus incorporates this plugin upstream.
|
||||
* See: https://gitlab.com/drupalspoons/migrate_plus/-/issues/240
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmMigrationGroupLookup extends MigrationLookup {
|
||||
|
||||
/**
|
||||
* Migration plugin manager service.
|
||||
*
|
||||
* @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
|
||||
*/
|
||||
protected $migrationPluginManager;
|
||||
|
||||
/**
|
||||
* Constructs a MigrationLookup object.
|
||||
*
|
||||
* @param array $configuration
|
||||
* A configuration array containing information about the plugin instance.
|
||||
* @param string $plugin_id
|
||||
* The plugin_id for the plugin instance.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin implementation definition.
|
||||
* @param \Drupal\migrate\Plugin\MigrationInterface $migration
|
||||
* The Migration the plugin is being used in.
|
||||
* @param \Drupal\migrate\MigrateLookupInterface $migrate_lookup
|
||||
* The migrate lookup service.
|
||||
* @param \Drupal\migrate\MigrateStubInterface $migrate_stub
|
||||
* The migrate stub service.
|
||||
* @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migation_plugin_manager
|
||||
* Migration plugin manager service.
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateLookupInterface $migrate_lookup, MigrateStubInterface $migrate_stub, MigrationPluginManagerInterface $migation_plugin_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $migrate_lookup, $migrate_stub);
|
||||
$this->migrationPluginManager = $migation_plugin_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('migrate.lookup'),
|
||||
$container->get('migrate.stub'),
|
||||
$container->get('plugin.manager.migration'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
|
||||
// Get the migration group ID from the process configuration.
|
||||
$lookup_migration_group_id = $this->configuration['migration_group'];
|
||||
|
||||
// Load all migrations.
|
||||
$migrations = $this->migrationPluginManager->createInstances([]);
|
||||
|
||||
// Filter by group.
|
||||
$group_migrations = [];
|
||||
foreach ($migrations as $id => $migration) {
|
||||
$definition = $migration->getPluginDefinition();
|
||||
if ($definition['migration_group'] == $lookup_migration_group_id) {
|
||||
$group_migrations[] = $id;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the migration configuration and delegate processing to the parent
|
||||
// MigrationLookup::transform() method.
|
||||
$this->configuration['migration'] = $group_migrations;
|
||||
return parent::transform($value, $migrate_executable, $row, $destination_property);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\process;
|
||||
|
||||
use Drupal\migrate\MigrateExecutableInterface;
|
||||
use Drupal\migrate\MigrateSkipRowException;
|
||||
use Drupal\migrate\Plugin\migrate\process\SkipOnEmpty;
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Skips processing (and mapping) the current row when the input value is empty.
|
||||
*
|
||||
* This extends from the core skip_on_empty plugin, and sets the $save_to_map
|
||||
* parameter of MigrateSkipRowException() to FALSE to prevent the row from
|
||||
* being saved to the {migrate_map_*} table entirely.
|
||||
*
|
||||
* @see \Drupal\migrate\Plugin\migrate\process\SkipOnEmpty
|
||||
*
|
||||
* @MigrateProcessPlugin(
|
||||
* id = "skip_map_on_empty"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class SkipMapOnEmpty extends SkipOnEmpty {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function row($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
if (!$value) {
|
||||
$message = !empty($this->configuration['message']) ? $this->configuration['message'] : '';
|
||||
throw new MigrateSkipRowException($message, FALSE);
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Animal asset source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_animal_asset",
|
||||
* source_module = "farm_asset"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*
|
||||
* @phpstan-ignore-next-line
|
||||
*/
|
||||
class AnimalAsset extends FarmAsset {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// Get animal tag field values.
|
||||
$animal_tag_values = $this->getFieldValues('farm_asset', 'field_farm_animal_tag', $id);
|
||||
|
||||
// Iterate through tag field values to collect field collection item IDs.
|
||||
$field_collection_item_ids = [];
|
||||
foreach ($animal_tag_values as $animal_tag_value) {
|
||||
if (!empty($animal_tag_value['value'])) {
|
||||
$field_collection_item_ids[] = $animal_tag_value['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate through the field collection IDs and load values.
|
||||
$animal_tags = [];
|
||||
foreach ($field_collection_item_ids as $item_id) {
|
||||
|
||||
// Query the animal tag information from the field collection.
|
||||
$query = $this->select('field_collection_item', 'fci')
|
||||
->condition('fci.item_id', $item_id)
|
||||
->condition('fci.field_name', 'field_farm_animal_tag');
|
||||
|
||||
// Join the tag ID field.
|
||||
$query->leftJoin('field_data_field_farm_animal_tag_id', 'fdffati', 'fdffati.entity_id = fci.item_id AND fdffati.deleted = 0');
|
||||
$query->addField('fdffati', 'field_farm_animal_tag_id_value', 'id');
|
||||
|
||||
// Join the tag type field.
|
||||
$query->leftJoin('field_data_field_farm_animal_tag_type', 'fdffatt', 'fdffatt.entity_id = fci.item_id AND fdffatt.deleted = 0');
|
||||
$query->addField('fdffatt', 'field_farm_animal_tag_type_value', 'type');
|
||||
|
||||
// Join the tag location field.
|
||||
$query->leftJoin('field_data_field_farm_animal_tag_location', 'fdffatl', 'fdffatl.entity_id = fci.item_id AND fdffatl.deleted = 0');
|
||||
$query->addField('fdffatl', 'field_farm_animal_tag_location_value', 'location');
|
||||
|
||||
// Execute the query.
|
||||
$animal_tags[] = $query->execute()->fetchAssoc();
|
||||
}
|
||||
|
||||
// Add the ID tags to the row for future processing.
|
||||
$row->setSourceProperty('animal_tags', $animal_tags);
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\taxonomy\Plugin\migrate\source\d7\Term;
|
||||
|
||||
/**
|
||||
* Farm area source.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_farm_area",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmArea extends Term {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
|
||||
// Set the bundle to "farm_areas".
|
||||
$this->configuration['bundle'] = 'farm_areas';
|
||||
|
||||
// Get the parent class query.
|
||||
$query = parent::query();
|
||||
|
||||
// Join the "area type" field.
|
||||
$query->leftJoin('field_data_field_farm_area_type', 'fdffat', 'td.tid = fdffat.entity_id AND fdffat.deleted = 0');
|
||||
|
||||
// If "area_type" is defined, filter by field_farm_area_type.
|
||||
if (!empty($this->configuration['area_type'])) {
|
||||
|
||||
// If "area_type" is "any", don't filter.
|
||||
if ($this->configuration['area_type'] != 'any') {
|
||||
$query->condition('fdffat.field_farm_area_type_value', (array) $this->configuration['area_type'], 'IN');
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise, filter by field_farm_area_type IS NULL.
|
||||
else {
|
||||
$query->isNull('fdffat.field_farm_area_type_value');
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\asset\Plugin\migrate\source\d7\Asset;
|
||||
use Drupal\farm_migrate\Traits\FarmQuickEntity;
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Asset source from database.
|
||||
*
|
||||
* Extends the Asset source plugin to include source properties needed for the
|
||||
* farmOS migration.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_farm_asset",
|
||||
* source_module = "farm_asset"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmAsset extends Asset {
|
||||
|
||||
use FarmQuickEntity;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$result = parent::prepareRow($row);
|
||||
if (!$result) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Prepare reference to the quick form that created this entity.
|
||||
$this->prepareQuickEntityRow($row, 'asset');
|
||||
|
||||
// Return success.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,330 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\Core\Site\Settings;
|
||||
use Drupal\farm_migrate\Traits\FarmQuickEntity;
|
||||
use Drupal\log\Plugin\migrate\source\d7\Log;
|
||||
use Drupal\migrate\MigrateException;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Log source from database.
|
||||
*
|
||||
* Extends the Log source plugin to include source properties needed for the
|
||||
* farmOS migration.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_farm_log",
|
||||
* source_module = "log"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class FarmLog extends Log {
|
||||
|
||||
use FarmQuickEntity;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$result = parent::prepareRow($row);
|
||||
if (!$result) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Prepare movement information.
|
||||
$this->prepareMovement($row);
|
||||
|
||||
// Prepare group assignment information.
|
||||
$this->prepareGroup($row);
|
||||
|
||||
// Prepare quantity information.
|
||||
$this->prepareQuantity($row);
|
||||
|
||||
// Prepare soil test information (only applicable to soil test logs).
|
||||
$this->prepareSoilTest($row);
|
||||
|
||||
// Prepare reference to the quick form that created this entity.
|
||||
$this->prepareQuickEntityRow($row, 'log');
|
||||
|
||||
// Return success.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare a log's movement information.
|
||||
*
|
||||
* @param \Drupal\migrate\Row $row
|
||||
* The row object.
|
||||
*/
|
||||
protected function prepareMovement(Row $row) {
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// Determine if we will allow overwriting "Areas" and "Geometry" fields on
|
||||
// the log with "Move to" and "Movement geometry" fields.
|
||||
$allow_overwrite = Settings::get('farm_migrate_allow_movement_overwrite', FALSE);
|
||||
|
||||
// By default, logs are not movements.
|
||||
$is_movement = FALSE;
|
||||
|
||||
// Get movement field values.
|
||||
$movement_values = $this->getFieldValues('log', 'field_farm_movement', $id);
|
||||
|
||||
// If the log has a movement, load the Field Collection.
|
||||
if (!empty($movement_values)) {
|
||||
|
||||
// Iterate through movement field values to collect field collection item
|
||||
// IDs.
|
||||
$field_collection_item_ids = [];
|
||||
foreach ($movement_values as $movement_value) {
|
||||
if (!empty($movement_value['value'])) {
|
||||
$field_collection_item_ids[] = $movement_value['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// There should only be one movement field collection associated with a
|
||||
// log, so take the first.
|
||||
$fcid = reset($field_collection_item_ids);
|
||||
|
||||
// Query the movement area references.
|
||||
$query = $this->select('field_collection_item', 'fci');
|
||||
$query->leftJoin('field_data_field_farm_move_to', 'fdffmt', "fdffmt.entity_id = fci.item_id AND fdffmt.entity_type = 'field_collection_item' AND fdffmt.bundle = 'field_farm_movement' AND fdffmt.deleted = 0");
|
||||
$query->addField('fdffmt', 'field_farm_move_to_tid', 'tid');
|
||||
$query->condition('fci.item_id', $fcid);
|
||||
$result = $query->execute()->fetchCol();
|
||||
$movement_areas = FALSE;
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $col) {
|
||||
if (!empty($col)) {
|
||||
$movement_areas[] = ['tid' => $col];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Query the movement geometry.
|
||||
$query = $this->select('field_collection_item', 'fci');
|
||||
$query->leftJoin('field_data_field_farm_geofield', 'fdffg', "fdffg.entity_id = fci.item_id AND fdffg.entity_type = 'field_collection_item' AND fdffg.bundle = 'field_farm_movement' AND fdffg.deleted = 0");
|
||||
$query->addField('fdffg', 'field_farm_geofield_geom', 'geom');
|
||||
$query->condition('fci.item_id', $fcid);
|
||||
$result = $query->execute()->fetchField();
|
||||
$movement_geometry = FALSE;
|
||||
if (!empty($result)) {
|
||||
$movement_geometry = [['geom' => $result]];
|
||||
}
|
||||
|
||||
// Get any areas/geometry stored on the log itself.
|
||||
$log_areas = $this->getFieldValues('log', 'field_farm_area', $id);
|
||||
$log_geometry = $this->getFieldValues('log', 'field_farm_geofield', $id);
|
||||
|
||||
// If the log has movement areas, then the log is a movement.
|
||||
if (!empty($movement_areas)) {
|
||||
$is_movement = TRUE;
|
||||
}
|
||||
|
||||
// If the log has a movement geometry, but no movement areas, throw an
|
||||
// exception.
|
||||
if (empty($movement_areas) && !empty($movement_geometry)) {
|
||||
$message = 'Movement has a geometry but no areas (log ' . $id . ').';
|
||||
$this->idMap->saveMessage(['id' => $id], $message, MigrationInterface::MESSAGE_WARNING);
|
||||
}
|
||||
|
||||
// If the log has area references and movement areas, and they are
|
||||
// different, throw an exception or print a warning, depending on whether
|
||||
// or not we are allowing overwrites.
|
||||
if (!empty($log_areas) && !empty($movement_areas) && $log_areas != $movement_areas) {
|
||||
$message = 'Log ' . $id . ' has both area references and movement area references. See https://github.com/farmOS/farmOS/blob/2.x/docs/hosting/migration.md#movement-logs';
|
||||
if (!$allow_overwrite) {
|
||||
throw new MigrateException($message);
|
||||
}
|
||||
else {
|
||||
$this->idMap->saveMessage(['id' => $id], $message, MigrationInterface::MESSAGE_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
// If the log has a geometry and a movement geometry, and they are
|
||||
// different, throw an exception or print a warning, depending on whether
|
||||
// or not we are allowing overwrites.
|
||||
if (!empty($log_geometry[0]['geom']) && !empty($movement_geometry[0]['geom']) && $log_geometry[0]['geom'] != $movement_geometry[0]['geom']) {
|
||||
$message = 'Log ' . $id . ' has both a geometry and a movement geometry. See https://github.com/farmOS/farmOS/blob/2.x/docs/hosting/migration.md#movement-logs';
|
||||
if (!$allow_overwrite) {
|
||||
throw new MigrateException($message);
|
||||
}
|
||||
else {
|
||||
$this->idMap->saveMessage(['id' => $id], $message, MigrationInterface::MESSAGE_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
// If the log has movement areas, copy them to the log itself.
|
||||
// This will overwrite existing area references, but an exception should
|
||||
// be thrown above unless overwriting is explicitly allowed.
|
||||
if (!empty($movement_areas)) {
|
||||
$row->setSourceProperty('field_farm_area', $movement_areas);
|
||||
}
|
||||
|
||||
// If the log has a movement geometry, copy it to the log itself.
|
||||
// This will overwrite an existing geometry, but an exception should
|
||||
// be thrown above unless overwriting is explicitly allowed.
|
||||
if (!empty($movement_geometry)) {
|
||||
$row->setSourceProperty('field_farm_geofield', $movement_geometry);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the "is_movement" property for use in migrations.
|
||||
$row->setSourceProperty('is_movement', $is_movement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare a log's group assignment information.
|
||||
*
|
||||
* @param \Drupal\migrate\Row $row
|
||||
* The row object.
|
||||
*/
|
||||
protected function prepareGroup(Row $row) {
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// By default, logs are not group assignments.
|
||||
$is_group_assignment = FALSE;
|
||||
|
||||
// Get membership field values.
|
||||
$membership_values = $this->getFieldValues('log', 'field_farm_membership', $id);
|
||||
|
||||
// If the log has a membership assignment, load the Field Collection.
|
||||
if (!empty($membership_values)) {
|
||||
|
||||
// Iterate through membership field values to collect field collection
|
||||
// item IDs.
|
||||
$field_collection_item_ids = [];
|
||||
foreach ($membership_values as $membership_value) {
|
||||
if (!empty($membership_value['value'])) {
|
||||
$field_collection_item_ids[] = $membership_value['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// There should only be one membership field collection associated with a
|
||||
// log, so take the first.
|
||||
$fcid = reset($field_collection_item_ids);
|
||||
|
||||
// Query the membership group references.
|
||||
$query = $this->select('field_collection_item', 'fci');
|
||||
$query->leftJoin('field_data_field_farm_group', 'fdffg', "fdffg.entity_id = fci.item_id AND fdffg.entity_type = 'field_collection_item' AND fdffg.bundle = 'field_farm_membership' AND fdffg.deleted = 0");
|
||||
$query->addField('fdffg', 'field_farm_group_target_id', 'target_id');
|
||||
$query->condition('fci.item_id', $fcid);
|
||||
$result = $query->execute()->fetchCol();
|
||||
$membership_groups = FALSE;
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $col) {
|
||||
if (!empty($col)) {
|
||||
$membership_groups[] = ['target_id' => $col];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the log has membership groups, then the log is a group assignment.
|
||||
if (!empty($membership_groups)) {
|
||||
$is_group_assignment = TRUE;
|
||||
}
|
||||
|
||||
// If the log has membership groups, store them in property on the log so
|
||||
// they can be processed during migration.
|
||||
if (!empty($membership_groups)) {
|
||||
$row->setSourceProperty('log_groups', $membership_groups);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the "is_group_assignment" property for use in migrations.
|
||||
$row->setSourceProperty('is_group_assignment', $is_group_assignment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare a log's quantity information.
|
||||
*
|
||||
* @param \Drupal\migrate\Row $row
|
||||
* The row object.
|
||||
*/
|
||||
protected function prepareQuantity(Row $row) {
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// Get field collections to migrate to log quantities.
|
||||
$log_quantities = $this->getFieldvalues('log', 'field_farm_quantity', $id);
|
||||
$log_inventories = $this->getFieldvalues('log', 'field_farm_inventory', $id);
|
||||
|
||||
// Iterate through field collection values to collect field collection IDs.
|
||||
$quantity_ids = [];
|
||||
foreach (array_merge($log_quantities, $log_inventories) as $field_collection) {
|
||||
if (!empty($field_collection['value'])) {
|
||||
$quantity_ids[] = $field_collection['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// Add the quantity IDs to the row for future processing.
|
||||
$row->setSourceProperty('log_quantities', $quantity_ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare a log's soil test information.
|
||||
*
|
||||
* @param \Drupal\migrate\Row $row
|
||||
* The row object.
|
||||
*/
|
||||
protected function prepareSoilTest(Row $row) {
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// Get referenced soil name term IDs.
|
||||
$soil_name_tids = [];
|
||||
foreach ($this->getFieldvalues('log', 'field_farm_soil_names', $id) as $value) {
|
||||
if (!empty($value['tid'])) {
|
||||
$soil_name_tids[] = $value['tid'];
|
||||
}
|
||||
}
|
||||
|
||||
// If no soil names are referenced, bail.
|
||||
if (empty($soil_name_tids)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Look up the term names.
|
||||
$query = $this->select('taxonomy_term_data', 't');
|
||||
$query->addField('t', 'name');
|
||||
$query->condition('t.tid', $soil_name_tids, 'IN');
|
||||
$result = $query->execute()->fetchCol();
|
||||
$soil_names = [];
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $col) {
|
||||
if (!empty($col)) {
|
||||
$soil_names[] = $col;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If there are no names, bail.
|
||||
if (empty($soil_names)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a string that summarizes the soil names. If there are multiple,
|
||||
// separate with newlines.
|
||||
if (count($soil_names) == 1) {
|
||||
$summary = $this->t('Soil name: @name', ['@name' => $soil_names[0]]);
|
||||
}
|
||||
else {
|
||||
$summary = $this->t("Soil names:\n@names", ['@names' => implode("\n", $soil_names)]);
|
||||
}
|
||||
|
||||
// The names are going to be appended to the log's Notes field, but we want
|
||||
// to make sure that whitespace is added if there is already data in the
|
||||
// Notes field.
|
||||
$notes = $this->getFieldvalues('log', 'field_farm_notes', $id);
|
||||
if (!empty($notes)) {
|
||||
$summary = "\n\n" . $summary;
|
||||
}
|
||||
|
||||
// Add the soil name summary to the row for future processing.
|
||||
$row->setSourceProperty('soil_name_summary', $summary);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Log inventory source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_farm_inventory",
|
||||
* source_module = "farm_inventory"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class Inventory extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('field_collection_item', 'fci');
|
||||
$query->addField('fci', 'item_id', 'id');
|
||||
|
||||
// Join in the numerator and denominator values.
|
||||
$query->leftJoin('field_data_field_farm_inventory_value', 'fdffiv',
|
||||
"fci.item_id = fdffiv.entity_id AND fdffiv.entity_type = 'field_collection_item' AND fdffiv.bundle = 'field_farm_inventory' AND fdffiv.deleted = '0'");
|
||||
$query->addField('fdffiv', 'field_farm_inventory_value_numerator', 'value_numerator');
|
||||
$query->addField('fdffiv', 'field_farm_inventory_value_denominator', 'value_denominator');
|
||||
$query->addExpression('SIGN(fdffiv.field_farm_inventory_value_numerator)', 'inventory_value_sign');
|
||||
|
||||
// Join in the inventory asset reference.
|
||||
$query->leftJoin('field_data_field_farm_inventory_asset', 'fdffia',
|
||||
"fci.item_id = fdffia.entity_id AND fdffia.entity_type = 'field_collection_item' AND fdffia.bundle = 'field_farm_inventory' AND fdffia.deleted = '0'");
|
||||
$query->addField('fdffia', 'field_farm_inventory_asset_target_id', 'inventory_asset');
|
||||
|
||||
// Join in the log table to get the uid.
|
||||
$query->leftJoin('field_data_field_farm_inventory', 'fdffi', 'fci.item_id = fdffi.field_farm_inventory_value');
|
||||
$query->leftJoin('log', 'l', "fdffi.entity_type = 'log' AND fdffi.entity_id = l.id");
|
||||
$query->addField('l', 'uid');
|
||||
|
||||
// Ensure we don't include archived/deleted fields.
|
||||
$query->condition('fci.archived', '0');
|
||||
$query->condition('fdffi.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 inventory item ID.'),
|
||||
'value_numerator' => $this->t('The inventory value numerator.'),
|
||||
'value_denominator' => $this->t('The inventory value denominator.'),
|
||||
'inventory_asset' => $this->t('The inventory asset.'),
|
||||
'inventory_value_sign' => $this->t('Thi sign of the inventory value. Used to determine increment or decrement.'),
|
||||
'uid' => $this->t('The user ID that created the inventory.'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['id']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Log quantity source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_farm_quantity",
|
||||
* source_module = "farm_quantity"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class Quantity extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->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 AND fdffqm.entity_type = 'field_collection_item' AND fdffqm.bundle = 'field_farm_quantity' AND fdffqm.deleted = '0'");
|
||||
$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 AND fdffqv.entity_type = 'field_collection_item' AND fdffqv.bundle = 'field_farm_quantity' AND fdffqv.deleted = '0'");
|
||||
$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 AND fdffqu.entity_type = 'field_collection_item' AND fdffqu.bundle = 'field_farm_quantity' AND fdffqu.deleted = '0'");
|
||||
$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 AND fdffql.entity_type = 'field_collection_item' AND fdffql.bundle = 'field_farm_quantity' AND fdffql.deleted = '0'");
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Migration source for the d7 sensor asset.
|
||||
*
|
||||
* Extends the Asset source to include the sensor_type and sensor_settings
|
||||
* fields as source properties for the migration.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_sensor_asset",
|
||||
* source_module = "farm_sensor"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*
|
||||
* @phpstan-ignore-next-line
|
||||
*/
|
||||
class SensorAsset extends FarmAsset {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
|
||||
// Get the parent query.
|
||||
$query = parent::query();
|
||||
|
||||
// Join in the farm_sensor table.
|
||||
$query->join('farm_sensor', 'fs', 'fa.id = fs.id');
|
||||
|
||||
// Limit by the sensor type.
|
||||
if (isset($this->configuration['sensor_type'])) {
|
||||
|
||||
// Specify the sensor type.
|
||||
if (!empty($this->configuration['sensor_type'])) {
|
||||
$query->condition('fs.type', (array) $this->configuration['sensor_type'], 'IN');
|
||||
}
|
||||
|
||||
// Allow empty sensor type.
|
||||
else {
|
||||
$query->where("fs.type = '' OR fs.type IS NULL");
|
||||
}
|
||||
}
|
||||
|
||||
// Add sensor fields aliased with correct name.
|
||||
$query->addField('fs', 'type', 'sensor_type');
|
||||
$query->addField('fs', 'settings', 'sensor_settings');
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
|
||||
// Get the sensor_settings field.
|
||||
$settings = $row->getSourceProperty('sensor_settings');
|
||||
if (!empty($settings)) {
|
||||
|
||||
// Unserialize the sensor_settings field.
|
||||
$settings_array = unserialize($settings, ['allowed_classes' => FALSE]);
|
||||
|
||||
// Re-set the source property value.
|
||||
$row->setSourceProperty('sensor_settings', $settings_array);
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Plugin\migrate\source\d7;
|
||||
|
||||
use Drupal\migrate\Plugin\migrate\source\SqlBase;
|
||||
|
||||
/**
|
||||
* Migration source for sensor listener data names.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_sensor_listener_data_names",
|
||||
* source_module = "farm_sensor_listener"
|
||||
* )
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
class SensorListenerDataNames extends SqlBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$fields = [
|
||||
'id',
|
||||
'name',
|
||||
];
|
||||
return $this->select('farm_sensor_data', 'fsd')
|
||||
->fields('fsd', $fields)
|
||||
->distinct()
|
||||
->orderBy('fsd.id');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'id' => $this->t('Sensor asset ID.'),
|
||||
'name' => $this->t('Sensor reading name'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return [
|
||||
'id' => ['type' => 'integer'],
|
||||
'name' => ['type' => 'string'],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\farm_migrate\Traits;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
|
||||
/**
|
||||
* Asset source from database.
|
||||
*
|
||||
* @deprecated in farm:2.2.0 and is removed from farm:3.0.0. Migrate from farmOS
|
||||
* v1 to v2 before upgrading to farmOS v3.
|
||||
* @see https://www.drupal.org/node/3382609
|
||||
*/
|
||||
trait FarmQuickEntity {
|
||||
|
||||
/**
|
||||
* Prepare reference to the 1.x quick form that created this entity.
|
||||
*
|
||||
* @param \Drupal\migrate\Row $row
|
||||
* The row object.
|
||||
* @param string $entity_type
|
||||
* The 2.x entity type.
|
||||
*/
|
||||
public function prepareQuickEntityRow(Row $row, string $entity_type) {
|
||||
$quick = [];
|
||||
|
||||
// Load the entity ID.
|
||||
$id = $row->getSourceProperty('id');
|
||||
|
||||
// Translate the 2.x entity type names to 1.x.
|
||||
$old_entity_types = [
|
||||
'asset' => 'farm_asset',
|
||||
'log' => 'log',
|
||||
'plan' => 'farm_plan',
|
||||
];
|
||||
if (array_key_exists($entity_type, $old_entity_types)) {
|
||||
$entity_type = $old_entity_types[$entity_type];
|
||||
}
|
||||
|
||||
// Check to see if the 1.x farm_quick module is enabled.
|
||||
$query = $this->select('system', 's');
|
||||
$query->condition('s.name', 'farm_quick');
|
||||
$query->condition('s.status', 1);
|
||||
$enabled = $query->countQuery()->execute()->fetchField();
|
||||
|
||||
// If the farm_quick module is enabled, look up quick form(s) that are
|
||||
// linked to this entity.
|
||||
if (!empty($enabled)) {
|
||||
$query = $this->select('farm_quick_entity', 'fqe');
|
||||
$query->condition('entity_type', $entity_type);
|
||||
$query->condition('entity_id', $id);
|
||||
$query->addField('fqe', 'quick_form_id');
|
||||
$result = $query->execute()->fetchCol();
|
||||
if (!empty($result)) {
|
||||
foreach ($result as $col) {
|
||||
if (!empty($col)) {
|
||||
$quick[] = $col;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Translate the 1.x quick form IDs to 2.x.
|
||||
if (!empty($quick)) {
|
||||
$new_quick_form_ids = [];
|
||||
foreach ($quick as $delta => $form_id) {
|
||||
if (array_key_exists($form_id, $new_quick_form_ids)) {
|
||||
$quick[$delta] = $new_quick_form_ids[$form_id];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the "quick" source property.
|
||||
$row->setSourceProperty('quick', $quick);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue