|
@@ -0,0 +1,132 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Drupal\edlp_migrate\Plugin\migrate\source;
|
|
|
+
|
|
|
+use Drupal\migrate\Row;
|
|
|
+use Drupal\user\Plugin\migrate\source\d6\User as D6User;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Source plugin for edlp user accounts.
|
|
|
+ *
|
|
|
+ * @MigrateSource(
|
|
|
+ * id = "edlp_d6_users"
|
|
|
+ * )
|
|
|
+ */
|
|
|
+class EdlpD6Users extends D6User {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function query() {
|
|
|
+ return $this->select('users', 'u')
|
|
|
+ ->fields('u', array_keys($this->baseFields()))
|
|
|
+ ->condition('u.uid', 0, '>');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function fields() {
|
|
|
+ $fields = $this->baseFields();
|
|
|
+
|
|
|
+ // Add roles field.
|
|
|
+ $fields['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) {
|
|
|
+ // User roles.
|
|
|
+ $roles = $this->select('users_roles', 'ur')
|
|
|
+ ->fields('ur', ['rid'])
|
|
|
+ ->condition('ur.uid', $row->getSourceProperty('uid'))
|
|
|
+ ->execute()
|
|
|
+ ->fetchCol();
|
|
|
+ $row->setSourceProperty('roles', $roles);
|
|
|
+
|
|
|
+ // We are adding here the Event contributed module column.
|
|
|
+ // @see https://api.drupal.org/api/drupal/modules%21user%21user.install/function/user_update_7002/7
|
|
|
+ if ($row->hasSourceProperty('timezone_id') && $row->getSourceProperty('timezone_id')) {
|
|
|
+ if ($this->getDatabase()->schema()->tableExists('event_timezones')) {
|
|
|
+ $event_timezone = $this->select('event_timezones', 'e')
|
|
|
+ ->fields('e', ['name'])
|
|
|
+ ->condition('e.timezone', $row->getSourceProperty('timezone_id'))
|
|
|
+ ->execute()
|
|
|
+ ->fetchField();
|
|
|
+ if ($event_timezone) {
|
|
|
+ $row->setSourceProperty('event_timezone', $event_timezone);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Unserialize Data.
|
|
|
+ $row->setSourceProperty('data', unserialize($row->getSourceProperty('data')));
|
|
|
+
|
|
|
+ return parent::prepareRow($row);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function getIds() {
|
|
|
+ return [
|
|
|
+ 'uid' => [
|
|
|
+ 'type' => 'integer',
|
|
|
+ 'alias' => 'u',
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Returns the user base fields to be migrated.
|
|
|
+ *
|
|
|
+ * @return array
|
|
|
+ * Associative array having field name as key and description as value.
|
|
|
+ */
|
|
|
+ protected function baseFields() {
|
|
|
+ $fields = [
|
|
|
+ 'uid' => $this->t('User ID'),
|
|
|
+ 'name' => $this->t('Username'),
|
|
|
+ 'pass' => $this->t('Password'),
|
|
|
+ 'mail' => $this->t('Email address'),
|
|
|
+ 'theme' => $this->t('Theme'),
|
|
|
+ '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'),
|
|
|
+ ];
|
|
|
+
|
|
|
+ // Possible field added by Date contributed module.
|
|
|
+ // @see https://api.drupal.org/api/drupal/modules%21user%21user.install/function/user_update_7002/7
|
|
|
+ if ($this->getDatabase()->schema()->fieldExists('users', 'timezone_name')) {
|
|
|
+ $fields['timezone_name'] = $this->t('Timezone (Date)');
|
|
|
+ }
|
|
|
+
|
|
|
+ // Possible field added by Event contributed module.
|
|
|
+ // @see https://api.drupal.org/api/drupal/modules%21user%21user.install/function/user_update_7002/7
|
|
|
+ if ($this->getDatabase()->schema()->fieldExists('users', 'timezone_id')) {
|
|
|
+ $fields['timezone_id'] = $this->t('Timezone (Event)');
|
|
|
+ }
|
|
|
+
|
|
|
+ return $fields;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|