PluginProbe
Import WP – CSV & XML Import Export for WordPress / 2.15.0
Import WP – CSV & XML Import Export for WordPress v2.15.0
2.15.1 2.15.0 2.14.24 2.14.23 2.7.0 2.7.1 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 2.9.1 All 144 releases
jc-importer / class / Common / Importer / Template / UserTemplate.php

UserTemplate.php in Import WP – CSV & XML Import Export for WordPress 2.15.0, at class/Common/Importer/Template/UserTemplate.php

296 lines 10.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ImportWP\Common\Importer\Template;
4
5 use ImportWP\Common\Importer\Exception\MapperException;
6 use ImportWP\Common\Importer\ParsedData;
7 use ImportWP\Common\Importer\TemplateInterface;
8 use ImportWP\EventHandler;
9
10 class UserTemplate extends Template implements TemplateInterface
11 {
12 protected $name = 'User';
13 protected $mapper = 'user';
14
15 protected $field_map = [
16 'ID' => 'user.ID',
17 'user_login' => 'user.user_login',
18 'user_email' => 'user.user_email',
19 'first_name' => 'user.first_name',
20 'last_name' => 'user.last_name',
21 'role' => 'user.role',
22 'user_url' => 'user.user_url',
23 'user_pass' => 'user.user_pass',
24 'user_nicename' => 'user.user_nicename',
25 'display_name' => 'user.display_name',
26 'description' => 'user.description',
27 ];
28
29 protected $optional_fields = [
30 'ID',
31 'user_url',
32 'user_pass',
33 'role',
34 'user_nicename',
35 'display_name',
36 'description'
37 ];
38
39 public function __construct(EventHandler $event_handler)
40 {
41 parent::__construct($event_handler);
42
43 $this->groups[] = 'user';
44 $this->field_options = array_merge($this->field_options, [
45 'user.role' => [$this, 'get_user_role_options'],
46 ]);
47 }
48
49 public function register()
50 {
51 $groups = [];
52
53 // User
54 $groups[] = $this->register_group(__('User Fields', 'jc-importer'), 'user', [
55 $this->register_field(__('ID', 'jc-importer'), 'ID', [
56 'tooltip' => __('ID is only used to reference existing records', 'jc-importer')
57 ]),
58 $this->register_core_field(__('Username', 'jc-importer'), 'user_login', [
59 'tooltip' => __('The user\'s login username', 'jc-importer')
60 ]),
61 $this->register_core_field(__('Email', 'jc-importer'), 'user_email', [
62 'tooltip' => __('The user email address', 'jc-importer')
63 ]),
64 $this->register_core_field(__('First Name', 'jc-importer'), 'first_name', [
65 'tooltip' => __('The user\'s first name', 'jc-importer')
66 ]),
67 $this->register_core_field(__('Last Name', 'jc-importer'), 'last_name', [
68 'tooltip' => __('The user\'s last name', 'jc-importer')
69 ]),
70 $this->register_field(__('Role', 'jc-importer'), 'role', [
71 'tooltip' => __('The plain-text user password', 'jc-importer'),
72 'options' => 'callback',
73 'default' => 'subscriber'
74 ]),
75 $this->register_field(__('Website', 'jc-importer'), 'user_url', [
76 'tooltip' => __('The user\'s website address', 'jc-importer')
77 ]),
78 $this->register_field(__('Password', 'jc-importer'), 'user_pass', [
79 'tooltip' => __('The plain-text user password', 'jc-importer')
80 ]),
81 $this->register_field(__('Nicename', 'jc-importer'), 'user_nicename', []),
82 $this->register_field(__('Display Name', 'jc-importer'), 'display_name', []),
83 $this->register_field(__('Description', 'jc-importer'), 'description', []),
84 ], ['link' => 'https://www.importwp.com/docs/wordpress-user-importer-template/']);
85
86 return $groups;
87 }
88
89
90
91 public function register_settings()
92 {
93 return [
94 $this->register_field(__('Enable user notifications.', 'jc-importer'), 'notify_users', [
95 'type' => 'checkbox',
96 'tooltip' => __('Trigger the action to send WordPress notification emails', 'jc-importer')
97 ]),
98 $this->register_field(__('Generate user password.', 'jc-importer'), 'generate_pass', [
99 'type' => 'checkbox',
100 'tooltip' => __('Enable the generation of user passwords', 'jc-importer')
101 ]),
102 ];
103 }
104
105 public function register_options()
106 {
107 return [];
108 }
109
110 /**
111 * Process data before record is importer.
112 *
113 * Alter data that is passed to the mapper.
114 *
115 * @param ParsedData $data
116 * @return ParsedData
117 */
118 public function pre_process(ParsedData $data)
119 {
120 $data = parent::pre_process($data);
121
122 $user_field_map = [
123 'ID' => $data->getValue('user.ID'),
124 'user_pass' => $data->getValue('user.user_pass'),
125 'user_login' => $data->getValue('user.user_login'),
126 'user_nicename' => $data->getValue('user.user_nicename'),
127 'user_url' => $data->getValue('user.user_url'),
128 'user_email' => $data->getValue('user.user_email'),
129 'display_name' => $data->getValue('user.display_name'),
130 'nickname' => $data->getValue('user.nickname'),
131 'first_name' => $data->getValue('user.first_name'),
132 'last_name' => $data->getValue('user.last_name'),
133 'description' => $data->getValue('user.description'),
134 'rich_editing' => $data->getValue('user.rich_editing'),
135 'user_registered' => $data->getValue('user.user_registered'),
136 'role' => $data->getValue('user.role'),
137 'jabber' => $data->getValue('user.jabber'),
138 'aim' => $data->getValue('user.aim'),
139 'yim' => $data->getValue('user.yim'),
140 ];
141
142 // remove fields that have not been set
143 foreach ($user_field_map as $field_key => $field_map) {
144
145 if ($field_map === false) {
146 unset($user_field_map[$field_key]);
147 continue;
148 }
149 }
150
151 foreach ($this->optional_fields as $optional_field) {
152 if (true !== $this->importer->isEnabledField('user.' . $optional_field)) {
153 unset($user_field_map[$optional_field]);
154 }
155 }
156
157 $generate_pass = $this->importer->getSetting('generate_pass');
158 if ($generate_pass === true) {
159 $user_field_map['user_pass'] = wp_generate_password(10);
160 }
161
162 $notify_users = $this->importer->getSetting('notify_users');
163 if ($notify_users !== true) {
164
165 // Disable password changed email
166 if (isset($user_field_map['user_pass'])) {
167 add_filter('send_password_change_email', '__return_false');
168 }
169
170 // Disable user_email changed email
171 if (isset($user_field_map['user_email'])) {
172 add_filter('send_email_change_email', '__return_false');
173 }
174 }
175
176 foreach ($user_field_map as $key => $value) {
177 $user_field_map[$key] = apply_filters('iwp/template/process_field', $value, $key, $this->importer);
178 }
179
180 $data->replace($user_field_map, 'default');
181
182 return $data;
183 }
184
185 /**
186 * Process data after record is importer.
187 *
188 * Use data that is returned from the mapper.
189 *
190 * @param int $user_id
191 * @param ParsedData $data
192 * @return void
193 */
194 final public function post_process($user_id, ParsedData $data)
195 {
196 $notify_users = $this->importer->getSetting('notify_users');
197 if ($notify_users === true) {
198 wp_new_user_notification($user_id, null, 'user');
199 }
200
201 parent::post_process($user_id, $data);
202 }
203
204 /**
205 * Get list of posts
206 *
207 * @return array|\WP_Error
208 */
209 public function get_user_role_options($importer_data)
210 {
211 $result = [];
212
213 global $wp_roles;
214 foreach ($wp_roles->roles as $role => $role_arr) {
215 $result[] = [
216 'value' => '' . $role,
217 'label' => $role_arr['name']
218 ];
219 }
220
221 return $result;
222 }
223
224 /**
225 * Convert fields/headings to data map
226 *
227 * @param mixed $fields
228 * @return array
229 */
230 public function generate_field_map($fields, $importer)
231 {
232 $result = parent::generate_field_map($fields, $importer);
233 $map = $result['map'];
234 $enabled = $result['enabled'];
235
236 foreach ($fields as $index => $field) {
237 if (isset($this->field_map[$field])) {
238
239 // Handle core fields
240 $field_key = $this->field_map[$field];
241 $map[$field_key] = sprintf('{%s}', $index);
242
243 if (in_array($field, $this->optional_fields)) {
244 $enabled[] = $field_key;
245 }
246
247 if (in_array($field, ['role'])) {
248 $map[$field_key . '._enable_text'] = 'yes';
249 }
250 }
251 }
252
253 return [
254 'map' => $map,
255 'enabled' => $enabled
256 ];
257 }
258
259 public function get_permission_fields($importer_model)
260 {
261 $permission_fields = parent::get_permission_fields($importer_model);
262
263 $permission_fields['core'] = [
264 'ID' => __('ID', 'jc-importer'),
265 'user_pass' => __('Password', 'jc-importer'),
266 'user_login' => __('Login', 'jc-importer'),
267 'user_nicename' => __('Nice name', 'jc-importer'),
268 'user_url' => __('Url', 'jc-importer'),
269 'user_email' => __('Email', 'jc-importer'),
270 'display_name' => __('Display Name', 'jc-importer'),
271 'nickname' => __('Nick name', 'jc-importer'),
272 'first_name' => __('First name', 'jc-importer'),
273 'last_name' => __('Last name', 'jc-importer'),
274 'description' => __('Description', 'jc-importer'),
275 'rich_editing' => __('Rich Editing', 'jc-importer'),
276 'user_registered' => __('User Registered', 'jc-importer'),
277 'role' => __('Role', 'jc-importer'),
278 'jabber' => __('Jabber', 'jc-importer'),
279 'aim' => __('Aim', 'jc-importer'),
280 'yim' => __('Yim', 'jc-importer'),
281 ];
282
283 return $permission_fields;
284 }
285
286 public function get_unique_identifier_options($importer_model, $unique_fields = [])
287 {
288 $output = parent::get_unique_identifier_options($importer_model, $unique_fields);
289
290 return array_merge(
291 $output,
292 $this->get_unique_identifier_options_from_map($importer_model, $unique_fields, $this->field_map, $this->optional_fields)
293 );
294 }
295 }
296