company term migration : name, memo, phone, website
This commit is contained in:
@@ -23,8 +23,6 @@ process:
|
||||
plugin: default_value
|
||||
default_value: company
|
||||
name: name
|
||||
'description/value': description
|
||||
'description/format': format
|
||||
weight: weight
|
||||
# Only attempt to stub real (non-zero) parents.
|
||||
parent_id:
|
||||
@@ -34,12 +32,40 @@ process:
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_company
|
||||
migration: d7_taxonomy_term_companie
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
forum_container: is_container
|
||||
changed: timestamp
|
||||
|
||||
# TODO: tode node company
|
||||
# FROM TODE (linked tode node)
|
||||
field_website:
|
||||
plugin: iterator
|
||||
source: field_website
|
||||
process:
|
||||
uri: url
|
||||
title: title
|
||||
options: attributes
|
||||
field_memo: field_memo
|
||||
field_public_phone: public_phone
|
||||
# plugin: iterator
|
||||
# source: field_public_phone
|
||||
# process:
|
||||
# value: number
|
||||
# # ??: country_codes
|
||||
# # ??: extension
|
||||
|
||||
|
||||
field_public_email: field_public_email
|
||||
field_departement: field_departement
|
||||
field_description: body
|
||||
# 'description/value': description
|
||||
# 'description/format': format
|
||||
field_infos_from_company: field_infos_from_company
|
||||
field_public_address: field_public_address
|
||||
|
||||
field_note: field_note
|
||||
field_attachments: field_attachments
|
||||
|
||||
# workflow ??
|
||||
|
@@ -11,6 +11,7 @@ dependencies:
|
||||
- migrate_plus:migrate_plus
|
||||
- migrate_tools:migrate_tools
|
||||
# - drupal:field_group_migrate
|
||||
- telephone_validation
|
||||
|
||||
config_devel:
|
||||
install:
|
||||
|
@@ -4,6 +4,15 @@ namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Locale\CountryManagerInterface;
|
||||
use libphonenumber\PhoneNumber;
|
||||
use libphonenumber\PhoneNumberUtil;
|
||||
use libphonenumber\PhoneNumberFormat;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
@@ -13,7 +22,45 @@ use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermCompany extends FieldableEntity {
|
||||
class D7TaxonomyTermCompany extends FieldableEntity implements ContainerFactoryPluginInterface{
|
||||
|
||||
/**
|
||||
* Phone Number util.
|
||||
*
|
||||
* @var \libphonenumber\PhoneNumberUtil
|
||||
*/
|
||||
public $phoneUtils;
|
||||
|
||||
/**
|
||||
* Country Manager service.
|
||||
*
|
||||
* @var \Drupal\Core\Locale\CountryManagerInterface
|
||||
*/
|
||||
public $countryManager;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, CountryManagerInterface $country_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
|
||||
$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('country_manager')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
@@ -21,8 +68,8 @@ class D7TaxonomyTermCompany extends FieldableEntity {
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->distinct()
|
||||
->orderBy('tid');
|
||||
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
|
||||
$query->addField('tv', 'machine_name');
|
||||
|
||||
@@ -46,6 +93,10 @@ class D7TaxonomyTermCompany extends FieldableEntity {
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
'public_phone' => $this->t('Public phone converted to new format (with libphonenumber)')
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
@@ -55,12 +106,19 @@ class D7TaxonomyTermCompany extends FieldableEntity {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
print("\n".'-- prepareRow -- '.$row->getSourceProperty('tid')." -- ".$row->getSourceProperty('name')."\n");
|
||||
$language = $row->getSourceProperty('language');
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
drush_print('-- '.$language.' -- '.$tid." -- ".$row->getSourceProperty('name')." -- ".$row->getSourceProperty('weight'));
|
||||
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach (array_keys($this->getFields('taxonomy_term', $row->getSourceProperty('machine_name'))) as $field) {
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
$row->setSourceProperty($field, $this->getFieldValues('taxonomy_term', $field, $tid));
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// Find parents for this row.
|
||||
@@ -70,25 +128,53 @@ class D7TaxonomyTermCompany extends FieldableEntity {
|
||||
->execute()
|
||||
->fetchCol();
|
||||
$row->setSourceProperty('parent', $parents);
|
||||
// print_r($parents);
|
||||
|
||||
// If the term name or term description were replaced by real fields using
|
||||
// the Drupal 7 Title module, use the fields value instead of the term name
|
||||
// or term description.
|
||||
// TODO: translations
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
// print_r($name_field);
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
$description_field = $row->getSourceProperty('description_field');
|
||||
if (isset($description_field[0]['value'])) {
|
||||
$row->setSourceProperty('description', $description_field[0]['value']);
|
||||
}
|
||||
|
||||
// get the tode nid
|
||||
$tode_nid = $this->select('field_data_field_tode_company', 'tode')
|
||||
->condition('entity_type', 'node')
|
||||
->condition('field_tode_company_tid', $tid)
|
||||
->fields('tode', ['entity_id'])
|
||||
->execute()->fetchField();
|
||||
// drush_print('tode_nid: '.$tode_nid);
|
||||
|
||||
// get the tode fields
|
||||
foreach ($this->getFields('node', 'company') as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$field_values = $this->getFieldValues('node', $field_name, $tode_nid, null, $field_language);
|
||||
drush_print($field_name.': ');
|
||||
print_r($field_values);
|
||||
$row->setSourceProperty($field_name, $field_values);
|
||||
}
|
||||
|
||||
// make sure that feild_website url is absolute
|
||||
$field_website = $row->getSourceProperty('field_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_website', $field_website);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: tode node company
|
||||
// convert phone field with libphonenumber
|
||||
$field_phone = $row->getSourceProperty('field_public_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']);
|
||||
$number = $this->phoneUtils->parse($national_number, $region);
|
||||
$row->setSourceProperty('public_phone', $this->phoneUtils->format($number, PhoneNumberFormat::E164));
|
||||
}
|
||||
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
Reference in New Issue
Block a user