80db9df9696d4b541e4c5e8a1ab51762de8d4826
[yaffs-website] / web / core / modules / user / src / Plugin / migrate / source / d6 / ProfileFieldValues.php
1 <?php
2
3 namespace Drupal\user\Plugin\migrate\source\d6;
4
5 use Drupal\migrate\Row;
6 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
7
8 /**
9  * Drupal 6 profile fields values source.
10  *
11  * @MigrateSource(
12  *   id = "d6_profile_field_values",
13  *   source_provider = "profile"
14  * )
15  */
16 class ProfileFieldValues extends DrupalSqlBase {
17
18   /**
19    * {@inheritdoc}
20    */
21   public function query() {
22     $query = $this->select('profile_values', 'pv')
23       ->distinct()
24       ->fields('pv', ['uid']);
25
26     return $query;
27   }
28
29   /**
30    * {@inheritdoc}
31    */
32   public function prepareRow(Row $row) {
33     // Find profile values for this row.
34     $query = $this->select('profile_values', 'pv')
35       ->fields('pv', ['fid', 'value']);
36     $query->leftJoin('profile_fields', 'pf', 'pf.fid=pv.fid');
37     $query->fields('pf', ['name', 'type']);
38     $query->condition('uid', $row->getSourceProperty('uid'));
39     $results = $query->execute();
40
41     foreach ($results as $profile_value) {
42       // Check special case for date. We need to unserialize.
43       if ($profile_value['type'] == 'date') {
44         $date = unserialize($profile_value['value']);
45         $date = date('Y-m-d', mktime(0, 0, 0, $date['month'], $date['day'], $date['year']));
46         $row->setSourceProperty($profile_value['name'], ['value' => $date]);
47       }
48       elseif ($profile_value['type'] == 'list') {
49         // Explode by newline and comma.
50         $row->setSourceProperty($profile_value['name'], preg_split("/[\r\n,]+/", $profile_value['value']));
51       }
52       else {
53         $row->setSourceProperty($profile_value['name'], [$profile_value['value']]);
54       }
55     }
56
57     return parent::prepareRow($row);
58   }
59
60   /**
61    * {@inheritdoc}
62    */
63   public function fields() {
64     $fields = [
65       'fid' => $this->t('Unique profile field ID.'),
66       'uid' => $this->t('The user Id.'),
67       'value' => $this->t('The value for this field.'),
68     ];
69
70     $query = $this->select('profile_values', 'pv')
71       ->fields('pv', ['fid', 'value']);
72     $query->leftJoin('profile_fields', 'pf', 'pf.fid=pv.fid');
73     $query->fields('pf', ['name', 'title']);
74     $results = $query->execute();
75     foreach ($results as $profile) {
76       $fields[$profile['name']] = $this->t($profile['title']);
77     }
78
79     return $fields;
80   }
81
82   /**
83    * {@inheritdoc}
84    */
85   public function getIds() {
86     return [
87       'uid' => [
88         'type' => 'integer',
89         'alias' => 'pv',
90       ],
91     ];
92   }
93
94 }