user profiles migration almost done, + some updates

This commit is contained in:
2019-02-06 22:05:59 +01:00
parent 168da1148d
commit 0d8e7bb92f
105 changed files with 2870 additions and 86 deletions

View File

@@ -7,6 +7,9 @@ audit: true
migration_tags:
- Drupal 7
- Content
- Materio
- Files
source:
plugin: d7_pubic_file
scheme: public

View File

@@ -53,6 +53,10 @@ process:
source: field_public_email
process:
value: email
# field_address:
# plugin: addressfield
# source: field_address
field_public_address:
plugin: iterator
source: field_public_address

View File

@@ -0,0 +1,99 @@
id: d7_user_profile
label: D7 User Profiles
migration_group: d7_materio
audit: true
migration_tags:
- Drupal 7
- Content
- Materio
source:
plugin: d7_user_profile
high_water_property:
name: changed
alias: p
destination:
plugin: entity:profile
process:
# id: pid
# label: label
type:
plugin: static_map
source: type
map:
contact_operationnel: contact_company
adherent: member
uid:
plugin: migration_lookup
migration: d7_users
source: uid
field_activity_sector: field_activity_sector
field_employee: field_employee
field_first_name: field_first_name
field_name: field_name
field_naf: field_naf
field_organization: field_organization
field_phone: field_private_phone
field_position: field_private_quality
field_service: field_service
field_siret: field_siret
field_title: field_private_name_title
field_vat_number_intra_ce: field_vat_number_intra_ce
field_website: field_user_website
field_memo: field_memo
# field_email:
# plugin: merge
# source:
# - field_administrative_email
# - field_private_email
# field_name:
# plugin: merge
# source:
# - field_name
# - field_private_name
# field_address:
# plugin: addressfield
# source: field_addresse
field_address:
plugin: iterator
source: field_adresse
process:
# langcode:
country_code: country
administrative_area: administrative_area
locality: locality
dependent_locality: dependent_locality
postal_code: postal_code
# sorting_code:
address_line1: thoroughfare
# address_line2:
organization: organisation_name
given_name: first_name
# additional_name:
family_name: last_name
# SOURCES
# sub_administrative_area
# premise
# sub_premise
# name_line
# data
migration_dependencies:
required:
- d7_users
dependencies:
enforced:
module:
- migrate_plus
- migrate_tools
- profile

View File

@@ -5,6 +5,7 @@ audit: true
migration_tags:
- Drupal 7
- Content
- Materio
class: Drupal\user\Plugin\migrate\User
source:

View File

@@ -8,4 +8,6 @@ shared_configuration:
dependencies:
enforced:
module:
- migrate_plus
- migrate_tools
- materio_migrate

View File

@@ -0,0 +1,168 @@
<?php
namespace Drupal\materio_migrate\Plugin\migrate\source;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
use Drupal\Core\Database\Query\SelectInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Extension\ModuleHandler;
use Drupal\Core\State\StateInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Locale\CountryManagerInterface;
use libphonenumber\PhoneNumber;
use libphonenumber\PhoneNumberUtil;
use libphonenumber\PhoneNumberFormat;
/**
* Drupal 7 node source from database.
*
* @MigrateSource(
* id = "d7_user_profile",
* source_module = "profile2"
* )
*/
class D7UserProfile extends FieldableEntity {
/**
* Phone Number util.
*
* @var \libphonenumber\PhoneNumberUtil
*/
public $phoneUtils;
/**
* Country Manager service.
*
* @var \Drupal\Core\Locale\CountryManagerInterface
*/
public $countryManager;
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, CountryManagerInterface $country_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
$this->moduleHandler = $module_handler;
$this->phoneUtils = PhoneNumberUtil::getInstance();
$this->countryManager = $country_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('state'),
$container->get('entity.manager'),
$container->get('module_handler'),
$container->get('country_manager')
);
}
/**
* {@inheritdoc}
*/
public function query() {
// Select node in its last revision.
$query = $this->select('profile', 'p')
->fields('p', [
'pid',
'type',
'uid',
'label',
'created',
'changed',
])
->orderBy('changed');
return $query;
}
/**
* {@inheritdoc}
*/
public function prepareRow(Row $row) {
$pid = $row->getSourceProperty('pid');
$uid = $row->getSourceProperty('uid');
$type = $row->getSourceProperty('type');
// drush_print('-- '.$pid."\t".$uid."\t".$type);
// Get Field API field values.
foreach ($this->getFields('profile2', $type) as $field_name => $field) {
$row->setSourceProperty($field_name, $this->getFieldValues('profile2', $field_name, $pid));
}
// make sure that field_website url is absolute
$field_website = $row->getSourceProperty('field_user_website');
if(isset($field_website[0]['url'])){
$url = $field_website[0]['url'];
if(!strpos($url, 'http://')){
$field_website[0]['url'] = 'http://'.$url;
$row->setSourceProperty('field_user_website', $field_website);
}
}
// convert phone field with libphonenumber
$field_phone = $row->getSourceProperty('field_private_phone');
if(isset($field_phone[0]['number']) && !empty($field_phone[0]['number'])){
$national_number = $field_phone[0]['number'];
$region = strtoupper($field_phone[0]['country_codes']);
// isValidRegionCode($regionCode)
if($this->phoneUtils->isPossibleNumber($national_number, $region)){
$number = $this->phoneUtils->parse($national_number, $region);
$row->setSourceProperty('field_private_phone', $this->phoneUtils->format($number, PhoneNumberFormat::E164));
}else{
// add bad phone number to memo field
$memo .= "#migration : invalid phone number: ".$national_number.' region: '.$region."\n";
drush_print('WARNING: phone number invalide; number: '.$national_number.' region: '.$region);
}
}
// record migration errors in field_memo
if(isset($memo)){
$field_memo = $row->getSourceProperty('field_memo');
$field_memo[0]['value'] .= "\n".$memo;
$row->setSourceProperty('field_memo', $field_memo);
}
return parent::prepareRow($row);
}
/**
* {@inheritdoc}
*/
public function fields() {
$fields = [
'pid' => $this->t('Profile ID'),
'type' => $this->t('Type'),
'uid' => $this->t('Title'),
'label' => $this->t('Label'),
'created' => $this->t('Created timestamp'),
'changed' => $this->t('Modified timestamp'),
];
return $fields;
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['pid']['type'] = 'integer';
$ids['pid']['alias'] = 'p';
return $ids;
}
}