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
← All changes | class/Common/Exporter/Mapper/UserMapper.php +73 -25 2.7.3 → 2.15.0 View file →
@@ -1,8 +1,9 @@
1 1 <?php
2 2
3 3 namespace ImportWP\Common\Exporter\Mapper;
4 4
5 +use ImportWP\Common\Exporter\ExporterRecord;
5 6 use ImportWP\Common\Exporter\MapperInterface;
6 7
7 8 class UserMapper extends AbstractMapper implements MapperInterface
8 9 {
@@ -10,10 +11,15 @@
10 11 * @var \WP_User_Query
11 12 */
12 13 private $query;
13 14
14 - private function get_core_fields()
15 + public function __construct()
15 16 {
17 + add_filter('iwp/exporter_record/user', [$this, 'get_record_data'], 10, 3);
18 + }
19 +
20 + public function get_core_fields()
21 + {
16 22 return array(
17 23 'ID',
18 24 'user_login',
19 25 'user_nicename',
@@ -35,15 +41,15 @@
35 41 global $wpdb;
36 42
37 43 $fields = [
38 44 'key' => 'main',
39 - 'label' => 'User',
45 + 'label' => __('User', 'jc-importer'),
40 46 'loop' => true,
41 47 'fields' => [],
42 48 'children' => [
43 49 'custom_fields' => [
44 50 'key' => 'custom_fields',
45 - 'label' => 'Custom Fields',
51 + 'label' => __('Custom Fields', 'jc-importer'),
46 52 'loop' => true,
47 53 'loop_fields' => ['meta_key', 'meta_value'],
48 54 'fields' => [],
49 55 'children' => []
@@ -53,14 +59,13 @@
53 59 ];
54 60
55 61 $fields['fields'] = $this->get_core_fields();
56 62 $fields['fields'][] = 'role';
57 - $fields['fields'][] = 'first_name';
58 - $fields['fields'][] = 'last_name';
59 63 $fields['fields'][] = 'description';
60 64
61 65 // user meta
62 66 $meta_fields = $wpdb->get_col("SELECT DISTINCT meta_key FROM " . $wpdb->usermeta . " WHERE user_id IN (SELECT DISTINCT ID FROM " . $wpdb->users . " )");
67 + $custom_file_fields = apply_filters('iwp/exporter/user/custom_file_id_fields', []);
63 68 foreach ($meta_fields as $field) {
64 69
65 70 if (in_array($field, ['first_name', 'last_name', 'description'])) {
66 71 continue;
@@ -66,49 +71,92 @@
66 71 continue;
67 72 }
68 73
69 74 $fields['children']['custom_fields']['fields'][] = $field;
75 +
76 + if (in_array($field, $custom_file_fields)) {
77 + $fields['children']['custom_fields']['fields'][] = $field . '::id';
78 + $fields['children']['custom_fields']['fields'][] = $field . '::url';
79 + $fields['children']['custom_fields']['fields'][] = $field . '::title';
80 + $fields['children']['custom_fields']['fields'][] = $field . '::alt';
81 + $fields['children']['custom_fields']['fields'][] = $field . '::caption';
82 + $fields['children']['custom_fields']['fields'][] = $field . '::description';
83 + }
70 84 }
71 85
72 86 $fields['children']['custom_fields']['fields'] = apply_filters('iwp/exporter/user/custom_field_list', $fields['children']['custom_fields']['fields'], null);
87 + $fields = apply_filters('iwp/exporter/user/fields', $fields, 'user');
73 88
74 - return $fields;
89 + return $this->parse_fields($fields);
75 90 }
76 91
77 - public function have_records()
92 + public function have_records($exporter_id)
78 93 {
79 - $this->query = new \WP_User_Query(array(
80 - 'number' => -1
81 - ));
94 + $query_args = [];
95 + $query_args = apply_filters('iwp/exporter/user_query', $query_args);
96 + $query_args = apply_filters(sprintf('iwp/exporter/%d/user_query', $exporter_id), $query_args);
82 97
98 + $query_args = wp_parse_args($query_args, [
99 + 'number' => -1,
100 + 'fields' => 'ids'
101 + ]);
102 +
103 + $this->query = new \WP_User_Query($query_args);
104 + $this->items = $this->query->results;
105 +
83 106 return $this->found_records() > 0;
84 107 }
85 108
86 109 public function found_records()
87 110 {
88 - return $this->query->get_total();
111 + return count($this->items);
89 112 }
90 113
114 + public function get_records()
115 + {
116 + return $this->items;
117 + }
118 +
91 119 public function setup($i)
92 120 {
93 - $user = $this->query->results[$i];
94 - $this->record = (array)$user->data;
95 - $this->record['custom_fields'] = get_user_meta($this->record['ID']);
121 + $user = get_user_by('id', $this->items[$i]);
96 122
97 - $userdata = get_userdata($this->record['ID']);
98 - $this->record['role'] = (array)$userdata->roles;
123 + $this->record = new ExporterRecord((array)$user->data, 'user');
124 + $this->record = apply_filters('iwp/exporter/user/setup_data', $this->record, 'user');
99 125
100 - foreach (['first_name', 'last_name', 'description'] as $field) {
126 + return true;
127 + }
101 128
102 - if (isset($this->record['custom_fields'][$field])) {
129 + public function get_record_data($value, $key, $record)
130 + {
131 + switch ($key) {
132 + case 'custom_fields':
133 + $value = get_user_meta($record['ID']);
103 134
104 - $this->record[$field] = $this->record['custom_fields'][$field][0];
105 - unset($this->record['custom_fields'][$field]);
106 - } else {
135 + if (isset($value['first_name'])) {
136 + unset($value['first_name']);
137 + }
107 138
108 - $this->record[$field] = '';
109 - }
139 + if (isset($value['last_name'])) {
140 + unset($value['last_name']);
141 + }
142 +
143 + if (isset($value['description'])) {
144 + unset($value['description']);
145 + }
146 +
147 + $value = $this->modify_custom_field_data($value, 'user');
148 + break;
149 + case 'role':
150 + $userdata = get_userdata($record['ID']);
151 + $value = (array)$userdata->roles;
152 + break;
153 + case 'first_name':
154 + case 'last_name':
155 + case 'description':
156 +
157 + $value = get_user_meta($record['ID'], $key, true);
158 + break;
110 159 }
111 -
112 - return true;
160 + return $value;
113 161 }
114 162 }