123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- namespace Drupal\materio_migrate\Plugin\migrate\source;
- use Drupal\migrate\Row;
- use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
- /**
- * Drupal 7 user source from database.
- *
- * @MigrateSource(
- * id = "d7_users",
- * source_module = "user"
- * )
- */
- class D7Users extends FieldableEntity {
- /**
- * {@inheritdoc}
- */
- public function query() {
- return $this->select('users', 'u')
- ->fields('u')
- ->condition('u.uid', 1, '>');
- }
- /**
- * {@inheritdoc}
- */
- public function fields() {
- $fields = [
- 'uid' => $this->t('User ID'),
- 'name' => $this->t('Username'),
- 'pass' => $this->t('Password'),
- 'mail' => $this->t('Email address'),
- 'signature' => $this->t('Signature'),
- 'signature_format' => $this->t('Signature format'),
- 'created' => $this->t('Registered timestamp'),
- 'access' => $this->t('Last access timestamp'),
- 'login' => $this->t('Last login timestamp'),
- 'status' => $this->t('Status'),
- 'timezone' => $this->t('Timezone'),
- 'language' => $this->t('Language'),
- 'picture' => $this->t('Picture'),
- 'init' => $this->t('Init'),
- 'data' => $this->t('User data'),
- 'roles' => $this->t('Roles'),
- ];
- // Profile fields.
- if ($this->moduleExists('profile')) {
- $fields += $this->select('profile_fields', 'pf')
- ->fields('pf', ['name', 'title'])
- ->execute()
- ->fetchAllKeyed();
- }
- return $fields;
- }
- /**
- * {@inheritdoc}
- */
- public function prepareRow(Row $row) {
- $uid = $row->getSourceProperty('uid');
- $roles = $this->select('users_roles', 'ur')
- ->fields('ur', ['rid'])
- ->condition('ur.uid', $uid)
- ->execute()
- ->fetchCol();
- $row->setSourceProperty('roles', $roles);
- $row->setSourceProperty('data', unserialize($row->getSourceProperty('data')));
- // If this entity was translated using Entity Translation, we need to get
- // its source language to get the field values in the right language.
- // The translations will be migrated by the d7_user_entity_translation
- // migration.
- $entity_translatable = $this->isEntityTranslatable('user');
- $source_language = $this->getEntityTranslationSourceLanguage('user', $uid);
- $language = $entity_translatable && $source_language ? $source_language : $row->getSourceProperty('language');
- $row->setSourceProperty('entity_language', $language);
- // Get Field API field values.
- foreach ($this->getFields('user') as $field_name => $field) {
- // Ensure we're using the right language if the entity and the field are
- // translatable.
- $field_language = $entity_translatable && $field['translatable'] ? $language : NULL;
- $field_values = $this->getFieldValues('user', $field_name, $uid, NULL, $field_language);
- // $field_values = [];
- // if ($field_name === 'field_company') {
- // // print($uid . " ---\n");
- // // print_r($tmp_field_values);
- // // fix the taxo tid as tode module replace it by node nid
- // // get the real tode tid
- // foreach ($tmp_field_values as $key => $value) {
- // $tode_tid = $this->select('field_data_field_tode_company', 'tode')
- // ->condition('entity_type', 'node')
- // ->condition('entity_id', $value['tid'])
- // ->fields('tode', ['field_tode_company_tid'])
- // ->execute()->fetchField();
- // $field_values[] = array('tid'=>$tode_tid);
- // }
- // // print_r($field_values);
- // $row->setSourceProperty('companies', $field_values);
- // }
- $row->setSourceProperty($field_name, $field_values);
- }
- // Get profile field values. This code is lifted directly from the D6
- // ProfileFieldValues plugin.
- if ($this->getDatabase()->schema()->tableExists('profile_value')) {
- $query = $this->select('profile_value', 'pv')
- ->fields('pv', ['fid', 'value']);
- $query->leftJoin('profile_field', 'pf', 'pf.fid=pv.fid');
- $query->fields('pf', ['name', 'type']);
- $query->condition('uid', $row->getSourceProperty('uid'));
- $results = $query->execute();
- foreach ($results as $profile_value) {
- if ($profile_value['type'] == 'date') {
- $date = unserialize($profile_value['value']);
- $date = date('Y-m-d', mktime(0, 0, 0, $date['month'], $date['day'], $date['year']));
- $row->setSourceProperty($profile_value['name'], ['value' => $date]);
- }
- elseif ($profile_value['type'] == 'list') {
- // Explode by newline and comma.
- $row->setSourceProperty($profile_value['name'], preg_split("/[\r\n,]+/", $profile_value['value']));
- }
- else {
- $row->setSourceProperty($profile_value['name'], [$profile_value['value']]);
- }
- }
- }
- return parent::prepareRow($row);
- }
- /**
- * {@inheritdoc}
- */
- public function getIds() {
- return [
- 'uid' => [
- 'type' => 'integer',
- 'alias' => 'u',
- ],
- ];
- }
- }
|