PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / application / Core / Exporter.php
advanced-access-manager / application / Core Last commit date
Api 6 years ago ConfigPress 6 years ago Jwt 6 years ago Object 6 years ago Policy 6 years ago Subject 6 years ago API.php 6 years ago Cache.php 6 years ago Compatibility.php 6 years ago Config.php 6 years ago ConfigPress.php 6 years ago Console.php 6 years ago Exporter.php 6 years ago Gateway.php 6 years ago Importer.php 6 years ago Login.php 6 years ago Media.php 6 years ago Object.php 6 years ago Request.php 6 years ago Server.php 6 years ago Subject.php 6 years ago
Exporter.php
328 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * AAM Exporter
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Core_Exporter {
17
18 /**
19 *
20 * @var type
21 */
22 protected $config = array();
23
24 /**
25 * Undocumented variable
26 *
27 * @var [type]
28 */
29 protected $blog = null;
30
31 /**
32 *
33 * @var type
34 */
35 protected $output = array();
36
37 /**
38 *
39 * @var type
40 */
41 protected $cache = array();
42
43 /**
44 *
45 * @param type $config
46 */
47 public function __construct($config, $blog = null) {
48 $this->config = $config;
49 $this->blog = ($blog ? $blog : get_current_blog_id());
50 }
51
52 /**
53 *
54 * @return type
55 */
56 public function run() {
57 $this->output = array(
58 'version' => AAM_Core_API::version(),
59 'plugin' => AAM_KEY,
60 'datetime' => date('Y-m-d H:i:s'),
61 'metadata' => $this->config,
62 'dataset' => array()
63 );
64
65 foreach($this->config as $backet => $features) {
66 $method = 'export' . ucfirst($backet);
67
68 if (method_exists($this, $method)) {
69 call_user_func(array($this, $method), explode(',', $features));
70 } else {
71 $this->output = apply_filters(
72 'aam-export-filter', $this->output, $backet, $this->config
73 );
74 }
75 }
76
77 return $this->output;
78 }
79
80 /**
81 *
82 * @global type $wpdb
83 * @param type $features
84 */
85 protected function exportSystem($features) {
86 global $wpdb;
87
88 foreach($features as $feature) {
89 if ($feature === 'roles') {
90 $this->add(
91 '_user_roles',
92 AAM_Core_API::getOption(
93 $wpdb->get_blog_prefix($this->blog) . 'user_roles',
94 array(),
95 $this->blog
96 )
97 );
98 } elseif (in_array($feature, array('utilities', 'settings'), true)) {
99 $this->add(
100 AAM_Core_Config::OPTION,
101 AAM_Core_API::getOption(AAM_Core_Config::OPTION, '', 'site')
102 );
103 } elseif ($feature === 'configpress') {
104 $this->add(
105 'aam-configpress', AAM_Core_ConfigPress::getInstance()->read()
106 );
107 } else {
108 do_action('aam-export-action', 'system', $feature, $this);
109 }
110 }
111 }
112
113 /**
114 *
115 * @param type $features
116 */
117 protected function exportRoles($features) {
118 foreach($features as $feature) {
119 if ($feature === 'menu') {
120 $this->pushData('options', '/^aam_menu_role/');
121 } elseif ($feature === 'toolbar') {
122 $this->pushData('options', '/^aam_toolbar_role/');
123 } elseif ($feature === 'uri') {
124 $this->pushData('options', '/^aam_uri_role/');
125 } elseif ($feature === 'route') {
126 $this->pushData('options', '/^aam_route_role/');
127 } elseif ($feature === 'metabox') {
128 $this->pushData('options', '/^aam_metabox_role/');
129 } elseif ($feature === 'post') {
130 $this->pushData('options', '/^aam_type_[\w_\-]+_role/');
131 $this->pushData('options', '/^aam_term_[\d]+\|.+_role/');
132 $this->pushData('postmeta', '/^aam-post-access-role/');
133 } elseif ($feature === 'redirect') {
134 $this->pushData('options', '/^aam_redirect_role/');
135 $this->pushData('options', '/^aam_loginredirect_role/');
136 $this->pushData('options', '/^aam_logoutredirect_role/');
137 }
138 }
139 }
140
141 /**
142 *
143 * @param type $features
144 */
145 protected function exportUsers($features) {
146 global $wpdb;
147
148 foreach($features as $feature) {
149 if ($feature === 'menu') {
150 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_menu/');
151 } elseif ($feature === 'toolbar') {
152 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_toolbar/');
153 } elseif ($feature === 'uri') {
154 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_uri/');
155 } elseif ($feature === 'route') {
156 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_route/');
157 } elseif ($feature === 'metabox') {
158 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_metabox/');
159 } elseif ($feature === 'post') {
160 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_type/');
161 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_term/');
162 $this->pushData('postmeta', '/^aam-post-access-user/');
163 } elseif ($feature === 'redirect') {
164 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_redirect/');
165 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_loginredirect/');
166 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_logoutredirect/');
167 } elseif ($feature === 'capability') {
168 $this->pushData('usermeta', '/^' . $wpdb->prefix . 'aam_capability/');
169 }
170 }
171 }
172
173 /**
174 *
175 * @param type $features
176 */
177 protected function exportVisitor($features) {
178 foreach($features as $feature) {
179 if ($feature === 'metabox') {
180 $this->pushData('options', '/^aam_visitor_metabox/');
181 } elseif ($feature === 'post') {
182 $this->pushData('options', '/^aam_visitor_type/');
183 $this->pushData('options', '/^aam_visitor_term/');
184 $this->pushData('postmeta', '/^aam-post-access-visitor/');
185 } elseif ($feature === 'redirect') {
186 $this->pushData('options', '/^aam_visitor_redirect/');
187 } elseif ($feature === 'route') {
188 $this->pushData('options', '/^aam_visitor_route/');
189 } elseif ($feature === 'uri') {
190 $this->pushData('options', '/^aam_visitor_uri/');
191 }
192 }
193 }
194
195 /**
196 *
197 * @param type $features
198 */
199 protected function exportDefault($features) {
200 foreach($features as $feature) {
201 if ($feature === 'menu') {
202 $this->pushData('options', '/^aam_menu_default/');
203 } elseif ($feature === 'metabox') {
204 $this->pushData('options', '/^aam_metabox_default/');
205 } elseif ($feature === 'route') {
206 $this->pushData('options', '/^aam_route_default/');
207 } elseif ($feature === 'toolbar') {
208 $this->pushData('options', '/^aam_toolbar_default/');
209 } elseif ($feature === 'uri') {
210 $this->pushData('options', '/^aam_uri_default/');
211 } elseif ($feature === 'post') {
212 $this->pushData('options', '/^aam_type_[\w_\-]_default/');
213 $this->pushData('options', '/^aam_term_[\d]+\|.+_default/');
214 $this->pushData('postmeta', '/^aam-post-access-default/');
215 } elseif ($feature === 'redirect') {
216 $this->pushData('options', '/^aam_redirect_default/');
217 $this->pushData('options', '/^aam_loginredirect_default/');
218 $this->pushData('options', '/^aam_logoutredirect_default/');
219 }
220 }
221 }
222
223 /**
224 *
225 * @param type $group
226 * @param type $regexp
227 */
228 public function pushData($group, $regexp) {
229 $cache = $this->getCache();
230
231 if (is_array($cache[$group])) {
232 foreach($cache[$group] as $option) {
233 if (isset($option->user_id)) {
234 $id = $option->user_id;
235 } elseif (isset($option->post_id)) {
236 $id = $option->post_id;
237 } else {
238 $id = null;
239 }
240
241 if (isset($option->option_name)) {
242 if (preg_match($regexp, $option->option_name)) {
243 $this->add(
244 $this->stripPrefix($option->option_name),
245 maybe_unserialize($option->option_value),
246 '_' . $group,
247 $id
248 );
249 }
250 } elseif (isset($option->meta_key)) {
251 if (preg_match($regexp, $option->meta_key)) {
252 $this->add(
253 $this->stripPrefix($option->meta_key),
254 maybe_unserialize($option->meta_value),
255 '_' . $group,
256 $id
257 );
258 }
259 }
260 }
261 }
262 }
263
264 /**
265 *
266 * @global type $wpdb
267 * @param type $key
268 * @return type
269 */
270 public function stripPrefix($key) {
271 global $wpdb;
272
273 return preg_replace('/^' . $wpdb->prefix . '/', '_', $key);
274 }
275
276 /**
277 *
278 * @param type $key
279 * @param type $value
280 * @param type $group
281 */
282 public function add($key, $value, $group = '_options', $id = null) {
283 $compressed = base64_encode(json_encode($value));
284
285 if (is_null($id)) {
286 $this->output['dataset'][$group][$key] = $compressed;
287 } else {
288 $this->output['dataset'][$group][$id][$key] = $compressed;
289 }
290 }
291
292 /**
293 *
294 * @global type $wpdb
295 * @return type
296 */
297 protected function getCache() {
298 global $wpdb;
299
300 if (empty($this->cache)) {
301 if (is_multisite()) {
302 switch_to_blog(get_main_site_id());
303 }
304
305 $query = "SELECT option_name, option_value FROM {$wpdb->options} ";
306 $query .= "WHERE option_name LIKE 'aam%'";
307
308 $this->cache['options'] = $wpdb->get_results($query);
309
310 $query = "SELECT user_id, meta_key, meta_value FROM {$wpdb->usermeta} ";
311 $query .= "WHERE meta_key LIKE '{$wpdb->prefix}aam%'";
312
313 $this->cache['usermeta'] = $wpdb->get_results($query);
314
315 $query = "SELECT post_id, meta_key, meta_value FROM {$wpdb->postmeta} ";
316 $query .= "WHERE meta_key LIKE 'aam%'";
317
318 $this->cache['postmeta'] = $wpdb->get_results($query);
319
320 if (is_multisite()) {
321 restore_current_blog();
322 }
323 }
324
325 return $this->cache;
326 }
327
328 }