pino-8.x-1.2-no-core/modules/member_import/member_import.batch.inc

modules/member_import/member_import.batch.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
 
/**
 * @file
 * Handler for member_import batch importing.
 */
 
use Drupal\member\Entity\Member;
use Drupal\taxonomy\Entity\Term;
 
/**
 * Main batch task.
 */
function member_import_batch_import($row, $field_relations, &$context) {
 
  $entity_field_manager = \Drupal::service('entity_field.manager');
 
  $field_definitions = $entity_field_manager->getFieldStorageDefinitions('member');
 
  $member_data = [];
 
  foreach ($row as $key => $value) {
 
    if (isset($field_relations[$key]) && $field_relations[$key] != "") {
 
      // The field is set to be inserted.
      $type = $field_definitions[$field_relations[$key]]->getType();
 
      // Modify the data if necessary before inserting.
      switch ($type) {
        case 'boolean':
          // Booleans are tricky, let's assume that empty fields are negative.
          if ($value && $value != '') {
            $member_data[$field_relations[$key]] = 1;
          }
          else {
            $member_data[$field_relations[$key]] = 0;
          }
          break;
 
        case 'datetime':
          $member_data[$field_relations[$key]] = date("Y-m-d", strtotime($value));
          break;
 
        case 'timestamp':
          $member_data[$field_relations[$key]] = strtotime($value);
          break;
 
        case 'entity_reference':
 
          /*
             Let's presume the data is separated by commas
             and that the data is for the position field
          */
          $positions = explode(",",$value);
 
          foreach($positions as $position) {
 
            if($position != "") {
 
              $position = trim($position);
 
              // Try to load as taxonomy term
              $terms = \Drupal::entityTypeManager()
                ->getStorage('taxonomy_term')
                ->loadByProperties([
                  'name' => $position,
                  'vid' => 'positions',
                ]);
 
              $term = reset($terms);
 
              if (!$terms) {
 
                // Term not found, let's create it
                $term = Term::create([
                  'parent' => [],
                  'vid' => 'positions',
                  'name' => $position,
                ]);
 
                $term->save();
 
              }
 
              $member_data[$field_relations[$key]][] = ['target_id' => $term->id()];
            }
          }
 
          break;
 
        default:
          $member_data[$field_relations[$key]] = $value;
          break;
      }
 
    }
 
  }
 
  \Drupal::logger('member_import')->notice(print_r($member_data, TRUE));
 
  $member = Member::create($member_data);
 
  $member->save();
 
  $context['results'][] = $member->id();
  $context['message'] = t('Imported user @user', ['@user' => $member->getName()]);
}
 
/**
 * Finished function when batch finishes.
 */
function member_import_batch_import_finished($success, $results, $operations) {
  // The 'success' parameter means no fatal PHP errors were detected. All
  // other error management should be handled using 'results'.
  if ($success) {
    \Drupal::messenger()->addMessage(t('%members members were imported succesfully.', ['%members' => count($results)]), 'status');
  }
  else {
    \Drupal::messenger()->addMessage(t('An error occurred and importing did not complete.'), 'error');
  }
 
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc