RapidAddon::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
nc 2
nop 2
dl 0
loc 5
rs 10
c 1
b 0
f 0
1
<?php
2
/**
3
 * RapidAddon
4
 *
5
 * @package     WP All Import RapidAddon
6
 * @copyright   Copyright (c) 2014, Soflyy
7
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
8
 * @version 	1.1.1
9
 */
10
11
if (!class_exists('RapidAddon')) {
12
	
13
	class RapidAddon {
14
15
		public $name;
16
		public $slug;
17
		public $fields;
18
		public $options = array();
19
		public $accordions = array();
20
		public $image_sections = array();
21
		public $import_function;
22
		public $post_saved_function;
23
		public $notice_text;
24
		public $logger = null;
25
		public $when_to_run = false;
26
		public $image_options = array(
27
			'download_images' => 'yes', 
28
			'download_featured_delim' => ',', 
29
			'download_featured_image' => '',
30
			'gallery_featured_image' => '',
31
			'gallery_featured_delim' => ',',
32
			'featured_image' => '',
33
			'featured_delim' => ',', 
34
			'search_existing_images' => 1,
35
			'is_featured' => 0,
36
			'create_draft' => 'no',
37
			'set_image_meta_title' => 0,
38
			'image_meta_title_delim' => ',',
39
			'image_meta_title' => '',
40
			'set_image_meta_caption' => 0,
41
			'image_meta_caption_delim' => ',',
42
			'image_meta_caption' => '',
43
			'set_image_meta_alt' => 0,
44
			'image_meta_alt_delim' => ',',
45
			'image_meta_alt' => '',
46
			'set_image_meta_description' => 0,
47
			'image_meta_description_delim' => ',',
48
			'image_meta_description_delim_logic' => 'separate',
49
			'image_meta_description' => '',
50
			'auto_rename_images' => 0,
51
			'auto_rename_images_suffix' => '',
52
			'auto_set_extension' => 0,
53
			'new_extension' => '',
54
			'do_not_remove_images' => 1,
55
            'search_existing_images_logic' => 'by_url'
56
		);
57
58
		protected $isWizard = true;
59
60
		function __construct($name, $slug) {
61
			$this->name = $name;
62
			$this->slug = $slug;
63
			if (!empty($_GET['id'])){
64
				$this->isWizard = false;
65
			}
66
        }
67
        
68
		function set_import_function($name) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
69
			$this->import_function = $name;
70
		}
71
72
		function set_post_saved_function($name) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
73
			$this->post_saved_function = $name;
74
		}
75
76
		function is_active_addon($post_type = null) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
77
			
78
			if ( ! class_exists( 'PMXI_Plugin' ) ) {
79
				return false;
80
			}
81
82
			$addon_active = false;
83
84
			if ($post_type !== null) {
85
				if (@in_array($post_type, $this->active_post_types) or empty($this->active_post_types)) {
86
					$addon_active = true;
87
				}
88
			}
89
90
			if ($addon_active){
91
				
92
				$current_theme = wp_get_theme();
93
94
				$parent_theme = $current_theme->parent();				
95
96
				$theme_name = $current_theme->get('Name');
97
				
98
				$addon_active = (@in_array($theme_name, $this->active_themes) or empty($this->active_themes)) ? true : false;
99
100
				if ( ! $addon_active and $parent_theme ){
101
					$parent_theme_name = $parent_theme->get('Name');
102
					$addon_active = (@in_array($parent_theme_name, $this->active_themes) or empty($this->active_themes)) ? true : false;
103
104
				}
105
				
106
				if ( $addon_active and ! empty($this->active_plugins) ){
107
108
					include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
109
110
					foreach ($this->active_plugins as $plugin) {
111
						if ( ! is_plugin_active($plugin) ) {
112
							$addon_active = false;
113
							break;
114
						}
115
					}					
116
				}
117
118
			}
119
120
			if ($this->when_to_run == "always") {
121
				$addon_active = true;
122
			}
123
124
			return apply_filters('rapid_is_active_add_on', $addon_active, $post_type, $this->slug);
125
		}
126
		
127
		/**
128
		* 
129
		* Add-On Initialization
130
		*
131
		* @param array $conditions - list of supported themes and post types
132
		*
133
		*/
134
		function run($conditions = array()) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
135
136
			if (empty($conditions)) {
137
				$this->when_to_run = "always";
138
			}
139
140
			@$this->active_post_types = ( ! empty($conditions['post_types'])) ? $conditions['post_types'] : array();
0 ignored issues
show
Bug Best Practice introduced by
The property active_post_types does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
141
			@$this->active_themes = ( ! empty($conditions['themes'])) ? $conditions['themes'] : array();
0 ignored issues
show
Bug Best Practice introduced by
The property active_themes does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
142
			@$this->active_plugins = ( ! empty($conditions['plugins'])) ? $conditions['plugins'] : array();			
0 ignored issues
show
Bug Best Practice introduced by
The property active_plugins does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
143
144
			add_filter('pmxi_addons', array($this, 'wpai_api_register'));
145
			add_filter('wp_all_import_addon_parse', array($this, 'wpai_api_parse'));
146
			add_filter('wp_all_import_addon_import', array($this, 'wpai_api_import'));
147
			add_filter('wp_all_import_addon_saved_post', array($this, 'wpai_api_post_saved'));
148
			add_filter('pmxi_options_options', array($this, 'wpai_api_options'));
149
            add_filter('wp_all_import_image_sections', array($this, 'additional_sections'), 10, 1);
150
            add_filter('pmxi_custom_types', array($this, 'filter_post_types'), 10, 2);
151
            add_filter('pmxi_post_list_order', array($this,'sort_post_types'), 10, 1);
152
            add_filter('wp_all_import_post_type_image', array($this, 'post_type_image'), 10, 1 );
153
			add_action('pmxi_extend_options_featured',  array($this, 'wpai_api_metabox'), 10, 2);
154
            add_action('admin_init', array($this, 'admin_notice_ignore'));
155
        }        
156
157
		function parse($data) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
158
			
159
			if ( ! $this->is_active_addon($data['import']->options['custom_type'])) return false;
160
161
			$parsedData = $this->helper_parse($data, $this->options_array());
162
			return $parsedData;
163
164
		}
165
166
167
		function add_field($field_slug, $field_name, $field_type, $enum_values = null, $tooltip = "", $is_html = true, $default_text = '') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
168
169
			$field =  array("name" => $field_name, "type" => $field_type, "enum_values" => $enum_values, "tooltip" => $tooltip, "is_sub_field" => false, "is_main_field" => false, "slug" => $field_slug, "is_html" => $is_html, 'default_text' => $default_text);
170
171
			$this->fields[$field_slug] = $field;
172
173
			if ( ! empty($enum_values) ){
174
				foreach ($enum_values as $key => $value) {
175
					if (is_array($value))
176
					{
177
						if ($field['type'] == 'accordion')
178
						{
179
							$this->fields[$value['slug']]['is_sub_field'] = true;
180
						}
181
						else
182
						{
183
							foreach ($value as $n => $param) {							
184
								if (is_array($param) and ! empty($this->fields[$param['slug']])){
185
									$this->fields[$param['slug']]['is_sub_field'] = true;								
186
								}
187
							}
188
						}
189
					}
190
				}
191
			}
192
193
			return $field;
194
195
		}
196
197
		function add_acf_field($field){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
198
			$this->fields[$field->post_name] = array(
199
				'type' => 'acf',
200
				'field_obj' => $field
201
			);
202
		}
203
204
		private $acfGroups = array();
205
206
		function use_acf_group($acf_group){
207
			$this->add_text(
208
				'<div class="postbox acf_postbox default acf_signle_group rad4">
209
    <h3 class="hndle" style="margin-top:0;"><span>'.$acf_group['title'].'</span></h3>
210
	    <div class="inside">');
211
			$acf_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => $acf_group['ID'], 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC'));
212
			if (!empty($acf_fields)){
213
				foreach ($acf_fields as $field) {
214
					$this->add_acf_field($field);
215
				}
216
			}
217
			$this->add_text('</div></div>');
218
			$this->acfGroups[] = $acf_group['ID'];
219
			add_filter('wp_all_import_acf_is_show_group', array($this, 'acf_is_show_group'), 10, 2);
220
		}
221
222
		function acf_is_show_group($is_show, $acf_group){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
223
			return (in_array($acf_group['ID'], $this->acfGroups)) ? false : true;
224
		}
225
226
		/**
227
		* 
228
		* Add an option to WP All Import options list
229
		*
230
		* @param string $slug - option name
231
		* @param string $default_value - default option value
232
		*
233
		*/
234
		function add_option($slug, $default_value = ''){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
235
			$this->options[$slug] = $default_value;
236
		}
237
238
		function options_array() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
239
240
            $options_list = array();
241
            
242
            if ( ! empty( $this->fields ) ) {
243
244
                foreach ($this->fields as $field_slug => $field_params) {
245
                    if (in_array($field_params['type'], array('title', 'plain_text', 'acf'))) continue;
246
                    $default_value = '';
247
                    if (!empty($field_params['enum_values'])){
248
                        foreach ($field_params['enum_values'] as $key => $value) {						
249
                            $default_value = $key;
250
                            break;
251
                        }
252
                    }
253
                    $options_list[$field_slug] = $default_value;
254
                }
255
256
            }			
257
258
			if ( ! empty($this->options) ){
259
				foreach ($this->options as $slug => $value) {
260
					$options_arr[$slug] = $value;
261
				}
262
			}
263
264
			$options_arr[$this->slug]   = $options_list;
265
			$options_arr['rapid_addon'] = plugin_basename( __FILE__ );
266
267
			return $options_arr;
268
269
		}
270
271
		function wpai_api_options($all_options) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
272
273
			$all_options = $all_options + $this->options_array();
274
275
			return $all_options;
276
277
		}
278
279
280
		function wpai_api_register($addons) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
281
282
			if (empty($addons[$this->slug])) {
283
				$addons[$this->slug] = 1;
284
			}
285
286
			return $addons;
287
288
		}
289
290
291
		function wpai_api_parse($functions) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
292
293
			$functions[$this->slug] = array($this, 'parse');
294
			return $functions;
295
296
		}
297
298
		function wpai_api_post_saved($functions){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
299
			$functions[$this->slug] = array($this, 'post_saved');
300
			return $functions;
301
		}
302
303
304
		function wpai_api_import($functions) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
305
306
			$functions[$this->slug] = array($this, 'import');
307
			return $functions;
308
309
		}
310
311
		function post_saved( $importData ){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
312
313
			if (is_callable($this->post_saved_function))
314
				call_user_func($this->post_saved_function, $importData['pid'], $importData['import'], $importData['logger']);
315
			
316
		}
317
318
		function import($importData, $parsedData) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
319
320
			if (!$this->is_active_addon($importData['post_type'])) {
321
				return;
322
			}
323
324
			$import_options = $importData['import']['options'][$this->slug];
325
326
	//		echo "<pre>";
327
	//		print_r($import_options);
328
	//		echo "</pre>";
329
330
			if ( ! empty($parsedData) )	{
331
332
				$this->logger = $importData['logger'];
333
334
				$post_id = $importData['pid'];
335
				$index = $importData['i'];
336
				$data = array();
337
				if (!empty($this->fields)){
338
					foreach ($this->fields as $field_slug => $field_params) {
339
						if (in_array($field_params['type'], array('title', 'plain_text'))) continue;
340
						switch ($field_params['type']) {
341
342
							case 'image':
343
								
344
								// import the specified image, then set the value of the field to the image ID in the media library
345
346
								$image_url_or_path = $parsedData[$field_slug][$index];
347
348
								if ( ! array_key_exists( $field_slug, $import_options['download_image'] ) ) {
349
									continue 2;
350
								}
351
352
								$download = $import_options['download_image'][$field_slug];
353
354
								$uploaded_image = PMXI_API::upload_image($post_id, $image_url_or_path, $download, $importData['logger'], true, "", "images", true, $importData['articleData']);
0 ignored issues
show
Bug introduced by
The type PMXI_API was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
355
356
								$data[$field_slug] = array(
357
									"attachment_id" => $uploaded_image,
358
									"image_url_or_path" => $image_url_or_path,
359
									"download" => $download
360
								);
361
362
								break;
363
364
							case 'file':
365
366
								$image_url_or_path = $parsedData[$field_slug][$index];
367
368
								if ( ! array_key_exists( $field_slug, $import_options['download_image'] ) ) {
369
									continue 2;
370
								}
371
372
								$download = $import_options['download_image'][$field_slug];
373
374
								$uploaded_file = PMXI_API::upload_image($post_id, $image_url_or_path, $download, $importData['logger'], true, "", "files", true, $importData['articleData']);
375
376
								$data[$field_slug] = array(
377
									"attachment_id" => $uploaded_file,
378
									"image_url_or_path" => $image_url_or_path,
379
									"download" => $download
380
								);
381
382
								break;
383
							
384
							default:
385
								// set the field data to the value of the field after it's been parsed
386
								$data[$field_slug] = $parsedData[$field_slug][$index];
387
								break;
388
						}					
389
390
						// apply mapping rules if they exist
391
						if (!empty($import_options['mapping'][$field_slug])) {
392
							$mapping_rules = json_decode($import_options['mapping'][$field_slug], true);
393
394
							if (!empty($mapping_rules) and is_array($mapping_rules)) {
395
								foreach ($mapping_rules as $rule_number => $map_to) {
396
									if (isset($map_to[trim($data[$field_slug])])){
397
										$data[$field_slug] = trim($map_to[trim($data[$field_slug])]);
398
										break;
399
									}
400
								}
401
							}
402
						}
403
						// --------------------
404
					}
405
				}				
406
407
				call_user_func($this->import_function, $post_id, $data, $importData['import'], $importData['articleData'], $importData['logger']);
408
			}
409
410
		}
411
412
413
		function wpai_api_metabox($post_type, $current_values) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
414
415
			if (!$this->is_active_addon($post_type)) {
416
				return;
417
			}
418
419
			echo $this->helper_metabox_top($this->name);
420
421
			$visible_fields = 0;
422
423
			foreach ($this->fields as $field_slug => $field_params) {
424
				if ($field_params['is_sub_field']) continue;
425
				$visible_fields++;
426
			}
427
428
			$counter = 0;
429
430
			foreach ($this->fields as $field_slug => $field_params) {				
431
432
				// do not render sub fields
433
				if ($field_params['is_sub_field']) continue;		
434
435
				$counter++;		
436
437
				$this->render_field($field_params, $field_slug, $current_values, $visible_fields == $counter);										
438
439
				//if ( $field_params['type'] != 'accordion' ) echo "<br />";				
440
441
			}
442
443
			echo $this->helper_metabox_bottom();
444
445
			if ( ! empty($this->image_sections) ){				
446
				$is_images_section_enabled = apply_filters('wp_all_import_is_images_section_enabled', true, $post_type);						
447
				foreach ($this->image_sections as $k => $section) {
448
					$section_options = array();
449
					foreach ($this->image_options as $slug => $value) {
450
						$section_options[$section['slug'] . $slug] = $value;
451
					}										
452
					if ( ! $is_images_section_enabled and ! $k ){
453
						$section_options[$section['slug'] . 'is_featured'] = 1;
454
					}
455
					PMXI_API::add_additional_images_section($section['title'], $section['slug'], $current_values, '', true, false, $section['type']);
456
				}
457
			}
458
459
		}		
460
461
		function render_field($field_params, $field_slug, $current_values, $in_the_bottom = false){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
462
463
			if (!isset($current_values[$this->slug][$field_slug])) {
464
				$current_values[$this->slug][$field_slug] = isset($field_params['default_text']) ? $field_params['default_text'] : '';
465
			}
466
467
			if ($field_params['type'] == 'text') {
468
469
				PMXI_API::add_field(
470
					'simple',
471
					$field_params['name'],
472
					array(
473
						'tooltip' => $field_params['tooltip'],
474
						'field_name' => $this->slug."[".$field_slug."]",
475
						'field_value' => ( $current_values[$this->slug][$field_slug] == '' && $this->isWizard ) ? $field_params['default_text'] : $current_values[$this->slug][$field_slug]
476
					)
477
				);
478
479
			} else if ($field_params['type'] == 'textarea') {
480
481
				PMXI_API::add_field(
482
					'textarea',
483
					$field_params['name'],
484
					array(
485
						'tooltip' => $field_params['tooltip'],
486
						'field_name' => $this->slug."[".$field_slug."]",
487
						'field_value' => ( $current_values[$this->slug][$field_slug] == '' && $this->isWizard ) ? $field_params['default_text'] : $current_values[$this->slug][$field_slug]
488
					)
489
				);
490
491
			} else if ($field_params['type'] == 'wp_editor') {
492
493
				PMXI_API::add_field(
494
					'wp_editor',
495
					$field_params['name'],
496
					array(
497
						'tooltip' => $field_params['tooltip'],
498
						'field_name' => $this->slug."[".$field_slug."]",
499
						'field_value' => ( $current_values[$this->slug][$field_slug] == '' && $this->isWizard ) ? $field_params['default_text'] : $current_values[$this->slug][$field_slug]
500
					)
501
				);
502
503
			} else if ($field_params['type'] == 'image' or $field_params['type'] == 'file') {
504
				
505
				if (!isset($current_values[$this->slug]['download_image'][$field_slug])) { $current_values[$this->slug]['download_image'][$field_slug] = ''; }
506
507
				PMXI_API::add_field(
508
					$field_params['type'],
509
					$field_params['name'],
510
					array(
511
						'tooltip' => $field_params['tooltip'],
512
						'field_name' => $this->slug."[".$field_slug."]",
513
						'field_value' => $current_values[$this->slug][$field_slug],
514
						'download_image' => $current_values[$this->slug]['download_image'][$field_slug],
515
						'field_key' => $field_slug,
516
						'addon_prefix' => $this->slug
517
518
					)
519
				);
520
521
			} else if ($field_params['type'] == 'radio') {					
522
				
523
				if (!isset($current_values[$this->slug]['mapping'][$field_slug])) { $current_values[$this->slug]['mapping'][$field_slug] = array(); }
524
				if (!isset($current_values[$this->slug]['xpaths'][$field_slug])) { $current_values[$this->slug]['xpaths'][$field_slug] = ''; }
525
526
				PMXI_API::add_field(
527
					'enum',
528
					$field_params['name'],
529
					array(
530
						'tooltip' => $field_params['tooltip'],
531
						'field_name' => $this->slug."[".$field_slug."]",
532
						'field_value' => $current_values[$this->slug][$field_slug],
533
						'enum_values' => $field_params['enum_values'],
534
						'mapping' => true,
535
						'field_key' => $field_slug,
536
						'mapping_rules' => $current_values[$this->slug]['mapping'][$field_slug],
537
						'xpath' => $current_values[$this->slug]['xpaths'][$field_slug],
538
						'addon_prefix' => $this->slug,
539
						'sub_fields' => $this->get_sub_fields($field_params, $field_slug, $current_values)
540
					)
541
				);
542
543
			} else if($field_params['type'] == 'accordion') {
544
545
				PMXI_API::add_field(
546
					'accordion',
547
					$field_params['name'],
548
					array(						
549
						'tooltip' => $field_params['tooltip'],
550
						'field_name' => $this->slug."[".$field_slug."]",																
551
						'field_key' => $field_slug,								
552
						'addon_prefix' => $this->slug,
553
						'sub_fields' => $this->get_sub_fields($field_params, $field_slug, $current_values),
554
						'in_the_bottom' => $in_the_bottom						
555
					)
556
				);
557
558
			} else if($field_params['type'] == 'acf') {
559
				$fieldData = (!empty($field_params['field_obj']->post_content)) ? unserialize($field_params['field_obj']->post_content) : array();
560
				$fieldData['ID']    = $field_params['field_obj']->ID;
561
				$fieldData['id']    = $field_params['field_obj']->ID;
562
				$fieldData['label'] = $field_params['field_obj']->post_title;
563
				$fieldData['key']   = $field_params['field_obj']->post_name;
564
				if (empty($fieldData['name'])) $fieldData['name'] = $field_params['field_obj']->post_excerpt;
565
				if (function_exists('pmai_render_field')) {
566
					echo pmai_render_field($fieldData, ( ! empty($current_values) ) ? $current_values : array() );
567
				}
568
			} else if($field_params['type'] == 'title'){
569
				?>
570
				<h4 class="wpallimport-add-on-options-title"><?php esc_html_e($field_params['name'], 'wp_all_import_plugin'); ?><?php if ( ! empty($field_params['tooltip'])): ?><a href="#help" class="wpallimport-help" title="<?php echo $field_params['tooltip']; ?>" style="position:relative; top: -1px;">?</a><?php endif; ?></h4>				
571
				<?php
572
573
			} else if($field_params['type'] == 'plain_text'){
574
				if ($field_params['is_html']):					
575
					echo $field_params['name'];				
576
				else:
577
					?>
578
					<p style="margin: 0 0 12px 0;"><?php echo $field_params['name'];?></p>
579
					<?php
580
				endif;
581
			}
582
583
584
		}
585
		/**
586
		*
587
		* Helper function for nested radio fields
588
		*
589
		*/
590
		function get_sub_fields($field_params, $field_slug, $current_values){
0 ignored issues
show
Unused Code introduced by
The parameter $field_slug is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

590
		function get_sub_fields($field_params, /** @scrutinizer ignore-unused */ $field_slug, $current_values){

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
591
			$sub_fields = array();	
592
			if ( ! empty($field_params['enum_values']) ){										
593
				foreach ($field_params['enum_values'] as $key => $value) {					
594
					$sub_fields[$key] = array();	
595
					if (is_array($value)){
596
						if ($field_params['type'] == 'accordion'){								
597
							$sub_fields[$key][] = $this->convert_field($value, $current_values);
598
						}
599
						else
600
						{
601
							foreach ($value as $k => $sub_field) {								
602
								if (is_array($sub_field) and ! empty($this->fields[$sub_field['slug']]))
603
								{									
604
									$sub_fields[$key][] = $this->convert_field($sub_field, $current_values);
605
								}								
606
							}
607
						}
608
					}
609
				}
610
			}
611
			return $sub_fields;
612
		}			
613
614
		function convert_field($sub_field, $current_values){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
615
			$field = array();
616
			if (!isset($current_values[$this->slug][$sub_field['slug']])) {
617
				$current_values[$this->slug][$sub_field['slug']] = isset($sub_field['default_text']) ? $sub_field['default_text'] : '';
618
			}
619
			switch ($this->fields[$sub_field['slug']]['type']) {
620
				case 'text':
621
					$field = array(
622
						'type'   => 'simple',
623
						'label'  => $this->fields[$sub_field['slug']]['name'],
624
						'params' => array(
625
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
626
							'field_name' => $this->slug."[".$sub_field['slug']."]",
627
							'field_value' => ($current_values[$this->slug][$sub_field['slug']] == '' && $this->isWizard) ? $sub_field['default_text'] : $current_values[$this->slug][$sub_field['slug']],
628
							'is_main_field' => $sub_field['is_main_field']
629
						)
630
					);
631
					break;
632
				case 'textarea':
633
					$field = array(
634
						'type'   => 'textarea',
635
						'label'  => $this->fields[$sub_field['slug']]['name'],
636
						'params' => array(
637
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
638
							'field_name' => $this->slug."[".$sub_field['slug']."]",
639
							'field_value' => ($current_values[$this->slug][$sub_field['slug']] == '' && $this->isWizard) ? $sub_field['default_text'] : $current_values[$this->slug][$sub_field['slug']],
640
							'is_main_field' => $sub_field['is_main_field']
641
						)
642
					);
643
					break;
644
				case 'wp_editor':
645
					$field = array(
646
						'type'   => 'wp_editor',
647
						'label'  => $this->fields[$sub_field['slug']]['name'],
648
						'params' => array(
649
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
650
							'field_name' => $this->slug."[".$sub_field['slug']."]",
651
							'field_value' => ($current_values[$this->slug][$sub_field['slug']] == '' && $this->isWizard) ? $sub_field['default_text'] : $current_values[$this->slug][$sub_field['slug']],
652
							'is_main_field' => $sub_field['is_main_field']
653
						)
654
					);
655
					break;
656
				case 'image':
657
					$field = array(
658
						'type'   => 'image',
659
						'label'  => $this->fields[$sub_field['slug']]['name'],
660
						'params' => array(
661
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
662
							'field_name' => $this->slug."[".$sub_field['slug']."]",
663
							'field_value' => $current_values[$this->slug][$sub_field['slug']],
664
							'download_image' => null,
665
							'field_key' => $sub_field['slug'],
666
							'addon_prefix' => $this->slug,
667
							'is_main_field' => $sub_field['is_main_field']
668
						)
669
					);
670
671
					if ( array_key_exists( 'download_image', $current_values[$this->slug] ) && array_key_exists( $sub_field['slug'], $current_values[$this->slug]['download_image'] ) ) {
672
						$field['params']['download_image'] = $current_values[$this->slug]['download_image'][$sub_field['slug']];
673
					}
674
                    break;
675
				case 'file':
676
					$field = array(
677
						'type'   => 'file',
678
						'label'  => $this->fields[$sub_field['slug']]['name'],
679
						'params' => array(
680
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
681
							'field_name' => $this->slug."[".$sub_field['slug']."]",
682
							'field_value' => $current_values[$this->slug][$sub_field['slug']],
683
							'download_image' => null,
684
							'field_key' => $sub_field['slug'],
685
							'addon_prefix' => $this->slug,
686
							'is_main_field' => $sub_field['is_main_field']
687
						)
688
					);
689
690
					if ( array_key_exists( 'download_image', $current_values[$this->slug] )  && array_key_exists( $sub_field['slug'], $current_values[$this->slug]['download_image'] ) ) {
691
						$field['params']['download_image'] = $current_values[$this->slug]['download_image'][$sub_field['slug']];
692
					}
693
694
					break;
695
				case 'radio':
696
					$field = array(
697
						'type'   => 'enum',
698
						'label'  => $this->fields[$sub_field['slug']]['name'],
699
						'params' => array(
700
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
701
							'field_name' => $this->slug."[".$sub_field['slug']."]",
702
							'field_value' => $current_values[$this->slug][$sub_field['slug']],
703
							'enum_values' => $this->fields[$sub_field['slug']]['enum_values'],
704
							'mapping' => true,
705
							'field_key' => $sub_field['slug'],
706
							'mapping_rules' => isset($current_values[$this->slug]['mapping'][$sub_field['slug']]) ? $current_values[$this->slug]['mapping'][$sub_field['slug']] : array(),
707
							'xpath' => isset($current_values[$this->slug]['xpaths'][$sub_field['slug']]) ? $current_values[$this->slug]['xpaths'][$sub_field['slug']] : '',
708
							'addon_prefix' => $this->slug,
709
							'sub_fields' => $this->get_sub_fields($this->fields[$sub_field['slug']], $sub_field['slug'], $current_values),
710
							'is_main_field' => $sub_field['is_main_field']
711
						)
712
					);
713
					break;
714
				case 'accordion':
715
					$field = array(
716
						'type'   => 'accordion',
717
						'label'  => $this->fields[$sub_field['slug']]['name'],
718
						'params' => array(
719
							'tooltip' => $this->fields[$sub_field['slug']]['tooltip'],
720
							'field_name' => $this->slug."[".$sub_field['slug']."]",																
721
							'field_key' => $sub_field['slug'],								
722
							'addon_prefix' => $this->slug,
723
							'sub_fields' => $this->get_sub_fields($this->fields[$sub_field['slug']], $sub_field['slug'], $current_values),
724
							'in_the_bottom' => false
725
						)
726
					);						
727
					break;
728
				default:
729
					# code...
730
					break;
731
			}
732
			return $field;
733
		}				
734
735
		/**
736
		* 
737
		* Add accordion options
738
		*
739
		*
740
		*/
741
		function add_options( $main_field = false, $title = '', $fields = array() ){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
742
			
743
			if ( ! empty($fields) )
744
			{				
745
				
746
				if ($main_field){
747
748
					$main_field['is_main_field'] = true;
749
					$fields[] = $main_field;
750
751
				}
752
753
				return $this->add_field('accordion_' . $fields[0]['slug'], $title, 'accordion', $fields);							
754
			
755
			}
756
757
		}			
758
759
		function add_title($title = '', $tooltip = ''){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
760
761
			if (empty($title)) return;
762
763
			return $this->add_field(sanitize_key($title) . time(), $title, 'title', null, $tooltip);			
764
765
		}		
766
767
		function add_text($text = '', $is_html = false){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
768
769
			if (empty($text)) return;
770
771
			$count = is_array($this->fields) ? count($this->fields) : 0;
772
773
			return $this->add_field(sanitize_key($text) . time() . uniqid() . $count, $text, 'plain_text', null, "", $is_html);
774
775
		}			
776
777
		function helper_metabox_top($name) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
778
779
			return '
780
			<style type="text/css">
781
				.wpallimport-plugin .wpallimport-addon div.input {
782
					margin-bottom: 15px;
783
				}
784
				.wpallimport-plugin .wpallimport-addon .custom-params tr td.action{
785
					width: auto !important;
786
				}
787
				.wpallimport-plugin .wpallimport-addon .wpallimport-custom-fields-actions{
788
					right:0 !important;
789
				}
790
				.wpallimport-plugin .wpallimport-addon table tr td.wpallimport-enum-input-wrapper{
791
					width: 80%;
792
				}
793
				.wpallimport-plugin .wpallimport-addon table tr td.wpallimport-enum-input-wrapper input{
794
					width: 100%;
795
				}
796
				.wpallimport-plugin .wpallimport-addon .wpallimport-custom-fields-actions{
797
					float: right;	
798
					right: 30px;
799
					position: relative;				
800
					border: 1px solid #ddd;
801
					margin-bottom: 10px;
802
				}
803
				
804
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options {
805
					margin-bottom: 15px;				
806
					margin-top: -16px;	
807
				}
808
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options .wpallimport-content-section{
809
					padding-bottom: 8px;
810
					margin:0; 
811
					border: none;
812
					padding-top: 1px;
813
					background: #f1f2f2;				
814
				}		
815
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options .wpallimport-collapsed-header{
816
					padding-left: 13px;
817
				}
818
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options .wpallimport-collapsed-header h3{
819
					font-size: 14px;
820
					margin: 6px 0;
821
				}
822
823
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options-full-width{
824
					bottom: -40px;
825
					margin-bottom: 0;
826
					margin-left: -25px;
827
					margin-right: -25px;
828
					position: relative;						
829
				}		
830
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options-full-width .wpallimport-content-section{					
831
					margin:0; 					
832
					border-top:1px solid #ddd; 
833
					border-bottom: none; 
834
					border-right: none; 
835
					border-left: none; 
836
					background: #f1f2f2;									
837
				}					
838
				.wpallimport-plugin .wpallimport-addon .wpallimport-sub-options-full-width .wpallimport-collapsed-header h3{					
839
					margin: 14px 0;
840
				}
841
842
				.wpallimport-plugin .wpallimport-addon .wpallimport-dependent-options{
843
					margin-left: 1px;
844
					margin-right: -1px;					
845
				}		
846
				.wpallimport-plugin .wpallimport-addon .wpallimport-dependent-options .wpallimport-content-section{
847
					border: 1px solid #ddd;
848
					border-top: none;
849
				}
850
				.wpallimport-plugin .wpallimport-addon .wpallimport-full-with-bottom{
851
					margin-left: -25px; 
852
					margin-right: -25px;
853
				}
854
				.wpallimport-plugin .wpallimport-addon .wpallimport-full-with-not-bottom{
855
					margin: 25px -1px 25px 1px;
856
				}
857
				.wpallimport-plugin .wpallimport-addon .wpallimport-full-with-not-bottom .wpallimport-content-section{
858
					border: 1px solid #ddd;
859
				}
860
				.wpallimport-plugin .wpallimport-addon .wpallimport-add-on-options-title{
861
					font-size: 14px;
862
  					margin: 45px 0 15px 0;
863
				}
864
			</style>
865
			<div class="wpallimport-collapsed wpallimport-section wpallimport-addon '.$this->slug.' closed">
866
				<div class="wpallimport-content-section">
867
					<div class="wpallimport-collapsed-header">
868
						<h3>'.__($name,'pmxi_plugin').'</h3>	
869
					</div>
870
					<div class="wpallimport-collapsed-content" style="padding: 0;">
871
						<div class="wpallimport-collapsed-content-inner">
872
							<table class="form-table" style="max-width:none;">
873
								<tr>
874
									<td colspan="3">';
875
		}
876
877
		function helper_metabox_bottom() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
878
879
			return '				</td>
880
								</tr>
881
							</table>
882
						</div>
883
					</div>
884
				</div>
885
			</div>';
886
887
		}
888
889
		/**
890
		*
891
		* simply add an additional section for attachments
892
		*
893
		*/
894
		function import_files( $slug, $title, $callback = NULL ){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
895
			$this->import_images( $slug, $title, 'files', $callback);
896
		}
897
898
		/**
899
		*
900
		* simply add an additional section 
901
		*
902
		*/
903
		function import_images( $slug, $title, $type = 'images', $callback = NULL ){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
904
			
905
			if ( empty($title) or empty($slug) ) return;
906
907
			if (is_array($slug)) {
908
                $section_slug = 'pmxi_' . md5(serialize($slug));
909
            } else {
910
                $section_slug = 'pmxi_' . $slug;
911
            }
912
913
			$this->image_sections[] = array(
914
				'title' => $title,
915
				'slug'  => $section_slug,
916
				'type'  => $type
917
			);			
918
			
919
			foreach ($this->image_options as $option_slug => $value) {
920
				$this->add_option($section_slug . $option_slug, $value);
921
			}
922
923
			if (count($this->image_sections) > 1){
924
				add_filter('wp_all_import_is_show_add_new_images', array($this, 'filter_is_show_add_new_images'), 10, 2);
925
			}
926
927
			add_filter('wp_all_import_is_allow_import_images', array($this, 'is_allow_import_images'), 10, 2);			
928
929
			if ($callback && is_callable($callback)) {
930
                add_action( $section_slug, $callback, 10, 4);
931
            } else {
932
                if (function_exists($slug)) {
933
                    add_action( $section_slug, $slug, 10, 4);
934
                }
935
            }
936
		}			
937
			/**
938
			*
939
			* filter to allow import images for free edition of WP All Import
940
			*
941
			*/
942
			function is_allow_import_images($is_allow, $post_type){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
943
				return ($this->is_active_addon($post_type)) ? true : $is_allow;
944
			}
945
946
		/**
947
		*
948
		* filter to control additional images sections
949
		*
950
		*/
951
		function additional_sections($sections){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
952
			if ( ! empty($this->image_sections) ){
953
				foreach ($this->image_sections as $add_section) {
954
					$sections[] = $add_section;
955
				}
956
			}
957
			
958
			return $sections;
959
		}
960
			/**
961
			*
962
			* remove the 'Don't touch existing images, append new images' when more than one image section is in use.
963
			*
964
			*/
965
			function filter_is_show_add_new_images($is_show, $post_type){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
966
				return ($this->is_active_addon($post_type)) ? false : $is_show;
967
			}
968
969
		/**
970
		*
971
		* disable the default images section
972
		*
973
		*/		
974
		function disable_default_images($post_type = false){
0 ignored issues
show
Unused Code introduced by
The parameter $post_type is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

974
		function disable_default_images(/** @scrutinizer ignore-unused */ $post_type = false){

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
975
									
976
			add_filter('wp_all_import_is_images_section_enabled', array($this, 'is_enable_default_images_section'), 10, 2);
977
978
		}
979
			function is_enable_default_images_section($is_enabled, $post_type){						
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
980
				
981
				return ($this->is_active_addon($post_type)) ? false : true;
982
								
983
			}
984
985
		function helper_parse($parsingData, $options) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
986
987
			extract($parsingData);
988
989
			$data = array(); // parsed data
990
991
			if ( ! empty($import->options[$this->slug])){
992
993
				$this->logger = $parsingData['logger'];
994
995
				$cxpath = $xpath_prefix . $import->xpath;
996
997
				$tmp_files = array();
998
999
				foreach ($options[$this->slug] as $option_name => $option_value) {					
1000
					if ( isset($import->options[$this->slug][$option_name]) and $import->options[$this->slug][$option_name] != '') {						
1001
						if ($import->options[$this->slug][$option_name] == "xpath") {
1002
							if ($import->options[$this->slug]['xpaths'][$option_name] == ""){
1003
								$count and $data[$option_name] = array_fill(0, $count, "");
1004
							} else {
1005
								$data[$option_name] = XmlImportParser::factory($xml, $cxpath, (string) $import->options[$this->slug]['xpaths'][$option_name], $file)->parse();
0 ignored issues
show
Bug introduced by
The type XmlImportParser was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
1006
								$tmp_files[] = $file;						
1007
							}
1008
						} 
1009
						else {							
1010
							$data[$option_name] = XmlImportParser::factory($xml, $cxpath, (string) $import->options[$this->slug][$option_name], $file)->parse();
1011
							$tmp_files[] = $file;
1012
						}
1013
1014
1015
					} else {
1016
						$data[$option_name] = array_fill(0, $count, "");
1017
					}
1018
1019
				}
1020
1021
				foreach ($tmp_files as $file) { // remove all temporary files created
1022
					unlink($file);
1023
				}
1024
1025
			}
1026
1027
			return $data;
1028
		}
1029
1030
1031
		function can_update_meta($meta_key, $import_options) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1032
1033
			//echo "<pre>";
1034
			//print_r($import_options['options']);
1035
			//echo "</pre>";
1036
			
1037
			$import_options = $import_options['options'];
1038
1039
			if ($import_options['update_all_data'] == 'yes') return true;
1040
1041
			if ( ! $import_options['is_update_custom_fields'] ) return false;			
1042
1043
			if ($import_options['update_custom_fields_logic'] == "full_update") return true;
1044
			if ($import_options['update_custom_fields_logic'] == "only" and ! empty($import_options['custom_fields_list']) and is_array($import_options['custom_fields_list']) and in_array($meta_key, $import_options['custom_fields_list']) ) return true;
1045
			if ($import_options['update_custom_fields_logic'] == "all_except" and ( empty($import_options['custom_fields_list']) or ! in_array($meta_key, $import_options['custom_fields_list']) )) return true;
1046
1047
			return false;
1048
1049
		}
1050
1051
		function can_update_taxonomy($tax_name, $import_options) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1052
1053
			//echo "<pre>";
1054
			//print_r($import_options['options']);
1055
			//echo "</pre>";
1056
			
1057
			$import_options = $import_options['options'];
1058
1059
			if ($import_options['update_all_data'] == 'yes') return true;
1060
1061
			if ( ! $import_options['is_update_categories'] ) return false;			
1062
1063
			if ($import_options['update_categories_logic'] == "full_update") return true;
1064
			if ($import_options['update_categories_logic'] == "only" and ! empty($import_options['taxonomies_list']) and is_array($import_options['taxonomies_list']) and in_array($tax_name, $import_options['taxonomies_list']) ) return true;
1065
			if ($import_options['update_categories_logic'] == "all_except" and ( empty($import_options['taxonomies_list']) or ! in_array($tax_name, $import_options['taxonomies_list']) )) return true;
1066
1067
			return false;
1068
1069
		}
1070
1071
		function can_update_image($import_options) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1072
1073
			$import_options = $import_options['options'];
1074
1075
			if ($import_options['update_all_data'] == 'yes') return true;
1076
1077
			if (!$import_options['is_update_images']) return false;			
1078
1079
			if ($import_options['is_update_images']) return true;			
1080
1081
			return false;
1082
		}
1083
1084
1085
		function admin_notice_ignore() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1086
			if (isset($_GET[$this->slug.'_ignore']) && '0' == $_GET[$this->slug.'_ignore'] ) {
1087
				update_option($this->slug.'_ignore', 'true');
1088
			}
1089
		}
1090
1091
		function display_admin_notice() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1092
1093
1094
			if ($this->notice_text) {
1095
				$notice_text = $this->notice_text;
1096
			} else {
1097
				$notice_text = $this->name.' requires WP All Import <a href="http://www.wpallimport.com/" target="_blank">Pro</a> or <a href="http://wordpress.org/plugins/wp-all-import" target="_blank">Free</a>.';
1098
			}
1099
1100
			if (!get_option(sanitize_key($this->slug).'_notice_ignore')) {
1101
1102
				?>
1103
1104
	    		<div class="error notice is-dismissible wpallimport-dismissible" style="margin-top: 10px;" rel="<?php echo esc_attr($this->slug); ?>">
1105
	    		    <p><?php echo wp_kses_post(__(
1106
		    		    	sprintf(
1107
	    			    		$notice_text,
1108
	    			    		'?'.$this->slug.'_ignore=0'
1109
	    			    	), 
1110
	    		    		'rapid_addon_'.$this->slug
1111
	    		    	)); ?></p>
1112
			    </div>
1113
1114
				<?php
1115
1116
			}
1117
1118
		}
1119
1120
		/*
1121
		*
1122
		* $conditions - array('themes' => array('Realia'), 'plugins' => array('plugin-directory/plugin-file.php', 'plugin-directory2/plugin-file.php')) 
1123
		*
1124
		*/
1125
		function admin_notice($notice_text = '', $conditions = array()) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1126
1127
			$is_show_notice = false;
1128
1129
			include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1130
1131
			if ( ! class_exists( 'PMXI_Plugin' ) ) {
1132
				$is_show_notice = true;
1133
			}
1134
1135
			// Supported Themes
1136
			if ( ! $is_show_notice and ! empty($conditions['themes']) ){
1137
1138
				$themeInfo    = wp_get_theme();
1139
				$parentInfo = $themeInfo->parent();				
1140
				$currentTheme = $themeInfo->get('Name');
1141
				
1142
				$is_show_notice = in_array($currentTheme, $conditions['themes']) ? false : true;				
1143
1144
				if ( $is_show_notice and $parentInfo ){
1145
					$parent_theme = $parentInfo->get('Name');
1146
					$is_show_notice = in_array($parent_theme, $conditions['themes']) ? false : true;					
1147
				}
1148
1149
			}			
1150
1151
			// Required Plugins
1152
			if ( ! $is_show_notice and ! empty($conditions['plugins']) ){				
1153
1154
				$requires_counter = 0;
1155
				foreach ($conditions['plugins'] as $plugin) {
1156
					if ( is_plugin_active($plugin) ) $requires_counter++;
1157
				}
1158
1159
				if ($requires_counter != count($conditions['plugins'])){ 					
1160
					$is_show_notice = true;			
1161
				}
1162
1163
			}
1164
1165
			if ( $is_show_notice ){
1166
1167
				if ( $notice_text != '' ) {
1168
					$this->notice_text = $notice_text;
1169
				}
1170
1171
				add_action('admin_notices', array($this, 'display_admin_notice'));
1172
			}
1173
1174
		}
1175
1176
		function log( $m = false){		
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1177
1178
			$m and $this->logger and call_user_func($this->logger, $m);
1179
1180
        }
1181
        
1182
        public function remove_post_type( $type = '' ) {
1183
            if ( ! empty( $type ) ) {
1184
                $this->add_option( 'post_types_to_remove', $type );
1185
            }
1186
        }
1187
1188
        public function filter_post_types( $custom_types = array(), $custom_type = '' ) {
0 ignored issues
show
Unused Code introduced by
The parameter $custom_type is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1188
        public function filter_post_types( $custom_types = array(), /** @scrutinizer ignore-unused */ $custom_type = '' ) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1189
            $options = $this->options_array();
1190
            $option_key = 'post_types_to_remove';
1191
1192
            if ( array_key_exists( $option_key, $options ) ) {
1193
                $type = $options[ $option_key ];
1194
                
1195
                if ( ! empty( $type ) ) {
1196
                    if ( ! is_array( $type ) ) {
1197
                        if ( array_key_exists( $type, $custom_types )  ) {
1198
                            unset( $custom_types[ $type ] );
1199
                        }
1200
                    } else {
1201
                        foreach ( $type as $key => $post_type ) {
1202
                            if ( array_key_exists( $post_type, $custom_types ) ) {
1203
                                unset( $custom_types[ $post_type ] );
1204
                            }
1205
                        }
1206
                    }
1207
                }
1208
            }
1209
            return $custom_types;
1210
        }
1211
1212
        public function sort_post_types( array $order ) {
1213
            $options = $this->options_array();
1214
            $option_key = 'post_type_move';
1215
1216
            if ( array_key_exists( $option_key, $options ) ) {
1217
                $move_rules = maybe_unserialize( $options[ $option_key ] );
1218
1219
                foreach ( $move_rules as $rule ) {
1220
                    $move_this  = $rule['move_this'];
1221
                    $move_to    = $rule['move_to'];
1222
                    if ( $move_to > count( $order ) ) {
1223
                        if ( ( $rm_key = array_search( $move_this, $order ) ) !== false ) {
1224
                            unset( $order[ $rm_key ] );
1225
                        }
1226
                        array_push( $order, $move_this );                        
1227
                    } else {
1228
                        if ( ( $rm_key = array_search( $move_this, $order ) ) !== false ) {
1229
                            unset( $order[ $rm_key ] );
1230
                        }
1231
                        array_splice( $order, $move_to, 0, $move_this );
1232
                    }
1233
                }
1234
1235
                return $order;
1236
            }
1237
1238
            return $order;
1239
        }
1240
1241
        public function move_post_type( $move_this = null, $move_to = null ) {
1242
            $move_rules = array();
1243
1244
            if ( ! is_array( $move_this ) && ! is_array( $move_to ) ) {
1245
                $move_rules[] = array(
1246
                    'move_this' => $move_this,
1247
                    'move_to'   => $move_to
1248
                );
1249
            } else {
1250
                foreach ( $move_this as $key => $move_post ) {                    
1251
                    $move_rules[] = array(
1252
                        'move_this' => $move_post,
1253
                        'move_to'   => $move_to[ $key ]
1254
                    );
1255
                }
1256
            }
1257
1258
            $this->add_option( 'post_type_move', $move_rules );
0 ignored issues
show
Bug introduced by
$move_rules of type array|array<mixed,array> is incompatible with the type string expected by parameter $default_value of RapidAddon::add_option(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1258
            $this->add_option( 'post_type_move', /** @scrutinizer ignore-type */ $move_rules );
Loading history...
1259
        }
1260
1261
        public function set_post_type_image( $post_type = null, $image = null ) {
1262
            $post_type_image_rules = array();
1263
1264
            if ( ! is_array( $post_type ) ) {
1265
1266
                $post_type_image_rules[ $post_type ] = array(
1267
                        'post_type' => $post_type,
1268
                        'image'     => $image
1269
                );
1270
1271
            } else {
1272
1273
                if ( count( $post_type ) == count( $image ) ) {
1274
1275
                    foreach ( $post_type as $key => $post_name ) {
1276
                        $post_type_image_rules[ $post_name ] = array(
1277
                            'post_type' => $post_name,
1278
                            'image'     => $image[ $key ]
1279
                        );
1280
                    }
1281
                }
1282
            }
1283
1284
            $this->add_option( 'post_type_image', $post_type_image_rules );
0 ignored issues
show
Bug introduced by
$post_type_image_rules of type array is incompatible with the type string expected by parameter $default_value of RapidAddon::add_option(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1284
            $this->add_option( 'post_type_image', /** @scrutinizer ignore-type */ $post_type_image_rules );
Loading history...
1285
        }
1286
1287
        public function post_type_image( $image ) {
1288
            $options = $this->options_array();
1289
            $option_key = 'post_type_image';
1290
            if ( array_key_exists( $option_key, $options ) ) {
1291
                $post_type_image_rules = maybe_unserialize( $options[ $option_key ] );
1292
                return $post_type_image_rules;
1293
            }
1294
            return $image;
1295
        }
1296
	}	
1297
}