Passed
Push — master ( 8fd74f...bad3c1 )
by Kiran
12:28 queued 06:35
created
vendor/ayecode/wp-super-duper/wp-super-duper.php 1 patch
Indentation   +2687 added lines, -2687 removed lines patch added patch discarded remove patch
@@ -1,147 +1,147 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 if ( ! class_exists( 'WP_Super_Duper' ) ) {
7 7
 
8
-	define( 'SUPER_DUPER_VER', '1.2.17' );
9
-
10
-	/**
11
-	 * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
-	 *
13
-	 * Should not be called direct but extended instead.
14
-	 *
15
-	 * Class WP_Super_Duper
16
-	 * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
-	 * @ver 1.1.1
18
-	 */
19
-	class WP_Super_Duper extends WP_Widget {
20
-
21
-		public $version = SUPER_DUPER_VER;
22
-		public $font_awesome_icon_version = "5.11.2";
23
-		public $block_code;
24
-		public $options;
25
-		public $base_id;
26
-		public $settings_hash;
27
-		public $arguments = array();
28
-		public $instance = array();
29
-		private $class_name;
30
-
31
-		/**
32
-		 * The relative url to the current folder.
33
-		 *
34
-		 * @var string
35
-		 */
36
-		public $url = '';
37
-
38
-		/**
39
-		 * Take the array options and use them to build.
40
-		 */
41
-		public function __construct( $options ) {
42
-			global $sd_widgets;
43
-
44
-			$sd_widgets[ $options['base_id'] ] = array(
45
-				'name'       => $options['name'],
46
-				'class_name' => $options['class_name'],
47
-				'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
-			);
49
-			$this->base_id                     = $options['base_id'];
50
-			// lets filter the options before we do anything
51
-			$options       = apply_filters( "wp_super_duper_options", $options );
52
-			$options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
-			$options       = $this->add_name_from_key( $options );
54
-			$this->options = $options;
55
-
56
-			$this->base_id   = $options['base_id'];
57
-			$this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
-
59
-			// nested blocks can't work as a widget
60
-			if(!empty($this->options['nested-block'])){
61
-				if(empty($this->options['output_types'])){
62
-					$this->options['output_types'] = array('shortcode','block');
63
-				}elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
-					unset($this->options['output_types'][$key]);
65
-				}
66
-			}
8
+    define( 'SUPER_DUPER_VER', '1.2.17' );
9
+
10
+    /**
11
+     * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
+     *
13
+     * Should not be called direct but extended instead.
14
+     *
15
+     * Class WP_Super_Duper
16
+     * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
+     * @ver 1.1.1
18
+     */
19
+    class WP_Super_Duper extends WP_Widget {
20
+
21
+        public $version = SUPER_DUPER_VER;
22
+        public $font_awesome_icon_version = "5.11.2";
23
+        public $block_code;
24
+        public $options;
25
+        public $base_id;
26
+        public $settings_hash;
27
+        public $arguments = array();
28
+        public $instance = array();
29
+        private $class_name;
67 30
 
68
-			// init parent
69
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
-				parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
-			}
31
+        /**
32
+         * The relative url to the current folder.
33
+         *
34
+         * @var string
35
+         */
36
+        public $url = '';
37
+
38
+        /**
39
+         * Take the array options and use them to build.
40
+         */
41
+        public function __construct( $options ) {
42
+            global $sd_widgets;
43
+
44
+            $sd_widgets[ $options['base_id'] ] = array(
45
+                'name'       => $options['name'],
46
+                'class_name' => $options['class_name'],
47
+                'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
+            );
49
+            $this->base_id                     = $options['base_id'];
50
+            // lets filter the options before we do anything
51
+            $options       = apply_filters( "wp_super_duper_options", $options );
52
+            $options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
+            $options       = $this->add_name_from_key( $options );
54
+            $this->options = $options;
55
+
56
+            $this->base_id   = $options['base_id'];
57
+            $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
+
59
+            // nested blocks can't work as a widget
60
+            if(!empty($this->options['nested-block'])){
61
+                if(empty($this->options['output_types'])){
62
+                    $this->options['output_types'] = array('shortcode','block');
63
+                }elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
+                    unset($this->options['output_types'][$key]);
65
+                }
66
+            }
72 67
 
68
+            // init parent
69
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
+                parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
+            }
73 72
 
74
-			if ( isset( $options['class_name'] ) ) {
75
-				// register widget
76
-				$this->class_name = $options['class_name'];
77 73
 
78
-				// register shortcode, this needs to be done even for blocks and widgets
79
-				$this->register_shortcode();
74
+            if ( isset( $options['class_name'] ) ) {
75
+                // register widget
76
+                $this->class_name = $options['class_name'];
80 77
 
78
+                // register shortcode, this needs to be done even for blocks and widgets
79
+                $this->register_shortcode();
81 80
 
82
-				// Fusion Builder (avada) support
83
-				if ( function_exists( 'fusion_builder_map' ) ) {
84
-					add_action( 'init', array( $this, 'register_fusion_element' ) );
85
-				}
81
+
82
+                // Fusion Builder (avada) support
83
+                if ( function_exists( 'fusion_builder_map' ) ) {
84
+                    add_action( 'init', array( $this, 'register_fusion_element' ) );
85
+                }
86 86
 
87 87
                 // maybe load the Bricks transformer class
88 88
                 if( class_exists('\Bricks\Elements', false) ){
89
-					add_action( 'init', array( $this, 'load_bricks_element_class' ) );
89
+                    add_action( 'init', array( $this, 'load_bricks_element_class' ) );
90 90
                 }
91 91
 
92
-				// register block
93
-				if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
-					add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
-				}
96
-			}
92
+                // register block
93
+                if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
+                    add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
+                }
96
+            }
97 97
 
98
-			// add the CSS and JS we need ONCE
99
-			global $sd_widget_scripts;
98
+            // add the CSS and JS we need ONCE
99
+            global $sd_widget_scripts;
100 100
 
101
-			if ( ! $sd_widget_scripts ) {
102
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
-				wp_add_inline_style( 'widgets', $this->widget_css() );
101
+            if ( ! $sd_widget_scripts ) {
102
+                wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
+                wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
+                wp_add_inline_style( 'widgets', $this->widget_css() );
105 105
 
106
-				// maybe add elementor editor styles
107
-				add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
106
+                // maybe add elementor editor styles
107
+                add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
108 108
 
109
-				$sd_widget_scripts = true;
109
+                $sd_widget_scripts = true;
110 110
 
111
-				// add shortcode insert button once
112
-				add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
-				// generatepress theme sections compatibility
115
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
-				}
118
-				/* Load script on Divi theme builder page */
119
-				if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
-					add_thickbox();
121
-					add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
-				}
111
+                // add shortcode insert button once
112
+                add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
+                add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
+                // generatepress theme sections compatibility
115
+                if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
+                    add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
+                }
118
+                /* Load script on Divi theme builder page */
119
+                if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
+                    add_thickbox();
121
+                    add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
+                }
123 123
 
124
-				if ( $this->is_preview() ) {
125
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
-					// this makes the insert button work for elementor
127
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
128
-						$this,
129
-						'shortcode_insert_button_script'
130
-					) ); // for elementor
131
-				}
132
-				// this makes the insert button work for cornerstone
133
-				add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
124
+                if ( $this->is_preview() ) {
125
+                    add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
+                    // this makes the insert button work for elementor
127
+                    add_action( 'elementor/editor/after_enqueue_scripts', array(
128
+                        $this,
129
+                        'shortcode_insert_button_script'
130
+                    ) ); // for elementor
131
+                }
132
+                // this makes the insert button work for cornerstone
133
+                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
134 134
 
135
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
135
+                add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
+                add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
137 137
 
138
-				// add generator text to head
139
-				add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
-				add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
-			}
138
+                // add generator text to head
139
+                add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
+                add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
+            }
142 142
 
143
-			do_action( 'wp_super_duper_widget_init', $options, $this );
144
-		}
143
+            do_action( 'wp_super_duper_widget_init', $options, $this );
144
+        }
145 145
 
146 146
         /**
147 147
          * Load the Bricks conversion class if we are running Bricks.
@@ -151,163 +151,163 @@  discard block
 block discarded – undo
151 151
                     include_once __DIR__ . '/includes/class-super-duper-bricks-element.php';
152 152
         }
153 153
 
154
-		/**
155
-		 * The register widget function
156
-		 * @return void
157
-		 */
158
-		public function _register() {
159
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
-				parent::_register();
161
-			}
162
-		}
163
-
164
-		/**
165
-		 * Add our widget CSS to elementor editor.
166
-		 */
167
-		public function elementor_editor_styles() {
168
-			wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
-		}
170
-
171
-		public function register_fusion_element() {
172
-
173
-			$options = $this->options;
174
-
175
-			if ( $this->base_id ) {
176
-
177
-				$params = $this->get_fusion_params();
178
-
179
-				$args = array(
180
-					'name'            => $options['name'],
181
-					'shortcode'       => $this->base_id,
182
-					'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
-					'allow_generator' => true,
184
-				);
185
-
186
-				if ( ! empty( $params ) ) {
187
-					$args['params'] = $params;
188
-				}
189
-
190
-				fusion_builder_map( $args );
191
-			}
154
+        /**
155
+         * The register widget function
156
+         * @return void
157
+         */
158
+        public function _register() {
159
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
+                parent::_register();
161
+            }
162
+        }
192 163
 
193
-		}
164
+        /**
165
+         * Add our widget CSS to elementor editor.
166
+         */
167
+        public function elementor_editor_styles() {
168
+            wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
+        }
194 170
 
195
-		public function get_fusion_params() {
196
-			$params    = array();
197
-			$arguments = $this->get_arguments();
198
-
199
-			if ( ! empty( $arguments ) ) {
200
-				foreach ( $arguments as $key => $val ) {
201
-					$param = array();
202
-					// type
203
-					$param['type'] = str_replace(
204
-						array(
205
-							"text",
206
-							"number",
207
-							"email",
208
-							"color",
209
-							"checkbox"
210
-						),
211
-						array(
212
-							"textfield",
213
-							"textfield",
214
-							"textfield",
215
-							"colorpicker",
216
-							"select",
171
+        public function register_fusion_element() {
217 172
 
218
-						),
219
-						$val['type'] );
173
+            $options = $this->options;
220 174
 
221
-					// multiselect
222
-					if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
-						$param['type']     = 'multiple_select';
224
-						$param['multiple'] = true;
225
-					}
175
+            if ( $this->base_id ) {
226 176
 
227
-					// heading
228
-					$param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
177
+                $params = $this->get_fusion_params();
229 178
 
230
-					// description
231
-					$param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
179
+                $args = array(
180
+                    'name'            => $options['name'],
181
+                    'shortcode'       => $this->base_id,
182
+                    'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
+                    'allow_generator' => true,
184
+                );
232 185
 
233
-					// param_name
234
-					$param['param_name'] = $key;
186
+                if ( ! empty( $params ) ) {
187
+                    $args['params'] = $params;
188
+                }
235 189
 
236
-					// Default
237
-					$param['default'] = isset( $val['default'] ) ? $val['default'] : '';
190
+                fusion_builder_map( $args );
191
+            }
238 192
 
239
-					// Group
240
-					if ( isset( $val['group'] ) ) {
241
-						$param['group'] = $val['group'];
242
-					}
193
+        }
243 194
 
244
-					// value
245
-					if ( $val['type'] == 'checkbox' ) {
246
-						if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
-							unset( $param['default'] );
248
-						}
249
-						$param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
-					} elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
-						$param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
-					} else {
253
-						$param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
-					}
195
+        public function get_fusion_params() {
196
+            $params    = array();
197
+            $arguments = $this->get_arguments();
198
+
199
+            if ( ! empty( $arguments ) ) {
200
+                foreach ( $arguments as $key => $val ) {
201
+                    $param = array();
202
+                    // type
203
+                    $param['type'] = str_replace(
204
+                        array(
205
+                            "text",
206
+                            "number",
207
+                            "email",
208
+                            "color",
209
+                            "checkbox"
210
+                        ),
211
+                        array(
212
+                            "textfield",
213
+                            "textfield",
214
+                            "textfield",
215
+                            "colorpicker",
216
+                            "select",
217
+
218
+                        ),
219
+                        $val['type'] );
220
+
221
+                    // multiselect
222
+                    if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
+                        $param['type']     = 'multiple_select';
224
+                        $param['multiple'] = true;
225
+                    }
226
+
227
+                    // heading
228
+                    $param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
229
+
230
+                    // description
231
+                    $param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
232
+
233
+                    // param_name
234
+                    $param['param_name'] = $key;
235
+
236
+                    // Default
237
+                    $param['default'] = isset( $val['default'] ) ? $val['default'] : '';
238
+
239
+                    // Group
240
+                    if ( isset( $val['group'] ) ) {
241
+                        $param['group'] = $val['group'];
242
+                    }
243
+
244
+                    // value
245
+                    if ( $val['type'] == 'checkbox' ) {
246
+                        if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
+                            unset( $param['default'] );
248
+                        }
249
+                        $param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
+                    } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
+                        $param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
+                    } else {
253
+                        $param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
+                    }
255
+
256
+                    // setup the param
257
+                    $params[] = $param;
255 258
 
256
-					// setup the param
257
-					$params[] = $param;
259
+                }
260
+            }
258 261
 
259
-				}
260
-			}
261 262
 
263
+            return $params;
264
+        }
262 265
 
263
-			return $params;
264
-		}
266
+        /**
267
+         * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
+         */
269
+        public static function maybe_cornerstone_builder() {
270
+            if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
+                self::shortcode_insert_button_script();
272
+            }
273
+        }
265 274
 
266
-		/**
267
-		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
-		 */
269
-		public static function maybe_cornerstone_builder() {
270
-			if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
-				self::shortcode_insert_button_script();
272
-			}
273
-		}
275
+        /**
276
+         * A function to ge the shortcode builder picker html.
277
+         *
278
+         * @param string $editor_id
279
+         *
280
+         * @return string
281
+         */
282
+        public static function get_picker( $editor_id = '' ) {
274 283
 
275
-		/**
276
-		 * A function to ge the shortcode builder picker html.
277
-		 *
278
-		 * @param string $editor_id
279
-		 *
280
-		 * @return string
281
-		 */
282
-		public static function get_picker( $editor_id = '' ) {
283
-
284
-			ob_start();
285
-			if ( isset( $_POST['editor_id'] ) ) {
286
-				$editor_id = esc_attr( $_POST['editor_id'] );
287
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
-				$editor_id = 'main_content_content_vb_tiny_mce';
289
-			}
284
+            ob_start();
285
+            if ( isset( $_POST['editor_id'] ) ) {
286
+                $editor_id = esc_attr( $_POST['editor_id'] );
287
+            } elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
+                $editor_id = 'main_content_content_vb_tiny_mce';
289
+            }
290 290
 
291
-			global $sd_widgets;
291
+            global $sd_widgets;
292 292
 
293 293
 //			print_r($sd_widgets);exit;
294
-			?>
294
+            ?>
295 295
 
296 296
 			<div class="sd-shortcode-left-wrap">
297 297
 				<?php
298
-				ksort( $sd_widgets );
299
-				//				print_r($sd_widgets);exit;
300
-				if ( ! empty( $sd_widgets ) ) {
301
-					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
-					echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
-					foreach ( $sd_widgets as $shortcode => $class ) {
304
-						if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
-					}
307
-					echo "</select>";
298
+                ksort( $sd_widgets );
299
+                //				print_r($sd_widgets);exit;
300
+                if ( ! empty( $sd_widgets ) ) {
301
+                    echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
+                    echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
+                    foreach ( $sd_widgets as $shortcode => $class ) {
304
+                        if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
+                        echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
+                    }
307
+                    echo "</select>";
308 308
 
309
-				}
310
-				?>
309
+                }
310
+                ?>
311 311
 				<div class="sd-shortcode-settings"></div>
312 312
 
313 313
 			</div>
@@ -318,8 +318,8 @@  discard block
 block discarded – undo
318 318
 					<?php if ( $editor_id != '' ) { ?>
319 319
 						<button class="button sd-insert-shortcode-button"
320 320
 								onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
321
-									echo "'" . $editor_id . "'";
322
-								} ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
321
+                                    echo "'" . $editor_id . "'";
322
+                                } ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
323 323
 					<?php } ?>
324 324
 					<button class="button"
325 325
 							onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
@@ -327,150 +327,150 @@  discard block
 block discarded – undo
327 327
 			</div>
328 328
 			<?php
329 329
 
330
-			$html = ob_get_clean();
330
+            $html = ob_get_clean();
331 331
 
332
-			if ( wp_doing_ajax() ) {
333
-				echo $html;
334
-				$should_die = true;
332
+            if ( wp_doing_ajax() ) {
333
+                echo $html;
334
+                $should_die = true;
335 335
 
336
-				// some builder get the editor via ajax so we should not die on those occasions
337
-				$dont_die = array(
338
-					'parent_tag',// WP Bakery
339
-					'avia_request' // enfold
340
-				);
336
+                // some builder get the editor via ajax so we should not die on those occasions
337
+                $dont_die = array(
338
+                    'parent_tag',// WP Bakery
339
+                    'avia_request' // enfold
340
+                );
341 341
 
342
-				foreach ( $dont_die as $request ) {
343
-					if ( isset( $_REQUEST[ $request ] ) ) {
344
-						$should_die = false;
345
-					}
346
-				}
342
+                foreach ( $dont_die as $request ) {
343
+                    if ( isset( $_REQUEST[ $request ] ) ) {
344
+                        $should_die = false;
345
+                    }
346
+                }
347 347
 
348
-				if ( $should_die ) {
349
-					wp_die();
350
-				}
348
+                if ( $should_die ) {
349
+                    wp_die();
350
+                }
351 351
 
352
-			} else {
353
-				return $html;
354
-			}
352
+            } else {
353
+                return $html;
354
+            }
355 355
 
356
-			return '';
356
+            return '';
357 357
 
358
-		}
358
+        }
359 359
 
360
-		/**
361
-		 * Output the version in the header.
362
-		 */
363
-		public function generator() {
364
-			$file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
-			$plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
-
367
-			// Find source plugin/theme of SD
368
-			$source = array();
369
-			if ( strpos( $file, $plugins_dir ) !== false ) {
370
-				$source = explode( "/", plugin_basename( $file ) );
371
-			} else if ( function_exists( 'get_theme_root' ) ) {
372
-				$themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
-
374
-				if ( strpos( $file, $themes_dir ) !== false ) {
375
-					$source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
-				}
377
-			}
360
+        /**
361
+         * Output the version in the header.
362
+         */
363
+        public function generator() {
364
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
+
367
+            // Find source plugin/theme of SD
368
+            $source = array();
369
+            if ( strpos( $file, $plugins_dir ) !== false ) {
370
+                $source = explode( "/", plugin_basename( $file ) );
371
+            } else if ( function_exists( 'get_theme_root' ) ) {
372
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
+
374
+                if ( strpos( $file, $themes_dir ) !== false ) {
375
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
+                }
377
+            }
378 378
 
379
-			echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
-		}
379
+            echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
+        }
381 381
 
382
-		/**
383
-		 * Get widget settings.
384
-		 *
385
-		 * @since 1.0.0
386
-		 */
387
-		public static function get_widget_settings() {
388
-			global $sd_widgets;
389
-
390
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
-			if ( ! $shortcode ) {
392
-				wp_die();
393
-			}
394
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
-			if ( ! $widget_args ) {
396
-				wp_die();
397
-			}
398
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
-			if ( ! $class_name ) {
400
-				wp_die();
401
-			}
382
+        /**
383
+         * Get widget settings.
384
+         *
385
+         * @since 1.0.0
386
+         */
387
+        public static function get_widget_settings() {
388
+            global $sd_widgets;
402 389
 
403
-			// invoke an instance method
404
-			$widget = new $class_name;
390
+            $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
+            if ( ! $shortcode ) {
392
+                wp_die();
393
+            }
394
+            $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
+            if ( ! $widget_args ) {
396
+                wp_die();
397
+            }
398
+            $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
+            if ( ! $class_name ) {
400
+                wp_die();
401
+            }
402
+
403
+            // invoke an instance method
404
+            $widget = new $class_name;
405 405
 
406
-			ob_start();
407
-			$widget->form( array() );
408
-			$form = ob_get_clean();
409
-			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
-			echo "<style>" . $widget->widget_css() . "</style>";
411
-			echo "<script>" . $widget->widget_js() . "</script>";
412
-			?>
406
+            ob_start();
407
+            $widget->form( array() );
408
+            $form = ob_get_clean();
409
+            echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
+            echo "<style>" . $widget->widget_css() . "</style>";
411
+            echo "<script>" . $widget->widget_js() . "</script>";
412
+            ?>
413 413
 			<?php
414
-			wp_die();
415
-		}
414
+            wp_die();
415
+        }
416 416
 
417
-		/**
418
-		 * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
-		 *
420
-		 * @param string $editor_id Optional. Shortcode editor id. Default null.
421
-		 * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
-		 *
423
-		 *@since 1.0.0
424
-		 *
425
-		 */
426
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
-			global $sd_widgets, $shortcode_insert_button_once;
428
-			if ( $shortcode_insert_button_once ) {
429
-				return;
430
-			}
431
-			add_thickbox();
417
+        /**
418
+         * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
+         *
420
+         * @param string $editor_id Optional. Shortcode editor id. Default null.
421
+         * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
+         *
423
+         *@since 1.0.0
424
+         *
425
+         */
426
+        public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
+            global $sd_widgets, $shortcode_insert_button_once;
428
+            if ( $shortcode_insert_button_once ) {
429
+                return;
430
+            }
431
+            add_thickbox();
432 432
 
433 433
 
434
-			/**
435
-			 * Cornerstone makes us play dirty tricks :/
436
-			 * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
-			 */
438
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
-				echo '<span id="insert-media-button">';
440
-			}
434
+            /**
435
+             * Cornerstone makes us play dirty tricks :/
436
+             * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
+             */
438
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
+                echo '<span id="insert-media-button">';
440
+            }
441 441
 
442
-			echo self::shortcode_button( 'this', 'true' );
442
+            echo self::shortcode_button( 'this', 'true' );
443 443
 
444
-			// see opening note
445
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
-				echo '</span>'; // end #insert-media-button
447
-			}
444
+            // see opening note
445
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
+                echo '</span>'; // end #insert-media-button
447
+            }
448 448
 
449
-			// Add separate script for generatepress theme sections
450
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
-			} else {
452
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
-			}
449
+            // Add separate script for generatepress theme sections
450
+            if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
+            } else {
452
+                self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
+            }
454 454
 
455
-			$shortcode_insert_button_once = true;
456
-		}
455
+            $shortcode_insert_button_once = true;
456
+        }
457 457
 
458
-		/**
459
-		 * Gets the shortcode insert button html.
460
-		 *
461
-		 * @param string $id
462
-		 * @param string $search_for_id
463
-		 *
464
-		 * @return mixed
465
-		 */
466
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
-			ob_start();
468
-			?>
458
+        /**
459
+         * Gets the shortcode insert button html.
460
+         *
461
+         * @param string $id
462
+         * @param string $search_for_id
463
+         *
464
+         * @return mixed
465
+         */
466
+        public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
+            ob_start();
468
+            ?>
469 469
 			<span class="sd-lable-shortcode-inserter">
470 470
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
471
-				if ( $search_for_id ) {
472
-					echo "," . $search_for_id;
473
-				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
471
+                if ( $search_for_id ) {
472
+                    echo "," . $search_for_id;
473
+                } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
474 474
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
475 475
 					<span style="vertical-align: middle;line-height: 18px;font-size: 20px;"
476 476
 						  class="dashicons dashicons-screenoptions"></span>
@@ -481,21 +481,21 @@  discard block
 block discarded – undo
481 481
 			</span>
482 482
 
483 483
 			<?php
484
-			$html = ob_get_clean();
484
+            $html = ob_get_clean();
485 485
 
486
-			// remove line breaks so we can use it in js
487
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
488
-		}
486
+            // remove line breaks so we can use it in js
487
+            return preg_replace( "/\r|\n/", "", trim( $html ) );
488
+        }
489 489
 
490
-		/**
491
-		 * Makes SD work with the siteOrigin page builder.
492
-		 *
493
-		 * @return mixed
494
-		 *@since 1.0.6
495
-		 */
496
-		public static function siteorigin_js() {
497
-			ob_start();
498
-			?>
490
+        /**
491
+         * Makes SD work with the siteOrigin page builder.
492
+         *
493
+         * @return mixed
494
+         *@since 1.0.6
495
+         */
496
+        public static function siteorigin_js() {
497
+            ob_start();
498
+            ?>
499 499
 			<script>
500 500
 				/**
501 501
 				 * Check a form to see what items should be shown or hidden.
@@ -571,29 +571,29 @@  discard block
 block discarded – undo
571 571
 				});
572 572
 			</script>
573 573
 			<?php
574
-			$output = ob_get_clean();
574
+            $output = ob_get_clean();
575 575
 
576
-			/*
576
+            /*
577 577
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
578 578
 			 */
579 579
 
580
-			return str_replace( array(
581
-				'<script>',
582
-				'</script>'
583
-			), '', $output );
584
-		}
580
+            return str_replace( array(
581
+                '<script>',
582
+                '</script>'
583
+            ), '', $output );
584
+        }
585 585
 
586
-		/**
587
-		 * Output the JS and CSS for the shortcode insert button.
588
-		 *
589
-		 * @param string $editor_id
590
-		 * @param string $insert_shortcode_function
591
-		 *
592
-		 *@since 1.0.6
593
-		 *
594
-		 */
595
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
-			?>
586
+        /**
587
+         * Output the JS and CSS for the shortcode insert button.
588
+         *
589
+         * @param string $editor_id
590
+         * @param string $insert_shortcode_function
591
+         *
592
+         *@since 1.0.6
593
+         *
594
+         */
595
+        public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
+            ?>
597 597
 			<style>
598 598
 				.sd-shortcode-left-wrap {
599 599
 					float: left;
@@ -721,35 +721,35 @@  discard block
 block discarded – undo
721 721
 				<?php } ?>
722 722
 			</style>
723 723
 			<?php
724
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
-				echo "<script>" . self::siteorigin_js() . "</script>";
726
-			}
727
-			?>
724
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
+                echo "<script>" . self::siteorigin_js() . "</script>";
726
+            }
727
+            ?>
728 728
 			<script>
729 729
 				<?php
730
-				if(! empty( $insert_shortcode_function )){
731
-					echo $insert_shortcode_function;
732
-				}else{
733
-
734
-				/**
735
-				 * Function for super duper insert shortcode.
736
-				 *
737
-				 * @since 1.0.0
738
-				 */
739
-				?>
730
+                if(! empty( $insert_shortcode_function )){
731
+                    echo $insert_shortcode_function;
732
+                }else{
733
+
734
+                /**
735
+                 * Function for super duper insert shortcode.
736
+                 *
737
+                 * @since 1.0.0
738
+                 */
739
+                ?>
740 740
 				function sd_insert_shortcode($editor_id) {
741 741
 					$shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val();
742 742
 					if ($shortcode) {
743 743
 						if (!$editor_id) {
744 744
 							<?php
745
-							if ( isset( $_REQUEST['et_fb'] ) ) {
746
-								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
-								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
-							} else {
750
-								echo '$editor_id = "#wp-content-editor-container textarea";';
751
-							}
752
-							?>
745
+                            if ( isset( $_REQUEST['et_fb'] ) ) {
746
+                                echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
+                            } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
+                                echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
+                            } else {
750
+                                echo '$editor_id = "#wp-content-editor-container textarea";';
751
+                            }
752
+                            ?>
753 753
 						} else {
754 754
 							$editor_id = '#' + $editor_id;
755 755
 						}
@@ -1063,18 +1063,18 @@  discard block
 block discarded – undo
1063 1063
 				}
1064 1064
 			</script>
1065 1065
 			<?php
1066
-		}
1066
+        }
1067 1067
 
1068
-		/**
1069
-		 * Gets some CSS for the widgets screen.
1070
-		 *
1071
-		 * @param bool $advanced If we should include advanced CSS.
1072
-		 *
1073
-		 * @return mixed
1074
-		 */
1075
-		public function widget_css( $advanced = true ) {
1076
-			ob_start();
1077
-			?>
1068
+        /**
1069
+         * Gets some CSS for the widgets screen.
1070
+         *
1071
+         * @param bool $advanced If we should include advanced CSS.
1072
+         *
1073
+         * @return mixed
1074
+         */
1075
+        public function widget_css( $advanced = true ) {
1076
+            ob_start();
1077
+            ?>
1078 1078
 			<style>
1079 1079
 				<?php if( $advanced ){ ?>
1080 1080
 				.sd-advanced-setting {
@@ -1114,26 +1114,26 @@  discard block
 block discarded – undo
1114 1114
 				.elementor-control .sd-argument select[multiple] option{padding:3px}
1115 1115
 			</style>
1116 1116
 			<?php
1117
-			$output = ob_get_clean();
1117
+            $output = ob_get_clean();
1118 1118
 
1119
-			/*
1119
+            /*
1120 1120
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1121 1121
 			 */
1122 1122
 
1123
-			return str_replace( array(
1124
-				'<style>',
1125
-				'</style>'
1126
-			), '', $output );
1127
-		}
1123
+            return str_replace( array(
1124
+                '<style>',
1125
+                '</style>'
1126
+            ), '', $output );
1127
+        }
1128 1128
 
1129
-		/**
1130
-		 * Gets some JS for the widgets screen.
1131
-		 *
1132
-		 * @return mixed
1133
-		 */
1134
-		public function widget_js() {
1135
-			ob_start();
1136
-			?>
1129
+        /**
1130
+         * Gets some JS for the widgets screen.
1131
+         *
1132
+         * @return mixed
1133
+         */
1134
+        public function widget_js() {
1135
+            ob_start();
1136
+            ?>
1137 1137
 			<script>
1138 1138
 
1139 1139
 				/**
@@ -1284,513 +1284,513 @@  discard block
 block discarded – undo
1284 1284
 				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1285 1285
 			</script>
1286 1286
 			<?php
1287
-			$output = ob_get_clean();
1287
+            $output = ob_get_clean();
1288 1288
 
1289
-			/*
1289
+            /*
1290 1290
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1291 1291
 			 */
1292 1292
 
1293
-			return str_replace( array(
1294
-				'<script>',
1295
-				'</script>'
1296
-			), '', $output );
1297
-		}
1293
+            return str_replace( array(
1294
+                '<script>',
1295
+                '</script>'
1296
+            ), '', $output );
1297
+        }
1298 1298
 
1299 1299
 
1300
-		/**
1301
-		 * Set the name from the argument key.
1302
-		 *
1303
-		 * @param $options
1304
-		 *
1305
-		 * @return mixed
1306
-		 */
1307
-		private function add_name_from_key( $options, $arguments = false ) {
1308
-			if ( ! empty( $options['arguments'] ) ) {
1309
-				foreach ( $options['arguments'] as $key => $val ) {
1310
-					$options['arguments'][ $key ]['name'] = $key;
1311
-				}
1312
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
-				foreach ( $options as $key => $val ) {
1314
-					$options[ $key ]['name'] = $key;
1315
-				}
1316
-			}
1300
+        /**
1301
+         * Set the name from the argument key.
1302
+         *
1303
+         * @param $options
1304
+         *
1305
+         * @return mixed
1306
+         */
1307
+        private function add_name_from_key( $options, $arguments = false ) {
1308
+            if ( ! empty( $options['arguments'] ) ) {
1309
+                foreach ( $options['arguments'] as $key => $val ) {
1310
+                    $options['arguments'][ $key ]['name'] = $key;
1311
+                }
1312
+            } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
+                foreach ( $options as $key => $val ) {
1314
+                    $options[ $key ]['name'] = $key;
1315
+                }
1316
+            }
1317 1317
 
1318
-			return $options;
1319
-		}
1318
+            return $options;
1319
+        }
1320 1320
 
1321
-		/**
1322
-		 * Register the parent shortcode.
1323
-		 *
1324
-		 * @since 1.0.0
1325
-		 */
1326
-		public function register_shortcode() {
1327
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
-		}
1321
+        /**
1322
+         * Register the parent shortcode.
1323
+         *
1324
+         * @since 1.0.0
1325
+         */
1326
+        public function register_shortcode() {
1327
+            add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
+            add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
+        }
1330 1330
 
1331
-		/**
1332
-		 * Render the shortcode via ajax so we can return it to Gutenberg.
1333
-		 *
1334
-		 * @since 1.0.0
1335
-		 */
1336
-		public function render_shortcode() {
1337
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
-			if ( ! current_user_can( 'manage_options' ) ) {
1339
-				wp_die();
1340
-			}
1331
+        /**
1332
+         * Render the shortcode via ajax so we can return it to Gutenberg.
1333
+         *
1334
+         * @since 1.0.0
1335
+         */
1336
+        public function render_shortcode() {
1337
+            check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
+            if ( ! current_user_can( 'manage_options' ) ) {
1339
+                wp_die();
1340
+            }
1341 1341
 
1342
-			// we might need the $post value here so lets set it.
1343
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1345
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
-					global $post;
1347
-					$post = $post_obj;
1348
-				}
1349
-			}
1342
+            // we might need the $post value here so lets set it.
1343
+            if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
+                $post_obj = get_post( absint( $_POST['post_id'] ) );
1345
+                if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
+                    global $post;
1347
+                    $post = $post_obj;
1348
+                }
1349
+            }
1350 1350
 
1351
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
-				$is_preview = $this->is_preview();
1353
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
-				$attributes       = '';
1356
-				if ( ! empty( $attributes_array ) ) {
1357
-					foreach ( $attributes_array as $key => $value ) {
1358
-						if ( is_array( $value ) ) {
1359
-							$value = implode( ",", $value );
1360
-						}
1351
+            if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
+                $is_preview = $this->is_preview();
1353
+                $shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
+                $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
+                $attributes       = '';
1356
+                if ( ! empty( $attributes_array ) ) {
1357
+                    foreach ( $attributes_array as $key => $value ) {
1358
+                        if ( is_array( $value ) ) {
1359
+                            $value = implode( ",", $value );
1360
+                        }
1361
+
1362
+                        if ( ! empty( $value ) ) {
1363
+                            $value = wp_unslash( $value );
1364
+
1365
+                            // Encode [ and ].
1366
+                            if ( $is_preview ) {
1367
+                                $value = $this->encode_shortcodes( $value );
1368
+                            }
1369
+                        }
1370
+                        $attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
+                    }
1372
+                }
1361 1373
 
1362
-						if ( ! empty( $value ) ) {
1363
-							$value = wp_unslash( $value );
1374
+                $shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1364 1375
 
1365
-							// Encode [ and ].
1366
-							if ( $is_preview ) {
1367
-								$value = $this->encode_shortcodes( $value );
1368
-							}
1369
-						}
1370
-						$attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
-					}
1372
-				}
1376
+                $content = do_shortcode( $shortcode );
1373 1377
 
1374
-				$shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1378
+                // Decode [ and ].
1379
+                if ( ! empty( $content ) && $is_preview ) {
1380
+                    $content = $this->decode_shortcodes( $content );
1381
+                }
1375 1382
 
1376
-				$content = do_shortcode( $shortcode );
1383
+                echo $content;
1384
+            }
1385
+            wp_die();
1386
+        }
1377 1387
 
1378
-				// Decode [ and ].
1379
-				if ( ! empty( $content ) && $is_preview ) {
1380
-					$content = $this->decode_shortcodes( $content );
1381
-				}
1388
+        /**
1389
+         * Output the shortcode.
1390
+         *
1391
+         * @param array $args
1392
+         * @param string $content
1393
+         *
1394
+         * @return string
1395
+         */
1396
+        public function shortcode_output( $args = array(), $content = '' ) {
1397
+            $_instance = $args;
1382 1398
 
1383
-				echo $content;
1384
-			}
1385
-			wp_die();
1386
-		}
1399
+            $args = $this->argument_values( $args );
1387 1400
 
1388
-		/**
1389
-		 * Output the shortcode.
1390
-		 *
1391
-		 * @param array $args
1392
-		 * @param string $content
1393
-		 *
1394
-		 * @return string
1395
-		 */
1396
-		public function shortcode_output( $args = array(), $content = '' ) {
1397
-			$_instance = $args;
1398
-
1399
-			$args = $this->argument_values( $args );
1400
-
1401
-			// add extra argument so we know its a output to gutenberg
1402
-			//$args
1403
-			$args = $this->string_to_bool( $args );
1404
-
1405
-			// if we have a enclosed shortcode we add it to the special `html` argument
1406
-			if ( ! empty( $content ) ) {
1407
-				$args['html'] = $content;
1408
-			}
1401
+            // add extra argument so we know its a output to gutenberg
1402
+            //$args
1403
+            $args = $this->string_to_bool( $args );
1409 1404
 
1410
-			if ( ! $this->is_preview() ) {
1411
-				/**
1412
-				 * Filters the settings for a particular widget args.
1413
-				 *
1414
-				 * @param array          $args      The current widget instance's settings.
1415
-				 * @param WP_Super_Duper $widget    The current widget settings.
1416
-				 * @param array          $_instance An array of default widget arguments.
1417
-				 *
1418
-				 *@since 1.0.28
1419
-				 *
1420
-				 */
1421
-				$args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1405
+            // if we have a enclosed shortcode we add it to the special `html` argument
1406
+            if ( ! empty( $content ) ) {
1407
+                $args['html'] = $content;
1408
+            }
1422 1409
 
1423
-				if ( ! is_array( $args ) ) {
1424
-					return $args;
1425
-				}
1426
-			}
1410
+            if ( ! $this->is_preview() ) {
1411
+                /**
1412
+                 * Filters the settings for a particular widget args.
1413
+                 *
1414
+                 * @param array          $args      The current widget instance's settings.
1415
+                 * @param WP_Super_Duper $widget    The current widget settings.
1416
+                 * @param array          $_instance An array of default widget arguments.
1417
+                 *
1418
+                 *@since 1.0.28
1419
+                 *
1420
+                 */
1421
+                $args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1422
+
1423
+                if ( ! is_array( $args ) ) {
1424
+                    return $args;
1425
+                }
1426
+            }
1427 1427
 
1428
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
-			$class .= " sdel-".$this->get_instance_hash();
1428
+            $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
+            $class .= " sdel-".$this->get_instance_hash();
1430 1430
 
1431
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1431
+            $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
+            $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1433 1433
 
1434
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1434
+            $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
+            $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1436 1436
 
1437
-			$shortcode_args = array();
1438
-			$output         = '';
1439
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
-			if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
-				$no_wrap = true;
1442
-			}
1443
-			$main_content = $this->output( $args, $shortcode_args, $content );
1444
-			if ( $main_content && ! $no_wrap ) {
1445
-				// wrap the shortcode in a div with the same class as the widget
1446
-				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
-				if ( ! empty( $args['title'] ) ) {
1448
-					// if its a shortcode and there is a title try to grab the title wrappers
1449
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
-					if ( empty( $instance ) ) {
1451
-						global $wp_registered_sidebars;
1452
-						if ( ! empty( $wp_registered_sidebars ) ) {
1453
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1454
-								if ( ! empty( $sidebar['before_title'] ) ) {
1455
-									$shortcode_args['before_title'] = $sidebar['before_title'];
1456
-									$shortcode_args['after_title']  = $sidebar['after_title'];
1457
-									break;
1458
-								}
1459
-							}
1460
-						}
1461
-					}
1462
-					$output .= $this->output_title( $shortcode_args, $args );
1463
-				}
1464
-				$output .= $main_content;
1465
-				$output .= '</div>';
1466
-			} elseif ( $main_content && $no_wrap ) {
1467
-				$output .= $main_content;
1468
-			}
1437
+            $shortcode_args = array();
1438
+            $output         = '';
1439
+            $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
+            if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
+                $no_wrap = true;
1442
+            }
1443
+            $main_content = $this->output( $args, $shortcode_args, $content );
1444
+            if ( $main_content && ! $no_wrap ) {
1445
+                // wrap the shortcode in a div with the same class as the widget
1446
+                $output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
+                if ( ! empty( $args['title'] ) ) {
1448
+                    // if its a shortcode and there is a title try to grab the title wrappers
1449
+                    $shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
+                    if ( empty( $instance ) ) {
1451
+                        global $wp_registered_sidebars;
1452
+                        if ( ! empty( $wp_registered_sidebars ) ) {
1453
+                            foreach ( $wp_registered_sidebars as $sidebar ) {
1454
+                                if ( ! empty( $sidebar['before_title'] ) ) {
1455
+                                    $shortcode_args['before_title'] = $sidebar['before_title'];
1456
+                                    $shortcode_args['after_title']  = $sidebar['after_title'];
1457
+                                    break;
1458
+                                }
1459
+                            }
1460
+                        }
1461
+                    }
1462
+                    $output .= $this->output_title( $shortcode_args, $args );
1463
+                }
1464
+                $output .= $main_content;
1465
+                $output .= '</div>';
1466
+            } elseif ( $main_content && $no_wrap ) {
1467
+                $output .= $main_content;
1468
+            }
1469 1469
 
1470
-			// if preview show a placeholder if empty
1471
-			if ( $this->is_preview() && $output == '' ) {
1472
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
-			}
1470
+            // if preview show a placeholder if empty
1471
+            if ( $this->is_preview() && $output == '' ) {
1472
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
+            }
1474 1474
 
1475
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
-		}
1475
+            return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
+        }
1477 1477
 
1478
-		/**
1479
-		 * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
-		 *
1481
-		 * @param string $name
1482
-		 *
1483
-		 * @return string
1484
-		 */
1485
-		public function preview_placeholder_text( $name = '' ) {
1486
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
-		}
1478
+        /**
1479
+         * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
+         *
1481
+         * @param string $name
1482
+         *
1483
+         * @return string
1484
+         */
1485
+        public function preview_placeholder_text( $name = '' ) {
1486
+            return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
+        }
1488 1488
 
1489
-		/**
1490
-		 * Sometimes booleans values can be turned to strings, so we fix that.
1491
-		 *
1492
-		 * @param $options
1493
-		 *
1494
-		 * @return mixed
1495
-		 */
1496
-		public function string_to_bool( $options ) {
1497
-			// convert bool strings to booleans
1498
-			foreach ( $options as $key => $val ) {
1499
-				if ( $val == 'false' ) {
1500
-					$options[ $key ] = false;
1501
-				} elseif ( $val == 'true' ) {
1502
-					$options[ $key ] = true;
1503
-				}
1504
-			}
1489
+        /**
1490
+         * Sometimes booleans values can be turned to strings, so we fix that.
1491
+         *
1492
+         * @param $options
1493
+         *
1494
+         * @return mixed
1495
+         */
1496
+        public function string_to_bool( $options ) {
1497
+            // convert bool strings to booleans
1498
+            foreach ( $options as $key => $val ) {
1499
+                if ( $val == 'false' ) {
1500
+                    $options[ $key ] = false;
1501
+                } elseif ( $val == 'true' ) {
1502
+                    $options[ $key ] = true;
1503
+                }
1504
+            }
1505 1505
 
1506
-			return $options;
1507
-		}
1506
+            return $options;
1507
+        }
1508 1508
 
1509
-		/**
1510
-		 * Get the argument values that are also filterable.
1511
-		 *
1512
-		 * @param $instance
1513
-		 *
1514
-		 * @return array
1515
-		 *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
-		 *
1517
-		 */
1518
-		public function argument_values( $instance ) {
1519
-			$argument_values = array();
1520
-
1521
-			// set widget instance
1522
-			$this->instance = $instance;
1523
-
1524
-			if ( empty( $this->arguments ) ) {
1525
-				$this->arguments = $this->get_arguments();
1526
-			}
1509
+        /**
1510
+         * Get the argument values that are also filterable.
1511
+         *
1512
+         * @param $instance
1513
+         *
1514
+         * @return array
1515
+         *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
+         *
1517
+         */
1518
+        public function argument_values( $instance ) {
1519
+            $argument_values = array();
1527 1520
 
1528
-			if ( ! empty( $this->arguments ) ) {
1529
-				foreach ( $this->arguments as $key => $args ) {
1530
-					// set the input name from the key
1531
-					$args['name'] = $key;
1532
-					//
1533
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
-					if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
-						// don't set default for an empty checkbox
1536
-					} elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
-						$argument_values[ $key ] = $args['default'];
1538
-					}
1539
-				}
1540
-			}
1521
+            // set widget instance
1522
+            $this->instance = $instance;
1541 1523
 
1542
-			return $argument_values;
1543
-		}
1524
+            if ( empty( $this->arguments ) ) {
1525
+                $this->arguments = $this->get_arguments();
1526
+            }
1544 1527
 
1545
-		/**
1546
-		 * Set arguments in super duper.
1547
-		 *
1548
-		 * @return array Set arguments.
1549
-		 *@since 1.0.0
1550
-		 *
1551
-		 */
1552
-		public function set_arguments() {
1553
-			return $this->arguments;
1554
-		}
1528
+            if ( ! empty( $this->arguments ) ) {
1529
+                foreach ( $this->arguments as $key => $args ) {
1530
+                    // set the input name from the key
1531
+                    $args['name'] = $key;
1532
+                    //
1533
+                    $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
+                    if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
+                        // don't set default for an empty checkbox
1536
+                    } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
+                        $argument_values[ $key ] = $args['default'];
1538
+                    }
1539
+                }
1540
+            }
1555 1541
 
1556
-		/**
1557
-		 * Get arguments in super duper.
1558
-		 *
1559
-		 * @return array Get arguments.
1560
-		 *@since 1.0.0
1561
-		 *
1562
-		 */
1563
-		public function get_arguments() {
1564
-			if ( empty( $this->arguments ) ) {
1565
-				$this->arguments = $this->set_arguments();
1566
-			}
1542
+            return $argument_values;
1543
+        }
1567 1544
 
1568
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1545
+        /**
1546
+         * Set arguments in super duper.
1547
+         *
1548
+         * @return array Set arguments.
1549
+         *@since 1.0.0
1550
+         *
1551
+         */
1552
+        public function set_arguments() {
1553
+            return $this->arguments;
1554
+        }
1570 1555
 
1571
-			return $this->arguments;
1572
-		}
1556
+        /**
1557
+         * Get arguments in super duper.
1558
+         *
1559
+         * @return array Get arguments.
1560
+         *@since 1.0.0
1561
+         *
1562
+         */
1563
+        public function get_arguments() {
1564
+            if ( empty( $this->arguments ) ) {
1565
+                $this->arguments = $this->set_arguments();
1566
+            }
1573 1567
 
1574
-		/**
1575
-		 * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
-		 *
1577
-		 * @param array $args
1578
-		 * @param array $widget_args
1579
-		 * @param string $content
1580
-		 */
1581
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1568
+            $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
+            $this->arguments = $this->add_name_from_key( $this->arguments, true );
1582 1570
 
1583
-		}
1571
+            return $this->arguments;
1572
+        }
1584 1573
 
1585
-		/**
1586
-		 * Add the dynamic block code inline when the wp-block in enqueued.
1587
-		 */
1588
-		public function register_block() {
1589
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1590
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
-			}
1593
-		}
1574
+        /**
1575
+         * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
+         *
1577
+         * @param array $args
1578
+         * @param array $widget_args
1579
+         * @param string $content
1580
+         */
1581
+        public function output( $args = array(), $widget_args = array(), $content = '' ) {
1594 1582
 
1595
-		/**
1596
-		 * Check if we need to show advanced options.
1597
-		 *
1598
-		 * @return bool
1599
-		 */
1600
-		public function block_show_advanced() {
1601
-
1602
-			$show      = false;
1603
-			$arguments = $this->get_arguments();
1604
-
1605
-			if ( ! empty( $arguments ) ) {
1606
-				foreach ( $arguments as $argument ) {
1607
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
-						$show = true;
1609
-						break; // no need to continue if we know we have it
1610
-					}
1611
-				}
1612
-			}
1583
+        }
1613 1584
 
1614
-			return $show;
1615
-		}
1585
+        /**
1586
+         * Add the dynamic block code inline when the wp-block in enqueued.
1587
+         */
1588
+        public function register_block() {
1589
+            wp_add_inline_script( 'wp-blocks', $this->block() );
1590
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
+                wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
+            }
1593
+        }
1616 1594
 
1617
-		/**
1618
-		 * Get the url path to the current folder.
1619
-		 *
1620
-		 * @return string
1621
-		 */
1622
-		public function get_url() {
1623
-			$url = $this->url;
1624
-
1625
-			if ( ! $url ) {
1626
-				$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
-				$content_url = untrailingslashit( WP_CONTENT_URL );
1628
-
1629
-				// Replace http:// to https://.
1630
-				if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
-					$content_url = str_replace( 'http://', 'https://', $content_url );
1632
-				}
1595
+        /**
1596
+         * Check if we need to show advanced options.
1597
+         *
1598
+         * @return bool
1599
+         */
1600
+        public function block_show_advanced() {
1633 1601
 
1634
-				// Check if we are inside a plugin
1635
-				$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
-				$url = str_replace( $content_dir, $content_url, $file_dir );
1637
-				$url = trailingslashit( $url );
1638
-				$this->url = $url;
1639
-			}
1602
+            $show      = false;
1603
+            $arguments = $this->get_arguments();
1640 1604
 
1641
-			return $url;
1642
-		}
1605
+            if ( ! empty( $arguments ) ) {
1606
+                foreach ( $arguments as $argument ) {
1607
+                    if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
+                        $show = true;
1609
+                        break; // no need to continue if we know we have it
1610
+                    }
1611
+                }
1612
+            }
1643 1613
 
1644
-		/**
1645
-		 * Get the url path to the current folder.
1646
-		 *
1647
-		 * @return string
1648
-		 */
1649
-		public function get_url_old() {
1614
+            return $show;
1615
+        }
1650 1616
 
1651
-			$url = $this->url;
1617
+        /**
1618
+         * Get the url path to the current folder.
1619
+         *
1620
+         * @return string
1621
+         */
1622
+        public function get_url() {
1623
+            $url = $this->url;
1652 1624
 
1653
-			if ( ! $url ) {
1654
-				// check if we are inside a plugin
1655
-				$file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1625
+            if ( ! $url ) {
1626
+                $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
+                $content_url = untrailingslashit( WP_CONTENT_URL );
1656 1628
 
1657
-				$dir_parts = explode( "/wp-content/", $file_dir );
1658
-				$url_parts = explode( "/wp-content/", plugins_url() );
1629
+                // Replace http:// to https://.
1630
+                if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
+                    $content_url = str_replace( 'http://', 'https://', $content_url );
1632
+                }
1659 1633
 
1660
-				if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
-					$url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
-					$this->url = $url;
1663
-				}
1664
-			}
1634
+                // Check if we are inside a plugin
1635
+                $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
+                $url = str_replace( $content_dir, $content_url, $file_dir );
1637
+                $url = trailingslashit( $url );
1638
+                $this->url = $url;
1639
+            }
1665 1640
 
1641
+            return $url;
1642
+        }
1666 1643
 
1667
-			return $url;
1668
-		}
1644
+        /**
1645
+         * Get the url path to the current folder.
1646
+         *
1647
+         * @return string
1648
+         */
1649
+        public function get_url_old() {
1669 1650
 
1670
-		/**
1671
-		 * Generate the block icon.
1672
-		 *
1673
-		 * Enables the use of Font Awesome icons.
1674
-		 *
1675
-		 * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
-		 *
1677
-		 * @param $icon
1678
-		 *
1679
-		 * @return string
1680
-		 *@since 1.1.0
1681
-		 */
1682
-		public function get_block_icon( $icon ) {
1683
-
1684
-			// check if we have a Font Awesome icon
1685
-			$fa_type = '';
1686
-			if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
-				$fa_type = 'solid';
1688
-			} elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
-				$fa_type = 'regular';
1690
-			} elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
-				$fa_type = 'brands';
1692
-			} else {
1693
-				$icon = "'" . $icon . "'";
1694
-			}
1651
+            $url = $this->url;
1695 1652
 
1696
-			// set the icon if we found one
1697
-			if ( $fa_type ) {
1698
-				$fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
-				$icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
-			}
1653
+            if ( ! $url ) {
1654
+                // check if we are inside a plugin
1655
+                $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1701 1656
 
1702
-			return $icon;
1703
-		}
1657
+                $dir_parts = explode( "/wp-content/", $file_dir );
1658
+                $url_parts = explode( "/wp-content/", plugins_url() );
1704 1659
 
1705
-		public function group_arguments( $arguments ) {
1706
-			if ( ! empty( $arguments ) ) {
1707
-				$temp_arguments = array();
1708
-				$general        = __( "General", 'ayecode-connect' );
1709
-				$add_sections   = false;
1710
-				foreach ( $arguments as $key => $args ) {
1711
-					if ( isset( $args['group'] ) ) {
1712
-						$temp_arguments[ $args['group'] ][ $key ] = $args;
1713
-						$add_sections                             = true;
1714
-					} else {
1715
-						$temp_arguments[ $general ][ $key ] = $args;
1716
-					}
1717
-				}
1660
+                if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
+                    $url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
+                    $this->url = $url;
1663
+                }
1664
+            }
1718 1665
 
1719
-				// only add sections if more than one
1720
-				if ( $add_sections ) {
1721
-					$arguments = $temp_arguments;
1722
-				}
1723
-			}
1724 1666
 
1725
-			return $arguments;
1726
-		}
1667
+            return $url;
1668
+        }
1727 1669
 
1728
-		/**
1729
-		 * Parse used group tabs.
1730
-		 *
1731
-		 * @since 1.1.17
1732
-		 */
1733
-		public function group_block_tabs( $tabs, $arguments ) {
1734
-			if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
-				$has_sections = false;
1736
-
1737
-				foreach ( $this->arguments as $key => $args ) {
1738
-					if ( isset( $args['group'] ) ) {
1739
-						$has_sections = true;
1740
-						break;
1741
-					}
1742
-				}
1670
+        /**
1671
+         * Generate the block icon.
1672
+         *
1673
+         * Enables the use of Font Awesome icons.
1674
+         *
1675
+         * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
+         *
1677
+         * @param $icon
1678
+         *
1679
+         * @return string
1680
+         *@since 1.1.0
1681
+         */
1682
+        public function get_block_icon( $icon ) {
1683
+
1684
+            // check if we have a Font Awesome icon
1685
+            $fa_type = '';
1686
+            if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
+                $fa_type = 'solid';
1688
+            } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
+                $fa_type = 'regular';
1690
+            } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
+                $fa_type = 'brands';
1692
+            } else {
1693
+                $icon = "'" . $icon . "'";
1694
+            }
1743 1695
 
1744
-				if ( ! $has_sections ) {
1745
-					return $tabs;
1746
-				}
1696
+            // set the icon if we found one
1697
+            if ( $fa_type ) {
1698
+                $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
+                $icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
+            }
1747 1701
 
1748
-				$new_tabs = array();
1702
+            return $icon;
1703
+        }
1749 1704
 
1750
-				foreach ( $tabs as $tab_key => $tab ) {
1751
-					$new_groups = array();
1705
+        public function group_arguments( $arguments ) {
1706
+            if ( ! empty( $arguments ) ) {
1707
+                $temp_arguments = array();
1708
+                $general        = __( "General", 'ayecode-connect' );
1709
+                $add_sections   = false;
1710
+                foreach ( $arguments as $key => $args ) {
1711
+                    if ( isset( $args['group'] ) ) {
1712
+                        $temp_arguments[ $args['group'] ][ $key ] = $args;
1713
+                        $add_sections                             = true;
1714
+                    } else {
1715
+                        $temp_arguments[ $general ][ $key ] = $args;
1716
+                    }
1717
+                }
1752 1718
 
1753
-					if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
-						foreach ( $tab['groups'] as $group ) {
1755
-							if ( isset( $arguments[ $group ] ) ) {
1756
-								$new_groups[] = $group;
1757
-							}
1758
-						}
1759
-					}
1719
+                // only add sections if more than one
1720
+                if ( $add_sections ) {
1721
+                    $arguments = $temp_arguments;
1722
+                }
1723
+            }
1760 1724
 
1761
-					if ( ! empty( $new_groups ) ) {
1762
-						$tab['groups'] = $new_groups;
1725
+            return $arguments;
1726
+        }
1763 1727
 
1764
-						$new_tabs[ $tab_key ] = $tab;
1765
-					}
1766
-				}
1728
+        /**
1729
+         * Parse used group tabs.
1730
+         *
1731
+         * @since 1.1.17
1732
+         */
1733
+        public function group_block_tabs( $tabs, $arguments ) {
1734
+            if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
+                $has_sections = false;
1736
+
1737
+                foreach ( $this->arguments as $key => $args ) {
1738
+                    if ( isset( $args['group'] ) ) {
1739
+                        $has_sections = true;
1740
+                        break;
1741
+                    }
1742
+                }
1767 1743
 
1768
-				$tabs = $new_tabs;
1769
-			}
1744
+                if ( ! $has_sections ) {
1745
+                    return $tabs;
1746
+                }
1770 1747
 
1771
-			return $tabs;
1772
-		}
1748
+                $new_tabs = array();
1749
+
1750
+                foreach ( $tabs as $tab_key => $tab ) {
1751
+                    $new_groups = array();
1752
+
1753
+                    if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
+                        foreach ( $tab['groups'] as $group ) {
1755
+                            if ( isset( $arguments[ $group ] ) ) {
1756
+                                $new_groups[] = $group;
1757
+                            }
1758
+                        }
1759
+                    }
1760
+
1761
+                    if ( ! empty( $new_groups ) ) {
1762
+                        $tab['groups'] = $new_groups;
1773 1763
 
1774
-		/**
1775
-		 * Output the JS for building the dynamic Guntenberg block.
1776
-		 *
1777
-		 * @return mixed
1778
-		 *@since 1.0.9 Save numbers as numbers and not strings.
1779
-		 * @since 1.1.0 Font Awesome classes can be used for icons.
1780
-		 * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
-		 */
1782
-		public function block() {
1783
-			global $sd_is_js_functions_loaded, $aui_bs5;
1784
-
1785
-			$show_advanced = $this->block_show_advanced();
1786
-
1787
-			ob_start();
1788
-			?>
1764
+                        $new_tabs[ $tab_key ] = $tab;
1765
+                    }
1766
+                }
1767
+
1768
+                $tabs = $new_tabs;
1769
+            }
1770
+
1771
+            return $tabs;
1772
+        }
1773
+
1774
+        /**
1775
+         * Output the JS for building the dynamic Guntenberg block.
1776
+         *
1777
+         * @return mixed
1778
+         *@since 1.0.9 Save numbers as numbers and not strings.
1779
+         * @since 1.1.0 Font Awesome classes can be used for icons.
1780
+         * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
+         */
1782
+        public function block() {
1783
+            global $sd_is_js_functions_loaded, $aui_bs5;
1784
+
1785
+            $show_advanced = $this->block_show_advanced();
1786
+
1787
+            ob_start();
1788
+            ?>
1789 1789
 			<script>
1790 1790
 			<?php
1791
-			if ( ! $sd_is_js_functions_loaded ) {
1792
-				$sd_is_js_functions_loaded = true;
1793
-			?>
1791
+            if ( ! $sd_is_js_functions_loaded ) {
1792
+                $sd_is_js_functions_loaded = true;
1793
+            ?>
1794 1794
 function sd_show_view_options($this){
1795 1795
 	if(jQuery($this).html().length){
1796 1796
 		jQuery($this).html('');
@@ -2290,8 +2290,8 @@  discard block
 block discarded – undo
2290 2290
 				$classes = [];
2291 2291
 
2292 2292
 				<?php
2293
-				if($aui_bs5){
2294
-					?>
2293
+                if($aui_bs5){
2294
+                    ?>
2295 2295
 				$aui_bs5 = true;
2296 2296
 				$p_ml = 'ms-';
2297 2297
 				$p_mr = 'me-';
@@ -2299,8 +2299,8 @@  discard block
 block discarded – undo
2299 2299
 				$p_pl = 'ps-';
2300 2300
 				$p_pr = 'pe-';
2301 2301
 					<?php
2302
-				}else{
2303
-						?>
2302
+                }else{
2303
+                        ?>
2304 2304
 				$aui_bs5 = false;
2305 2305
 				$p_ml = 'ml-';
2306 2306
 				$p_mr = 'mr-';
@@ -2308,8 +2308,8 @@  discard block
 block discarded – undo
2308 2308
 				$p_pl = 'pl-';
2309 2309
 				$p_pr = 'pr-';
2310 2310
 					<?php
2311
-				}
2312
-				?>
2311
+                }
2312
+                ?>
2313 2313
 
2314 2314
 				// margins
2315 2315
 				if ( $args['mt'] !== undefined && $args['mt'] !== '' ) { $classes.push( "mt-" + $args['mt'] );  $mt = $args['mt']; }else{$mt = null;}
@@ -2493,12 +2493,12 @@  discard block
 block discarded – undo
2493 2493
 			<?php
2494 2494
 
2495 2495
 
2496
-			}
2496
+            }
2497 2497
 
2498
-			if(method_exists($this,'block_global_js')){
2499
-					echo $this->block_global_js();
2500
-			}
2501
-			?>
2498
+            if(method_exists($this,'block_global_js')){
2499
+                    echo $this->block_global_js();
2500
+            }
2501
+            ?>
2502 2502
 
2503 2503
 jQuery(function() {
2504 2504
 
@@ -2551,13 +2551,13 @@  discard block
 block discarded – undo
2551 2551
 						icon: <?php echo $this->get_block_icon( $this->options['block-icon'] );?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
2552 2552
 						supports: {
2553 2553
 							<?php
2554
-							if(!isset($this->options['block-supports']['renaming'])){
2555
-								$this->options['block-supports']['renaming'] = false;
2556
-							}
2557
-							if ( isset( $this->options['block-supports'] ) ) {
2558
-								echo $this->array_to_attributes( $this->options['block-supports'] );
2559
-							}
2560
-							?>
2554
+                            if(!isset($this->options['block-supports']['renaming'])){
2555
+                                $this->options['block-supports']['renaming'] = false;
2556
+                            }
2557
+                            if ( isset( $this->options['block-supports'] ) ) {
2558
+                                echo $this->array_to_attributes( $this->options['block-supports'] );
2559
+                            }
2560
+                            ?>
2561 2561
 						},
2562 2562
 						__experimentalLabel( attributes, { context } ) {
2563 2563
 							var visibility_html = attributes && attributes.visibility_conditions ? ' &#128065;' : '';
@@ -2567,174 +2567,174 @@  discard block
 block discarded – undo
2567 2567
 						},
2568 2568
 						category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
2569 2569
 						<?php if ( isset( $this->options['block-keywords'] ) ) {
2570
-						echo "keywords : " . $this->options['block-keywords'] . ",";
2571
-						}
2572
-
2573
-
2574
-						// block hover preview.
2575
-						$example_args = array();
2576
-						if(!empty($this->arguments)){
2577
-							foreach($this->arguments as $key => $a_args){
2578
-								if(isset($a_args['example'])){
2579
-									$example_args[$key] = $a_args['example'];
2580
-								}
2581
-							}
2582
-						}
2583
-						$viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2584
-						$example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2585
-						if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2586
-							// no preview if set to false
2587
-						}elseif( !empty( $example_args ) ){
2588
-							echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2589
-						}elseif( !empty( $this->options['example'] ) ){
2590
-							unset($this->options['example']['viewportWidth']);
2591
-							unset($this->options['example']['innerBlocks']);
2592
-							$example_atts = $this->array_to_attributes( $this->options['example'] );
2593
-							$example_parts = array();
2594
-							if($example_atts){
2595
-								$example_parts[] = rtrim($example_atts,",");
2596
-							}
2597
-							if($viewport_width){
2598
-								$example_parts[] = $viewport_width;
2599
-							}
2600
-							if($example_inner_blocks){
2601
-								$example_parts[] = $example_inner_blocks;
2602
-							}
2603
-							if(!empty($example_parts)){
2604
-								echo "example : {".implode(',', $example_parts)."},";
2605
-							}
2606
-						}else{
2607
-							echo 'example : {viewportWidth: 500},';
2608
-						}
2609
-
2610
-
2611
-
2612
-						// limit to parent
2613
-						if( !empty( $this->options['parent'] ) ){
2614
-							echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2615
-						}
2616
-
2617
-						// limit allowed blocks
2618
-						if( !empty( $this->options['allowed-blocks'] ) ){
2619
-							echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2620
-						}
2621
-
2622
-						// maybe set no_wrap
2623
-						$no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2624
-						if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2625
-							$no_wrap = true;
2626
-						}
2627
-						if ( $no_wrap ) {
2628
-							$this->options['block-wrap'] = '';
2629
-						}
2630
-
2631
-						// maybe load the drag/drop functions.
2632
-						$img_drag_drop = false;
2633
-
2634
-						$show_alignment = false;
2635
-						// align feature
2636
-						/*echo "supports: {";
2570
+                        echo "keywords : " . $this->options['block-keywords'] . ",";
2571
+                        }
2572
+
2573
+
2574
+                        // block hover preview.
2575
+                        $example_args = array();
2576
+                        if(!empty($this->arguments)){
2577
+                            foreach($this->arguments as $key => $a_args){
2578
+                                if(isset($a_args['example'])){
2579
+                                    $example_args[$key] = $a_args['example'];
2580
+                                }
2581
+                            }
2582
+                        }
2583
+                        $viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2584
+                        $example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2585
+                        if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2586
+                            // no preview if set to false
2587
+                        }elseif( !empty( $example_args ) ){
2588
+                            echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2589
+                        }elseif( !empty( $this->options['example'] ) ){
2590
+                            unset($this->options['example']['viewportWidth']);
2591
+                            unset($this->options['example']['innerBlocks']);
2592
+                            $example_atts = $this->array_to_attributes( $this->options['example'] );
2593
+                            $example_parts = array();
2594
+                            if($example_atts){
2595
+                                $example_parts[] = rtrim($example_atts,",");
2596
+                            }
2597
+                            if($viewport_width){
2598
+                                $example_parts[] = $viewport_width;
2599
+                            }
2600
+                            if($example_inner_blocks){
2601
+                                $example_parts[] = $example_inner_blocks;
2602
+                            }
2603
+                            if(!empty($example_parts)){
2604
+                                echo "example : {".implode(',', $example_parts)."},";
2605
+                            }
2606
+                        }else{
2607
+                            echo 'example : {viewportWidth: 500},';
2608
+                        }
2609
+
2610
+
2611
+
2612
+                        // limit to parent
2613
+                        if( !empty( $this->options['parent'] ) ){
2614
+                            echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2615
+                        }
2616
+
2617
+                        // limit allowed blocks
2618
+                        if( !empty( $this->options['allowed-blocks'] ) ){
2619
+                            echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2620
+                        }
2621
+
2622
+                        // maybe set no_wrap
2623
+                        $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2624
+                        if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2625
+                            $no_wrap = true;
2626
+                        }
2627
+                        if ( $no_wrap ) {
2628
+                            $this->options['block-wrap'] = '';
2629
+                        }
2630
+
2631
+                        // maybe load the drag/drop functions.
2632
+                        $img_drag_drop = false;
2633
+
2634
+                        $show_alignment = false;
2635
+                        // align feature
2636
+                        /*echo "supports: {";
2637 2637
 						echo "	align: true,";
2638 2638
 						echo "  html: false";
2639 2639
 						echo "},";*/
2640 2640
 
2641 2641
 
2642
-							echo "attributes : {";
2643
-
2644
-							if ( $show_advanced ) {
2645
-								echo "show_advanced: {";
2646
-								echo "	type: 'boolean',";
2647
-								echo "  default: false,";
2648
-								echo "},";
2649
-							}
2650
-
2651
-							// block wrap element
2652
-							if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2653
-								echo "block_wrap: {";
2654
-								echo "	type: 'string',";
2655
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2656
-								echo "},";
2657
-							}
2658
-
2659
-
2660
-							if ( ! empty( $this->arguments ) ) {
2661
-
2662
-								foreach ( $this->arguments as $key => $args ) {
2663
-
2664
-									if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2665
-										$img_drag_drop = true;
2666
-									}
2667
-
2668
-									// set if we should show alignment
2669
-									if ( $key == 'alignment' ) {
2670
-										$show_alignment = true;
2671
-									}
2672
-
2673
-									$extra = '';
2674
-
2675
-									if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2676
-										continue;
2677
-									}
2678
-									elseif ( $args['type'] == 'checkbox' ) {
2679
-										$type    = 'boolean';
2680
-										$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2681
-									} elseif ( $args['type'] == 'number' ) {
2682
-										$type    = 'number';
2683
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2684
-									} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2685
-										$type = 'array';
2686
-										if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2687
-											$default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2688
-										} else {
2689
-											$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2690
-										}
2691
-									} elseif ( $args['type'] == 'tagselect' ) {
2692
-										$type    = 'array';
2693
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2694
-									} elseif ( $args['type'] == 'multiselect' ) {
2695
-										$type    = 'array';
2696
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2697
-									} elseif ( $args['type'] == 'image_xy' ) {
2698
-										$type    = 'object';
2699
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2700
-									} elseif ( $args['type'] == 'image' ) {
2701
-										$type    = 'string';
2702
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2703
-
2704
-										// add a field for ID
2705
-	//                                    echo $key . "_id : {";
2706
-	//                                    echo "type : 'number',";
2707
-	//                                    echo "},";
2708
-	//                                    echo $key . "_xy : {";
2709
-	//                                    echo "type : 'object',";
2710
-	//                                    echo "},";
2711
-
2712
-									} else {
2713
-										$type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2714
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2715
-
2716
-									}
2717
-									echo $key . " : {";
2718
-									echo "type : '$type',";
2719
-									echo "default : $default,";
2720
-									echo "},";
2721
-								}
2722
-							}
2723
-
2724
-							echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2725
-							echo "sd_shortcode : {type : 'string',default: ''},";
2726
-
2727
-							if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2728
-								echo "sd_shortcode_close : {type : 'string',default: ''},";
2729
-							}
2730
-
2731
-							echo "className: { type: 'string', default: '' },";
2732
-
2733
-							echo "},";
2734
-
2735
-
2736
-
2737
-						?>
2642
+                            echo "attributes : {";
2643
+
2644
+                            if ( $show_advanced ) {
2645
+                                echo "show_advanced: {";
2646
+                                echo "	type: 'boolean',";
2647
+                                echo "  default: false,";
2648
+                                echo "},";
2649
+                            }
2650
+
2651
+                            // block wrap element
2652
+                            if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2653
+                                echo "block_wrap: {";
2654
+                                echo "	type: 'string',";
2655
+                                echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2656
+                                echo "},";
2657
+                            }
2658
+
2659
+
2660
+                            if ( ! empty( $this->arguments ) ) {
2661
+
2662
+                                foreach ( $this->arguments as $key => $args ) {
2663
+
2664
+                                    if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2665
+                                        $img_drag_drop = true;
2666
+                                    }
2667
+
2668
+                                    // set if we should show alignment
2669
+                                    if ( $key == 'alignment' ) {
2670
+                                        $show_alignment = true;
2671
+                                    }
2672
+
2673
+                                    $extra = '';
2674
+
2675
+                                    if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2676
+                                        continue;
2677
+                                    }
2678
+                                    elseif ( $args['type'] == 'checkbox' ) {
2679
+                                        $type    = 'boolean';
2680
+                                        $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2681
+                                    } elseif ( $args['type'] == 'number' ) {
2682
+                                        $type    = 'number';
2683
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2684
+                                    } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2685
+                                        $type = 'array';
2686
+                                        if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2687
+                                            $default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2688
+                                        } else {
2689
+                                            $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2690
+                                        }
2691
+                                    } elseif ( $args['type'] == 'tagselect' ) {
2692
+                                        $type    = 'array';
2693
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2694
+                                    } elseif ( $args['type'] == 'multiselect' ) {
2695
+                                        $type    = 'array';
2696
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2697
+                                    } elseif ( $args['type'] == 'image_xy' ) {
2698
+                                        $type    = 'object';
2699
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2700
+                                    } elseif ( $args['type'] == 'image' ) {
2701
+                                        $type    = 'string';
2702
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2703
+
2704
+                                        // add a field for ID
2705
+    //                                    echo $key . "_id : {";
2706
+    //                                    echo "type : 'number',";
2707
+    //                                    echo "},";
2708
+    //                                    echo $key . "_xy : {";
2709
+    //                                    echo "type : 'object',";
2710
+    //                                    echo "},";
2711
+
2712
+                                    } else {
2713
+                                        $type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2714
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2715
+
2716
+                                    }
2717
+                                    echo $key . " : {";
2718
+                                    echo "type : '$type',";
2719
+                                    echo "default : $default,";
2720
+                                    echo "},";
2721
+                                }
2722
+                            }
2723
+
2724
+                            echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2725
+                            echo "sd_shortcode : {type : 'string',default: ''},";
2726
+
2727
+                            if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2728
+                                echo "sd_shortcode_close : {type : 'string',default: ''},";
2729
+                            }
2730
+
2731
+                            echo "className: { type: 'string', default: '' },";
2732
+
2733
+                            echo "},";
2734
+
2735
+
2736
+
2737
+                        ?>
2738 2738
 
2739 2739
 						// The "edit" property must be a valid function.
2740 2740
 						edit: function (props) {
@@ -2809,10 +2809,10 @@  discard block
 block discarded – undo
2809 2809
 							}
2810 2810
 
2811 2811
 							<?php
2812
-							if(!empty($this->options['block-edit-raw'])) {
2813
-								echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2814
-							}else{
2815
-							?>
2812
+                            if(!empty($this->options['block-edit-raw'])) {
2813
+                                echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2814
+                            }else{
2815
+                            ?>
2816 2816
 
2817 2817
 function hasSelectedInnerBlock(props) {
2818 2818
 	const select = wp.data.select('core/editor');
@@ -2834,9 +2834,9 @@  discard block
 block discarded – undo
2834 2834
 
2835 2835
 	var $value = '';
2836 2836
 	<?php
2837
-	// if we have a post_type and a category then link them
2838
-	if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2839
-	?>
2837
+    // if we have a post_type and a category then link them
2838
+    if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2839
+    ?>
2840 2840
 	if(typeof(prev_attributes[props.clientId]) != 'undefined' && selectedBlock && selectedBlock.clientId === props.clientId){
2841 2841
 		$pt = props.attributes.post_type;
2842 2842
 		if(post_type_rest_slugs.length){
@@ -2849,11 +2849,11 @@  discard block
 block discarded – undo
2849 2849
 			term_query_type = $pt;
2850 2850
 		}
2851 2851
 <?php
2852
-	$cat_path = '';
2853
-	if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2854
-		$cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2855
-		$cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2856
-	}
2852
+    $cat_path = '';
2853
+    if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2854
+        $cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2855
+        $cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2856
+    }
2857 2857
 ?>
2858 2858
 		/* taxonomies */
2859 2859
 		if($value && 'post_type' in prev_attributes[props.clientId] && 'category' in prev_attributes[props.clientId] && run){
@@ -2945,7 +2945,7 @@  discard block
 block discarded – undo
2945 2945
 <?php
2946 2946
 $current_screen = function_exists('get_current_screen') ? get_current_screen() : '';
2947 2947
 if(!empty($current_screen->base) && $current_screen->base==='widgets'){
2948
-	echo 'const { deviceType } = "";';
2948
+    echo 'const { deviceType } = "";';
2949 2949
 }else{
2950 2950
 ?>
2951 2951
 /** Get device type const. */
@@ -3009,8 +3009,8 @@  discard block
 block discarded – undo
3009 3009
 										'attributes': props.attributes,
3010 3010
 										'block_parent_name': parentBlocks.length ? parentBlocks[parentBlocks.length - 1].name : '',
3011 3011
 										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
3012
-										echo $post->ID;
3013
-									}else{echo '0';}?>,
3012
+                                        echo $post->ID;
3013
+                                    }else{echo '0';}?>,
3014 3014
 										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
3015 3015
 									};
3016 3016
 
@@ -3024,20 +3024,20 @@  discard block
 block discarded – undo
3024 3024
 										}
3025 3025
 
3026 3026
 										 <?php
3027
-										if(!empty($this->options['nested-block'])){
3028
-											?>
3027
+                                        if(!empty($this->options['nested-block'])){
3028
+                                            ?>
3029 3029
 											// props.setAttributes({content: env});
3030 3030
 										is_fetching = false;
3031 3031
 										prev_attributes[props.clientId] = props.attributes;
3032 3032
 											 <?php
3033
-										}else{
3034
-										?>
3033
+                                        }else{
3034
+                                        ?>
3035 3035
 										props.setAttributes({content: env});
3036 3036
 										is_fetching = false;
3037 3037
 										prev_attributes[props.clientId] = props.attributes;
3038 3038
 										<?php
3039
-										}
3040
-										?>
3039
+                                        }
3040
+                                        ?>
3041 3041
 
3042 3042
 
3043 3043
 										// if AUI is active call the js init function
@@ -3056,31 +3056,31 @@  discard block
 block discarded – undo
3056 3056
 							}
3057 3057
 
3058 3058
 							<?php
3059
-							if(!empty($this->options['block-edit-js'])) {
3060
-								echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3061
-							}
3059
+                            if(!empty($this->options['block-edit-js'])) {
3060
+                                echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3061
+                            }
3062 3062
 
3063 3063
 
3064 3064
 
3065 3065
 
3066
-							if(empty($this->options['block-save-return'])){
3067
-							?>
3066
+                            if(empty($this->options['block-save-return'])){
3067
+                            ?>
3068 3068
 								///////////////////////////////////////////////////////////////////////
3069 3069
 
3070 3070
 									 // build the shortcode.
3071 3071
 								shortcode = "[<?php echo $this->options['base_id'];?>";
3072 3072
 								<?php
3073 3073
 
3074
-								if(! empty( $this->arguments )){
3074
+                                if(! empty( $this->arguments )){
3075 3075
 
3076
-								foreach($this->arguments as $key => $args){
3077
-								   // if($args['type']=='tabs'){continue;}
3076
+                                foreach($this->arguments as $key => $args){
3077
+                                    // if($args['type']=='tabs'){continue;}
3078 3078
 
3079
-								   // don't add metadata arguments
3080
-								   if (substr($key, 0, 9 ) === 'metadata_') {
3081
-									   continue;
3082
-								   }
3083
-								?>
3079
+                                    // don't add metadata arguments
3080
+                                    if (substr($key, 0, 9 ) === 'metadata_') {
3081
+                                        continue;
3082
+                                    }
3083
+                                ?>
3084 3084
 								if (props.attributes.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3085 3085
 									if ('<?php echo esc_attr( $key );?>' == 'html') {
3086 3086
 									} else if ('<?php echo esc_attr( $args['type'] );?>' == 'image_xy') {
@@ -3091,10 +3091,10 @@  discard block
 block discarded – undo
3091 3091
 									}
3092 3092
 								}
3093 3093
 								<?php
3094
-								}
3095
-								}
3094
+                                }
3095
+                                }
3096 3096
 
3097
-								?>
3097
+                                ?>
3098 3098
 								shortcode += "]";
3099 3099
 
3100 3100
 								if(shortcode){
@@ -3106,17 +3106,17 @@  discard block
 block discarded – undo
3106 3106
 
3107 3107
 
3108 3108
 									<?php
3109
-									if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3110
-										echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3111
-									}
3112
-									?>
3109
+                                    if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3110
+                                        echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3111
+                                    }
3112
+                                    ?>
3113 3113
 								}
3114 3114
 
3115 3115
 
3116 3116
 							///////////////////////////////////////////////////////////////////////
3117 3117
 							<?php
3118
-							} // end nested block check
3119
-							?>
3118
+                            } // end nested block check
3119
+                            ?>
3120 3120
 
3121 3121
 							return [
3122 3122
 
@@ -3140,10 +3140,10 @@  discard block
 block discarded – undo
3140 3140
 
3141 3141
 									<?php
3142 3142
 
3143
-									if(! empty( $this->arguments )){
3143
+                                    if(! empty( $this->arguments )){
3144 3144
 
3145
-									if ( $show_advanced ) {
3146
-									?>
3145
+                                    if ( $show_advanced ) {
3146
+                                    ?>
3147 3147
 									el('div', {
3148 3148
 											style: {'padding-left': '16px','padding-right': '16px'}
3149 3149
 										},
@@ -3160,119 +3160,119 @@  discard block
 block discarded – undo
3160 3160
 									)
3161 3161
 									,
3162 3162
 									<?php
3163
-									}
3164
-
3165
-									$arguments = $this->group_arguments( $this->arguments );
3166
-									$block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3167
-
3168
-									// Do we have sections?
3169
-									$has_sections = $arguments == $this->arguments ? false : true;
3170
-
3171
-									if($has_sections){
3172
-									$panel_count = 0;
3173
-									$open_tab = '';
3174
-
3175
-									$open_tab_groups = array();
3176
-									$used_tabs = array();
3177
-
3178
-									foreach ( $arguments as $key => $args ) {
3179
-										$close_tab = false;
3180
-										$close_tabs = false;
3181
-
3182
-										 if ( ! empty( $block_group_tabs ) ) {
3183
-											foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3184
-												if ( in_array( $key, $tab_args['groups'] ) ) {
3185
-													$open_tab_groups[] = $key;
3186
-
3187
-													if ( $open_tab != $tab_name ) {
3188
-														$tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3189
-														$tab_args['tab']['open'] = true;
3190
-
3191
-														$this->block_tab_start( '', $tab_args );
3192
-														$open_tab = $tab_name;
3193
-														$used_tabs[] = $tab_name;
3194
-													}
3195
-
3196
-													if ( $open_tab_groups == $tab_args['groups'] ) {
3197
-														$close_tab = true;
3198
-														$open_tab_groups = array();
3199
-
3200
-														if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3201
-															$close_tabs = true;
3202
-														}
3203
-													}
3204
-												}
3205
-											}
3206
-										}
3207
-										?>
3163
+                                    }
3164
+
3165
+                                    $arguments = $this->group_arguments( $this->arguments );
3166
+                                    $block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3167
+
3168
+                                    // Do we have sections?
3169
+                                    $has_sections = $arguments == $this->arguments ? false : true;
3170
+
3171
+                                    if($has_sections){
3172
+                                    $panel_count = 0;
3173
+                                    $open_tab = '';
3174
+
3175
+                                    $open_tab_groups = array();
3176
+                                    $used_tabs = array();
3177
+
3178
+                                    foreach ( $arguments as $key => $args ) {
3179
+                                        $close_tab = false;
3180
+                                        $close_tabs = false;
3181
+
3182
+                                            if ( ! empty( $block_group_tabs ) ) {
3183
+                                            foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3184
+                                                if ( in_array( $key, $tab_args['groups'] ) ) {
3185
+                                                    $open_tab_groups[] = $key;
3186
+
3187
+                                                    if ( $open_tab != $tab_name ) {
3188
+                                                        $tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3189
+                                                        $tab_args['tab']['open'] = true;
3190
+
3191
+                                                        $this->block_tab_start( '', $tab_args );
3192
+                                                        $open_tab = $tab_name;
3193
+                                                        $used_tabs[] = $tab_name;
3194
+                                                    }
3195
+
3196
+                                                    if ( $open_tab_groups == $tab_args['groups'] ) {
3197
+                                                        $close_tab = true;
3198
+                                                        $open_tab_groups = array();
3199
+
3200
+                                                        if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3201
+                                                            $close_tabs = true;
3202
+                                                        }
3203
+                                                    }
3204
+                                                }
3205
+                                            }
3206
+                                        }
3207
+                                        ?>
3208 3208
 										el(wp.components.PanelBody, {
3209 3209
 												title: '<?php esc_attr_e( $key ); ?>',
3210 3210
 												initialOpen: <?php if ( $panel_count ) {
3211
-												echo "false";
3212
-											} else {
3213
-												echo "true";
3214
-											}?>
3211
+                                                echo "false";
3212
+                                            } else {
3213
+                                                echo "true";
3214
+                                            }?>
3215 3215
 											},
3216 3216
 											<?php
3217
-											foreach ( $args as $k => $a ) {
3218
-												$this->block_tab_start( $k, $a );
3219
-												$this->block_row_start( $k, $a );
3220
-												$this->build_block_arguments( $k, $a );
3221
-												$this->block_row_end( $k, $a );
3222
-												$this->block_tab_end( $k, $a );
3223
-											}
3224
-											?>
3217
+                                            foreach ( $args as $k => $a ) {
3218
+                                                $this->block_tab_start( $k, $a );
3219
+                                                $this->block_row_start( $k, $a );
3220
+                                                $this->build_block_arguments( $k, $a );
3221
+                                                $this->block_row_end( $k, $a );
3222
+                                                $this->block_tab_end( $k, $a );
3223
+                                            }
3224
+                                            ?>
3225 3225
 										),
3226 3226
 										<?php
3227
-										$panel_count ++;
3227
+                                        $panel_count ++;
3228 3228
 
3229
-										if($close_tab || $close_tabs){
3230
-											$tab_args = array(
3231
-												'tab'	=> array(
3232
-													'tabs_close' => $close_tabs,
3233
-												'close' => true,
3234
-												)
3229
+                                        if($close_tab || $close_tabs){
3230
+                                            $tab_args = array(
3231
+                                                'tab'	=> array(
3232
+                                                    'tabs_close' => $close_tabs,
3233
+                                                'close' => true,
3234
+                                                )
3235 3235
 
3236
-											);
3237
-											$this->block_tab_end( '', $tab_args );
3236
+                                            );
3237
+                                            $this->block_tab_end( '', $tab_args );
3238 3238
 //											echo '###close'; print_r($tab_args);
3239
-											$panel_count = 0;
3240
-										}
3239
+                                            $panel_count = 0;
3240
+                                        }
3241 3241
 //
3242 3242
 
3243
-									}
3244
-									}else {
3245
-									?>
3243
+                                    }
3244
+                                    }else {
3245
+                                    ?>
3246 3246
 									el(wp.components.PanelBody, {
3247 3247
 											title: '<?php esc_attr_e( "Settings", 'ayecode-connect' ); ?>',
3248 3248
 											initialOpen: true
3249 3249
 										},
3250 3250
 										<?php
3251
-										foreach ( $this->arguments as $key => $args ) {
3252
-											$this->block_row_start( $key, $args );
3253
-											$this->build_block_arguments( $key, $args );
3254
-											$this->block_row_end( $key, $args );
3255
-										}
3256
-										?>
3251
+                                        foreach ( $this->arguments as $key => $args ) {
3252
+                                            $this->block_row_start( $key, $args );
3253
+                                            $this->build_block_arguments( $key, $args );
3254
+                                            $this->block_row_end( $key, $args );
3255
+                                        }
3256
+                                        ?>
3257 3257
 									),
3258 3258
 									<?php
3259
-									}
3259
+                                    }
3260 3260
 
3261
-									}
3262
-									?>
3261
+                                    }
3262
+                                    ?>
3263 3263
 
3264 3264
 								),
3265 3265
 
3266 3266
 								<?php
3267
-								// If the user sets block-output array then build it
3268
-								if ( ! empty( $this->options['block-output'] ) ) {
3269
-								$this->block_element( $this->options['block-output'] );
3270
-							}elseif(!empty($this->options['block-edit-return'])){
3271
-								   echo $this->options['block-edit-return'];
3272
-							}else{
3273
-								// if no block-output is set then we try and get the shortcode html output via ajax.
3274
-								$block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3275
-								?>
3267
+                                // If the user sets block-output array then build it
3268
+                                if ( ! empty( $this->options['block-output'] ) ) {
3269
+                                $this->block_element( $this->options['block-output'] );
3270
+                            }elseif(!empty($this->options['block-edit-return'])){
3271
+                                    echo $this->options['block-edit-return'];
3272
+                            }else{
3273
+                                // if no block-output is set then we try and get the shortcode html output via ajax.
3274
+                                $block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3275
+                                ?>
3276 3276
 								el('<?php echo esc_attr($block_edit_wrap_tag); ?>', wp.blockEditor.useBlockProps({
3277 3277
 									dangerouslySetInnerHTML: {__html: onChangeContent()},
3278 3278
 									className: props.className,
@@ -3280,13 +3280,13 @@  discard block
 block discarded – undo
3280 3280
 									style: {'minHeight': '30px'}
3281 3281
 								}))
3282 3282
 								<?php
3283
-								}
3284
-								?>
3283
+                                }
3284
+                                ?>
3285 3285
 							]; // end return
3286 3286
 
3287 3287
 							<?php
3288
-							} // end block-edit-raw else
3289
-							?>
3288
+                            } // end block-edit-raw else
3289
+                            ?>
3290 3290
 						},
3291 3291
 
3292 3292
 						// The "save" property must be specified and must be a valid function.
@@ -3300,16 +3300,16 @@  discard block
 block discarded – undo
3300 3300
 							$html = '';
3301 3301
 							<?php
3302 3302
 
3303
-							if(! empty( $this->arguments )){
3303
+                            if(! empty( $this->arguments )){
3304 3304
 
3305
-							foreach($this->arguments as $key => $args){
3306
-							   // if($args['type']=='tabs'){continue;}
3305
+                            foreach($this->arguments as $key => $args){
3306
+                                // if($args['type']=='tabs'){continue;}
3307 3307
 
3308
-							   // don't add metadata arguments
3309
-							   if (substr($key, 0, 9 ) === 'metadata_') {
3310
-								   continue;
3311
-							   }
3312
-							?>
3308
+                                // don't add metadata arguments
3309
+                                if (substr($key, 0, 9 ) === 'metadata_') {
3310
+                                    continue;
3311
+                                }
3312
+                            ?>
3313 3313
 							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3314 3314
 								if ('<?php echo esc_attr( $key );?>' == 'html') {
3315 3315
 									$html = attr.<?php echo esc_attr( $key );?>;
@@ -3320,10 +3320,10 @@  discard block
 block discarded – undo
3320 3320
 								}
3321 3321
 							}
3322 3322
 							<?php
3323
-							}
3324
-							}
3323
+                            }
3324
+                            }
3325 3325
 
3326
-							?>
3326
+                            ?>
3327 3327
 							content += "]";
3328 3328
 							 content = '';
3329 3329
 
@@ -3333,7 +3333,7 @@  discard block
 block discarded – undo
3333 3333
 //                                $html = 'el( InnerBlocks.Content )';
3334 3334
 //                                <?php
3335 3335
 //                            }
3336
-							?>
3336
+                            ?>
3337 3337
 							// if has html element
3338 3338
 							if ($html) {
3339 3339
 								//content += $html + "[/<?php echo $this->options['base_id'];?>]";
@@ -3366,12 +3366,12 @@  discard block
 block discarded – undo
3366 3366
 //                                <x?php
3367 3367
 //							}else
3368 3368
 
3369
-							if(!empty($this->options['block-output'])){
3369
+                            if(!empty($this->options['block-output'])){
3370 3370
 //                               echo "return";
3371 3371
 //                               $this->block_element( $this->options['block-output'], true );
3372 3372
 //                               echo ";";
3373 3373
 
3374
-							   ?>
3374
+                                ?>
3375 3375
 							  return el(
3376 3376
 								   '',
3377 3377
 								   {},
@@ -3381,10 +3381,10 @@  discard block
 block discarded – undo
3381 3381
 							   );
3382 3382
 								<?php
3383 3383
 
3384
-							}elseif(!empty($this->options['block-save-return'])){
3385
-								   echo 'return ' . $this->options['block-save-return'];
3386
-							}elseif(!empty($this->options['nested-block'])){
3387
-								?>
3384
+                            }elseif(!empty($this->options['block-save-return'])){
3385
+                                    echo 'return ' . $this->options['block-save-return'];
3386
+                            }elseif(!empty($this->options['nested-block'])){
3387
+                                ?>
3388 3388
 							  return el(
3389 3389
 								   '',
3390 3390
 								   {},
@@ -3393,22 +3393,22 @@  discard block
 block discarded – undo
3393 3393
 								 //  el('', {dangerouslySetInnerHTML: {__html: "[/<?php echo $this->options['base_id'];?>]"}})
3394 3394
 							   );
3395 3395
 								<?php
3396
-							}elseif(!empty( $this->options['block-save-return'] ) ){
3397
-								echo "return ". $this->options['block-edit-return'].";";
3398
-							}elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3399
-							?>
3396
+                            }elseif(!empty( $this->options['block-save-return'] ) ){
3397
+                                echo "return ". $this->options['block-edit-return'].";";
3398
+                            }elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3399
+                            ?>
3400 3400
 							return content;
3401 3401
 							<?php
3402
-							}else{
3403
-							?>
3402
+                            }else{
3403
+                            ?>
3404 3404
 							var block_wrap = 'div';
3405 3405
 							if (attr.hasOwnProperty("block_wrap")) {
3406 3406
 								block_wrap = attr.block_wrap;
3407 3407
 							}
3408 3408
 							return el(block_wrap, wp.blockEditor.useBlockProps.save( {dangerouslySetInnerHTML: {__html: content}, className: align} ));
3409 3409
 							<?php
3410
-							}
3411
-							?>
3410
+                            }
3411
+                            ?>
3412 3412
 
3413 3413
 
3414 3414
 						}
@@ -3422,43 +3422,43 @@  discard block
 block discarded – undo
3422 3422
 				});
3423 3423
 			</script>
3424 3424
 			<?php
3425
-			$output = ob_get_clean();
3425
+            $output = ob_get_clean();
3426 3426
 
3427
-			/*
3427
+            /*
3428 3428
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
3429 3429
 			 */
3430 3430
 
3431
-			return str_replace( array(
3432
-				'<script>',
3433
-				'</script>'
3434
-			), '', $output );
3435
-		}
3431
+            return str_replace( array(
3432
+                '<script>',
3433
+                '</script>'
3434
+            ), '', $output );
3435
+        }
3436 3436
 
3437 3437
 
3438 3438
 
3439
-		public function block_row_start($key, $args){
3439
+        public function block_row_start($key, $args){
3440 3440
 
3441
-			// check for row
3442
-			if(!empty($args['row'])){
3441
+            // check for row
3442
+            if(!empty($args['row'])){
3443 3443
 
3444
-				if(!empty($args['row']['open'])){
3444
+                if(!empty($args['row']['open'])){
3445 3445
 
3446
-				// element require
3447
-				$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3448
-				$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3449
-				$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3450
-				$device_type_icon = '';
3451
-				if($device_type=='Desktop'){
3452
-					$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3453
-				}elseif($device_type=='Tablet'){
3454
-					$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3455
-				}elseif($device_type=='Mobile'){
3456
-					$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3457
-				}
3458
-				echo $element_require;
3459
-				echo $device_type_require;
3446
+                // element require
3447
+                $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3448
+                $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3449
+                $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3450
+                $device_type_icon = '';
3451
+                if($device_type=='Desktop'){
3452
+                    $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3453
+                }elseif($device_type=='Tablet'){
3454
+                    $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3455
+                }elseif($device_type=='Mobile'){
3456
+                    $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3457
+                }
3458
+                echo $element_require;
3459
+                echo $device_type_require;
3460 3460
 
3461
-					if(false){?><script><?php }?>
3461
+                    if(false){?><script><?php }?>
3462 3462
 						el('div', {
3463 3463
 								className: 'bsui components-base-control',
3464 3464
 							},
@@ -3471,8 +3471,8 @@  discard block
 block discarded – undo
3471 3471
 								<?php if($device_type_icon){ ?>
3472 3472
 									deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})
3473 3473
 								<?php
3474
-								}
3475
-								?>
3474
+                                }
3475
+                                ?>
3476 3476
 
3477 3477
 
3478 3478
 							),
@@ -3496,51 +3496,51 @@  discard block
 block discarded – undo
3496 3496
 									},
3497 3497
 
3498 3498
 					<?php
3499
-					if(false){?></script><?php }
3500
-				}elseif(!empty($args['row']['close'])){
3501
-					if(false){?><script><?php }?>
3499
+                    if(false){?></script><?php }
3500
+                }elseif(!empty($args['row']['close'])){
3501
+                    if(false){?><script><?php }?>
3502 3502
 						el(
3503 3503
 							'div',
3504 3504
 							{
3505 3505
 								className: 'col pl-0 ps-0',
3506 3506
 							},
3507 3507
 					<?php
3508
-					if(false){?></script><?php }
3509
-				}else{
3510
-					if(false){?><script><?php }?>
3508
+                    if(false){?></script><?php }
3509
+                }else{
3510
+                    if(false){?><script><?php }?>
3511 3511
 						el(
3512 3512
 							'div',
3513 3513
 							{
3514 3514
 								className: 'col pl-0 ps-0 pr-2 pe-2',
3515 3515
 							},
3516 3516
 					<?php
3517
-					if(false){?></script><?php }
3518
-				}
3517
+                    if(false){?></script><?php }
3518
+                }
3519 3519
 
3520
-			}
3520
+            }
3521 3521
 
3522
-		}
3522
+        }
3523 3523
 
3524
-		public function block_row_end($key, $args){
3524
+        public function block_row_end($key, $args){
3525 3525
 
3526
-			if(!empty($args['row'])){
3527
-				// maybe close
3528
-				if(!empty($args['row']['close'])){
3529
-					echo "))";
3530
-				}
3526
+            if(!empty($args['row'])){
3527
+                // maybe close
3528
+                if(!empty($args['row']['close'])){
3529
+                    echo "))";
3530
+                }
3531 3531
 
3532
-				echo "),";
3533
-			}
3534
-		}
3532
+                echo "),";
3533
+            }
3534
+        }
3535 3535
 
3536
-		public function block_tab_start($key, $args){
3536
+        public function block_tab_start($key, $args){
3537 3537
 
3538
-			// check for row
3539
-			if(!empty($args['tab'])){
3538
+            // check for row
3539
+            if(!empty($args['tab'])){
3540 3540
 
3541
-				if(!empty($args['tab']['tabs_open'])){
3541
+                if(!empty($args['tab']['tabs_open'])){
3542 3542
 
3543
-					if(false){?><script><?php }?>
3543
+                    if(false){?><script><?php }?>
3544 3544
 
3545 3545
 el('div',{className: 'bsui'},
3546 3546
 
@@ -3553,12 +3553,12 @@  discard block
 block discarded – undo
3553 3553
 										tabs: [
3554 3554
 
3555 3555
 					<?php
3556
-					if(false){?></script><?php }
3557
-				}
3556
+                    if(false){?></script><?php }
3557
+                }
3558 3558
 
3559
-				if(!empty($args['tab']['open'])){
3559
+                if(!empty($args['tab']['open'])){
3560 3560
 
3561
-					if(false){?><script><?php }?>
3561
+                    if(false){?><script><?php }?>
3562 3562
 							{
3563 3563
 												name: '<?php echo addslashes( esc_attr( $args['tab']['key']) ); ?>',
3564 3564
 												title: el('div', {dangerouslySetInnerHTML: {__html: '<?php echo addslashes( esc_attr( $args['tab']['title']) ); ?>'}}),
@@ -3567,93 +3567,93 @@  discard block
 block discarded – undo
3567 3567
 									className: 'components-base-control__help mb-0',
3568 3568
 									dangerouslySetInnerHTML: {__html:'<?php echo addslashes( $args['tab']['desc'] ); ?>'}
3569 3569
 								}),<?php }
3570
-					if(false){?></script><?php }
3571
-				}
3570
+                    if(false){?></script><?php }
3571
+                }
3572 3572
 
3573
-			}
3573
+            }
3574 3574
 
3575
-		}
3575
+        }
3576 3576
 
3577
-		public function block_tab_end($key, $args){
3577
+        public function block_tab_end($key, $args){
3578 3578
 
3579
-			if(!empty($args['tab'])){
3580
-				// maybe close
3581
-				if(!empty($args['tab']['close'])){
3582
-					echo ")}, /* tab close */";
3583
-				}
3579
+            if(!empty($args['tab'])){
3580
+                // maybe close
3581
+                if(!empty($args['tab']['close'])){
3582
+                    echo ")}, /* tab close */";
3583
+                }
3584 3584
 
3585
-				if(!empty($args['tab']['tabs_close'])){
3586
-					if(false){?><script><?php }?>
3585
+                if(!empty($args['tab']['tabs_close'])){
3586
+                    if(false){?><script><?php }?>
3587 3587
 						]}, ( tab ) => {
3588 3588
 								return tab.content;
3589 3589
 							}
3590 3590
 						)), /* tabs close */
3591 3591
 					<?php if(false){ ?></script><?php }
3592
-				}
3593
-			}
3594
-		}
3592
+                }
3593
+            }
3594
+        }
3595 3595
 
3596
-		public function build_block_arguments( $key, $args ) {
3597
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3598
-			$options           = '';
3599
-			$extra             = '';
3600
-			$require           = '';
3601
-			$inside_elements   = '';
3602
-			$after_elements	   = '';
3603
-
3604
-			// `content` is a protected and special argument
3605
-			if ( $key == 'content' ) {
3606
-				return;
3607
-			}
3596
+        public function build_block_arguments( $key, $args ) {
3597
+            $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3598
+            $options           = '';
3599
+            $extra             = '';
3600
+            $require           = '';
3601
+            $inside_elements   = '';
3602
+            $after_elements	   = '';
3603
+
3604
+            // `content` is a protected and special argument
3605
+            if ( $key == 'content' ) {
3606
+                return;
3607
+            }
3608 3608
 
3609
-			$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3610
-			$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3611
-			$device_type_icon = '';
3612
-			if($device_type=='Desktop'){
3613
-				$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3614
-			}elseif($device_type=='Tablet'){
3615
-				$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3616
-			}elseif($device_type=='Mobile'){
3617
-				$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3618
-			}
3609
+            $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3610
+            $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3611
+            $device_type_icon = '';
3612
+            if($device_type=='Desktop'){
3613
+                $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3614
+            }elseif($device_type=='Tablet'){
3615
+                $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3616
+            }elseif($device_type=='Mobile'){
3617
+                $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3618
+            }
3619 3619
 
3620
-			// icon
3621
-			$icon = '';
3622
-			if( !empty( $args['icon'] ) ){
3623
-				$icon .= "el('div', {";
3624
-									$icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3625
-									$icon .= "className: 'text-center',";
3626
-									$icon .= "title: '".addslashes( $args['title'] )."',";
3627
-								$icon .= "}),";
3628
-
3629
-				// blank title as its added to the icon.
3630
-				$args['title'] = '';
3631
-			}
3620
+            // icon
3621
+            $icon = '';
3622
+            if( !empty( $args['icon'] ) ){
3623
+                $icon .= "el('div', {";
3624
+                                    $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3625
+                                    $icon .= "className: 'text-center',";
3626
+                                    $icon .= "title: '".addslashes( $args['title'] )."',";
3627
+                                $icon .= "}),";
3628
+
3629
+                // blank title as its added to the icon.
3630
+                $args['title'] = '';
3631
+            }
3632 3632
 
3633
-			// require advanced
3634
-			$require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3633
+            // require advanced
3634
+            $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3635 3635
 
3636
-			// element require
3637
-			$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3636
+            // element require
3637
+            $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3638 3638
 
3639 3639
 
3640
-			$onchange  = "props.setAttributes({ $key: $key } )";
3641
-			$onchangecomplete  = "";
3642
-			$value     = "props.attributes.$key";
3643
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3644
-			if ( in_array( $args['type'], $text_type ) ) {
3645
-				$type = 'TextControl';
3646
-				// Save numbers as numbers and not strings
3647
-				if ( $args['type'] == 'number' ) {
3648
-					$onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3649
-				}
3640
+            $onchange  = "props.setAttributes({ $key: $key } )";
3641
+            $onchangecomplete  = "";
3642
+            $value     = "props.attributes.$key";
3643
+            $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3644
+            if ( in_array( $args['type'], $text_type ) ) {
3645
+                $type = 'TextControl';
3646
+                // Save numbers as numbers and not strings
3647
+                if ( $args['type'] == 'number' ) {
3648
+                    $onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3649
+                }
3650 3650
 
3651
-				if (substr($key, 0, 9 ) === 'metadata_') {
3652
-					$real_key = str_replace('metadata_','', $key );
3653
-					$onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3654
-					$value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3655
-				}
3656
-			}
3651
+                if (substr($key, 0, 9 ) === 'metadata_') {
3652
+                    $real_key = str_replace('metadata_','', $key );
3653
+                    $onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3654
+                    $value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3655
+                }
3656
+            }
3657 3657
 //			else if ( $args['type'] == 'popup' ) {
3658 3658
 //				$type = 'TextControl';
3659 3659
 //				$args['type'] == 'text';
@@ -3671,21 +3671,21 @@  discard block
 block discarded – undo
3671 3671
 //
3672 3672
 //				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3673 3673
 //			}
3674
-			else if ( $args['type'] == 'styleid' ) {
3675
-				$type = 'TextControl';
3676
-				$args['type'] == 'text';
3677
-				// Save numbers as numbers and not strings
3678
-				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3679
-			}else if ( $args['type'] == 'notice' ) {
3680
-
3681
-				$notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3682
-				$notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3683
-
3684
-				$notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3685
-				echo $notice_message ? $element_require . $notice : '';
3686
-				return;
3687
-			}
3688
-			/*
3674
+            else if ( $args['type'] == 'styleid' ) {
3675
+                $type = 'TextControl';
3676
+                $args['type'] == 'text';
3677
+                // Save numbers as numbers and not strings
3678
+                $value     = "props.attributes.$key ? props.attributes.$key : ''";
3679
+            }else if ( $args['type'] == 'notice' ) {
3680
+
3681
+                $notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3682
+                $notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3683
+
3684
+                $notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3685
+                echo $notice_message ? $element_require . $notice : '';
3686
+                return;
3687
+            }
3688
+            /*
3689 3689
 			 * https://www.wptricks.com/question/set-current-tab-on-a-gutenberg-tabpanel-component-from-outside-that-component/ es5 layout
3690 3690
 						elseif($args['type']=='tabs'){
3691 3691
 							?>
@@ -3738,22 +3738,22 @@  discard block
 block discarded – undo
3738 3738
 							return;
3739 3739
 						}
3740 3740
 */
3741
-			elseif ( $args['type'] == 'color' ) {
3742
-				$type = 'ColorPicker';
3743
-				$onchange = "";
3744
-				$extra = "color: $value,";
3745
-				if(!empty($args['disable_alpha'])){
3746
-					$extra .= "disableAlpha: true,";
3747
-				}
3748
-				$onchangecomplete = "onChangeComplete: function($key) {
3741
+            elseif ( $args['type'] == 'color' ) {
3742
+                $type = 'ColorPicker';
3743
+                $onchange = "";
3744
+                $extra = "color: $value,";
3745
+                if(!empty($args['disable_alpha'])){
3746
+                    $extra .= "disableAlpha: true,";
3747
+                }
3748
+                $onchangecomplete = "onChangeComplete: function($key) {
3749 3749
 				value =  $key.rgb.a && $key.rgb.a < 1 ? \"rgba(\"+$key.rgb.r+\",\"+$key.rgb.g+\",\"+$key.rgb.b+\",\"+$key.rgb.a+\")\" : $key.hex;
3750 3750
 						props.setAttributes({
3751 3751
 							$key: value
3752 3752
 						});
3753 3753
 					},";
3754
-			}elseif ( $args['type'] == 'gradient' ) {
3755
-				$type = 'GradientPicker';
3756
-				$extra .= "gradients: [{
3754
+            }elseif ( $args['type'] == 'gradient' ) {
3755
+                $type = 'GradientPicker';
3756
+                $extra .= "gradients: [{
3757 3757
 			name: 'Vivid cyan blue to vivid purple',
3758 3758
 			gradient:
3759 3759
 				'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
@@ -3790,10 +3790,10 @@  discard block
 block discarded – undo
3790 3790
 			slug: 'cool-to-warm-spectrum',
3791 3791
 		}],";
3792 3792
 
3793
-			}elseif ( $args['type'] == 'image' ) {
3793
+            }elseif ( $args['type'] == 'image' ) {
3794 3794
 //                print_r($args);
3795 3795
 
3796
-				$img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3796
+                $img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3797 3797
 							url:  props.attributes.{$key}_use_featured === true ? 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxzdmcgYmFzZVByb2ZpbGU9InRpbnkiIGhlaWdodD0iNDAwIiB2ZXJzaW9uPSIxLjIiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzIC8+PHJlY3QgZmlsbD0iI2QzZDNkMyIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiIHg9IjAiIHk9IjAiIC8+PGxpbmUgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgeDE9IjAiIHgyPSI0MDAiIHkxPSIwIiB5Mj0iNDAwIiAvPjxsaW5lIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHgxPSIwIiB4Mj0iNDAwIiB5MT0iNDAwIiB5Mj0iMCIgLz48cmVjdCBmaWxsPSIjZDNkM2QzIiBoZWlnaHQ9IjUwIiB3aWR0aD0iMjE4LjAiIHg9IjkxLjAiIHk9IjE3NS4wIiAvPjx0ZXh0IGZpbGw9IndoaXRlIiBmb250LXNpemU9IjMwIiBmb250LXdlaWdodD0iYm9sZCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjAwLjAiIHk9IjIwNy41Ij5QTEFDRUhPTERFUjwvdGV4dD48L3N2Zz4='  : props.attributes.$key,
3798 3798
 							value: props.attributes.{$key}_xy.x !== undefined && props.attributes.{$key}_xy.x >= 0 ? props.attributes.{$key}_xy  : {x: 0.5,y: 0.5,},
3799 3799
 //                            value: props.attributes.{$key}_xy,
@@ -3814,16 +3814,16 @@  discard block
 block discarded – undo
3814 3814
 						}), ";
3815 3815
 
3816 3816
 
3817
-				$value = '""';
3818
-				$type = 'MediaUpload';
3819
-				$extra .= "onSelect: function(media){
3817
+                $value = '""';
3818
+                $type = 'MediaUpload';
3819
+                $extra .= "onSelect: function(media){
3820 3820
 					  return props.setAttributes({
3821 3821
 						  $key: media.url,
3822 3822
 						  {$key}_id: media.id
3823 3823
 						});
3824 3824
 					  },";
3825
-				   $extra .= "type: 'image',";
3826
-				   $extra .= "render: function (obj) {
3825
+                    $extra .= "type: 'image',";
3826
+                    $extra .= "render: function (obj) {
3827 3827
 						return el( 'div',{},
3828 3828
 						( !props.attributes.$key && !props.attributes.{$key}_use_featured ) && el( wp.components.Button, {
3829 3829
 						  className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
@@ -3849,11 +3849,11 @@  discard block
 block discarded – undo
3849 3849
 
3850 3850
 
3851 3851
 					  }";
3852
-				$onchange = "";
3852
+                $onchange = "";
3853 3853
 
3854
-				//$inside_elements = ",el('div',{},'file upload')";
3855
-			} else if ( $args['type'] == 'images' ) {
3856
-				$img_preview = "props.attributes.$key && (function() {
3854
+                //$inside_elements = ",el('div',{},'file upload')";
3855
+            } else if ( $args['type'] == 'images' ) {
3856
+                $img_preview = "props.attributes.$key && (function() {
3857 3857
 	let uploads = JSON.parse('['+props.attributes.$key+']');
3858 3858
 	let images = [];
3859 3859
 	uploads.map((upload, index) => (
@@ -3880,9 +3880,9 @@  discard block
 block discarded – undo
3880 3880
 })(),";
3881 3881
 
3882 3882
 
3883
-				$value = '""';
3884
-				$type = 'MediaUpload';
3885
-				$extra .= "onSelect: function(media){
3883
+                $value = '""';
3884
+                $type = 'MediaUpload';
3885
+                $extra .= "onSelect: function(media){
3886 3886
 	let slim_images = props.attributes.$key ? JSON.parse('['+props.attributes.$key+']') : [];
3887 3887
 	if(media.length){
3888 3888
 		for (var i=0; i < media.length; i++) {
@@ -3895,9 +3895,9 @@  discard block
 block discarded – undo
3895 3895
 	}
3896 3896
 	return props.setAttributes({ $key: slimImagesV});
3897 3897
 },";
3898
-				$extra .= "type: 'image',";
3899
-				$extra .= "multiple: true,";
3900
-				$extra .= "render: function (obj) {
3898
+                $extra .= "type: 'image',";
3899
+                $extra .= "multiple: true,";
3900
+                $extra .= "render: function (obj) {
3901 3901
 	/* Init the sort */
3902 3902
 	enableDragSort('sd-sortable');
3903 3903
 	return el( 'div',{},
@@ -3924,40 +3924,40 @@  discard block
 block discarded – undo
3924 3924
 		)
3925 3925
 	)
3926 3926
 }";
3927
-				$onchange = "";
3927
+                $onchange = "";
3928 3928
 
3929
-				//$inside_elements = ",el('div',{},'file upload')";
3930
-			}
3931
-			elseif ( $args['type'] == 'checkbox' ) {
3932
-				$type = 'CheckboxControl';
3933
-				$extra .= "checked: props.attributes.$key,";
3934
-				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3935
-			} elseif ( $args['type'] == 'textarea' ) {
3936
-				$type = 'TextareaControl';
3937
-
3938
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3939
-				$type = 'SelectControl';
3940
-
3941
-				if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3942
-					$options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3943
-				}elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3944
-					$options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3945
-				}else {
3946
-
3947
-					if ( ! empty( $args['options'] ) ) {
3948
-						$options .= "options: [";
3949
-						foreach ( $args['options'] as $option_val => $option_label ) {
3950
-							$options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3951
-						}
3952
-						$options .= "],";
3953
-					}
3954
-				}
3955
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3956
-					$extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3957
-				}
3929
+                //$inside_elements = ",el('div',{},'file upload')";
3930
+            }
3931
+            elseif ( $args['type'] == 'checkbox' ) {
3932
+                $type = 'CheckboxControl';
3933
+                $extra .= "checked: props.attributes.$key,";
3934
+                $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3935
+            } elseif ( $args['type'] == 'textarea' ) {
3936
+                $type = 'TextareaControl';
3937
+
3938
+            } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3939
+                $type = 'SelectControl';
3940
+
3941
+                if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3942
+                    $options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3943
+                }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3944
+                    $options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3945
+                }else {
3946
+
3947
+                    if ( ! empty( $args['options'] ) ) {
3948
+                        $options .= "options: [";
3949
+                        foreach ( $args['options'] as $option_val => $option_label ) {
3950
+                            $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3951
+                        }
3952
+                        $options .= "],";
3953
+                    }
3954
+                }
3955
+                if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3956
+                    $extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3957
+                }
3958 3958
 
3959
-				if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3960
-					$after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3959
+                if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3960
+                    $after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3961 3961
 									  className: 'components-button components-circular-option-picker__clear is-secondary is-small',
3962 3962
 									  style: {margin:'-8px 0 8px 0',display: 'block'},
3963 3963
 									  onClick: function(){
@@ -3968,8 +3968,8 @@  discard block
 block discarded – undo
3968 3968
 									},
3969 3969
 									'Clear'
3970 3970
 							),";
3971
-				}
3972
-			} elseif ( $args['type'] == 'tagselect' ) {
3971
+                }
3972
+            } elseif ( $args['type'] == 'tagselect' ) {
3973 3973
 //				$type = 'FormTokenField';
3974 3974
 //
3975 3975
 //				if ( ! empty( $args['options'] ) ) {
@@ -4004,20 +4004,20 @@  discard block
 block discarded – undo
4004 4004
 //				$value     = "[]";
4005 4005
 //				$extra .= ' __experimentalExpandOnFocus: true,';
4006 4006
 
4007
-			} else if ( $args['type'] == 'alignment' ) {
4008
-				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
4009
-			} else if ( $args['type'] == 'margins' ) {
4010
-
4011
-			} else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
4012
-				$type = 'TextControl';
4013
-				$value = "(props.attributes.$key ? props.attributes.$key : '')";
4014
-				$args['type'] = 'text';
4015
-				$options .= 'disabled:true,';
4016
-				$bsvc_title = esc_attr( addslashes( $args['title'] ) );
4017
-				$bsvc_body = $this->block_visibility_fields( $args );
4018
-				// @TODO reset button
4019
-				$bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
4020
-				$after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
4007
+            } else if ( $args['type'] == 'alignment' ) {
4008
+                $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
4009
+            } else if ( $args['type'] == 'margins' ) {
4010
+
4011
+            } else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
4012
+                $type = 'TextControl';
4013
+                $value = "(props.attributes.$key ? props.attributes.$key : '')";
4014
+                $args['type'] = 'text';
4015
+                $options .= 'disabled:true,';
4016
+                $bsvc_title = esc_attr( addslashes( $args['title'] ) );
4017
+                $bsvc_body = $this->block_visibility_fields( $args );
4018
+                // @TODO reset button
4019
+                $bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
4020
+                $after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
4021 4021
 						className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
4022 4022
 						onClick: function() {
4023 4023
 							var sValue = props.attributes." . $key . ";
@@ -4043,39 +4043,39 @@  discard block
 block discarded – undo
4043 4043
 					},
4044 4044
 					'" . addslashes( ! empty( $args['button_title'] ) ? $args['button_title'] : $args['title'] ) . "'
4045 4045
 				) ),";
4046
-			} else {
4047
-				return;// if we have not implemented the control then don't break the JS.
4048
-			}
4046
+            } else {
4047
+                return;// if we have not implemented the control then don't break the JS.
4048
+            }
4049 4049
 
4050
-			// color input does not show the labels so we add them
4051
-			if($args['type']=='color'){
4052
-				// add show only if advanced
4053
-				echo $require_advanced;
4054
-				// add setting require if defined
4055
-				echo $element_require;
4056
-				echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4057
-			}
4050
+            // color input does not show the labels so we add them
4051
+            if($args['type']=='color'){
4052
+                // add show only if advanced
4053
+                echo $require_advanced;
4054
+                // add setting require if defined
4055
+                echo $element_require;
4056
+                echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4057
+            }
4058 4058
 
4059
-			// add show only if advanced
4060
-			echo $require_advanced;
4061
-			// add setting require if defined
4062
-			echo $element_require;
4063
-			echo $device_type_require;
4059
+            // add show only if advanced
4060
+            echo $require_advanced;
4061
+            // add setting require if defined
4062
+            echo $element_require;
4063
+            echo $device_type_require;
4064 4064
 
4065
-			// icon
4066
-			echo $icon;
4067
-			?>
4065
+            // icon
4066
+            echo $icon;
4067
+            ?>
4068 4068
 			el( <?php echo $args['type'] == 'image' || $args['type'] == 'images' ? $type  : "wp.components.".$type; ?>, {
4069 4069
 			label: <?php if ( empty( $args['title'] ) ) { echo "''"; } else if ( empty( $args['row'] ) && ! empty( $args['device_type'] ) ) { ?>el('label',{className:'components-base-control__label',style:{width:"100%"}},el('span',{dangerouslySetInnerHTML: {__html: '<?php echo addslashes( $args['title'] ) ?>'}}),<?php if ( $device_type_icon ) { ?>deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})<?php } ?>)<?php
4070
-			} else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4070
+            } else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4071 4071
 			help: <?php echo ( isset( $args['desc'] ) ? "el('span', {dangerouslySetInnerHTML: {__html: '" . trim( wp_kses_post( addslashes( $args['desc'] ) ) ) . "'}})" : "''" ); ?>,
4072 4072
 			value: <?php echo $value; ?>,
4073 4073
 			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
4074
-				echo "type: '" . addslashes( $args['type'] ) . "',";
4075
-			} ?>
4074
+                echo "type: '" . addslashes( $args['type'] ) . "',";
4075
+            } ?>
4076 4076
 			<?php if ( ! empty( $args['placeholder'] ) ) {
4077
-				echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4078
-			} ?>
4077
+                echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4078
+            } ?>
4079 4079
 			<?php echo $options; ?>
4080 4080
 			<?php echo $extra; ?>
4081 4081
 			<?php echo $custom_attributes; ?>
@@ -4087,1361 +4087,1361 @@  discard block
 block discarded – undo
4087 4087
 			<?php } ?>
4088 4088
 		} <?php echo $inside_elements; ?> ),
4089 4089
 			<?php
4090
-			echo $after_elements;
4091
-		}
4090
+            echo $after_elements;
4091
+        }
4092 4092
 
4093
-		/**
4094
-		 * Convert an array of attributes to block string.
4095
-		 *
4096
-		 * @param $custom_attributes
4097
-		 *
4098
-		 * @return string
4099
-		 *@todo there is prob a faster way to do this, also we could add some validation here.
4100
-		 *
4101
-		 */
4102
-		public function array_to_attributes( $custom_attributes, $html = false ) {
4103
-			$attributes = '';
4104
-			if ( ! empty( $custom_attributes ) ) {
4105
-
4106
-				foreach ( $custom_attributes as $key => $val ) {
4107
-					if(is_array($val)){
4108
-						$attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4109
-					}else{
4110
-						$attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4111
-					}
4112
-				}
4093
+        /**
4094
+         * Convert an array of attributes to block string.
4095
+         *
4096
+         * @param $custom_attributes
4097
+         *
4098
+         * @return string
4099
+         *@todo there is prob a faster way to do this, also we could add some validation here.
4100
+         *
4101
+         */
4102
+        public function array_to_attributes( $custom_attributes, $html = false ) {
4103
+            $attributes = '';
4104
+            if ( ! empty( $custom_attributes ) ) {
4105
+
4106
+                foreach ( $custom_attributes as $key => $val ) {
4107
+                    if(is_array($val)){
4108
+                        $attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4109
+                    }else{
4110
+                        $attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4111
+                    }
4112
+                }
4113 4113
 
4114
-			}
4114
+            }
4115 4115
 
4116
-			return $attributes;
4117
-		}
4116
+            return $attributes;
4117
+        }
4118 4118
 
4119 4119
 
4120 4120
 
4121
-		/**
4122
-		 * A self looping function to create the output for JS block elements.
4123
-		 *
4124
-		 * This is what is output in the WP Editor visual view.
4125
-		 *
4126
-		 * @param $args
4127
-		 */
4128
-		public function block_element( $args, $save = false ) {
4121
+        /**
4122
+         * A self looping function to create the output for JS block elements.
4123
+         *
4124
+         * This is what is output in the WP Editor visual view.
4125
+         *
4126
+         * @param $args
4127
+         */
4128
+        public function block_element( $args, $save = false ) {
4129 4129
 
4130 4130
 //            print_r($args);echo '###';exit;
4131 4131
 
4132
-			if ( ! empty( $args ) ) {
4133
-				foreach ( $args as $element => $new_args ) {
4132
+            if ( ! empty( $args ) ) {
4133
+                foreach ( $args as $element => $new_args ) {
4134 4134
 
4135
-					if ( is_array( $new_args ) ) { // its an element
4135
+                    if ( is_array( $new_args ) ) { // its an element
4136 4136
 
4137 4137
 
4138
-						if ( isset( $new_args['element'] ) ) {
4138
+                        if ( isset( $new_args['element'] ) ) {
4139 4139
 
4140
-							if ( isset( $new_args['element_require'] ) ) {
4141
-								echo str_replace( array(
4142
-										"'+",
4143
-										"+'"
4144
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4145
-								unset( $new_args['element_require'] );
4146
-							}
4140
+                            if ( isset( $new_args['element_require'] ) ) {
4141
+                                echo str_replace( array(
4142
+                                        "'+",
4143
+                                        "+'"
4144
+                                    ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4145
+                                unset( $new_args['element_require'] );
4146
+                            }
4147 4147
 
4148
-							if($new_args['element']=='InnerBlocks'){
4149
-								echo "\n el( InnerBlocks, {";
4150
-							}elseif($new_args['element']=='innerBlocksProps'){
4151
-								$element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4152
-							  //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4148
+                            if($new_args['element']=='InnerBlocks'){
4149
+                                echo "\n el( InnerBlocks, {";
4150
+                            }elseif($new_args['element']=='innerBlocksProps'){
4151
+                                $element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4152
+                                //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4153 4153
 //                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4154
-								echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4155
-								echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4156
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4157
-
4158
-								echo "} ), {";
4159
-								echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4160
-							//    echo '###';
4161
-
4162
-							  //  echo '###';
4163
-							}elseif($new_args['element']=='BlocksProps'){
4164
-
4165
-								if ( isset($new_args['if_inner_element']) ) {
4166
-									$element = $new_args['if_inner_element'];
4167
-								}else {
4168
-									$element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4169
-								}
4170
-
4171
-								unset($new_args['inner_element']);
4172
-								echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4173
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4174
-
4175
-
4176
-							   // echo "} ),";
4177
-
4178
-							}else{
4179
-								echo "\n el( '" . $new_args['element'] . "', {";
4180
-							}
4181
-
4182
-
4183
-							// get the attributes
4184
-							foreach ( $new_args as $new_key => $new_value ) {
4185
-
4186
-
4187
-								if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4188
-									// do nothing
4189
-								} else {
4190
-									echo $this->block_element( array( $new_key => $new_value ),$save );
4191
-								}
4192
-							}
4193
-
4194
-							echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4195
-
4196
-							// get the content
4197
-							$first_item = 0;
4198
-							foreach ( $new_args as $new_key => $new_value ) {
4199
-								if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4200
-
4201
-									if ( $new_key === 'content' ) {
4202
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4203
-									}else if ( $new_key === 'if_content' ) {
4204
-										echo  $this->block_props_replace(  $new_value  );
4205
-									}
4206
-
4207
-									if ( is_array( $new_value ) ) {
4208
-
4209
-										if ( isset( $new_value['element_require'] ) ) {
4210
-											echo str_replace( array(
4211
-													"'+",
4212
-													"+'"
4213
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4214
-											unset( $new_value['element_require'] );
4215
-										}
4216
-
4217
-										if ( isset( $new_value['element_repeat'] ) ) {
4218
-											$x = 1;
4219
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
4220
-												$this->block_element( array( '' => $new_value ),$save );
4221
-												$x ++;
4222
-											}
4223
-										} else {
4224
-											$this->block_element( array( '' => $new_value ),$save );
4225
-										}
4226
-									}
4227
-									$first_item ++;
4228
-								}
4229
-							}
4230
-
4231
-							if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4232
-								echo "))";// end content
4233
-							}else{
4234
-								echo ")";// end content
4235
-							}
4236
-
4237
-
4238
-							echo ", \n";
4239
-
4240
-						}
4241
-					} else {
4242
-
4243
-						if ( substr( $element, 0, 3 ) === "if_" ) {
4244
-							$extra = '';
4245
-							if( strpos($new_args, '[%WrapClass%]') !== false ){
4246
-								$new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4247
-								$new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4248
-							}
4249
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4250
-						} elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4251
-							$new_args = str_replace('[%WrapStyle%]','',$new_args);
4252
-							echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4154
+                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4155
+                                echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4156
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4157
+
4158
+                                echo "} ), {";
4159
+                                echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4160
+                            //    echo '###';
4161
+
4162
+                                //  echo '###';
4163
+                            }elseif($new_args['element']=='BlocksProps'){
4164
+
4165
+                                if ( isset($new_args['if_inner_element']) ) {
4166
+                                    $element = $new_args['if_inner_element'];
4167
+                                }else {
4168
+                                    $element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4169
+                                }
4170
+
4171
+                                unset($new_args['inner_element']);
4172
+                                echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4173
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4174
+
4175
+
4176
+                                // echo "} ),";
4177
+
4178
+                            }else{
4179
+                                echo "\n el( '" . $new_args['element'] . "', {";
4180
+                            }
4181
+
4182
+
4183
+                            // get the attributes
4184
+                            foreach ( $new_args as $new_key => $new_value ) {
4185
+
4186
+
4187
+                                if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4188
+                                    // do nothing
4189
+                                } else {
4190
+                                    echo $this->block_element( array( $new_key => $new_value ),$save );
4191
+                                }
4192
+                            }
4193
+
4194
+                            echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4195
+
4196
+                            // get the content
4197
+                            $first_item = 0;
4198
+                            foreach ( $new_args as $new_key => $new_value ) {
4199
+                                if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4200
+
4201
+                                    if ( $new_key === 'content' ) {
4202
+                                        echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4203
+                                    }else if ( $new_key === 'if_content' ) {
4204
+                                        echo  $this->block_props_replace(  $new_value  );
4205
+                                    }
4206
+
4207
+                                    if ( is_array( $new_value ) ) {
4208
+
4209
+                                        if ( isset( $new_value['element_require'] ) ) {
4210
+                                            echo str_replace( array(
4211
+                                                    "'+",
4212
+                                                    "+'"
4213
+                                                ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4214
+                                            unset( $new_value['element_require'] );
4215
+                                        }
4216
+
4217
+                                        if ( isset( $new_value['element_repeat'] ) ) {
4218
+                                            $x = 1;
4219
+                                            while ( $x <= absint( $new_value['element_repeat'] ) ) {
4220
+                                                $this->block_element( array( '' => $new_value ),$save );
4221
+                                                $x ++;
4222
+                                            }
4223
+                                        } else {
4224
+                                            $this->block_element( array( '' => $new_value ),$save );
4225
+                                        }
4226
+                                    }
4227
+                                    $first_item ++;
4228
+                                }
4229
+                            }
4230
+
4231
+                            if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4232
+                                echo "))";// end content
4233
+                            }else{
4234
+                                echo ")";// end content
4235
+                            }
4236
+
4237
+
4238
+                            echo ", \n";
4239
+
4240
+                        }
4241
+                    } else {
4242
+
4243
+                        if ( substr( $element, 0, 3 ) === "if_" ) {
4244
+                            $extra = '';
4245
+                            if( strpos($new_args, '[%WrapClass%]') !== false ){
4246
+                                $new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4247
+                                $new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4248
+                            }
4249
+                            echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4250
+                        } elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4251
+                            $new_args = str_replace('[%WrapStyle%]','',$new_args);
4252
+                            echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4253 4253
 //                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4254
-						} elseif ( $element == 'style' ) {
4255
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4256
-						} elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4257
-							$new_args = str_replace('[%WrapClass%]','',$new_args);
4258
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4259
-						} elseif ( $element == 'template' && $new_args ) {
4260
-							echo $element . ": $new_args,";
4261
-						} else {
4262
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4263
-						}
4264
-
4265
-					}
4266
-				}
4267
-			}
4268
-		}
4254
+                        } elseif ( $element == 'style' ) {
4255
+                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4256
+                        } elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4257
+                            $new_args = str_replace('[%WrapClass%]','',$new_args);
4258
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4259
+                        } elseif ( $element == 'template' && $new_args ) {
4260
+                            echo $element . ": $new_args,";
4261
+                        } else {
4262
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4263
+                        }
4264
+
4265
+                    }
4266
+                }
4267
+            }
4268
+        }
4269 4269
 
4270
-		/**
4271
-		 * Replace block attributes placeholders with the proper naming.
4272
-		 *
4273
-		 * @param $string
4274
-		 *
4275
-		 * @return mixed
4276
-		 */
4277
-		public function block_props_replace( $string, $no_wrap = false ) {
4278
-			if ( $no_wrap ) {
4279
-				$string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4280
-			} else {
4281
-				$string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4282
-			}
4270
+        /**
4271
+         * Replace block attributes placeholders with the proper naming.
4272
+         *
4273
+         * @param $string
4274
+         *
4275
+         * @return mixed
4276
+         */
4277
+        public function block_props_replace( $string, $no_wrap = false ) {
4278
+            if ( $no_wrap ) {
4279
+                $string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4280
+            } else {
4281
+                $string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4282
+            }
4283 4283
 
4284
-			return $string;
4285
-		}
4284
+            return $string;
4285
+        }
4286 4286
 
4287
-		/**
4288
-		 * Outputs the content of the widget
4289
-		 *
4290
-		 * @param array $args
4291
-		 * @param array $instance
4292
-		 */
4293
-		public function widget( $args, $instance ) {
4294
-			if ( ! is_array( $args ) ) {
4295
-				$args = array();
4296
-			}
4287
+        /**
4288
+         * Outputs the content of the widget
4289
+         *
4290
+         * @param array $args
4291
+         * @param array $instance
4292
+         */
4293
+        public function widget( $args, $instance ) {
4294
+            if ( ! is_array( $args ) ) {
4295
+                $args = array();
4296
+            }
4297 4297
 
4298
-			// Get the filtered values
4299
-			$argument_values = $this->argument_values( $instance );
4300
-			$argument_values = $this->string_to_bool( $argument_values );
4301
-			$output          = $this->output( $argument_values, $args );
4298
+            // Get the filtered values
4299
+            $argument_values = $this->argument_values( $instance );
4300
+            $argument_values = $this->string_to_bool( $argument_values );
4301
+            $output          = $this->output( $argument_values, $args );
4302 4302
 
4303
-			$no_wrap = false;
4304
-			if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4305
-				$no_wrap = true;
4306
-			}
4303
+            $no_wrap = false;
4304
+            if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4305
+                $no_wrap = true;
4306
+            }
4307 4307
 
4308
-			ob_start();
4309
-			if ( $output && ! $no_wrap ) {
4308
+            ob_start();
4309
+            if ( $output && ! $no_wrap ) {
4310 4310
 
4311
-				$class_original = $this->options['widget_ops']['classname'];
4312
-				$class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4311
+                $class_original = $this->options['widget_ops']['classname'];
4312
+                $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4313 4313
 
4314
-				// Before widget
4315
-				$before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4316
-				$before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4317
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4318
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4314
+                // Before widget
4315
+                $before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4316
+                $before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4317
+                $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4318
+                $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4319 4319
 
4320
-				// After widget
4321
-				$after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4322
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4323
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4320
+                // After widget
4321
+                $after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4322
+                $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4323
+                $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4324 4324
 
4325
-				echo $before_widget;
4326
-				// elementor strips the widget wrapping div so we check for and add it back if needed
4327
-				if ( $this->is_elementor_widget_output() ) {
4328
-					// Filter class & attrs for elementor widget output.
4329
-					$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4330
-					$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4325
+                echo $before_widget;
4326
+                // elementor strips the widget wrapping div so we check for and add it back if needed
4327
+                if ( $this->is_elementor_widget_output() ) {
4328
+                    // Filter class & attrs for elementor widget output.
4329
+                    $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4330
+                    $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4331 4331
 
4332
-					$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4333
-					$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4332
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4333
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4334 4334
 
4335
-					echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4336
-				}
4337
-				echo $this->output_title( $args, $instance );
4338
-				echo $output;
4339
-				if ( $this->is_elementor_widget_output() ) {
4340
-					echo "</span>";
4341
-				}
4342
-				echo $after_widget;
4343
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4344
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4345
-				echo $output;
4346
-			} elseif ( $output && $no_wrap ) {
4347
-				echo $output;
4348
-			}
4349
-			$output = ob_get_clean();
4335
+                    echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4336
+                }
4337
+                echo $this->output_title( $args, $instance );
4338
+                echo $output;
4339
+                if ( $this->is_elementor_widget_output() ) {
4340
+                    echo "</span>";
4341
+                }
4342
+                echo $after_widget;
4343
+            } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4344
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4345
+                echo $output;
4346
+            } elseif ( $output && $no_wrap ) {
4347
+                echo $output;
4348
+            }
4349
+            $output = ob_get_clean();
4350 4350
 
4351
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4351
+            $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4352 4352
 
4353
-			echo $output;
4354
-		}
4353
+            echo $output;
4354
+        }
4355 4355
 
4356
-		/**
4357
-		 * Tests if the current output is inside a elementor container.
4358
-		 *
4359
-		 * @return bool
4360
-		 *@since 1.0.4
4361
-		 */
4362
-		public function is_elementor_widget_output() {
4363
-			$result = false;
4364
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4365
-				$result = true;
4366
-			}
4356
+        /**
4357
+         * Tests if the current output is inside a elementor container.
4358
+         *
4359
+         * @return bool
4360
+         *@since 1.0.4
4361
+         */
4362
+        public function is_elementor_widget_output() {
4363
+            $result = false;
4364
+            if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4365
+                $result = true;
4366
+            }
4367 4367
 
4368
-			return $result;
4369
-		}
4368
+            return $result;
4369
+        }
4370 4370
 
4371
-		/**
4372
-		 * Tests if the current output is inside a elementor preview.
4373
-		 *
4374
-		 * @return bool
4375
-		 *@since 1.0.4
4376
-		 */
4377
-		public function is_elementor_preview() {
4378
-			$result = false;
4379
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4380
-				$result = true;
4381
-			}
4371
+        /**
4372
+         * Tests if the current output is inside a elementor preview.
4373
+         *
4374
+         * @return bool
4375
+         *@since 1.0.4
4376
+         */
4377
+        public function is_elementor_preview() {
4378
+            $result = false;
4379
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4380
+                $result = true;
4381
+            }
4382 4382
 
4383
-			return $result;
4384
-		}
4383
+            return $result;
4384
+        }
4385 4385
 
4386
-		/**
4387
-		 * Tests if the current output is inside a Divi preview.
4388
-		 *
4389
-		 * @return bool
4390
-		 *@since 1.0.6
4391
-		 */
4392
-		public function is_divi_preview() {
4393
-			$result = false;
4394
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4395
-				$result = true;
4396
-			}
4386
+        /**
4387
+         * Tests if the current output is inside a Divi preview.
4388
+         *
4389
+         * @return bool
4390
+         *@since 1.0.6
4391
+         */
4392
+        public function is_divi_preview() {
4393
+            $result = false;
4394
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4395
+                $result = true;
4396
+            }
4397 4397
 
4398
-			return $result;
4399
-		}
4398
+            return $result;
4399
+        }
4400 4400
 
4401
-		/**
4402
-		 * Tests if the current output is inside a Beaver builder preview.
4403
-		 *
4404
-		 * @return bool
4405
-		 *@since 1.0.6
4406
-		 */
4407
-		public function is_beaver_preview() {
4408
-			$result = false;
4409
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
4410
-				$result = true;
4411
-			}
4401
+        /**
4402
+         * Tests if the current output is inside a Beaver builder preview.
4403
+         *
4404
+         * @return bool
4405
+         *@since 1.0.6
4406
+         */
4407
+        public function is_beaver_preview() {
4408
+            $result = false;
4409
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
4410
+                $result = true;
4411
+            }
4412 4412
 
4413
-			return $result;
4414
-		}
4413
+            return $result;
4414
+        }
4415 4415
 
4416
-		/**
4417
-		 * Tests if the current output is inside a siteorigin builder preview.
4418
-		 *
4419
-		 * @return bool
4420
-		 *@since 1.0.6
4421
-		 */
4422
-		public function is_siteorigin_preview() {
4423
-			$result = false;
4424
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4425
-				$result = true;
4426
-			}
4416
+        /**
4417
+         * Tests if the current output is inside a siteorigin builder preview.
4418
+         *
4419
+         * @return bool
4420
+         *@since 1.0.6
4421
+         */
4422
+        public function is_siteorigin_preview() {
4423
+            $result = false;
4424
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4425
+                $result = true;
4426
+            }
4427 4427
 
4428
-			return $result;
4429
-		}
4428
+            return $result;
4429
+        }
4430 4430
 
4431
-		/**
4432
-		 * Tests if the current output is inside a cornerstone builder preview.
4433
-		 *
4434
-		 * @return bool
4435
-		 *@since 1.0.8
4436
-		 */
4437
-		public function is_cornerstone_preview() {
4438
-			$result = false;
4439
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4440
-				$result = true;
4441
-			}
4431
+        /**
4432
+         * Tests if the current output is inside a cornerstone builder preview.
4433
+         *
4434
+         * @return bool
4435
+         *@since 1.0.8
4436
+         */
4437
+        public function is_cornerstone_preview() {
4438
+            $result = false;
4439
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4440
+                $result = true;
4441
+            }
4442 4442
 
4443
-			return $result;
4444
-		}
4443
+            return $result;
4444
+        }
4445 4445
 
4446
-		/**
4447
-		 * Tests if the current output is inside a fusion builder preview.
4448
-		 *
4449
-		 * @return bool
4450
-		 *@since 1.1.0
4451
-		 */
4452
-		public function is_fusion_preview() {
4453
-			$result = false;
4454
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4455
-				$result = true;
4456
-			}
4446
+        /**
4447
+         * Tests if the current output is inside a fusion builder preview.
4448
+         *
4449
+         * @return bool
4450
+         *@since 1.1.0
4451
+         */
4452
+        public function is_fusion_preview() {
4453
+            $result = false;
4454
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4455
+                $result = true;
4456
+            }
4457 4457
 
4458
-			return $result;
4459
-		}
4458
+            return $result;
4459
+        }
4460 4460
 
4461
-		/**
4462
-		 * Tests if the current output is inside a Oxygen builder preview.
4463
-		 *
4464
-		 * @return bool
4465
-		 *@since 1.0.18
4466
-		 */
4467
-		public function is_oxygen_preview() {
4468
-			$result = false;
4469
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4470
-				$result = true;
4471
-			}
4461
+        /**
4462
+         * Tests if the current output is inside a Oxygen builder preview.
4463
+         *
4464
+         * @return bool
4465
+         *@since 1.0.18
4466
+         */
4467
+        public function is_oxygen_preview() {
4468
+            $result = false;
4469
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4470
+                $result = true;
4471
+            }
4472 4472
 
4473
-			return $result;
4474
-		}
4473
+            return $result;
4474
+        }
4475 4475
 
4476
-		/**
4477
-		 * Check for Kallyas theme Zion builder preview.
4478
-		 *
4479
-		 * @since 1.1.22
4480
-		 *
4481
-		 * @return bool True when preview page otherwise false.
4482
-		 */
4483
-		public function is_kallyas_zion_preview() {
4484
-			$result = false;
4485
-
4486
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4487
-				$result = true;
4488
-			}
4476
+        /**
4477
+         * Check for Kallyas theme Zion builder preview.
4478
+         *
4479
+         * @since 1.1.22
4480
+         *
4481
+         * @return bool True when preview page otherwise false.
4482
+         */
4483
+        public function is_kallyas_zion_preview() {
4484
+            $result = false;
4489 4485
 
4490
-			return $result;
4491
-		}
4486
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4487
+                $result = true;
4488
+            }
4492 4489
 
4493
-		/**
4494
-		 * Check for Bricks theme builder preview.
4495
-		 *
4496
-		 * @since 1.1.31
4497
-		 *
4498
-		 * @return bool True when preview page otherwise false.
4499
-		 */
4500
-		public function is_bricks_preview() {
4501
-			$result = false;
4502
-
4503
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4504
-				$result = true;
4505
-			}
4490
+            return $result;
4491
+        }
4506 4492
 
4507
-			return $result;
4508
-		}
4493
+        /**
4494
+         * Check for Bricks theme builder preview.
4495
+         *
4496
+         * @since 1.1.31
4497
+         *
4498
+         * @return bool True when preview page otherwise false.
4499
+         */
4500
+        public function is_bricks_preview() {
4501
+            $result = false;
4509 4502
 
4510
-		/**
4511
-		 * General function to check if we are in a preview situation.
4512
-		 *
4513
-		 * @return bool
4514
-		 *@since 1.0.6
4515
-		 */
4516
-		public function is_preview() {
4517
-			$preview = false;
4518
-			if ( $this->is_divi_preview() ) {
4519
-				$preview = true;
4520
-			} elseif ( $this->is_elementor_preview() ) {
4521
-				$preview = true;
4522
-			} elseif ( $this->is_beaver_preview() ) {
4523
-				$preview = true;
4524
-			} elseif ( $this->is_siteorigin_preview() ) {
4525
-				$preview = true;
4526
-			} elseif ( $this->is_cornerstone_preview() ) {
4527
-				$preview = true;
4528
-			} elseif ( $this->is_fusion_preview() ) {
4529
-				$preview = true;
4530
-			} elseif ( $this->is_oxygen_preview() ) {
4531
-				$preview = true;
4532
-			} elseif( $this->is_kallyas_zion_preview() ) {
4533
-				$preview = true;
4534
-			} elseif( $this->is_block_content_call() ) {
4535
-				$preview = true;
4536
-			} elseif( $this->is_bricks_preview() ) {
4537
-				$preview = true;
4538
-			}
4503
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4504
+                $result = true;
4505
+            }
4539 4506
 
4540
-			return $preview;
4541
-		}
4507
+            return $result;
4508
+        }
4542 4509
 
4543
-		/**
4544
-		 * Output the super title.
4545
-		 *
4546
-		 * @param $args
4547
-		 * @param array $instance
4548
-		 *
4549
-		 * @return string
4550
-		 */
4551
-		public function output_title( $args, $instance = array() ) {
4552
-			$output = '';
4553
-			if ( ! empty( $instance['title'] ) ) {
4554
-				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4555
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4556
-
4557
-				if ( empty( $instance['widget_title_tag'] ) ) {
4558
-					if ( ! isset( $args['before_title'] ) ) {
4559
-						$args['before_title'] = '';
4560
-					}
4510
+        /**
4511
+         * General function to check if we are in a preview situation.
4512
+         *
4513
+         * @return bool
4514
+         *@since 1.0.6
4515
+         */
4516
+        public function is_preview() {
4517
+            $preview = false;
4518
+            if ( $this->is_divi_preview() ) {
4519
+                $preview = true;
4520
+            } elseif ( $this->is_elementor_preview() ) {
4521
+                $preview = true;
4522
+            } elseif ( $this->is_beaver_preview() ) {
4523
+                $preview = true;
4524
+            } elseif ( $this->is_siteorigin_preview() ) {
4525
+                $preview = true;
4526
+            } elseif ( $this->is_cornerstone_preview() ) {
4527
+                $preview = true;
4528
+            } elseif ( $this->is_fusion_preview() ) {
4529
+                $preview = true;
4530
+            } elseif ( $this->is_oxygen_preview() ) {
4531
+                $preview = true;
4532
+            } elseif( $this->is_kallyas_zion_preview() ) {
4533
+                $preview = true;
4534
+            } elseif( $this->is_block_content_call() ) {
4535
+                $preview = true;
4536
+            } elseif( $this->is_bricks_preview() ) {
4537
+                $preview = true;
4538
+            }
4561 4539
 
4562
-					if ( ! isset( $args['after_title'] ) ) {
4563
-						$args['after_title'] = '';
4564
-					}
4540
+            return $preview;
4541
+        }
4565 4542
 
4566
-					$output = $args['before_title'] . $title . $args['after_title'];
4567
-				} else {
4568
-					$tag 			= esc_attr( $instance['widget_title_tag'] );
4569
-					$allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4570
-					$title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4571
-
4572
-					// classes
4573
-					$title_classes = array();
4574
-					$title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4575
-					$title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4576
-					$title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4577
-					$title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4578
-					$title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4579
-					$title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4580
-					$title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4581
-					$title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4582
-					$title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4583
-					$title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4584
-					$title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4585
-					$title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4586
-					$title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4587
-
4588
-					$class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4589
-					$output = "<$title_tag class='$class' >$title</$title_tag>";
4590
-				}
4543
+        /**
4544
+         * Output the super title.
4545
+         *
4546
+         * @param $args
4547
+         * @param array $instance
4548
+         *
4549
+         * @return string
4550
+         */
4551
+        public function output_title( $args, $instance = array() ) {
4552
+            $output = '';
4553
+            if ( ! empty( $instance['title'] ) ) {
4554
+                /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4555
+                $title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4556
+
4557
+                if ( empty( $instance['widget_title_tag'] ) ) {
4558
+                    if ( ! isset( $args['before_title'] ) ) {
4559
+                        $args['before_title'] = '';
4560
+                    }
4561
+
4562
+                    if ( ! isset( $args['after_title'] ) ) {
4563
+                        $args['after_title'] = '';
4564
+                    }
4565
+
4566
+                    $output = $args['before_title'] . $title . $args['after_title'];
4567
+                } else {
4568
+                    $tag 			= esc_attr( $instance['widget_title_tag'] );
4569
+                    $allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4570
+                    $title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4571
+
4572
+                    // classes
4573
+                    $title_classes = array();
4574
+                    $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4575
+                    $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4576
+                    $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4577
+                    $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4578
+                    $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4579
+                    $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4580
+                    $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4581
+                    $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4582
+                    $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4583
+                    $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4584
+                    $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4585
+                    $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4586
+                    $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4587
+
4588
+                    $class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4589
+                    $output = "<$title_tag class='$class' >$title</$title_tag>";
4590
+                }
4591 4591
 
4592
-			}
4592
+            }
4593 4593
 
4594
-			return $output;
4595
-		}
4594
+            return $output;
4595
+        }
4596 4596
 
4597
-		/**
4598
-		 * Outputs the options form inputs for the widget.
4599
-		 *
4600
-		 * @param array $instance The widget options.
4601
-		 */
4602
-		public function form( $instance ) {
4597
+        /**
4598
+         * Outputs the options form inputs for the widget.
4599
+         *
4600
+         * @param array $instance The widget options.
4601
+         */
4602
+        public function form( $instance ) {
4603 4603
 
4604
-			// set widget instance
4605
-			$this->instance = $instance;
4604
+            // set widget instance
4605
+            $this->instance = $instance;
4606 4606
 
4607
-			// set it as a SD widget
4608
-			echo $this->widget_advanced_toggle();
4607
+            // set it as a SD widget
4608
+            echo $this->widget_advanced_toggle();
4609 4609
 
4610
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4611
-			$arguments_raw = $this->get_arguments();
4610
+            echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4611
+            $arguments_raw = $this->get_arguments();
4612 4612
 
4613
-			if ( is_array( $arguments_raw ) ) {
4613
+            if ( is_array( $arguments_raw ) ) {
4614 4614
 
4615
-				$arguments = $this->group_arguments( $arguments_raw );
4615
+                $arguments = $this->group_arguments( $arguments_raw );
4616 4616
 
4617
-				// Do we have sections?
4618
-				$has_sections = $arguments == $arguments_raw ? false : true;
4617
+                // Do we have sections?
4618
+                $has_sections = $arguments == $arguments_raw ? false : true;
4619 4619
 
4620 4620
 
4621
-				if ( $has_sections ) {
4622
-					$panel_count = 0;
4623
-					foreach ( $arguments as $key => $args ) {
4621
+                if ( $has_sections ) {
4622
+                    $panel_count = 0;
4623
+                    foreach ( $arguments as $key => $args ) {
4624 4624
 
4625
-						?>
4625
+                        ?>
4626 4626
 						<script>
4627 4627
 							//							jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle();
4628 4628
 						</script>
4629 4629
 						<?php
4630 4630
 
4631
-						$hide       = $panel_count ? ' style="display:none;" ' : '';
4632
-						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4633
-						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4634
-						echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4631
+                        $hide       = $panel_count ? ' style="display:none;" ' : '';
4632
+                        $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4633
+                        echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4634
+                        echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4635 4635
 
4636
-						foreach ( $args as $k => $a ) {
4636
+                        foreach ( $args as $k => $a ) {
4637 4637
 
4638
-							$this->widget_inputs_row_start($k, $a);
4639
-							$this->widget_inputs( $a, $instance );
4640
-							$this->widget_inputs_row_end($k, $a);
4638
+                            $this->widget_inputs_row_start($k, $a);
4639
+                            $this->widget_inputs( $a, $instance );
4640
+                            $this->widget_inputs_row_end($k, $a);
4641 4641
 
4642
-						}
4642
+                        }
4643 4643
 
4644
-						echo "</div>";
4644
+                        echo "</div>";
4645 4645
 
4646
-						$panel_count ++;
4646
+                        $panel_count ++;
4647 4647
 
4648
-					}
4649
-				} else {
4650
-					foreach ( $arguments as $key => $args ) {
4651
-						$this->widget_inputs_row_start($key, $args);
4652
-						$this->widget_inputs( $args, $instance );
4653
-						$this->widget_inputs_row_end($key, $args);
4654
-					}
4655
-				}
4648
+                    }
4649
+                } else {
4650
+                    foreach ( $arguments as $key => $args ) {
4651
+                        $this->widget_inputs_row_start($key, $args);
4652
+                        $this->widget_inputs( $args, $instance );
4653
+                        $this->widget_inputs_row_end($key, $args);
4654
+                    }
4655
+                }
4656 4656
 
4657
-			}
4658
-		}
4657
+            }
4658
+        }
4659 4659
 
4660
-		public function widget_inputs_row_start( $key, $args ) {
4661
-			if ( ! empty( $args['row'] ) ) {
4662
-				// Maybe open
4663
-				if ( ! empty( $args['row']['open'] ) ) {
4664
-					?>
4660
+        public function widget_inputs_row_start( $key, $args ) {
4661
+            if ( ! empty( $args['row'] ) ) {
4662
+                // Maybe open
4663
+                if ( ! empty( $args['row']['open'] ) ) {
4664
+                    ?>
4665 4665
 					<div class='bsui sd-argument' data-argument='<?php echo esc_attr( $args['row']['key'] ); ?>' data-element_require='<?php echo ( ! empty( $args['row']['element_require'] ) ? $this->convert_element_require( $args['row']['element_require'] ) : '' ); ?>'>
4666 4666
 					<?php if ( ! empty( $args['row']['title'] ) ) { ?>
4667 4667
 					<?php
4668
-						if ( isset( $args['row']['icon'] ) ) {
4669
-							$args['row']['icon'] = '';
4670
-						}
4671
-
4672
-						if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4673
-							$args['row']['device_type'] = $args['device_type'];
4674
-						}
4675
-					?>
4668
+                        if ( isset( $args['row']['icon'] ) ) {
4669
+                            $args['row']['icon'] = '';
4670
+                        }
4671
+
4672
+                        if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4673
+                            $args['row']['device_type'] = $args['device_type'];
4674
+                        }
4675
+                    ?>
4676 4676
 					<label class="mb-0"><?php echo $this->widget_field_title( $args['row'] ); ?><?php echo $this->widget_field_desc( $args['row'] ); ?></label>
4677 4677
 					<?php } ?>
4678 4678
 					<div class='row<?php echo ( ! empty( $args['row']['class'] ) ? ' ' . esc_attr( $args['row']['class'] ) : '' ); ?>'>
4679 4679
 					<div class='col pr-2'>
4680 4680
 					<?php
4681
-				} else if ( ! empty( $args['row']['close'] ) ) {
4682
-					echo "<div class='col pl-0 ps-0'>";
4683
-				} else {
4684
-					echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4685
-				}
4686
-			}
4687
-		}
4681
+                } else if ( ! empty( $args['row']['close'] ) ) {
4682
+                    echo "<div class='col pl-0 ps-0'>";
4683
+                } else {
4684
+                    echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4685
+                }
4686
+            }
4687
+        }
4688 4688
 
4689
-		public function widget_inputs_row_end( $key, $args ) {
4690
-			if ( ! empty( $args['row'] ) ) {
4691
-				// Maybe close
4692
-				if ( ! empty( $args['row']['close'] ) ) {
4693
-					echo "</div></div>";
4694
-				}
4695
-				echo "</div>";
4696
-			}
4697
-		}
4689
+        public function widget_inputs_row_end( $key, $args ) {
4690
+            if ( ! empty( $args['row'] ) ) {
4691
+                // Maybe close
4692
+                if ( ! empty( $args['row']['close'] ) ) {
4693
+                    echo "</div></div>";
4694
+                }
4695
+                echo "</div>";
4696
+            }
4697
+        }
4698 4698
 
4699
-		/**
4700
-		 * Get the hidden input that when added makes the advanced button show on widget settings.
4701
-		 *
4702
-		 * @return string
4703
-		 */
4704
-		public function widget_advanced_toggle() {
4699
+        /**
4700
+         * Get the hidden input that when added makes the advanced button show on widget settings.
4701
+         *
4702
+         * @return string
4703
+         */
4704
+        public function widget_advanced_toggle() {
4705 4705
 
4706
-			$output = '';
4707
-			if ( $this->block_show_advanced() ) {
4708
-				$val = 1;
4709
-			} else {
4710
-				$val = 0;
4711
-			}
4706
+            $output = '';
4707
+            if ( $this->block_show_advanced() ) {
4708
+                $val = 1;
4709
+            } else {
4710
+                $val = 0;
4711
+            }
4712 4712
 
4713
-			$output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4713
+            $output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4714 4714
 
4715
-			return $output;
4716
-		}
4715
+            return $output;
4716
+        }
4717 4717
 
4718
-		/**
4719
-		 * Convert require element.
4720
-		 *
4721
-		 * @param string $input Input element.
4722
-		 *
4723
-		 * @return string $output
4724
-		 *@since 1.0.0
4725
-		 *
4726
-		 */
4727
-		public function convert_element_require( $input ) {
4728
-			$input = str_replace( "'", '"', $input );// we only want double quotes
4729
-
4730
-			$output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4731
-				"jQuery(form).find('[data-argument=\"",
4732
-				"\"]').find('input,select,textarea').val()",
4733
-				"\"]').find('input:checked').val()"
4734
-			), $input ) );
4735
-
4736
-			return $output;
4737
-		}
4718
+        /**
4719
+         * Convert require element.
4720
+         *
4721
+         * @param string $input Input element.
4722
+         *
4723
+         * @return string $output
4724
+         *@since 1.0.0
4725
+         *
4726
+         */
4727
+        public function convert_element_require( $input ) {
4728
+            $input = str_replace( "'", '"', $input );// we only want double quotes
4738 4729
 
4739
-		/**
4740
-		 * Builds the inputs for the widget options.
4741
-		 *
4742
-		 * @param $args
4743
-		 * @param $instance
4744
-		 */
4745
-		public function widget_inputs( $args, $instance ) {
4746
-
4747
-			$class             = "";
4748
-			$element_require   = "";
4749
-			$custom_attributes = "";
4750
-
4751
-			// get value
4752
-			if ( isset( $instance[ $args['name'] ] ) ) {
4753
-				$value = $instance[ $args['name'] ];
4754
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4755
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4756
-			} else {
4757
-				$value = '';
4758
-			}
4730
+            $output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4731
+                "jQuery(form).find('[data-argument=\"",
4732
+                "\"]').find('input,select,textarea').val()",
4733
+                "\"]').find('input:checked').val()"
4734
+            ), $input ) );
4759 4735
 
4760
-			// get placeholder
4761
-			if ( ! empty( $args['placeholder'] ) ) {
4762
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4763
-			} else {
4764
-				$placeholder = '';
4765
-			}
4736
+            return $output;
4737
+        }
4766 4738
 
4767
-			// get if advanced
4768
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4769
-				$class .= " sd-advanced-setting ";
4770
-			}
4739
+        /**
4740
+         * Builds the inputs for the widget options.
4741
+         *
4742
+         * @param $args
4743
+         * @param $instance
4744
+         */
4745
+        public function widget_inputs( $args, $instance ) {
4746
+
4747
+            $class             = "";
4748
+            $element_require   = "";
4749
+            $custom_attributes = "";
4750
+
4751
+            // get value
4752
+            if ( isset( $instance[ $args['name'] ] ) ) {
4753
+                $value = $instance[ $args['name'] ];
4754
+            } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4755
+                $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4756
+            } else {
4757
+                $value = '';
4758
+            }
4771 4759
 
4772
-			// element_require
4773
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4774
-				$element_require = $args['element_require'];
4775
-			}
4760
+            // get placeholder
4761
+            if ( ! empty( $args['placeholder'] ) ) {
4762
+                $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4763
+            } else {
4764
+                $placeholder = '';
4765
+            }
4776 4766
 
4777
-			// custom_attributes
4778
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4779
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4780
-			}
4767
+            // get if advanced
4768
+            if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4769
+                $class .= " sd-advanced-setting ";
4770
+            }
4781 4771
 
4782
-			// before wrapper
4783
-			?>
4772
+            // element_require
4773
+            if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4774
+                $element_require = $args['element_require'];
4775
+            }
4776
+
4777
+            // custom_attributes
4778
+            if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4779
+                $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4780
+            }
4781
+
4782
+            // before wrapper
4783
+            ?>
4784 4784
 			<p class="sd-argument <?php echo esc_attr( $class ); ?>" data-argument='<?php echo esc_attr( $args['name'] ); ?>' data-element_require='<?php if ( $element_require ) { echo $this->convert_element_require( $element_require );} ?>'>
4785 4785
 			<?php
4786
-			switch ( $args['type'] ) {
4787
-				//array('text','password','number','email','tel','url','color')
4788
-				case "text":
4789
-				case "password":
4790
-				case "number":
4791
-				case "email":
4792
-				case "tel":
4793
-				case "url":
4794
-				case "color":
4795
-					?>
4786
+            switch ( $args['type'] ) {
4787
+                //array('text','password','number','email','tel','url','color')
4788
+                case "text":
4789
+                case "password":
4790
+                case "number":
4791
+                case "email":
4792
+                case "tel":
4793
+                case "url":
4794
+                case "color":
4795
+                    ?>
4796 4796
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4797 4797
 					<input <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="<?php echo esc_attr( $args['type'] ); ?>" value="<?php echo esc_attr( $value ); ?>">
4798 4798
 					<?php
4799 4799
 
4800
-					break;
4801
-				case "select":
4802
-					$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4803
-					if ( $multiple ) {
4804
-						if ( empty( $value ) ) {
4805
-							$value = array();
4806
-						}
4807
-					}
4808
-					?>
4800
+                    break;
4801
+                case "select":
4802
+                    $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4803
+                    if ( $multiple ) {
4804
+                        if ( empty( $value ) ) {
4805
+                            $value = array();
4806
+                        }
4807
+                    }
4808
+                    ?>
4809 4809
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4810 4810
 					<select <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); if ( $multiple ) { echo "[]"; } ?>"
4811 4811
 						<?php if ( $multiple ) {
4812
-							echo "multiple";
4813
-						} //@todo not implemented yet due to gutenberg not supporting it
4814
-						?>>
4812
+                            echo "multiple";
4813
+                        } //@todo not implemented yet due to gutenberg not supporting it
4814
+                        ?>>
4815 4815
 						<?php
4816 4816
 
4817
-						if ( ! empty( $args['options'] ) ) {
4818
-							foreach ( $args['options'] as $val => $label ) {
4819
-								if ( $multiple ) {
4820
-									$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4821
-								} else {
4822
-									$selected = selected( $value, $val, false );
4823
-								}
4824
-								echo "<option value='$val' " . $selected . ">$label</option>";
4825
-							}
4826
-						}
4827
-						?>
4817
+                        if ( ! empty( $args['options'] ) ) {
4818
+                            foreach ( $args['options'] as $val => $label ) {
4819
+                                if ( $multiple ) {
4820
+                                    $selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4821
+                                } else {
4822
+                                    $selected = selected( $value, $val, false );
4823
+                                }
4824
+                                echo "<option value='$val' " . $selected . ">$label</option>";
4825
+                            }
4826
+                        }
4827
+                        ?>
4828 4828
 					</select>
4829 4829
 					<?php
4830
-					break;
4831
-				case "checkbox":
4832
-					?>
4830
+                    break;
4831
+                case "checkbox":
4832
+                    ?>
4833 4833
 					<input <?php echo $placeholder; ?> <?php checked( 1, $value, true ) ?> <?php echo $custom_attributes; ?> class="widefat" id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="checkbox" value="1">
4834 4834
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4835 4835
 					<?php
4836
-					break;
4837
-				case "textarea":
4838
-					?>
4836
+                    break;
4837
+                case "textarea":
4838
+                    ?>
4839 4839
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4840 4840
 					<textarea <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>"><?php echo esc_attr( $value ); ?></textarea>
4841 4841
 					<?php
4842 4842
 
4843
-					break;
4844
-				case "hidden":
4845
-					?>
4843
+                    break;
4844
+                case "hidden":
4845
+                    ?>
4846 4846
 					<input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden" value="<?php echo esc_attr( $value ); ?>">
4847 4847
 					<?php
4848
-					break;
4849
-				default:
4850
-					echo "No input type found!"; // @todo we need to add more input types.
4851
-			}
4852
-			// after wrapper
4853
-			?></p><?php
4854
-		}
4848
+                    break;
4849
+                default:
4850
+                    echo "No input type found!"; // @todo we need to add more input types.
4851
+            }
4852
+            // after wrapper
4853
+            ?></p><?php
4854
+        }
4855 4855
 
4856
-		public function get_widget_icon($icon = 'box-top', $title = ''){
4857
-			if($icon=='box-top'){
4858
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4859
-			}elseif($icon=='box-right'){
4860
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4861
-			}elseif($icon=='box-bottom'){
4862
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4863
-			}elseif($icon=='box-left'){
4864
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4865
-			}
4866
-		}
4856
+        public function get_widget_icon($icon = 'box-top', $title = ''){
4857
+            if($icon=='box-top'){
4858
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4859
+            }elseif($icon=='box-right'){
4860
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4861
+            }elseif($icon=='box-bottom'){
4862
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4863
+            }elseif($icon=='box-left'){
4864
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4865
+            }
4866
+        }
4867 4867
 
4868
-		/**
4869
-		 * Get the widget input description html.
4870
-		 *
4871
-		 * @param $args
4872
-		 *
4873
-		 * @return string
4874
-		 * @todo, need to make its own tooltip script
4875
-		 */
4876
-		public function widget_field_desc( $args ) {
4877
-
4878
-			$description = '';
4879
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
4880
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4881
-					$description = $this->desc_tip( $args['desc'] );
4882
-				} else {
4883
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4884
-				}
4885
-			}
4868
+        /**
4869
+         * Get the widget input description html.
4870
+         *
4871
+         * @param $args
4872
+         *
4873
+         * @return string
4874
+         * @todo, need to make its own tooltip script
4875
+         */
4876
+        public function widget_field_desc( $args ) {
4877
+
4878
+            $description = '';
4879
+            if ( isset( $args['desc'] ) && $args['desc'] ) {
4880
+                if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4881
+                    $description = $this->desc_tip( $args['desc'] );
4882
+                } else {
4883
+                    $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4884
+                }
4885
+            }
4886 4886
 
4887
-			return $description;
4888
-		}
4887
+            return $description;
4888
+        }
4889 4889
 
4890
-		/**
4891
-		 * Get the widget input title html.
4892
-		 *
4893
-		 * @param $args
4894
-		 *
4895
-		 * @return string
4896
-		 */
4897
-		public function widget_field_title( $args ) {
4898
-			$title = '';
4899
-
4900
-			if ( isset( $args['title'] ) && $args['title'] ) {
4901
-				if ( ! empty( $args['device_type'] ) ) {
4902
-					$args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4903
-				}
4890
+        /**
4891
+         * Get the widget input title html.
4892
+         *
4893
+         * @param $args
4894
+         *
4895
+         * @return string
4896
+         */
4897
+        public function widget_field_title( $args ) {
4898
+            $title = '';
4904 4899
 
4905
-				if ( isset( $args['icon'] ) && $args['icon'] ) {
4906
-					$title = self::get_widget_icon( $args['icon'], $args['title']  );
4907
-				} else {
4908
-					$title = esc_attr( $args['title'] );
4909
-				}
4910
-			}
4900
+            if ( isset( $args['title'] ) && $args['title'] ) {
4901
+                if ( ! empty( $args['device_type'] ) ) {
4902
+                    $args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4903
+                }
4911 4904
 
4912
-			return $title;
4913
-		}
4905
+                if ( isset( $args['icon'] ) && $args['icon'] ) {
4906
+                    $title = self::get_widget_icon( $args['icon'], $args['title']  );
4907
+                } else {
4908
+                    $title = esc_attr( $args['title'] );
4909
+                }
4910
+            }
4914 4911
 
4915
-		/**
4916
-		 * Get the tool tip html.
4917
-		 *
4918
-		 * @param $tip
4919
-		 * @param bool $allow_html
4920
-		 *
4921
-		 * @return string
4922
-		 */
4923
-		function desc_tip( $tip, $allow_html = false ) {
4924
-			if ( $allow_html ) {
4925
-				$tip = $this->sanitize_tooltip( $tip );
4926
-			} else {
4927
-				$tip = esc_attr( $tip );
4928
-			}
4912
+            return $title;
4913
+        }
4929 4914
 
4930
-			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4931
-		}
4915
+        /**
4916
+         * Get the tool tip html.
4917
+         *
4918
+         * @param $tip
4919
+         * @param bool $allow_html
4920
+         *
4921
+         * @return string
4922
+         */
4923
+        function desc_tip( $tip, $allow_html = false ) {
4924
+            if ( $allow_html ) {
4925
+                $tip = $this->sanitize_tooltip( $tip );
4926
+            } else {
4927
+                $tip = esc_attr( $tip );
4928
+            }
4932 4929
 
4933
-		/**
4934
-		 * Sanitize a string destined to be a tooltip.
4935
-		 *
4936
-		 * @param string $var
4937
-		 *
4938
-		 * @return string
4939
-		 */
4940
-		public function sanitize_tooltip( $var ) {
4941
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4942
-				'br'     => array(),
4943
-				'em'     => array(),
4944
-				'strong' => array(),
4945
-				'small'  => array(),
4946
-				'span'   => array(),
4947
-				'ul'     => array(),
4948
-				'li'     => array(),
4949
-				'ol'     => array(),
4950
-				'p'      => array(),
4951
-			) ) );
4952
-		}
4930
+            return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4931
+        }
4953 4932
 
4954
-		/**
4955
-		 * Processing widget options on save
4956
-		 *
4957
-		 * @param array $new_instance The new options
4958
-		 * @param array $old_instance The previous options
4959
-		 *
4960
-		 * @return array
4961
-		 * @todo we should add some sanitation here.
4962
-		 */
4963
-		public function update( $new_instance, $old_instance ) {
4964
-
4965
-			//save the widget
4966
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
4967
-
4968
-			// set widget instance
4969
-			$this->instance = $instance;
4970
-
4971
-			if ( empty( $this->arguments ) ) {
4972
-				$this->get_arguments();
4973
-			}
4933
+        /**
4934
+         * Sanitize a string destined to be a tooltip.
4935
+         *
4936
+         * @param string $var
4937
+         *
4938
+         * @return string
4939
+         */
4940
+        public function sanitize_tooltip( $var ) {
4941
+            return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4942
+                'br'     => array(),
4943
+                'em'     => array(),
4944
+                'strong' => array(),
4945
+                'small'  => array(),
4946
+                'span'   => array(),
4947
+                'ul'     => array(),
4948
+                'li'     => array(),
4949
+                'ol'     => array(),
4950
+                'p'      => array(),
4951
+            ) ) );
4952
+        }
4974 4953
 
4975
-			// check for checkboxes
4976
-			if ( ! empty( $this->arguments ) ) {
4977
-				foreach ( $this->arguments as $argument ) {
4978
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4979
-						$instance[ $argument['name'] ] = '0';
4980
-					}
4981
-				}
4982
-			}
4954
+        /**
4955
+         * Processing widget options on save
4956
+         *
4957
+         * @param array $new_instance The new options
4958
+         * @param array $old_instance The previous options
4959
+         *
4960
+         * @return array
4961
+         * @todo we should add some sanitation here.
4962
+         */
4963
+        public function update( $new_instance, $old_instance ) {
4983 4964
 
4984
-			return $instance;
4985
-		}
4965
+            //save the widget
4966
+            $instance = array_merge( (array) $old_instance, (array) $new_instance );
4986 4967
 
4987
-		/**
4988
-		 * Checks if the current call is a ajax call to get the block content.
4989
-		 *
4990
-		 * This can be used in your widget to return different content as the block content.
4991
-		 *
4992
-		 * @return bool
4993
-		 *@since 1.0.3
4994
-		 */
4995
-		public function is_block_content_call() {
4996
-			$result = false;
4997
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4998
-				$result = true;
4999
-			}
4968
+            // set widget instance
4969
+            $this->instance = $instance;
5000 4970
 
5001
-			return $result;
5002
-		}
4971
+            if ( empty( $this->arguments ) ) {
4972
+                $this->get_arguments();
4973
+            }
5003 4974
 
5004
-		/**
5005
-		 * Get an instance hash that will be unique to the type and settings.
5006
-		 *
5007
-		 * @return string
5008
-		 *@since 1.0.20
5009
-		 */
5010
-		public function get_instance_hash(){
5011
-			$instance_string = $this->base_id.serialize($this->instance);
5012
-			return hash('crc32b',$instance_string);
5013
-		}
4975
+            // check for checkboxes
4976
+            if ( ! empty( $this->arguments ) ) {
4977
+                foreach ( $this->arguments as $argument ) {
4978
+                    if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4979
+                        $instance[ $argument['name'] ] = '0';
4980
+                    }
4981
+                }
4982
+            }
5014 4983
 
5015
-		/**
5016
-		 * Generate and return inline styles from CSS rules that will match the unique class of the instance.
5017
-		 *
5018
-		 * @param array $rules
5019
-		 *
5020
-		 * @return string
5021
-		 *@since 1.0.20
5022
-		 */
5023
-		public function get_instance_style($rules = array()){
5024
-			$css = '';
5025
-
5026
-			if(!empty($rules)){
5027
-				$rules = array_unique($rules);
5028
-				$instance_hash = $this->get_instance_hash();
5029
-				$css .= "<style>";
5030
-				foreach($rules as $rule){
5031
-					$css .= ".sdel-$instance_hash $rule";
5032
-				}
5033
-				$css .= "</style>";
5034
-			}
4984
+            return $instance;
4985
+        }
5035 4986
 
5036
-			return $css;
5037
-		}
4987
+        /**
4988
+         * Checks if the current call is a ajax call to get the block content.
4989
+         *
4990
+         * This can be used in your widget to return different content as the block content.
4991
+         *
4992
+         * @return bool
4993
+         *@since 1.0.3
4994
+         */
4995
+        public function is_block_content_call() {
4996
+            $result = false;
4997
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4998
+                $result = true;
4999
+            }
5000
+
5001
+            return $result;
5002
+        }
5038 5003
 
5039
-		/**
5040
-		 * Encode shortcodes tags.
5041
-		 *
5042
-		 * @param string $content Content to search for shortcode tags.
5043
-		 *
5004
+        /**
5005
+         * Get an instance hash that will be unique to the type and settings.
5006
+         *
5007
+         * @return string
5008
+         *@since 1.0.20
5009
+         */
5010
+        public function get_instance_hash(){
5011
+            $instance_string = $this->base_id.serialize($this->instance);
5012
+            return hash('crc32b',$instance_string);
5013
+        }
5014
+
5015
+        /**
5016
+         * Generate and return inline styles from CSS rules that will match the unique class of the instance.
5017
+         *
5018
+         * @param array $rules
5019
+         *
5020
+         * @return string
5021
+         *@since 1.0.20
5022
+         */
5023
+        public function get_instance_style($rules = array()){
5024
+            $css = '';
5025
+
5026
+            if(!empty($rules)){
5027
+                $rules = array_unique($rules);
5028
+                $instance_hash = $this->get_instance_hash();
5029
+                $css .= "<style>";
5030
+                foreach($rules as $rule){
5031
+                    $css .= ".sdel-$instance_hash $rule";
5032
+                }
5033
+                $css .= "</style>";
5034
+            }
5035
+
5036
+            return $css;
5037
+        }
5038
+
5039
+        /**
5040
+         * Encode shortcodes tags.
5041
+         *
5042
+         * @param string $content Content to search for shortcode tags.
5043
+         *
5044 5044
 *@return string Content with shortcode tags removed.
5045
-		 *@since 1.0.28
5046
-		 *
5047
-		 */
5048
-		public function encode_shortcodes( $content ) {
5049
-			// Avoids existing encoded tags.
5050
-			$trans   = array(
5051
-				'&#91;' => '&#091;',
5052
-				'&#93;' => '&#093;',
5053
-				'&amp;#91;' => '&#091;',
5054
-				'&amp;#93;' => '&#093;',
5055
-				'&lt;' => '&0lt;',
5056
-				'&gt;' => '&0gt;',
5057
-				'&amp;lt;' => '&0lt;',
5058
-				'&amp;gt;' => '&0gt;',
5059
-			);
5060
-
5061
-			$content = strtr( $content, $trans );
5062
-
5063
-			$trans   = array(
5064
-				'[' => '&#91;',
5065
-				']' => '&#93;',
5066
-				'<' => '&lt;',
5067
-				'>' => '&gt;',
5068
-				'"' => '&quot;',
5069
-				"'" => '&#39;',
5070
-			);
5071
-
5072
-			$content = strtr( $content, $trans );
5073
-
5074
-			return $content;
5075
-		}
5045
+         *@since 1.0.28
5046
+         *
5047
+         */
5048
+        public function encode_shortcodes( $content ) {
5049
+            // Avoids existing encoded tags.
5050
+            $trans   = array(
5051
+                '&#91;' => '&#091;',
5052
+                '&#93;' => '&#093;',
5053
+                '&amp;#91;' => '&#091;',
5054
+                '&amp;#93;' => '&#093;',
5055
+                '&lt;' => '&0lt;',
5056
+                '&gt;' => '&0gt;',
5057
+                '&amp;lt;' => '&0lt;',
5058
+                '&amp;gt;' => '&0gt;',
5059
+            );
5060
+
5061
+            $content = strtr( $content, $trans );
5062
+
5063
+            $trans   = array(
5064
+                '[' => '&#91;',
5065
+                ']' => '&#93;',
5066
+                '<' => '&lt;',
5067
+                '>' => '&gt;',
5068
+                '"' => '&quot;',
5069
+                "'" => '&#39;',
5070
+            );
5071
+
5072
+            $content = strtr( $content, $trans );
5073
+
5074
+            return $content;
5075
+        }
5076 5076
 
5077
-		/**
5078
-		 * Remove encoded shortcod tags.
5079
-		 *
5080
-		 * @param string $content Content to search for shortcode tags.
5081
-		 *
5077
+        /**
5078
+         * Remove encoded shortcod tags.
5079
+         *
5080
+         * @param string $content Content to search for shortcode tags.
5081
+         *
5082 5082
 *@return string Content with decoded shortcode tags.
5083
-		 *@since 1.0.28
5084
-		 *
5085
-		 */
5086
-		public function decode_shortcodes( $content ) {
5087
-			$trans   = array(
5088
-				'&#91;' => '[',
5089
-				'&#93;' => ']',
5090
-				'&amp;#91;' => '[',
5091
-				'&amp;#93;' => ']',
5092
-				'&lt;' => '<',
5093
-				'&gt;' => '>',
5094
-				'&amp;lt;' => '<',
5095
-				'&amp;gt;' => '>',
5096
-				'&quot;' => '"',
5097
-				'&apos;' => "'",
5098
-			);
5099
-
5100
-			$content = strtr( $content, $trans );
5101
-
5102
-			$trans   = array(
5103
-				'&#091;' => '&#91;',
5104
-				'&#093;' => '&#93;',
5105
-				'&amp;#091;' => '&#91;',
5106
-				'&amp;#093;' => '&#93;',
5107
-				'&0lt;' => '&lt;',
5108
-				'&0gt;' => '&gt;',
5109
-				'&amp;0lt;' => '&lt;',
5110
-				'&amp;0gt;' => '&gt;',
5111
-			);
5112
-
5113
-			$content = strtr( $content, $trans );
5114
-
5115
-			return $content;
5116
-		}
5117
-
5118
-		public function block_visibility_fields( $args ) {
5119
-			$value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5120
-			$content = '<div class="bs-vc-rule-template d-none">';
5121
-				$content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5122
-					$content .= '<div class="row">';
5123
-						$content .= '<div class="col-sm-12">';
5124
-							$content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5125
-							$content .= aui()->select(
5126
-								array(
5127
-									'id'          => 'bsvc_rule_BSVCINDEX',
5128
-									'name'        => 'bsvc_rule_BSVCINDEX',
5129
-									'label'       => __( 'Rule', 'ayecode-connect' ),
5130
-									'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5131
-									'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5132
-									'options'     => sd_visibility_rules_options(),
5133
-									'default'     => '',
5134
-									'value'       => '',
5135
-									'label_type'  => '',
5136
-									'select2'     => false,
5137
-									'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5138
-									'extra_attributes' => array(
5139
-										'data-minimum-results-for-search' => '-1'
5140
-									)
5141
-								)
5142
-							);
5143
-
5144
-						$content .= '</div>';
5145
-
5146
-						if ( class_exists( 'GeoDirectory' ) ) {
5147
-							$content .= '<div class="col-md-7 col-sm-12">';
5148
-
5149
-								$content .= aui()->select(
5150
-									array(
5151
-										'id'          => 'bsvc_gd_field_BSVCINDEX',
5152
-										'name'        => 'bsvc_gd_field_BSVCINDEX',
5153
-										'label'       => __( 'FIELD', 'ayecode-connect' ),
5154
-										'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5155
-										'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5156
-										'options'     => sd_visibility_gd_field_options(),
5157
-										'default'     => '',
5158
-										'value'       => '',
5159
-										'label_type'  => '',
5160
-										'select2'     => false,
5161
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5162
-										'extra_attributes' => array(
5163
-											'data-minimum-results-for-search' => '-1'
5164
-										)
5165
-									)
5166
-								);
5167
-
5168
-							$content .= '</div>';
5169
-							$content .= '<div class="col-md-5 col-sm-12">';
5170
-
5171
-								$content .= aui()->select(
5172
-									array(
5173
-										'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5174
-										'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5175
-										'label'       => __( 'CONDITION', 'ayecode-connect' ),
5176
-										'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5177
-										'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5178
-										'options'     => sd_visibility_field_condition_options(),
5179
-										'default'     => '',
5180
-										'value'       => '',
5181
-										'label_type'  => '',
5182
-										'select2'     => false,
5183
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5184
-										'extra_attributes' => array(
5185
-											'data-minimum-results-for-search' => '-1'
5186
-										)
5187
-									)
5188
-								);
5189
-
5190
-							$content .= '</div>';
5191
-							$content .= '<div class="col-sm-12">';
5192
-
5193
-								$content .= aui()->input(
5194
-									array(
5195
-										'type'            => 'text',
5196
-										'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5197
-										'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5198
-										'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5199
-										'class'           => 'bsvc_gd_field_search form-control-sm',
5200
-										'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5201
-										'label_type'      => '',
5202
-										'value'           => '',
5203
-										'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5204
-									)
5205
-								);
5083
+         *@since 1.0.28
5084
+         *
5085
+         */
5086
+        public function decode_shortcodes( $content ) {
5087
+            $trans   = array(
5088
+                '&#91;' => '[',
5089
+                '&#93;' => ']',
5090
+                '&amp;#91;' => '[',
5091
+                '&amp;#93;' => ']',
5092
+                '&lt;' => '<',
5093
+                '&gt;' => '>',
5094
+                '&amp;lt;' => '<',
5095
+                '&amp;gt;' => '>',
5096
+                '&quot;' => '"',
5097
+                '&apos;' => "'",
5098
+            );
5099
+
5100
+            $content = strtr( $content, $trans );
5101
+
5102
+            $trans   = array(
5103
+                '&#091;' => '&#91;',
5104
+                '&#093;' => '&#93;',
5105
+                '&amp;#091;' => '&#91;',
5106
+                '&amp;#093;' => '&#93;',
5107
+                '&0lt;' => '&lt;',
5108
+                '&0gt;' => '&gt;',
5109
+                '&amp;0lt;' => '&lt;',
5110
+                '&amp;0gt;' => '&gt;',
5111
+            );
5112
+
5113
+            $content = strtr( $content, $trans );
5114
+
5115
+            return $content;
5116
+        }
5206 5117
 
5207
-							$content .= '</div>';
5208
-						}
5118
+        public function block_visibility_fields( $args ) {
5119
+            $value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5120
+            $content = '<div class="bs-vc-rule-template d-none">';
5121
+                $content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5122
+                    $content .= '<div class="row">';
5123
+                        $content .= '<div class="col-sm-12">';
5124
+                            $content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5125
+                            $content .= aui()->select(
5126
+                                array(
5127
+                                    'id'          => 'bsvc_rule_BSVCINDEX',
5128
+                                    'name'        => 'bsvc_rule_BSVCINDEX',
5129
+                                    'label'       => __( 'Rule', 'ayecode-connect' ),
5130
+                                    'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5131
+                                    'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5132
+                                    'options'     => sd_visibility_rules_options(),
5133
+                                    'default'     => '',
5134
+                                    'value'       => '',
5135
+                                    'label_type'  => '',
5136
+                                    'select2'     => false,
5137
+                                    'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5138
+                                    'extra_attributes' => array(
5139
+                                        'data-minimum-results-for-search' => '-1'
5140
+                                    )
5141
+                                )
5142
+                            );
5143
+
5144
+                        $content .= '</div>';
5145
+
5146
+                        if ( class_exists( 'GeoDirectory' ) ) {
5147
+                            $content .= '<div class="col-md-7 col-sm-12">';
5148
+
5149
+                                $content .= aui()->select(
5150
+                                    array(
5151
+                                        'id'          => 'bsvc_gd_field_BSVCINDEX',
5152
+                                        'name'        => 'bsvc_gd_field_BSVCINDEX',
5153
+                                        'label'       => __( 'FIELD', 'ayecode-connect' ),
5154
+                                        'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5155
+                                        'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5156
+                                        'options'     => sd_visibility_gd_field_options(),
5157
+                                        'default'     => '',
5158
+                                        'value'       => '',
5159
+                                        'label_type'  => '',
5160
+                                        'select2'     => false,
5161
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5162
+                                        'extra_attributes' => array(
5163
+                                            'data-minimum-results-for-search' => '-1'
5164
+                                        )
5165
+                                    )
5166
+                                );
5167
+
5168
+                            $content .= '</div>';
5169
+                            $content .= '<div class="col-md-5 col-sm-12">';
5170
+
5171
+                                $content .= aui()->select(
5172
+                                    array(
5173
+                                        'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5174
+                                        'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5175
+                                        'label'       => __( 'CONDITION', 'ayecode-connect' ),
5176
+                                        'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5177
+                                        'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5178
+                                        'options'     => sd_visibility_field_condition_options(),
5179
+                                        'default'     => '',
5180
+                                        'value'       => '',
5181
+                                        'label_type'  => '',
5182
+                                        'select2'     => false,
5183
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5184
+                                        'extra_attributes' => array(
5185
+                                            'data-minimum-results-for-search' => '-1'
5186
+                                        )
5187
+                                    )
5188
+                                );
5189
+
5190
+                            $content .= '</div>';
5191
+                            $content .= '<div class="col-sm-12">';
5192
+
5193
+                                $content .= aui()->input(
5194
+                                    array(
5195
+                                        'type'            => 'text',
5196
+                                        'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5197
+                                        'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5198
+                                        'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5199
+                                        'class'           => 'bsvc_gd_field_search form-control-sm',
5200
+                                        'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5201
+                                        'label_type'      => '',
5202
+                                        'value'           => '',
5203
+                                        'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5204
+                                    )
5205
+                                );
5206
+
5207
+                            $content .= '</div>';
5208
+                        }
5209 5209
 
5210 5210
                         $content .= apply_filters( 'sd_block_visibility_fields', '', $args );
5211 5211
 
5212
-					$content .= '</div>';
5213
-
5214
-					$content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5215
-						$role_options = sd_user_roles_options();
5216
-
5217
-						$role_option_i = 0;
5218
-						foreach ( $role_options as $role_option_key => $role_option_name ) {
5219
-							$role_option_i++;
5220
-
5221
-							$content .= '<div class="col-sm-6">';
5222
-							$content .= aui()->input(
5223
-								array(
5224
-									'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5225
-									'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5226
-									'type'             => 'checkbox',
5227
-									'label'            => $role_option_name,
5228
-									'label_type'       => 'hidden',
5229
-									'class'            => 'bsvc_user_roles',
5230
-									'value'            => $role_option_key,
5231
-									'switch'           => 'md',
5232
-									'no_wrap'          => true
5233
-								)
5234
-							);
5235
-							$content .= '</div>';
5236
-						}
5237
-					$content .= '</div>';
5238
-					$content .= '<div class="bs-vc-sep-wrap text-center position-absolute top-0 mt-n3"><div class="bs-vc-sep-cond d-inline-block badge text-dark bg-gray mt-1">' . esc_html__( 'AND', 'ayecode-connect' ) . '</div></div>';
5239
-				$content .= '</div>';
5240
-			$content .= '</div>';
5241
-			$content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5242
-			$content .= '<div class="bs-vc-rule-sets"></div>';
5243
-			$content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5244
-			$content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5245
-			$content .= aui()->select(
5246
-				array(
5247
-					'id'          => 'bsvc_output',
5248
-					'name'        => 'bsvc_output',
5249
-					'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5250
-					'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5251
-					'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5252
-					'options'     => sd_visibility_output_options(),
5253
-					'default'     => '',
5254
-					'value'       => '',
5255
-					'label_type'  => 'top',
5256
-					'select2'     => false,
5257
-					'extra_attributes' => array(
5258
-						'data-minimum-results-for-search' => '-1'
5259
-					)
5260
-				)
5261
-			);
5262
-
5263
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5264
-
5265
-			$content .= aui()->select(
5266
-				array(
5267
-					'id'              => 'bsvc_page',
5268
-					'name'            => 'bsvc_page',
5269
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5270
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5271
-					'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5272
-					'options'         => sd_template_page_options(),
5273
-					'default'         => '',
5274
-					'value'           => '',
5275
-					'label_type'      => 'top',
5276
-					'select2'         => false,
5277
-					'element_require' => '[%bsvc_output%]=="page"'
5278
-				)
5279
-			);
5280
-
5281
-			$content .= aui()->select(
5282
-				array(
5283
-					'id'          => 'bsvc_tmpl_part',
5284
-					'name'        => 'bsvc_tmpl_part',
5285
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5286
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5287
-					'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5288
-					'options'     => sd_template_part_options(),
5289
-					'default'     => '',
5290
-					'value'       => '',
5291
-					'label_type'  => 'top',
5292
-					'select2'     => false,
5293
-					'element_require'  => '[%bsvc_output%]=="template_part"',
5294
-					'extra_attributes' => array(
5295
-						'data-minimum-results-for-search' => '-1'
5296
-					)
5297
-				)
5298
-			);
5299
-
5300
-			$content .= aui()->select(
5301
-				array(
5302
-					'id'               => 'bsvc_message_type',
5303
-					'name'             => 'bsvc_message_type',
5304
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5305
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5306
-					'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5307
-					'options'          => sd_aui_colors(),
5308
-					'default'          => '',
5309
-					'value'            => '',
5310
-					'label_type'       => 'top',
5311
-					'select2'          => false,
5312
-					'element_require'  => '[%bsvc_output%]=="message"',
5313
-					'extra_attributes' => array(
5314
-						'data-minimum-results-for-search' => '-1'
5315
-					)
5316
-				)
5317
-			);
5318
-
5319
-			$content .= '</div><div class="col-sm-12">';
5320
-
5321
-			$content .= aui()->input(
5322
-				array(
5323
-					'type'            => 'text',
5324
-					'id'              => 'bsvc_message',
5325
-					'name'            => 'bsvc_message',
5326
-					'label'           => '',
5327
-					'class'           => 'bsvc_message form-control-sm mb-3',
5328
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5329
-					'label_type'      => '',
5330
-					'value'           => '',
5331
-					'form_group_class' => ' ',
5332
-					'element_require' => '[%bsvc_output%]=="message"',
5333
-				)
5334
-			);
5335
-
5336
-			$content .= '</div></div><div class="row"><div class="col col-12"><div class="pt-3 mt-1 border-top"></div></div><div class="col-md-6 col-sm-12">';
5337
-			$content .= aui()->select(
5338
-				array(
5339
-					'id'          => 'bsvc_output_n',
5340
-					'name'        => 'bsvc_output_n',
5341
-					'label'       => __( 'What should happen if rules NOT met.', 'ayecode-connect' ),
5342
-					'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5343
-					'class'       => 'bsvc_output_n form-select-sm no-select2 mw-100',
5344
-					'options'     => sd_visibility_output_options(),
5345
-					'default'     => '',
5346
-					'value'       => '',
5347
-					'label_type'  => 'top',
5348
-					'select2'     => false,
5349
-					'extra_attributes' => array(
5350
-						'data-minimum-results-for-search' => '-1'
5351
-					)
5352
-				)
5353
-			);
5354
-
5355
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5356
-
5357
-			$content .= aui()->select(
5358
-				array(
5359
-					'id'              => 'bsvc_page_n',
5360
-					'name'            => 'bsvc_page_n',
5361
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5362
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5363
-					'class'           => 'bsvc_page_n form-select-sm no-select2 mw-100',
5364
-					'options'         => sd_template_page_options(),
5365
-					'default'         => '',
5366
-					'value'           => '',
5367
-					'label_type'      => 'top',
5368
-					'select2'         => false,
5369
-					'element_require' => '[%bsvc_output_n%]=="page"'
5370
-				)
5371
-			);
5372
-
5373
-			$content .= aui()->select(
5374
-				array(
5375
-					'id'          => 'bsvc_tmpl_part_n',
5376
-					'name'        => 'bsvc_tmpl_part_n',
5377
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5378
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5379
-					'class'       => 'bsvc_tmpl_part_n form-select-sm no-select2 mw-100',
5380
-					'options'     => sd_template_part_options(),
5381
-					'default'     => '',
5382
-					'value'       => '',
5383
-					'label_type'  => 'top',
5384
-					'select2'     => false,
5385
-					'element_require'  => '[%bsvc_output_n%]=="template_part"',
5386
-					'extra_attributes' => array(
5387
-						'data-minimum-results-for-search' => '-1'
5388
-					)
5389
-				)
5390
-			);
5391
-
5392
-			$content .= aui()->select(
5393
-				array(
5394
-					'id'               => 'bsvc_message_type_n',
5395
-					'name'             => 'bsvc_message_type_n',
5396
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5397
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5398
-					'class'            => 'bsvc_message_type_n form-select-sm no-select2 mw-100',
5399
-					'options'          => sd_aui_colors(),
5400
-					'default'          => '',
5401
-					'value'            => '',
5402
-					'label_type'       => 'top',
5403
-					'select2'          => false,
5404
-					'element_require'  => '[%bsvc_output_n%]=="message"',
5405
-					'extra_attributes' => array(
5406
-						'data-minimum-results-for-search' => '-1'
5407
-					)
5408
-				)
5409
-			);
5410
-
5411
-			$content .= '</div><div class="col-sm-12">';
5412
-
5413
-			$content .= aui()->input(
5414
-				array(
5415
-					'type'            => 'text',
5416
-					'id'              => 'bsvc_message_n',
5417
-					'name'            => 'bsvc_message_n',
5418
-					'label'           => '',
5419
-					'class'           => 'bsvc_message_n form-control-sm',
5420
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5421
-					'label_type'      => '',
5422
-					'value'           => '',
5423
-					'form_group_class' => ' ',
5424
-					'element_require' => '[%bsvc_output_n%]=="message"',
5425
-				)
5426
-			);
5427
-
5428
-			$content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5429
-
5430
-			return $content;
5431
-		}
5212
+                    $content .= '</div>';
5213
+
5214
+                    $content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5215
+                        $role_options = sd_user_roles_options();
5216
+
5217
+                        $role_option_i = 0;
5218
+                        foreach ( $role_options as $role_option_key => $role_option_name ) {
5219
+                            $role_option_i++;
5220
+
5221
+                            $content .= '<div class="col-sm-6">';
5222
+                            $content .= aui()->input(
5223
+                                array(
5224
+                                    'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5225
+                                    'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5226
+                                    'type'             => 'checkbox',
5227
+                                    'label'            => $role_option_name,
5228
+                                    'label_type'       => 'hidden',
5229
+                                    'class'            => 'bsvc_user_roles',
5230
+                                    'value'            => $role_option_key,
5231
+                                    'switch'           => 'md',
5232
+                                    'no_wrap'          => true
5233
+                                )
5234
+                            );
5235
+                            $content .= '</div>';
5236
+                        }
5237
+                    $content .= '</div>';
5238
+                    $content .= '<div class="bs-vc-sep-wrap text-center position-absolute top-0 mt-n3"><div class="bs-vc-sep-cond d-inline-block badge text-dark bg-gray mt-1">' . esc_html__( 'AND', 'ayecode-connect' ) . '</div></div>';
5239
+                $content .= '</div>';
5240
+            $content .= '</div>';
5241
+            $content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5242
+            $content .= '<div class="bs-vc-rule-sets"></div>';
5243
+            $content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5244
+            $content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5245
+            $content .= aui()->select(
5246
+                array(
5247
+                    'id'          => 'bsvc_output',
5248
+                    'name'        => 'bsvc_output',
5249
+                    'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5250
+                    'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5251
+                    'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5252
+                    'options'     => sd_visibility_output_options(),
5253
+                    'default'     => '',
5254
+                    'value'       => '',
5255
+                    'label_type'  => 'top',
5256
+                    'select2'     => false,
5257
+                    'extra_attributes' => array(
5258
+                        'data-minimum-results-for-search' => '-1'
5259
+                    )
5260
+                )
5261
+            );
5262
+
5263
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5264
+
5265
+            $content .= aui()->select(
5266
+                array(
5267
+                    'id'              => 'bsvc_page',
5268
+                    'name'            => 'bsvc_page',
5269
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5270
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5271
+                    'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5272
+                    'options'         => sd_template_page_options(),
5273
+                    'default'         => '',
5274
+                    'value'           => '',
5275
+                    'label_type'      => 'top',
5276
+                    'select2'         => false,
5277
+                    'element_require' => '[%bsvc_output%]=="page"'
5278
+                )
5279
+            );
5280
+
5281
+            $content .= aui()->select(
5282
+                array(
5283
+                    'id'          => 'bsvc_tmpl_part',
5284
+                    'name'        => 'bsvc_tmpl_part',
5285
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5286
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5287
+                    'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5288
+                    'options'     => sd_template_part_options(),
5289
+                    'default'     => '',
5290
+                    'value'       => '',
5291
+                    'label_type'  => 'top',
5292
+                    'select2'     => false,
5293
+                    'element_require'  => '[%bsvc_output%]=="template_part"',
5294
+                    'extra_attributes' => array(
5295
+                        'data-minimum-results-for-search' => '-1'
5296
+                    )
5297
+                )
5298
+            );
5299
+
5300
+            $content .= aui()->select(
5301
+                array(
5302
+                    'id'               => 'bsvc_message_type',
5303
+                    'name'             => 'bsvc_message_type',
5304
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5305
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5306
+                    'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5307
+                    'options'          => sd_aui_colors(),
5308
+                    'default'          => '',
5309
+                    'value'            => '',
5310
+                    'label_type'       => 'top',
5311
+                    'select2'          => false,
5312
+                    'element_require'  => '[%bsvc_output%]=="message"',
5313
+                    'extra_attributes' => array(
5314
+                        'data-minimum-results-for-search' => '-1'
5315
+                    )
5316
+                )
5317
+            );
5318
+
5319
+            $content .= '</div><div class="col-sm-12">';
5320
+
5321
+            $content .= aui()->input(
5322
+                array(
5323
+                    'type'            => 'text',
5324
+                    'id'              => 'bsvc_message',
5325
+                    'name'            => 'bsvc_message',
5326
+                    'label'           => '',
5327
+                    'class'           => 'bsvc_message form-control-sm mb-3',
5328
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5329
+                    'label_type'      => '',
5330
+                    'value'           => '',
5331
+                    'form_group_class' => ' ',
5332
+                    'element_require' => '[%bsvc_output%]=="message"',
5333
+                )
5334
+            );
5335
+
5336
+            $content .= '</div></div><div class="row"><div class="col col-12"><div class="pt-3 mt-1 border-top"></div></div><div class="col-md-6 col-sm-12">';
5337
+            $content .= aui()->select(
5338
+                array(
5339
+                    'id'          => 'bsvc_output_n',
5340
+                    'name'        => 'bsvc_output_n',
5341
+                    'label'       => __( 'What should happen if rules NOT met.', 'ayecode-connect' ),
5342
+                    'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5343
+                    'class'       => 'bsvc_output_n form-select-sm no-select2 mw-100',
5344
+                    'options'     => sd_visibility_output_options(),
5345
+                    'default'     => '',
5346
+                    'value'       => '',
5347
+                    'label_type'  => 'top',
5348
+                    'select2'     => false,
5349
+                    'extra_attributes' => array(
5350
+                        'data-minimum-results-for-search' => '-1'
5351
+                    )
5352
+                )
5353
+            );
5354
+
5355
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5356
+
5357
+            $content .= aui()->select(
5358
+                array(
5359
+                    'id'              => 'bsvc_page_n',
5360
+                    'name'            => 'bsvc_page_n',
5361
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5362
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5363
+                    'class'           => 'bsvc_page_n form-select-sm no-select2 mw-100',
5364
+                    'options'         => sd_template_page_options(),
5365
+                    'default'         => '',
5366
+                    'value'           => '',
5367
+                    'label_type'      => 'top',
5368
+                    'select2'         => false,
5369
+                    'element_require' => '[%bsvc_output_n%]=="page"'
5370
+                )
5371
+            );
5372
+
5373
+            $content .= aui()->select(
5374
+                array(
5375
+                    'id'          => 'bsvc_tmpl_part_n',
5376
+                    'name'        => 'bsvc_tmpl_part_n',
5377
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5378
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5379
+                    'class'       => 'bsvc_tmpl_part_n form-select-sm no-select2 mw-100',
5380
+                    'options'     => sd_template_part_options(),
5381
+                    'default'     => '',
5382
+                    'value'       => '',
5383
+                    'label_type'  => 'top',
5384
+                    'select2'     => false,
5385
+                    'element_require'  => '[%bsvc_output_n%]=="template_part"',
5386
+                    'extra_attributes' => array(
5387
+                        'data-minimum-results-for-search' => '-1'
5388
+                    )
5389
+                )
5390
+            );
5391
+
5392
+            $content .= aui()->select(
5393
+                array(
5394
+                    'id'               => 'bsvc_message_type_n',
5395
+                    'name'             => 'bsvc_message_type_n',
5396
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5397
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5398
+                    'class'            => 'bsvc_message_type_n form-select-sm no-select2 mw-100',
5399
+                    'options'          => sd_aui_colors(),
5400
+                    'default'          => '',
5401
+                    'value'            => '',
5402
+                    'label_type'       => 'top',
5403
+                    'select2'          => false,
5404
+                    'element_require'  => '[%bsvc_output_n%]=="message"',
5405
+                    'extra_attributes' => array(
5406
+                        'data-minimum-results-for-search' => '-1'
5407
+                    )
5408
+                )
5409
+            );
5410
+
5411
+            $content .= '</div><div class="col-sm-12">';
5412
+
5413
+            $content .= aui()->input(
5414
+                array(
5415
+                    'type'            => 'text',
5416
+                    'id'              => 'bsvc_message_n',
5417
+                    'name'            => 'bsvc_message_n',
5418
+                    'label'           => '',
5419
+                    'class'           => 'bsvc_message_n form-control-sm',
5420
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5421
+                    'label_type'      => '',
5422
+                    'value'           => '',
5423
+                    'form_group_class' => ' ',
5424
+                    'element_require' => '[%bsvc_output_n%]=="message"',
5425
+                )
5426
+            );
5427
+
5428
+            $content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5429
+
5430
+            return $content;
5431
+        }
5432 5432
 
5433
-		/**
5434
-		 * Handle media_buttons hook.
5435
-		 *
5436
-		 * @since 1.2.7
5437
-		 */
5438
-		public function wp_media_buttons() {
5439
-			global $shortcode_insert_button_once;
5440
-
5441
-			// Fix conflicts with UpSolution Core in header template edit element.
5442
-			if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5443
-				$shortcode_insert_button_once = true;
5444
-			}
5445
-		}
5446
-	}
5433
+        /**
5434
+         * Handle media_buttons hook.
5435
+         *
5436
+         * @since 1.2.7
5437
+         */
5438
+        public function wp_media_buttons() {
5439
+            global $shortcode_insert_button_once;
5440
+
5441
+            // Fix conflicts with UpSolution Core in header template edit element.
5442
+            if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5443
+                $shortcode_insert_button_once = true;
5444
+            }
5445
+        }
5446
+    }
5447 5447
 }
Please login to merge, or discard this patch.
invoicing.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.8.22' );
26
+    define( 'WPINV_VERSION', '2.8.22' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +615 added lines, -615 removed lines patch added patch discarded remove patch
@@ -14,619 +14,619 @@
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * @var array An array of payment gateways.
40
-	 */
41
-	public $gateways;
42
-
43
-	/**
44
-	 * Class constructor.
45
-	 */
46
-	public function __construct() {
47
-		$this->define_constants();
48
-		$this->includes();
49
-		$this->init_hooks();
50
-		$this->set_properties();
51
-	}
52
-
53
-	/**
54
-	 * Sets a custom data property.
55
-	 *
56
-	 * @param string $prop The prop to set.
57
-	 * @param mixed $value The value to retrieve.
58
-	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
61
-	}
62
-
63
-	/**
64
-	 * Gets a custom data property.
65
-	 *
66
-	 * @param string $prop The prop to set.
67
-	 * @return mixed The value.
68
-	 */
69
-	public function get( $prop ) {
70
-		if ( isset( $this->data[ $prop ] ) ) {
71
-			return $this->data[ $prop ];
72
-		}
73
-
74
-		return null;
75
-	}
76
-
77
-	/**
78
-	 * Define class properties.
79
-	 */
80
-	public function set_properties() {
81
-		// Sessions.
82
-		$this->set( 'session', new WPInv_Session_Handler() );
83
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
-		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
-
86
-		// Init other objects.
87
-		$this->set( 'notes', new WPInv_Notes() );
88
-		$this->set( 'api', new WPInv_API() );
89
-		$this->set( 'post_types', new GetPaid_Post_Types() );
90
-		$this->set( 'template', new GetPaid_Template() );
91
-		$this->set( 'admin', new GetPaid_Admin() );
92
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
93
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
-	}
99
-
100
-	 /**
101
-	 * Define plugin constants.
102
-	 */
103
-	public function define_constants() {
104
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
-		$this->version = WPINV_VERSION;
107
-	}
108
-
109
-	/**
110
-	 * Hook into actions and filters.
111
-	 *
112
-	 * @since 1.0.19
113
-	 */
114
-	protected function init_hooks() {
115
-		/* Internationalize the text strings used. */
116
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
-
118
-		// Init the plugin after WordPress inits.
119
-		add_action( 'init', array( $this, 'init' ), 1 );
120
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
121
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
122
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
-		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
-		add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
-		add_action( 'wp_head', array( $this, 'wp_head' ) );
126
-		add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
-		add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
-
131
-		add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
-		add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
-		add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
-
135
-		// Fires after registering actions.
136
-		do_action( 'wpinv_actions', $this );
137
-		do_action( 'getpaid_actions', $this );
138
-	}
139
-
140
-	public function plugins_loaded() {
141
-		/* Internationalize the text strings used. */
142
-		$this->load_textdomain();
143
-
144
-		do_action( 'wpinv_loaded' );
145
-
146
-		// Fix oxygen page builder conflict
147
-		if ( function_exists( 'ct_css_output' ) ) {
148
-			wpinv_oxygen_fix_conflict();
149
-		}
150
-	}
151
-
152
-	/**
153
-	 * Load Localisation files.
154
-	 *
155
-	 * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
-	 *
157
-	 * Locales found in:
158
-	 *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
-	 *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
-	 *
161
-	 * @since 1.0.0
162
-	 */
163
-	public function load_textdomain() {
164
-		// Determines the current locale.
165
-		if ( function_exists( 'determine_locale' ) ) {
166
-			$locale = determine_locale();
167
-		} else if ( function_exists( 'get_user_locale' ) ) {
168
-			$locale = get_user_locale();
169
-		} else {
170
-			$locale = get_locale();
171
-		}
172
-
173
-		/**
174
-		 * Filter the locale to use for translations.
175
-		 */
176
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
-
178
-		unload_textdomain( 'invoicing', true );
179
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
-		load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
-	}
182
-
183
-	/**
184
-	 * Include required core files used in admin and on the frontend.
185
-	 */
186
-	public function includes() {
187
-		// Start with the settings.
188
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
-
190
-		// Packages/libraries.
191
-		require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
-		require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
-
194
-		// Load functions.
195
-		require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
-		require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
-		require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
-		require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
-		require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
-
211
-		// Register autoloader.
212
-		try {
213
-			spl_autoload_register( array( $this, 'autoload' ), true );
214
-		} catch ( Exception $e ) {
215
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
-		}
217
-
218
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
-		require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
-		require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
-		require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
-		require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
-		require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
-
241
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
-			GetPaid_Post_Types_Admin::init();
243
-
244
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
-			// load the user class only on the users.php page
251
-			global $pagenow;
252
-			if ( $pagenow == 'users.php' ) {
253
-				new WPInv_Admin_Users();
254
-			}
255
-		}
256
-
257
-		// Register cli commands
258
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
-			require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
-		}
262
-	}
263
-
264
-	/**
265
-	 * Class autoloader
266
-	 *
267
-	 * @param       string $class_name The name of the class to load.
268
-	 * @access      public
269
-	 * @since       1.0.19
270
-	 * @return      void
271
-	 */
272
-	public function autoload( $class_name ) {
273
-		// Normalize the class name...
274
-		$class_name  = strtolower( $class_name );
275
-
276
-		// ... and make sure it is our class.
277
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
-			return;
279
-		}
280
-
281
-		// Next, prepare the file name from the class.
282
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
-
284
-		// Base path of the classes.
285
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
-
287
-		// And an array of possible locations in order of importance.
288
-		$locations = array(
289
-			"$plugin_path/includes",
290
-			"$plugin_path/includes/data-stores",
291
-			"$plugin_path/includes/gateways",
292
-			"$plugin_path/includes/payments",
293
-			"$plugin_path/includes/geolocation",
294
-			"$plugin_path/includes/reports",
295
-			"$plugin_path/includes/api",
296
-			"$plugin_path/includes/admin",
297
-			"$plugin_path/includes/admin/meta-boxes",
298
-		);
299
-
300
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
-				include trailingslashit( $location ) . $file_name;
303
-				break;
304
-			}
305
-		}
306
-	}
307
-
308
-	/**
309
-	 * Inits hooks etc.
310
-	 */
311
-	public function init() {
312
-		// Fires before getpaid inits.
313
-		do_action( 'before_getpaid_init', $this );
314
-
315
-		// Maybe upgrade.
316
-		$this->maybe_upgrade_database();
317
-
318
-		// Load default gateways.
319
-		$gateways = apply_filters(
320
-			'getpaid_default_gateways',
321
-			array(
322
-				'manual'        => 'GetPaid_Manual_Gateway',
323
-				'paypal'        => 'GetPaid_Paypal_Gateway',
324
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
-			)
328
-		);
329
-
330
-		foreach ( $gateways as $id => $class ) {
331
-			$this->gateways[ $id ] = new $class();
332
-		}
333
-
334
-		if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
-			GetPaid_Installer::rename_gateways_label();
336
-			update_option( 'wpinv_renamed_gateways', 'yes' );
337
-		}
338
-
339
-		// Fires after getpaid inits.
340
-		do_action( 'getpaid_init', $this );
341
-	}
342
-
343
-	/**
344
-	 * Checks if this is an IPN request and processes it.
345
-	 */
346
-	public function maybe_process_ipn() {
347
-		// Ensure that this is an IPN request.
348
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
-			return;
350
-		}
351
-
352
-		$gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
-
354
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
355
-		do_action( "wpinv_verify_{$gateway}_ipn" );
356
-		exit;
357
-	}
358
-
359
-	public function enqueue_scripts() {
360
-		// Fires before adding scripts.
361
-		do_action( 'getpaid_enqueue_scripts' );
362
-
363
-		$localize                         = array();
364
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
-		$localize['thousands']            = wpinv_thousands_separator();
366
-		$localize['decimals']             = wpinv_decimal_separator();
367
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
-		$localize['UseTaxes']             = wpinv_use_taxes();
370
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
-		$localize['loading']              = __( 'Loading...', 'invoicing' );
372
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
-		$localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
-
375
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
-
377
-		// reCaptcha.
378
-		if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
-			wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
-		}
381
-
382
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
-	}
385
-
386
-	public function wpinv_actions() {
387
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
388
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
-		}
390
-
391
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
-		}
394
-	}
395
-
396
-	/**
397
-	 * Fires an action after verifying that a user can fire them.
398
-	 *
399
-	 * Note: If the action is on an invoice, subscription etc, esure that the
400
-	 * current user owns the invoice/subscription.
401
-	 */
402
-	public function maybe_do_authenticated_action() {
403
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
-			$data = wp_unslash( $_REQUEST );
406
-
407
-			if ( is_user_logged_in() ) {
408
-				do_action( "getpaid_authenticated_action_$key", $data );
409
-			}
410
-
411
-			do_action( "getpaid_unauthenticated_action_$key", $data );
412
-		}
413
-	}
414
-
415
-	public function pre_get_posts( $wp_query ) {
416
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
417
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
-		}
419
-
420
-		return $wp_query;
421
-	}
422
-
423
-	/**
424
-	 * Register widgets
425
-	 *
426
-	 */
427
-	public function register_widgets() {
428
-		global $pagenow;
429
-
430
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
431
-		// So we disable our widgets when editing a page with UX Builder.
432
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
-			return;
434
-		}
435
-
436
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
-
438
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
-			// don't initiate in these conditions.
440
-		} else {
441
-			// Only load allowed widgets.
442
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
-			$widgets = apply_filters(
444
-				'getpaid_widget_classes',
445
-				array(
446
-					'WPInv_Checkout_Widget',
447
-					'WPInv_History_Widget',
448
-					'WPInv_Receipt_Widget',
449
-					'WPInv_Subscriptions_Widget',
450
-					'WPInv_Buy_Item_Widget',
451
-					'WPInv_Messages_Widget',
452
-					'WPInv_GetPaid_Widget',
453
-					'WPInv_Invoice_Widget',
454
-				)
455
-			);
456
-
457
-			// For each widget...
458
-			foreach ( $widgets as $widget ) {
459
-				// Abort early if it is excluded for this page.
460
-				if ( in_array( $widget, $exclude ) ) {
461
-					continue;
462
-				}
463
-
464
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
-					register_widget( $widget );
467
-				} else {
468
-					new $widget();
469
-				}
470
-			}
471
-		}
472
-	}
473
-
474
-	/**
475
-	 * Upgrades the database.
476
-	 *
477
-	 * @since 2.0.2
478
-	 */
479
-	public function maybe_upgrade_database() {
480
-		// Ensure the database tables are up to date.
481
-		GetPaid_Installer::maybe_create_db_tables();
482
-
483
-		$wpi_version = get_option( 'wpinv_version', 0 );
484
-
485
-		if ( $wpi_version == WPINV_VERSION ) {
486
-			return;
487
-		}
488
-
489
-		$installer = new GetPaid_Installer();
490
-
491
-		if ( empty( $wpi_version ) ) {
492
-			return $installer->upgrade_db( 0 );
493
-		}
494
-
495
-		$upgrades  = array(
496
-			'0.0.5' => '004',
497
-			'1.0.3' => '102',
498
-			'2.0.0' => '118',
499
-			'2.8.0' => '279',
500
-		);
501
-
502
-		foreach ( $upgrades as $key => $method ) {
503
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
504
-				return $installer->upgrade_db( $method );
505
-			}
506
-		}
507
-	}
508
-
509
-	/**
510
-	 * Flushes the permalinks if needed.
511
-	 *
512
-	 * @since 2.0.8
513
-	 */
514
-	public function maybe_flush_permalinks() {
515
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
516
-
517
-		if ( ! empty( $flush ) ) {
518
-			flush_rewrite_rules();
519
-			delete_option( 'wpinv_flush_permalinks' );
520
-		}
521
-	}
522
-
523
-	/**
524
-	 * Remove our pages from yoast sitemaps.
525
-	 *
526
-	 * @since 1.0.19
527
-	 * @param int[] $excluded_posts_ids
528
-	 */
529
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
-		// Ensure that we have an array.
531
-		if ( ! is_array( $excluded_posts_ids ) ) {
532
-			$excluded_posts_ids = array();
533
-		}
534
-
535
-		// Prepare our pages.
536
-		$our_pages = array();
537
-
538
-		// Checkout page.
539
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
540
-
541
-		// Success page.
542
-		$our_pages[] = wpinv_get_option( 'success_page', false );
543
-
544
-		// Failure page.
545
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
546
-
547
-		// History page.
548
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
-
550
-		// Subscriptions page.
551
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
-
553
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
-
555
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
-
557
-		return array_unique( $excluded_posts_ids );
558
-	}
559
-
560
-	/**
561
-	 * Remove our pages from yoast sitemaps.
562
-	 *
563
-	 * @since 1.0.19
564
-	 * @param string[] $post_types
565
-	 */
566
-	public function exclude_invoicing_post_types( $post_types ) {
567
-		// Ensure that we have an array.
568
-		if ( ! is_array( $post_types ) ) {
569
-			$post_types = array();
570
-		}
571
-
572
-		// Remove our post types.
573
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
-	}
575
-
576
-	/**
577
-	 * Displays additional footer code.
578
-	 *
579
-	 * @since 2.0.0
580
-	 */
581
-	public function wp_footer() {
582
-		wpinv_get_template( 'frontend-footer.php' );
583
-	}
584
-
585
-	/**
586
-	 * Displays additional header code.
587
-	 *
588
-	 * @since 2.0.0
589
-	 */
590
-	public function wp_head() {
591
-		wpinv_get_template( 'frontend-head.php' );
592
-	}
593
-
594
-	/**
595
-	 * Custom query vars.
596
-	 *
597
-	 */
598
-	public function custom_query_vars( $vars ) {
599
-		$vars[] = 'getpaid-ipn';
600
-		return $vars;
601
-	}
602
-
603
-	/**
604
-	 * Add rewrite tags and rules.
605
-	 *
606
-	 */
607
-	public function add_rewrite_rule() {
608
-		$tag = 'getpaid-ipn';
609
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
610
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
-	}
612
-
613
-	/**
614
-	 * Processes non-query string ipns.
615
-	 *
616
-	 */
617
-	public function maybe_process_new_ipn( $query ) {
618
-		if ( is_admin() || ! $query->is_main_query() ) {
619
-			return;
620
-		}
621
-
622
-		$gateway = get_query_var( 'getpaid-ipn' );
623
-
624
-		if ( ! empty( $gateway ) ) {
625
-			$gateway = sanitize_text_field( $gateway );
626
-			nocache_headers();
627
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
628
-			do_action( "wpinv_verify_{$gateway}_ipn" );
629
-			exit;
630
-		}
631
-	}
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * @var array An array of payment gateways.
40
+     */
41
+    public $gateways;
42
+
43
+    /**
44
+     * Class constructor.
45
+     */
46
+    public function __construct() {
47
+        $this->define_constants();
48
+        $this->includes();
49
+        $this->init_hooks();
50
+        $this->set_properties();
51
+    }
52
+
53
+    /**
54
+     * Sets a custom data property.
55
+     *
56
+     * @param string $prop The prop to set.
57
+     * @param mixed $value The value to retrieve.
58
+     */
59
+    public function set( $prop, $value ) {
60
+        $this->data[ $prop ] = $value;
61
+    }
62
+
63
+    /**
64
+     * Gets a custom data property.
65
+     *
66
+     * @param string $prop The prop to set.
67
+     * @return mixed The value.
68
+     */
69
+    public function get( $prop ) {
70
+        if ( isset( $this->data[ $prop ] ) ) {
71
+            return $this->data[ $prop ];
72
+        }
73
+
74
+        return null;
75
+    }
76
+
77
+    /**
78
+     * Define class properties.
79
+     */
80
+    public function set_properties() {
81
+        // Sessions.
82
+        $this->set( 'session', new WPInv_Session_Handler() );
83
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
+        $GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
+
86
+        // Init other objects.
87
+        $this->set( 'notes', new WPInv_Notes() );
88
+        $this->set( 'api', new WPInv_API() );
89
+        $this->set( 'post_types', new GetPaid_Post_Types() );
90
+        $this->set( 'template', new GetPaid_Template() );
91
+        $this->set( 'admin', new GetPaid_Admin() );
92
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
93
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
+        $this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
+    }
99
+
100
+        /**
101
+         * Define plugin constants.
102
+         */
103
+    public function define_constants() {
104
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
+        $this->version = WPINV_VERSION;
107
+    }
108
+
109
+    /**
110
+     * Hook into actions and filters.
111
+     *
112
+     * @since 1.0.19
113
+     */
114
+    protected function init_hooks() {
115
+        /* Internationalize the text strings used. */
116
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
+
118
+        // Init the plugin after WordPress inits.
119
+        add_action( 'init', array( $this, 'init' ), 1 );
120
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
121
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
122
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
+        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
+        add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
+        add_action( 'wp_head', array( $this, 'wp_head' ) );
126
+        add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
+        add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
+
131
+        add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
+        add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
+        add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
+
135
+        // Fires after registering actions.
136
+        do_action( 'wpinv_actions', $this );
137
+        do_action( 'getpaid_actions', $this );
138
+    }
139
+
140
+    public function plugins_loaded() {
141
+        /* Internationalize the text strings used. */
142
+        $this->load_textdomain();
143
+
144
+        do_action( 'wpinv_loaded' );
145
+
146
+        // Fix oxygen page builder conflict
147
+        if ( function_exists( 'ct_css_output' ) ) {
148
+            wpinv_oxygen_fix_conflict();
149
+        }
150
+    }
151
+
152
+    /**
153
+     * Load Localisation files.
154
+     *
155
+     * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
+     *
157
+     * Locales found in:
158
+     *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
+     *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
+     *
161
+     * @since 1.0.0
162
+     */
163
+    public function load_textdomain() {
164
+        // Determines the current locale.
165
+        if ( function_exists( 'determine_locale' ) ) {
166
+            $locale = determine_locale();
167
+        } else if ( function_exists( 'get_user_locale' ) ) {
168
+            $locale = get_user_locale();
169
+        } else {
170
+            $locale = get_locale();
171
+        }
172
+
173
+        /**
174
+         * Filter the locale to use for translations.
175
+         */
176
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
+
178
+        unload_textdomain( 'invoicing', true );
179
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
+        load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
+    }
182
+
183
+    /**
184
+     * Include required core files used in admin and on the frontend.
185
+     */
186
+    public function includes() {
187
+        // Start with the settings.
188
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
+
190
+        // Packages/libraries.
191
+        require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
+        require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
+
194
+        // Load functions.
195
+        require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
+        require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
+        require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
+        require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
+        require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
+
211
+        // Register autoloader.
212
+        try {
213
+            spl_autoload_register( array( $this, 'autoload' ), true );
214
+        } catch ( Exception $e ) {
215
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
+        }
217
+
218
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
+        require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
+        require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
+        require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
+        require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
+        require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
+
241
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
+            GetPaid_Post_Types_Admin::init();
243
+
244
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
+            // load the user class only on the users.php page
251
+            global $pagenow;
252
+            if ( $pagenow == 'users.php' ) {
253
+                new WPInv_Admin_Users();
254
+            }
255
+        }
256
+
257
+        // Register cli commands
258
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
+            require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
+        }
262
+    }
263
+
264
+    /**
265
+     * Class autoloader
266
+     *
267
+     * @param       string $class_name The name of the class to load.
268
+     * @access      public
269
+     * @since       1.0.19
270
+     * @return      void
271
+     */
272
+    public function autoload( $class_name ) {
273
+        // Normalize the class name...
274
+        $class_name  = strtolower( $class_name );
275
+
276
+        // ... and make sure it is our class.
277
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
+            return;
279
+        }
280
+
281
+        // Next, prepare the file name from the class.
282
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
+
284
+        // Base path of the classes.
285
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
+
287
+        // And an array of possible locations in order of importance.
288
+        $locations = array(
289
+            "$plugin_path/includes",
290
+            "$plugin_path/includes/data-stores",
291
+            "$plugin_path/includes/gateways",
292
+            "$plugin_path/includes/payments",
293
+            "$plugin_path/includes/geolocation",
294
+            "$plugin_path/includes/reports",
295
+            "$plugin_path/includes/api",
296
+            "$plugin_path/includes/admin",
297
+            "$plugin_path/includes/admin/meta-boxes",
298
+        );
299
+
300
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
+                include trailingslashit( $location ) . $file_name;
303
+                break;
304
+            }
305
+        }
306
+    }
307
+
308
+    /**
309
+     * Inits hooks etc.
310
+     */
311
+    public function init() {
312
+        // Fires before getpaid inits.
313
+        do_action( 'before_getpaid_init', $this );
314
+
315
+        // Maybe upgrade.
316
+        $this->maybe_upgrade_database();
317
+
318
+        // Load default gateways.
319
+        $gateways = apply_filters(
320
+            'getpaid_default_gateways',
321
+            array(
322
+                'manual'        => 'GetPaid_Manual_Gateway',
323
+                'paypal'        => 'GetPaid_Paypal_Gateway',
324
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
+            )
328
+        );
329
+
330
+        foreach ( $gateways as $id => $class ) {
331
+            $this->gateways[ $id ] = new $class();
332
+        }
333
+
334
+        if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
+            GetPaid_Installer::rename_gateways_label();
336
+            update_option( 'wpinv_renamed_gateways', 'yes' );
337
+        }
338
+
339
+        // Fires after getpaid inits.
340
+        do_action( 'getpaid_init', $this );
341
+    }
342
+
343
+    /**
344
+     * Checks if this is an IPN request and processes it.
345
+     */
346
+    public function maybe_process_ipn() {
347
+        // Ensure that this is an IPN request.
348
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
+            return;
350
+        }
351
+
352
+        $gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
+
354
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
355
+        do_action( "wpinv_verify_{$gateway}_ipn" );
356
+        exit;
357
+    }
358
+
359
+    public function enqueue_scripts() {
360
+        // Fires before adding scripts.
361
+        do_action( 'getpaid_enqueue_scripts' );
362
+
363
+        $localize                         = array();
364
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
+        $localize['thousands']            = wpinv_thousands_separator();
366
+        $localize['decimals']             = wpinv_decimal_separator();
367
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
+        $localize['UseTaxes']             = wpinv_use_taxes();
370
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
+        $localize['loading']              = __( 'Loading...', 'invoicing' );
372
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
+        $localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
+
375
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
+
377
+        // reCaptcha.
378
+        if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
+            wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
+        }
381
+
382
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
+    }
385
+
386
+    public function wpinv_actions() {
387
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
388
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
+        }
390
+
391
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
+        }
394
+    }
395
+
396
+    /**
397
+     * Fires an action after verifying that a user can fire them.
398
+     *
399
+     * Note: If the action is on an invoice, subscription etc, esure that the
400
+     * current user owns the invoice/subscription.
401
+     */
402
+    public function maybe_do_authenticated_action() {
403
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
+            $data = wp_unslash( $_REQUEST );
406
+
407
+            if ( is_user_logged_in() ) {
408
+                do_action( "getpaid_authenticated_action_$key", $data );
409
+            }
410
+
411
+            do_action( "getpaid_unauthenticated_action_$key", $data );
412
+        }
413
+    }
414
+
415
+    public function pre_get_posts( $wp_query ) {
416
+        if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
417
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
+        }
419
+
420
+        return $wp_query;
421
+    }
422
+
423
+    /**
424
+     * Register widgets
425
+     *
426
+     */
427
+    public function register_widgets() {
428
+        global $pagenow;
429
+
430
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
431
+        // So we disable our widgets when editing a page with UX Builder.
432
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
+            return;
434
+        }
435
+
436
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
+
438
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
+            // don't initiate in these conditions.
440
+        } else {
441
+            // Only load allowed widgets.
442
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
+            $widgets = apply_filters(
444
+                'getpaid_widget_classes',
445
+                array(
446
+                    'WPInv_Checkout_Widget',
447
+                    'WPInv_History_Widget',
448
+                    'WPInv_Receipt_Widget',
449
+                    'WPInv_Subscriptions_Widget',
450
+                    'WPInv_Buy_Item_Widget',
451
+                    'WPInv_Messages_Widget',
452
+                    'WPInv_GetPaid_Widget',
453
+                    'WPInv_Invoice_Widget',
454
+                )
455
+            );
456
+
457
+            // For each widget...
458
+            foreach ( $widgets as $widget ) {
459
+                // Abort early if it is excluded for this page.
460
+                if ( in_array( $widget, $exclude ) ) {
461
+                    continue;
462
+                }
463
+
464
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
+                    register_widget( $widget );
467
+                } else {
468
+                    new $widget();
469
+                }
470
+            }
471
+        }
472
+    }
473
+
474
+    /**
475
+     * Upgrades the database.
476
+     *
477
+     * @since 2.0.2
478
+     */
479
+    public function maybe_upgrade_database() {
480
+        // Ensure the database tables are up to date.
481
+        GetPaid_Installer::maybe_create_db_tables();
482
+
483
+        $wpi_version = get_option( 'wpinv_version', 0 );
484
+
485
+        if ( $wpi_version == WPINV_VERSION ) {
486
+            return;
487
+        }
488
+
489
+        $installer = new GetPaid_Installer();
490
+
491
+        if ( empty( $wpi_version ) ) {
492
+            return $installer->upgrade_db( 0 );
493
+        }
494
+
495
+        $upgrades  = array(
496
+            '0.0.5' => '004',
497
+            '1.0.3' => '102',
498
+            '2.0.0' => '118',
499
+            '2.8.0' => '279',
500
+        );
501
+
502
+        foreach ( $upgrades as $key => $method ) {
503
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
504
+                return $installer->upgrade_db( $method );
505
+            }
506
+        }
507
+    }
508
+
509
+    /**
510
+     * Flushes the permalinks if needed.
511
+     *
512
+     * @since 2.0.8
513
+     */
514
+    public function maybe_flush_permalinks() {
515
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
516
+
517
+        if ( ! empty( $flush ) ) {
518
+            flush_rewrite_rules();
519
+            delete_option( 'wpinv_flush_permalinks' );
520
+        }
521
+    }
522
+
523
+    /**
524
+     * Remove our pages from yoast sitemaps.
525
+     *
526
+     * @since 1.0.19
527
+     * @param int[] $excluded_posts_ids
528
+     */
529
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
+        // Ensure that we have an array.
531
+        if ( ! is_array( $excluded_posts_ids ) ) {
532
+            $excluded_posts_ids = array();
533
+        }
534
+
535
+        // Prepare our pages.
536
+        $our_pages = array();
537
+
538
+        // Checkout page.
539
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
540
+
541
+        // Success page.
542
+        $our_pages[] = wpinv_get_option( 'success_page', false );
543
+
544
+        // Failure page.
545
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
546
+
547
+        // History page.
548
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
+
550
+        // Subscriptions page.
551
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
+
553
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
+
555
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
+
557
+        return array_unique( $excluded_posts_ids );
558
+    }
559
+
560
+    /**
561
+     * Remove our pages from yoast sitemaps.
562
+     *
563
+     * @since 1.0.19
564
+     * @param string[] $post_types
565
+     */
566
+    public function exclude_invoicing_post_types( $post_types ) {
567
+        // Ensure that we have an array.
568
+        if ( ! is_array( $post_types ) ) {
569
+            $post_types = array();
570
+        }
571
+
572
+        // Remove our post types.
573
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
+    }
575
+
576
+    /**
577
+     * Displays additional footer code.
578
+     *
579
+     * @since 2.0.0
580
+     */
581
+    public function wp_footer() {
582
+        wpinv_get_template( 'frontend-footer.php' );
583
+    }
584
+
585
+    /**
586
+     * Displays additional header code.
587
+     *
588
+     * @since 2.0.0
589
+     */
590
+    public function wp_head() {
591
+        wpinv_get_template( 'frontend-head.php' );
592
+    }
593
+
594
+    /**
595
+     * Custom query vars.
596
+     *
597
+     */
598
+    public function custom_query_vars( $vars ) {
599
+        $vars[] = 'getpaid-ipn';
600
+        return $vars;
601
+    }
602
+
603
+    /**
604
+     * Add rewrite tags and rules.
605
+     *
606
+     */
607
+    public function add_rewrite_rule() {
608
+        $tag = 'getpaid-ipn';
609
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
610
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
+    }
612
+
613
+    /**
614
+     * Processes non-query string ipns.
615
+     *
616
+     */
617
+    public function maybe_process_new_ipn( $query ) {
618
+        if ( is_admin() || ! $query->is_main_query() ) {
619
+            return;
620
+        }
621
+
622
+        $gateway = get_query_var( 'getpaid-ipn' );
623
+
624
+        if ( ! empty( $gateway ) ) {
625
+            $gateway = sanitize_text_field( $gateway );
626
+            nocache_headers();
627
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
628
+            do_action( "wpinv_verify_{$gateway}_ipn" );
629
+            exit;
630
+        }
631
+    }
632 632
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-graph-downloader.php 1 patch
Indentation   +202 added lines, -202 removed lines patch added patch discarded remove patch
@@ -12,218 +12,218 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * @var GetPaid_Reports_Report
17
-	 */
18
-	public $handler;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 */
24
-	public function __construct() {
25
-		$this->handler = new GetPaid_Reports_Report();
26
-	}
27
-
28
-	/**
29
-	 * Prepares the datastore handler.
30
-	 *
31
-	 * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
-	 */
33
-	public function prepare_handler( $graph ) {
34
-
35
-		if ( empty( $this->handler->views[ $graph ] ) ) {
36
-			wp_die( esc_html__( 'Invalid Graph', 'invoicing' ), 400 );
37
-		}
38
-
39
-		return new $this->handler->views[ $graph ]['class']();
40
-
41
-	}
42
-
43
-	/**
44
-	 * Prepares the output stream.
45
-	 *
46
-	 * @return resource
47
-	 */
48
-	public function prepare_output() {
49
-
50
-		$output  = fopen( 'php://output', 'w' );
51
-
52
-		if ( false === $output ) {
53
-			wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
54
-		}
55
-
56
-		return $output;
57
-	}
58
-
59
-	/**
60
-	 * Prepares the file type.
61
-	 *
62
-	 * @return string
63
-	 */
64
-	public function prepare_file_type( $graph ) {
65
-
66
-		$file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
-		$file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
-
69
-		header( "Content-Type:application/$file_type" );
70
-		header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
-
72
-		return $file_type;
73
-	}
74
-
75
-	/**
76
-	 * Handles the actual download.
77
-	 *
78
-	 */
79
-	public function download( $graph ) {
80
-		global $wpdb;
81
-
82
-		$handler   = $this->prepare_handler( $graph );
83
-		$stream    = $this->prepare_output();
84
-		$stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
-		$headers   = array( $handler->field, 'total', 'total_raw' );
86
-		$file_type = $this->prepare_file_type( $graph );
87
-
88
-		if ( 'csv' == $file_type ) {
89
-			$this->download_csv( $stats, $stream, $headers );
90
-		} elseif ( 'xml' == $file_type ) {
91
-			$this->download_xml( $stats, $stream, $headers );
92
-		} else {
93
-			$this->download_json( $stats, $stream, $headers );
94
-		}
95
-
96
-		fclose( $stream );
97
-		exit;
98
-	}
99
-
100
-	/**
101
-	 * Downloads graph as csv
102
-	 *
103
-	 * @param array $stats The stats being downloaded.
104
-	 * @param resource $stream The stream to output to.
105
-	 * @param array $headers The fields to stream.
106
-	 * @since       1.0.19
107
-	 */
108
-	public function download_csv( $stats, $stream, $headers ) {
109
-
110
-		// Output the csv column headers.
111
-		fputcsv( $stream, $headers );
112
-
113
-		// Loop through
114
-		foreach ( $stats as $stat ) {
115
-			$row  = array_values( $this->prepare_row( $stat, $headers ) );
116
-			$row  = array_map( 'maybe_serialize', $row );
117
-			fputcsv( $stream, $row );
118
-		}
119
-
120
-	}
121
-
122
-	/**
123
-	 * Downloads graph as json
124
-	 *
125
-	 * @param array $stats The stats being downloaded.
126
-	 * @param resource $stream The stream to output to.
127
-	 * @param array $headers The fields to stream.
128
-	 * @since       1.0.19
129
-	 */
130
-	public function download_json( $stats, $stream, $headers ) {
131
-
132
-		$prepared = array();
133
-
134
-		// Loop through
135
-		foreach ( $stats as $stat ) {
136
-			$prepared[] = $this->prepare_row( $stat, $headers );
137
-		}
138
-
139
-		fwrite( $stream, wp_json_encode( $prepared ) );
140
-
141
-	}
142
-
143
-	/**
144
-	 * Downloads graph as xml
145
-	 *
146
-	 * @param array $stats The stats being downloaded.
147
-	 * @param resource $stream The stream to output to.
148
-	 * @param array $headers The fields to stream.
149
-	 * @since       1.0.19
150
-	 */
151
-	public function download_xml( $stats, $stream, $headers ) {
152
-
153
-		$prepared = array();
154
-
155
-		// Loop through
156
-		foreach ( $stats as $stat ) {
157
-			$prepared[] = $this->prepare_row( $stat, $headers );
158
-		}
159
-
160
-		$xml = new SimpleXMLElement( '<?xml version="1.0"?><data></data>' );
161
-		$this->convert_array_xml( $prepared, $xml );
162
-
163
-		fwrite( $stream, $xml->asXML() );
164
-
165
-	}
166
-
167
-	/**
168
-	 * Converts stats array to xml
169
-	 *
170
-	 * @access      public
171
-	 * @since      1.0.19
172
-	 */
173
-	public function convert_array_xml( $data, $xml ) {
174
-
175
-		// Loop through
176
-		foreach ( $data as $key => $value ) {
177
-
178
-			$key = preg_replace( '/[^A-Za-z0-9_\-]/', '', $key );
179
-
180
-			if ( is_array( $value ) ) {
181
-
182
-				if ( is_numeric( $key ) ) {
183
-					$key = 'item' . $key; //dealing with <0/>..<n/> issues
184
-				}
185
-
186
-				$subnode = $xml->addChild( $key );
187
-				$this->convert_array_xml( $value, $subnode );
188
-
189
-			} else {
190
-				$xml->addChild( $key, $value ?  htmlspecialchars( $value ) : $value );
191
-			}
15
+    /**
16
+     * @var GetPaid_Reports_Report
17
+     */
18
+    public $handler;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     */
24
+    public function __construct() {
25
+        $this->handler = new GetPaid_Reports_Report();
26
+    }
27
+
28
+    /**
29
+     * Prepares the datastore handler.
30
+     *
31
+     * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
+     */
33
+    public function prepare_handler( $graph ) {
34
+
35
+        if ( empty( $this->handler->views[ $graph ] ) ) {
36
+            wp_die( esc_html__( 'Invalid Graph', 'invoicing' ), 400 );
37
+        }
38
+
39
+        return new $this->handler->views[ $graph ]['class']();
40
+
41
+    }
42
+
43
+    /**
44
+     * Prepares the output stream.
45
+     *
46
+     * @return resource
47
+     */
48
+    public function prepare_output() {
49
+
50
+        $output  = fopen( 'php://output', 'w' );
51
+
52
+        if ( false === $output ) {
53
+            wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
54
+        }
55
+
56
+        return $output;
57
+    }
58
+
59
+    /**
60
+     * Prepares the file type.
61
+     *
62
+     * @return string
63
+     */
64
+    public function prepare_file_type( $graph ) {
65
+
66
+        $file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
+        $file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
+
69
+        header( "Content-Type:application/$file_type" );
70
+        header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
+
72
+        return $file_type;
73
+    }
74
+
75
+    /**
76
+     * Handles the actual download.
77
+     *
78
+     */
79
+    public function download( $graph ) {
80
+        global $wpdb;
81
+
82
+        $handler   = $this->prepare_handler( $graph );
83
+        $stream    = $this->prepare_output();
84
+        $stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
+        $headers   = array( $handler->field, 'total', 'total_raw' );
86
+        $file_type = $this->prepare_file_type( $graph );
87
+
88
+        if ( 'csv' == $file_type ) {
89
+            $this->download_csv( $stats, $stream, $headers );
90
+        } elseif ( 'xml' == $file_type ) {
91
+            $this->download_xml( $stats, $stream, $headers );
92
+        } else {
93
+            $this->download_json( $stats, $stream, $headers );
94
+        }
95
+
96
+        fclose( $stream );
97
+        exit;
98
+    }
99
+
100
+    /**
101
+     * Downloads graph as csv
102
+     *
103
+     * @param array $stats The stats being downloaded.
104
+     * @param resource $stream The stream to output to.
105
+     * @param array $headers The fields to stream.
106
+     * @since       1.0.19
107
+     */
108
+    public function download_csv( $stats, $stream, $headers ) {
109
+
110
+        // Output the csv column headers.
111
+        fputcsv( $stream, $headers );
112
+
113
+        // Loop through
114
+        foreach ( $stats as $stat ) {
115
+            $row  = array_values( $this->prepare_row( $stat, $headers ) );
116
+            $row  = array_map( 'maybe_serialize', $row );
117
+            fputcsv( $stream, $row );
118
+        }
119
+
120
+    }
121
+
122
+    /**
123
+     * Downloads graph as json
124
+     *
125
+     * @param array $stats The stats being downloaded.
126
+     * @param resource $stream The stream to output to.
127
+     * @param array $headers The fields to stream.
128
+     * @since       1.0.19
129
+     */
130
+    public function download_json( $stats, $stream, $headers ) {
131
+
132
+        $prepared = array();
133
+
134
+        // Loop through
135
+        foreach ( $stats as $stat ) {
136
+            $prepared[] = $this->prepare_row( $stat, $headers );
137
+        }
138
+
139
+        fwrite( $stream, wp_json_encode( $prepared ) );
140
+
141
+    }
142
+
143
+    /**
144
+     * Downloads graph as xml
145
+     *
146
+     * @param array $stats The stats being downloaded.
147
+     * @param resource $stream The stream to output to.
148
+     * @param array $headers The fields to stream.
149
+     * @since       1.0.19
150
+     */
151
+    public function download_xml( $stats, $stream, $headers ) {
152
+
153
+        $prepared = array();
154
+
155
+        // Loop through
156
+        foreach ( $stats as $stat ) {
157
+            $prepared[] = $this->prepare_row( $stat, $headers );
158
+        }
159
+
160
+        $xml = new SimpleXMLElement( '<?xml version="1.0"?><data></data>' );
161
+        $this->convert_array_xml( $prepared, $xml );
162
+
163
+        fwrite( $stream, $xml->asXML() );
164
+
165
+    }
166
+
167
+    /**
168
+     * Converts stats array to xml
169
+     *
170
+     * @access      public
171
+     * @since      1.0.19
172
+     */
173
+    public function convert_array_xml( $data, $xml ) {
174
+
175
+        // Loop through
176
+        foreach ( $data as $key => $value ) {
177
+
178
+            $key = preg_replace( '/[^A-Za-z0-9_\-]/', '', $key );
179
+
180
+            if ( is_array( $value ) ) {
181
+
182
+                if ( is_numeric( $key ) ) {
183
+                    $key = 'item' . $key; //dealing with <0/>..<n/> issues
184
+                }
185
+
186
+                $subnode = $xml->addChild( $key );
187
+                $this->convert_array_xml( $value, $subnode );
188
+
189
+            } else {
190
+                $xml->addChild( $key, $value ?  htmlspecialchars( $value ) : $value );
191
+            }
192 192
 }
193 193
 
194
-	}
194
+    }
195 195
 
196
-	/**
197
-	 * Prepares a single row for download.
198
-	 *
199
-	 * @param stdClass|array $row The row to prepare..
200
-	 * @param array $fields The fields to stream.
201
-	 * @since       1.0.19
202
-	 * @return array
203
-	 */
204
-	public function prepare_row( $row, $fields ) {
196
+    /**
197
+     * Prepares a single row for download.
198
+     *
199
+     * @param stdClass|array $row The row to prepare..
200
+     * @param array $fields The fields to stream.
201
+     * @since       1.0.19
202
+     * @return array
203
+     */
204
+    public function prepare_row( $row, $fields ) {
205 205
 
206
-		$prepared = array();
207
-		$row      = (array) $row;
206
+        $prepared = array();
207
+        $row      = (array) $row;
208 208
 
209
-		foreach ( $fields as $field ) {
209
+        foreach ( $fields as $field ) {
210 210
 
211
-			if ( $field === 'total' ) {
212
-				$prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
213
-				continue;
214
-			}
211
+            if ( $field === 'total' ) {
212
+                $prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
213
+                continue;
214
+            }
215 215
 
216
-			if ( $field === 'total_raw' ) {
217
-				$prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
218
-				continue;
219
-			}
216
+            if ( $field === 'total_raw' ) {
217
+                $prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
218
+                continue;
219
+            }
220 220
 
221
-			$prepared[ $field ] = strip_tags( $row[ $field ] );
221
+            $prepared[ $field ] = strip_tags( $row[ $field ] );
222 222
 
223
-		}
223
+        }
224 224
 
225
-		return $prepared;
226
-	}
225
+        return $prepared;
226
+    }
227 227
 
228 228
 
229 229
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-invoice-exporter.php 1 patch
Indentation   +232 added lines, -232 removed lines patch added patch discarded remove patch
@@ -12,236 +12,236 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Exporter extends GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * Retrieves invoices query args.
17
-	 *
18
-	 * @param string $post_type post type to retrieve.
19
-	 * @param array $args Args to search for.
20
-	 * @return array
21
-	 */
22
-	public function get_invoice_query_args( $post_type, $args ) {
23
-
24
-		$query_args = array(
25
-			'post_type'              => $post_type,
26
-			'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
-			'posts_per_page'         => -1,
28
-			'no_found_rows'          => true,
29
-			'update_post_term_cache' => false,
30
-			'fields'                 => 'ids',
31
-		);
32
-
33
-		if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
-			$query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
-		}
36
-
37
-		$date_query = array();
38
-		if ( ! empty( $args['to_date'] ) ) {
39
-			$date_query['before'] = wpinv_clean( $args['to_date'] );
40
-		}
41
-
42
-		if ( ! empty( $args['from_date'] ) ) {
43
-			$date_query['after'] = wpinv_clean( $args['from_date'] );
44
-		}
45
-
46
-		if ( ! empty( $date_query ) ) {
47
-			$date_query['inclusive']  = true;
48
-			$query_args['date_query'] = array( $date_query );
49
-		}
50
-
51
-		return $query_args;
52
-	}
53
-
54
-	/**
55
-	 * Retrieves invoices.
56
-	 *
57
-	 * @param array $query_args WP_Query args.
58
-	 * @return WPInv_Invoice[]
59
-	 */
60
-	public function get_invoices( $query_args ) {
61
-
62
-		// Get invoices.
63
-		$invoices = new WP_Query( $query_args );
64
-
65
-		// Prepare the results.
66
-		return array_map( 'wpinv_get_invoice', $invoices->posts );
67
-
68
-	}
69
-
70
-	/**
71
-	 * Handles the actual download.
72
-	 *
73
-	 */
74
-	public function export( $post_type, $args ) {
75
-
76
-		$invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
-		$stream    = $this->prepare_output();
78
-		$headers   = $this->get_export_fields( $post_type );
79
-		$file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
-
81
-		if ( 'csv' == $file_type ) {
82
-			$this->download_csv( $invoices, $stream, $headers );
83
-		} elseif ( 'xml' == $file_type ) {
84
-			$this->download_xml( $invoices, $stream, $headers );
85
-		} else {
86
-			$this->download_json( $invoices, $stream, $headers );
87
-		}
88
-
89
-		fclose( $stream );
90
-		exit;
91
-	}
92
-
93
-	/**
94
-	 * Prepares a single invoice for download.
95
-	 *
96
-	 * @param WPInv_Invoice $invoice The invoice to prepare..
97
-	 * @param array $fields The fields to stream.
98
-	 * @since       1.0.19
99
-	 * @return array
100
-	 */
101
-	public function prepare_row( $invoice, $fields ) {
102
-
103
-		$prepared      = array();
104
-		$amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
-		$meta_fields = $this->get_payment_form_meta( $invoice );
106
-
107
-		foreach ( $fields as $field ) {
108
-			$value  = '';
109
-			$method = "get_$field";
110
-
111
-			if ( method_exists( $invoice, $method ) ) {
112
-				$value  = $invoice->$method();
113
-			} else if( strpos( $field, '_' ) === 0 && isset( $meta_fields[ $field ] ) ) {
114
-				$value = $meta_fields[ $field ];
115
-			}
116
-
117
-			if ( in_array( $field, $amount_fields ) ) {
118
-				$value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
119
-			}
120
-
121
-			$prepared[ $field ] = wpinv_clean( $value );
122
-
123
-		}
124
-
125
-		return $prepared;
126
-	}
127
-
128
-	/**
129
-	 * Retrieves export fields.
130
-	 *
131
-	 * @param string $post_type
132
-	 * @since       1.0.19
133
-	 * @return array
134
-	 */
135
-	public function get_export_fields( $post_type ) {
136
-
137
-		$fields = array(
138
-			'id',
139
-			'parent_id',
140
-			'status',
141
-			'date_created',
142
-			'date_modified',
143
-			'date_due',
144
-			'date_completed',
145
-			'number',
146
-			'key',
147
-			'description',
148
-			'post_type',
149
-			'mode',
150
-			'customer_id',
151
-			'customer_first_name',
152
-			'customer_last_name',
153
-			'customer_phone',
154
-			'customer_email',
155
-			'customer_country',
156
-			'customer_city',
157
-			'customer_state',
158
-			'customer_zip',
159
-			'customer_company',
160
-			'customer_vat_number',
161
-			'customer_address',
162
-			'subtotal',
163
-			'total_discount',
164
-			'total_tax',
165
-			'total_fees',
166
-			'fees',
167
-			'discounts',
168
-			'taxes',
169
-			'cart_details',
170
-			'item_ids',
171
-			'payment_form',
172
-			'discount_code',
173
-			'gateway',
174
-			'transaction_id',
175
-			'currency',
176
-			'disable_taxes',
177
-			'subscription_id',
178
-			'remote_subscription_id',
179
-			'is_viewed',
180
-			'email_cc',
181
-			'template',
182
-			'created_via',
183
-    	);
184
-
185
-		// Payment form meta fields.
186
-		$meta_fields = getpaid_get_payment_form_custom_fields();
187
-
188
-		if ( ! empty( $meta_fields ) ) {
189
-			foreach ( $meta_fields as $field_key => $field_label ) {
190
-				$fields[] = $field_key;
191
-			}
192
-		}
193
-
194
-		return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
195
-	}
196
-
197
-	/**
198
-	 * Retrieves amount fields.
199
-	 *
200
-	 * @param string $post_type
201
-	 * @since       1.0.19
202
-	 * @return array
203
-	 */
204
-	public function get_amount_fields( $post_type ) {
205
-
206
-		$fields = array(
207
-			'subtotal',
208
-			'total_discount',
209
-			'total_tax',
210
-			'total_fees',
211
-    	);
212
-
213
-		return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
214
-	}
215
-
216
-	/**
217
-	 * Retrieves payment form meta fields.
218
-	 *
219
-	 * @since 2.8.23
220
-	 *
221
-	 * @return array
222
-	 */
223
-	public function get_payment_form_meta( $invoice ) {
224
-		// Payment form meta fields.
225
-		$field_keys = getpaid_get_payment_form_custom_fields();
226
-		$meta = get_post_meta( $invoice->get_id(), 'additional_meta_data', true );
227
-
228
-		$field_values = array();
229
-		if ( ! empty( $field_keys ) ) {
230
-			foreach ( $field_keys as $field_key => $field_label ) {
231
-				$value = '';
232
-
233
-				if ( ! empty( $meta ) ) {
234
-					foreach ( $meta as $meta_label => $meta_value ) {
235
-						if ( getpaid_strtolower( wpinv_clean( wp_unslash( $meta_label ) ) ) == getpaid_strtolower( $field_label ) ) {
236
-							$value = $meta_value;
237
-						}
238
-					}
239
-				}
240
-
241
-				$field_values[ $field_key ] = $value;
242
-			}
243
-		}
244
-
245
-		return $field_values;
246
-	}
15
+    /**
16
+     * Retrieves invoices query args.
17
+     *
18
+     * @param string $post_type post type to retrieve.
19
+     * @param array $args Args to search for.
20
+     * @return array
21
+     */
22
+    public function get_invoice_query_args( $post_type, $args ) {
23
+
24
+        $query_args = array(
25
+            'post_type'              => $post_type,
26
+            'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
+            'posts_per_page'         => -1,
28
+            'no_found_rows'          => true,
29
+            'update_post_term_cache' => false,
30
+            'fields'                 => 'ids',
31
+        );
32
+
33
+        if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
+            $query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
+        }
36
+
37
+        $date_query = array();
38
+        if ( ! empty( $args['to_date'] ) ) {
39
+            $date_query['before'] = wpinv_clean( $args['to_date'] );
40
+        }
41
+
42
+        if ( ! empty( $args['from_date'] ) ) {
43
+            $date_query['after'] = wpinv_clean( $args['from_date'] );
44
+        }
45
+
46
+        if ( ! empty( $date_query ) ) {
47
+            $date_query['inclusive']  = true;
48
+            $query_args['date_query'] = array( $date_query );
49
+        }
50
+
51
+        return $query_args;
52
+    }
53
+
54
+    /**
55
+     * Retrieves invoices.
56
+     *
57
+     * @param array $query_args WP_Query args.
58
+     * @return WPInv_Invoice[]
59
+     */
60
+    public function get_invoices( $query_args ) {
61
+
62
+        // Get invoices.
63
+        $invoices = new WP_Query( $query_args );
64
+
65
+        // Prepare the results.
66
+        return array_map( 'wpinv_get_invoice', $invoices->posts );
67
+
68
+    }
69
+
70
+    /**
71
+     * Handles the actual download.
72
+     *
73
+     */
74
+    public function export( $post_type, $args ) {
75
+
76
+        $invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
+        $stream    = $this->prepare_output();
78
+        $headers   = $this->get_export_fields( $post_type );
79
+        $file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
+
81
+        if ( 'csv' == $file_type ) {
82
+            $this->download_csv( $invoices, $stream, $headers );
83
+        } elseif ( 'xml' == $file_type ) {
84
+            $this->download_xml( $invoices, $stream, $headers );
85
+        } else {
86
+            $this->download_json( $invoices, $stream, $headers );
87
+        }
88
+
89
+        fclose( $stream );
90
+        exit;
91
+    }
92
+
93
+    /**
94
+     * Prepares a single invoice for download.
95
+     *
96
+     * @param WPInv_Invoice $invoice The invoice to prepare..
97
+     * @param array $fields The fields to stream.
98
+     * @since       1.0.19
99
+     * @return array
100
+     */
101
+    public function prepare_row( $invoice, $fields ) {
102
+
103
+        $prepared      = array();
104
+        $amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
+        $meta_fields = $this->get_payment_form_meta( $invoice );
106
+
107
+        foreach ( $fields as $field ) {
108
+            $value  = '';
109
+            $method = "get_$field";
110
+
111
+            if ( method_exists( $invoice, $method ) ) {
112
+                $value  = $invoice->$method();
113
+            } else if( strpos( $field, '_' ) === 0 && isset( $meta_fields[ $field ] ) ) {
114
+                $value = $meta_fields[ $field ];
115
+            }
116
+
117
+            if ( in_array( $field, $amount_fields ) ) {
118
+                $value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
119
+            }
120
+
121
+            $prepared[ $field ] = wpinv_clean( $value );
122
+
123
+        }
124
+
125
+        return $prepared;
126
+    }
127
+
128
+    /**
129
+     * Retrieves export fields.
130
+     *
131
+     * @param string $post_type
132
+     * @since       1.0.19
133
+     * @return array
134
+     */
135
+    public function get_export_fields( $post_type ) {
136
+
137
+        $fields = array(
138
+            'id',
139
+            'parent_id',
140
+            'status',
141
+            'date_created',
142
+            'date_modified',
143
+            'date_due',
144
+            'date_completed',
145
+            'number',
146
+            'key',
147
+            'description',
148
+            'post_type',
149
+            'mode',
150
+            'customer_id',
151
+            'customer_first_name',
152
+            'customer_last_name',
153
+            'customer_phone',
154
+            'customer_email',
155
+            'customer_country',
156
+            'customer_city',
157
+            'customer_state',
158
+            'customer_zip',
159
+            'customer_company',
160
+            'customer_vat_number',
161
+            'customer_address',
162
+            'subtotal',
163
+            'total_discount',
164
+            'total_tax',
165
+            'total_fees',
166
+            'fees',
167
+            'discounts',
168
+            'taxes',
169
+            'cart_details',
170
+            'item_ids',
171
+            'payment_form',
172
+            'discount_code',
173
+            'gateway',
174
+            'transaction_id',
175
+            'currency',
176
+            'disable_taxes',
177
+            'subscription_id',
178
+            'remote_subscription_id',
179
+            'is_viewed',
180
+            'email_cc',
181
+            'template',
182
+            'created_via',
183
+        );
184
+
185
+        // Payment form meta fields.
186
+        $meta_fields = getpaid_get_payment_form_custom_fields();
187
+
188
+        if ( ! empty( $meta_fields ) ) {
189
+            foreach ( $meta_fields as $field_key => $field_label ) {
190
+                $fields[] = $field_key;
191
+            }
192
+        }
193
+
194
+        return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
195
+    }
196
+
197
+    /**
198
+     * Retrieves amount fields.
199
+     *
200
+     * @param string $post_type
201
+     * @since       1.0.19
202
+     * @return array
203
+     */
204
+    public function get_amount_fields( $post_type ) {
205
+
206
+        $fields = array(
207
+            'subtotal',
208
+            'total_discount',
209
+            'total_tax',
210
+            'total_fees',
211
+        );
212
+
213
+        return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
214
+    }
215
+
216
+    /**
217
+     * Retrieves payment form meta fields.
218
+     *
219
+     * @since 2.8.23
220
+     *
221
+     * @return array
222
+     */
223
+    public function get_payment_form_meta( $invoice ) {
224
+        // Payment form meta fields.
225
+        $field_keys = getpaid_get_payment_form_custom_fields();
226
+        $meta = get_post_meta( $invoice->get_id(), 'additional_meta_data', true );
227
+
228
+        $field_values = array();
229
+        if ( ! empty( $field_keys ) ) {
230
+            foreach ( $field_keys as $field_key => $field_label ) {
231
+                $value = '';
232
+
233
+                if ( ! empty( $meta ) ) {
234
+                    foreach ( $meta as $meta_label => $meta_value ) {
235
+                        if ( getpaid_strtolower( wpinv_clean( wp_unslash( $meta_label ) ) ) == getpaid_strtolower( $field_label ) ) {
236
+                            $value = $meta_value;
237
+                        }
238
+                    }
239
+                }
240
+
241
+                $field_values[ $field_key ] = $value;
242
+            }
243
+        }
244
+
245
+        return $field_values;
246
+    }
247 247
 }
Please login to merge, or discard this patch.
includes/wpinv-template-functions.php 1 patch
Indentation   +147 added lines, -147 removed lines patch added patch discarded remove patch
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
  * @param string $default_path The root path to the default template. Defaults to invoicing/templates
141 141
  */
142 142
 function wpinv_get_template_html( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
143
-	return getpaid_template()->get_template( $template_name, $args, $template_path, $default_path );
143
+    return getpaid_template()->get_template( $template_name, $args, $template_path, $default_path );
144 144
 }
145 145
 
146 146
 /**
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
  * @return string
159 159
  */
160 160
 function wpinv_get_theme_template_dir_name() {
161
-	return trailingslashit( apply_filters( 'wpinv_templates_dir', 'invoicing' ) );
161
+    return trailingslashit( apply_filters( 'wpinv_templates_dir', 'invoicing' ) );
162 162
 }
163 163
 
164 164
 /**
@@ -175,125 +175,125 @@  discard block
 block discarded – undo
175 175
 }
176 176
 
177 177
 function wpinv_get_template_part( $slug, $name = null, $load = true ) {
178
-	do_action( 'get_template_part_' . $slug, $slug, $name );
178
+    do_action( 'get_template_part_' . $slug, $slug, $name );
179 179
 
180
-	// Setup possible parts
181
-	$templates = array();
182
-	if ( isset( $name ) ) {
183
-		$templates[] = $slug . '-' . $name . '.php';
180
+    // Setup possible parts
181
+    $templates = array();
182
+    if ( isset( $name ) ) {
183
+        $templates[] = $slug . '-' . $name . '.php';
184 184
     }
185
-	$templates[] = $slug . '.php';
185
+    $templates[] = $slug . '.php';
186 186
 
187
-	// Allow template parts to be filtered
188
-	$templates = apply_filters( 'wpinv_get_template_part', $templates, $slug, $name );
187
+    // Allow template parts to be filtered
188
+    $templates = apply_filters( 'wpinv_get_template_part', $templates, $slug, $name );
189 189
 
190
-	// Return the part that is found
191
-	return wpinv_locate_tmpl( $templates, $load, false );
190
+    // Return the part that is found
191
+    return wpinv_locate_tmpl( $templates, $load, false );
192 192
 }
193 193
 
194 194
 function wpinv_locate_tmpl( $template_names, $load = false, $require_once = true ) {
195
-	// No file found yet
196
-	$located = false;
195
+    // No file found yet
196
+    $located = false;
197 197
 
198
-	// Try to find a template file
199
-	foreach ( (array)$template_names as $template_name ) {
198
+    // Try to find a template file
199
+    foreach ( (array)$template_names as $template_name ) {
200 200
 
201
-		// Continue if template is empty
202
-		if ( empty( $template_name ) ) {
203
-			continue;
201
+        // Continue if template is empty
202
+        if ( empty( $template_name ) ) {
203
+            continue;
204 204
         }
205 205
 
206
-		// Trim off any slashes from the template name
207
-		$template_name = ltrim( $template_name, '/' );
206
+        // Trim off any slashes from the template name
207
+        $template_name = ltrim( $template_name, '/' );
208 208
 
209
-		// try locating this template file by looping through the template paths
210
-		foreach ( wpinv_get_theme_template_paths() as $template_path ) {
209
+        // try locating this template file by looping through the template paths
210
+        foreach ( wpinv_get_theme_template_paths() as $template_path ) {
211 211
 
212
-			if ( file_exists( $template_path . $template_name ) ) {
213
-				$located = $template_path . $template_name;
214
-				break;
215
-			}
216
-		}
212
+            if ( file_exists( $template_path . $template_name ) ) {
213
+                $located = $template_path . $template_name;
214
+                break;
215
+            }
216
+        }
217 217
 
218
-		if ( ! empty( $located ) ) {
219
-			break;
220
-		}
221
-	}
218
+        if ( ! empty( $located ) ) {
219
+            break;
220
+        }
221
+    }
222 222
 
223
-	if ( ( true == $load ) && ! empty( $located ) ) {
224
-		load_template( $located, $require_once );
223
+    if ( ( true == $load ) && ! empty( $located ) ) {
224
+        load_template( $located, $require_once );
225 225
     }
226 226
 
227
-	return $located;
227
+    return $located;
228 228
 }
229 229
 
230 230
 function wpinv_get_theme_template_paths() {
231
-	$template_dir = wpinv_get_theme_template_dir_name();
231
+    $template_dir = wpinv_get_theme_template_dir_name();
232 232
 
233
-	$file_paths = array(
234
-		1   => trailingslashit( get_stylesheet_directory() ) . $template_dir,
235
-		10  => trailingslashit( get_template_directory() ) . $template_dir,
236
-		100 => wpinv_get_templates_dir(),
237
-	);
233
+    $file_paths = array(
234
+        1   => trailingslashit( get_stylesheet_directory() ) . $template_dir,
235
+        10  => trailingslashit( get_template_directory() ) . $template_dir,
236
+        100 => wpinv_get_templates_dir(),
237
+    );
238 238
 
239
-	$file_paths = apply_filters( 'wpinv_template_paths', $file_paths );
239
+    $file_paths = apply_filters( 'wpinv_template_paths', $file_paths );
240 240
 
241
-	// sort the file paths based on priority
242
-	ksort( $file_paths, SORT_NUMERIC );
241
+    // sort the file paths based on priority
242
+    ksort( $file_paths, SORT_NUMERIC );
243 243
 
244
-	return array_map( 'trailingslashit', $file_paths );
244
+    return array_map( 'trailingslashit', $file_paths );
245 245
 }
246 246
 
247 247
 function wpinv_checkout_meta_tags() {
248 248
 
249
-	$pages   = array();
250
-	$pages[] = wpinv_get_option( 'success_page' );
251
-	$pages[] = wpinv_get_option( 'failure_page' );
252
-	$pages[] = wpinv_get_option( 'invoice_history_page' );
253
-	$pages[] = wpinv_get_option( 'invoice_subscription_page' );
249
+    $pages   = array();
250
+    $pages[] = wpinv_get_option( 'success_page' );
251
+    $pages[] = wpinv_get_option( 'failure_page' );
252
+    $pages[] = wpinv_get_option( 'invoice_history_page' );
253
+    $pages[] = wpinv_get_option( 'invoice_subscription_page' );
254 254
 
255
-	if ( ! wpinv_is_checkout() && ! is_page( $pages ) ) {
256
-		return;
257
-	}
255
+    if ( ! wpinv_is_checkout() && ! is_page( $pages ) ) {
256
+        return;
257
+    }
258 258
 
259
-	echo '<meta name="robots" content="noindex,nofollow" />' . "\n";
259
+    echo '<meta name="robots" content="noindex,nofollow" />' . "\n";
260 260
 }
261 261
 add_action( 'wp_head', 'wpinv_checkout_meta_tags' );
262 262
 
263 263
 function wpinv_add_body_classes( $class ) {
264
-	$classes = (array)$class;
264
+    $classes = (array)$class;
265 265
 
266
-	if ( wpinv_is_checkout() ) {
267
-		$classes[] = 'wpinv-checkout';
268
-		$classes[] = 'wpinv-page';
269
-	}
266
+    if ( wpinv_is_checkout() ) {
267
+        $classes[] = 'wpinv-checkout';
268
+        $classes[] = 'wpinv-page';
269
+    }
270 270
 
271
-	if ( wpinv_is_success_page() ) {
272
-		$classes[] = 'wpinv-success';
273
-		$classes[] = 'wpinv-page';
274
-	}
271
+    if ( wpinv_is_success_page() ) {
272
+        $classes[] = 'wpinv-success';
273
+        $classes[] = 'wpinv-page';
274
+    }
275 275
 
276
-	if ( wpinv_is_failed_transaction_page() ) {
277
-		$classes[] = 'wpinv-failed-transaction';
278
-		$classes[] = 'wpinv-page';
279
-	}
276
+    if ( wpinv_is_failed_transaction_page() ) {
277
+        $classes[] = 'wpinv-failed-transaction';
278
+        $classes[] = 'wpinv-page';
279
+    }
280 280
 
281
-	if ( wpinv_is_invoice_history_page() ) {
282
-		$classes[] = 'wpinv-history';
283
-		$classes[] = 'wpinv-page';
284
-	}
281
+    if ( wpinv_is_invoice_history_page() ) {
282
+        $classes[] = 'wpinv-history';
283
+        $classes[] = 'wpinv-page';
284
+    }
285 285
 
286
-	if ( wpinv_is_subscriptions_history_page() ) {
287
-		$classes[] = 'wpinv-subscription';
288
-		$classes[] = 'wpinv-page';
289
-	}
286
+    if ( wpinv_is_subscriptions_history_page() ) {
287
+        $classes[] = 'wpinv-subscription';
288
+        $classes[] = 'wpinv-page';
289
+    }
290 290
 
291
-	if ( wpinv_is_test_mode() ) {
292
-		$classes[] = 'wpinv-test-mode';
293
-		$classes[] = 'wpinv-page';
294
-	}
291
+    if ( wpinv_is_test_mode() ) {
292
+        $classes[] = 'wpinv-test-mode';
293
+        $classes[] = 'wpinv-page';
294
+    }
295 295
 
296
-	return array_unique( $classes );
296
+    return array_unique( $classes );
297 297
 }
298 298
 add_filter( 'body_class', 'wpinv_add_body_classes' );
299 299
 
@@ -467,16 +467,16 @@  discard block
 block discarded – undo
467 467
 
468 468
     wpinv_html_select(
469 469
         array(
470
-			'name'             => $args['name'],
471
-			'selected'         => $args['selected'],
472
-			'id'               => $args['id'],
473
-			'class'            => $args['class'],
474
-			'options'          => $options,
475
-			'multiple'         => $args['multiple'],
476
-			'placeholder'      => $args['placeholder'],
477
-			'show_option_all'  => $args['show_option_all'],
478
-			'show_option_none' => $args['show_option_none'],
479
-			'data'             => $args['data'],
470
+            'name'             => $args['name'],
471
+            'selected'         => $args['selected'],
472
+            'id'               => $args['id'],
473
+            'class'            => $args['class'],
474
+            'options'          => $options,
475
+            'multiple'         => $args['multiple'],
476
+            'placeholder'      => $args['placeholder'],
477
+            'show_option_all'  => $args['show_option_all'],
478
+            'show_option_none' => $args['show_option_none'],
479
+            'data'             => $args['data'],
480 480
         )
481 481
     );
482 482
 
@@ -776,21 +776,21 @@  discard block
 block discarded – undo
776 776
 
777 777
     $formatted_address = str_ireplace( array_keys( $replacements ), $replacements, $format );
778 778
 
779
-	// Remove unavailable tags.
779
+    // Remove unavailable tags.
780 780
     $formatted_address = preg_replace( '/\{\{\w+\}\}/', '', $formatted_address );
781 781
 
782 782
     // Clean up white space.
783
-	$formatted_address = preg_replace( '/  +/', ' ', trim( $formatted_address ) );
783
+    $formatted_address = preg_replace( '/  +/', ' ', trim( $formatted_address ) );
784 784
     $formatted_address = preg_replace( '/\n\n+/', "\n", $formatted_address );
785 785
 
786 786
     // Break newlines apart and remove empty lines/trim commas and white space.
787
-	$formatted_address = array_filter( array_map( 'wpinv_trim_formatted_address_line', explode( "\n", $formatted_address ) ) );
787
+    $formatted_address = array_filter( array_map( 'wpinv_trim_formatted_address_line', explode( "\n", $formatted_address ) ) );
788 788
 
789 789
     // Add html breaks.
790
-	$formatted_address = implode( $separator, $formatted_address );
790
+    $formatted_address = implode( $separator, $formatted_address );
791 791
 
792
-	// We're done!
793
-	return $formatted_address;
792
+    // We're done!
793
+    return $formatted_address;
794 794
 
795 795
 }
796 796
 
@@ -836,7 +836,7 @@  discard block
 block discarded – undo
836 836
 function getpaid_display_invoice_subscriptions( $invoice ) {
837 837
 
838 838
     // Subscriptions.
839
-	$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
839
+    $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
840 840
 
841 841
     if ( empty( $subscriptions ) || ! $invoice->is_recurring() ) {
842 842
         return;
@@ -1052,7 +1052,7 @@  discard block
 block discarded – undo
1052 1052
 }
1053 1053
 
1054 1054
 function wpinv_empty_cart_message() {
1055
-	return apply_filters( 'wpinv_empty_cart_message', '<span class="wpinv_empty_cart">' . __( 'Your cart is empty.', 'invoicing' ) . '</span>' );
1055
+    return apply_filters( 'wpinv_empty_cart_message', '<span class="wpinv_empty_cart">' . __( 'Your cart is empty.', 'invoicing' ) . '</span>' );
1056 1056
 }
1057 1057
 
1058 1058
 /**
@@ -1250,9 +1250,9 @@  discard block
 block discarded – undo
1250 1250
 
1251 1251
     if ( 0 == count( $form->get_items() ) ) {
1252 1252
         aui()->alert(
1253
-			array(
1254
-				'type'    => 'warning',
1255
-				'content' => __( 'No published items found', 'invoicing' ),
1253
+            array(
1254
+                'type'    => 'warning',
1255
+                'content' => __( 'No published items found', 'invoicing' ),
1256 1256
             ),
1257 1257
             true
1258 1258
         );
@@ -1275,10 +1275,10 @@  discard block
 block discarded – undo
1275 1275
     $invoice = wpinv_get_invoice( $invoice_id );
1276 1276
 
1277 1277
     if ( empty( $invoice ) ) {
1278
-		aui()->alert(
1279
-			array(
1280
-				'type'    => 'warning',
1281
-				'content' => __( 'Invoice not found', 'invoicing' ),
1278
+        aui()->alert(
1279
+            array(
1280
+                'type'    => 'warning',
1281
+                'content' => __( 'Invoice not found', 'invoicing' ),
1282 1282
             ),
1283 1283
             true
1284 1284
         );
@@ -1286,10 +1286,10 @@  discard block
 block discarded – undo
1286 1286
     }
1287 1287
 
1288 1288
     if ( $invoice->is_paid() ) {
1289
-		aui()->alert(
1290
-			array(
1291
-				'type'    => 'warning',
1292
-				'content' => __( 'Invoice has already been paid', 'invoicing' ),
1289
+        aui()->alert(
1290
+            array(
1291
+                'type'    => 'warning',
1292
+                'content' => __( 'Invoice has already been paid', 'invoicing' ),
1293 1293
             ),
1294 1294
             true
1295 1295
         );
@@ -1354,7 +1354,7 @@  discard block
 block discarded – undo
1354 1354
         return "<button class='btn btn-primary getpaid-payment-button' type='button' data-form='$form'>$label</button>";
1355 1355
     }
1356 1356
 
1357
-	if ( ! empty( $items ) ) {
1357
+    if ( ! empty( $items ) ) {
1358 1358
         $items  = esc_attr( $items );
1359 1359
         return "<button class='btn btn-primary getpaid-payment-button' type='button' data-item='$items'>$label</button>";
1360 1360
     }
@@ -1554,21 +1554,21 @@  discard block
 block discarded – undo
1554 1554
 
1555 1555
         return aui()->select(
1556 1556
             array(
1557
-				'options'          => $states,
1558
-				'name'             => esc_attr( $field_name ),
1559
-				'id'               => sanitize_html_class( $field_name ) . $uniqid,
1560
-				'value'            => sanitize_text_field( $state ),
1561
-				'placeholder'      => $placeholder,
1562
-				'required'         => $required,
1563
-				'label'            => wp_kses_post( $label ),
1564
-				'label_type'       => 'vertical',
1565
-				'help_text'        => $help_text,
1566
-				'class'            => 'getpaid-address-field wpinv_state',
1567
-				'wrap_class'       => "$wrapper_class getpaid-address-field-wrapper__state",
1568
-				'label_class'      => 'getpaid-address-field-label getpaid-address-field-label__state',
1569
-				'extra_attributes' => array(
1570
-					'autocomplete' => 'address-level1',
1571
-				),
1557
+                'options'          => $states,
1558
+                'name'             => esc_attr( $field_name ),
1559
+                'id'               => sanitize_html_class( $field_name ) . $uniqid,
1560
+                'value'            => sanitize_text_field( $state ),
1561
+                'placeholder'      => $placeholder,
1562
+                'required'         => $required,
1563
+                'label'            => wp_kses_post( $label ),
1564
+                'label_type'       => 'vertical',
1565
+                'help_text'        => $help_text,
1566
+                'class'            => 'getpaid-address-field wpinv_state',
1567
+                'wrap_class'       => "$wrapper_class getpaid-address-field-wrapper__state",
1568
+                'label_class'      => 'getpaid-address-field-label getpaid-address-field-label__state',
1569
+                'extra_attributes' => array(
1570
+                    'autocomplete' => 'address-level1',
1571
+                ),
1572 1572
             ),
1573 1573
             $echo
1574 1574
         );
@@ -1664,34 +1664,34 @@  discard block
 block discarded – undo
1664 1664
  * @return array Array of custom fields.
1665 1665
  */
1666 1666
 function getpaid_get_payment_form_custom_fields() {
1667
-	global $wpdb, $payment_form_meta_fields;
1667
+    global $wpdb, $payment_form_meta_fields;
1668 1668
 
1669
-	if ( ! empty( $payment_form_meta_fields ) ) {
1670
-		return $payment_form_meta_fields;
1671
-	}
1669
+    if ( ! empty( $payment_form_meta_fields ) ) {
1670
+        return $payment_form_meta_fields;
1671
+    }
1672 1672
 
1673
-	$results = $wpdb->get_results( "SELECT `pm`.`meta_value` FROM `{$wpdb->postmeta}` AS pm LEFT JOIN `{$wpdb->posts}` AS p ON p.ID = pm.post_id WHERE `pm`.`meta_key` = 'wpinv_form_elements' AND `p`.`post_type` = 'wpi_payment_form'" );
1673
+    $results = $wpdb->get_results( "SELECT `pm`.`meta_value` FROM `{$wpdb->postmeta}` AS pm LEFT JOIN `{$wpdb->posts}` AS p ON p.ID = pm.post_id WHERE `pm`.`meta_key` = 'wpinv_form_elements' AND `p`.`post_type` = 'wpi_payment_form'" );
1674 1674
 
1675
-	$meta_fields = array();
1675
+    $meta_fields = array();
1676 1676
 
1677
-	if ( ! empty( $results ) ) {
1678
-		foreach ( $results as $row ) {
1679
-			$fields = maybe_unserialize( $row->meta_value );
1677
+    if ( ! empty( $results ) ) {
1678
+        foreach ( $results as $row ) {
1679
+            $fields = maybe_unserialize( $row->meta_value );
1680 1680
 
1681
-			if ( ! empty( $fields ) && is_array( $fields ) ) {
1682
-				foreach ( $fields as $field ) {
1683
-					$label = ! empty( $field['add_meta'] ) && ! empty( $field['label'] ) ? wpinv_clean( wp_unslash( $field['label'] ) ) : '';
1681
+            if ( ! empty( $fields ) && is_array( $fields ) ) {
1682
+                foreach ( $fields as $field ) {
1683
+                    $label = ! empty( $field['add_meta'] ) && ! empty( $field['label'] ) ? wpinv_clean( wp_unslash( $field['label'] ) ) : '';
1684 1684
 
1685
-					if ( $label ) {
1686
-						$field_key = '_' . str_replace( array( ' ', "'", '"', ',' ), array( '_', '', '', '_' ), getpaid_strtolower( $label ) );
1687
-						$meta_fields[ $field_key ] = $label;
1688
-					}
1689
-				}
1690
-			}
1691
-		}
1692
-	}
1685
+                    if ( $label ) {
1686
+                        $field_key = '_' . str_replace( array( ' ', "'", '"', ',' ), array( '_', '', '', '_' ), getpaid_strtolower( $label ) );
1687
+                        $meta_fields[ $field_key ] = $label;
1688
+                    }
1689
+                }
1690
+            }
1691
+        }
1692
+    }
1693 1693
 
1694
-	$payment_form_meta_fields = $meta_fields;
1694
+    $payment_form_meta_fields = $meta_fields;
1695 1695
 
1696
-	return $meta_fields;
1696
+    return $meta_fields;
1697 1697
 }
Please login to merge, or discard this patch.
includes/wpinv-helper-functions.php 1 patch
Indentation   +75 added lines, -75 removed lines patch added patch discarded remove patch
@@ -137,13 +137,13 @@  discard block
 block discarded – undo
137 137
  */
138 138
 function wpinv_get_invoice_statuses( $draft = false, $trashed = false, $invoice = false ) {
139 139
 
140
-	$invoice_statuses = array(
141
-		'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
140
+    $invoice_statuses = array(
141
+        'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
142 142
         'publish'        => _x( 'Paid', 'Invoice status', 'invoicing' ),
143 143
         'wpi-processing' => _x( 'Processing', 'Invoice status', 'invoicing' ),
144
-		'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
145
-		'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
146
-		'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
144
+        'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
145
+        'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
146
+        'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
147 147
         'wpi-failed'     => _x( 'Failed', 'Invoice status', 'invoicing' ),
148 148
         'wpi-renewal'    => _x( 'Renewal Payment', 'Invoice status', 'invoicing' ),
149 149
     );
@@ -160,7 +160,7 @@  discard block
 block discarded – undo
160 160
         $invoice = $invoice->get_post_type();
161 161
     }
162 162
 
163
-	return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
163
+    return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
164 164
 }
165 165
 
166 166
 /**
@@ -278,25 +278,25 @@  discard block
 block discarded – undo
278 278
  * @return string
279 279
  */
280 280
 function getpaid_get_price_format() {
281
-	$currency_pos = wpinv_currency_position();
282
-	$format       = '%1$s%2$s';
283
-
284
-	switch ( $currency_pos ) {
285
-		case 'left':
286
-			$format = '%1$s%2$s';
287
-			break;
288
-		case 'right':
289
-			$format = '%2$s%1$s';
290
-			break;
291
-		case 'left_space':
292
-			$format = '%1$s&nbsp;%2$s';
293
-			break;
294
-		case 'right_space':
295
-			$format = '%2$s&nbsp;%1$s';
296
-			break;
297
-	}
298
-
299
-	return apply_filters( 'getpaid_price_format', $format, $currency_pos );
281
+    $currency_pos = wpinv_currency_position();
282
+    $format       = '%1$s%2$s';
283
+
284
+    switch ( $currency_pos ) {
285
+        case 'left':
286
+            $format = '%1$s%2$s';
287
+            break;
288
+        case 'right':
289
+            $format = '%2$s%1$s';
290
+            break;
291
+        case 'left_space':
292
+            $format = '%1$s&nbsp;%2$s';
293
+            break;
294
+        case 'right_space':
295
+            $format = '%2$s&nbsp;%1$s';
296
+            break;
297
+    }
298
+
299
+    return apply_filters( 'getpaid_price_format', $format, $currency_pos );
300 300
 }
301 301
 
302 302
 /**
@@ -402,13 +402,13 @@  discard block
 block discarded – undo
402 402
  * @param mixed  $value Value.
403 403
  */
404 404
 function getpaid_maybe_define_constant( $name, $value ) {
405
-	if ( ! defined( $name ) ) {
406
-		define( $name, $value );
407
-	}
405
+    if ( ! defined( $name ) ) {
406
+        define( $name, $value );
407
+    }
408 408
 }
409 409
 
410 410
 function wpinv_get_php_arg_separator_output() {
411
-	return ini_get( 'arg_separator.output' );
411
+    return ini_get( 'arg_separator.output' );
412 412
 }
413 413
 
414 414
 function wpinv_rgb_from_hex( $color ) {
@@ -719,16 +719,16 @@  discard block
 block discarded – undo
719 719
     return wp_kses(
720 720
         html_entity_decode( $var ),
721 721
         array(
722
-			'br'     => array(),
723
-			'em'     => array(),
724
-			'strong' => array(),
725
-			'b'      => array(),
726
-			'small'  => array(),
727
-			'span'   => array(),
728
-			'ul'     => array(),
729
-			'li'     => array(),
730
-			'ol'     => array(),
731
-			'p'      => array(),
722
+            'br'     => array(),
723
+            'em'     => array(),
724
+            'strong' => array(),
725
+            'b'      => array(),
726
+            'small'  => array(),
727
+            'span'   => array(),
728
+            'ul'     => array(),
729
+            'li'     => array(),
730
+            'ol'     => array(),
731
+            'p'      => array(),
732 732
         )
733 733
     );
734 734
 }
@@ -779,11 +779,11 @@  discard block
 block discarded – undo
779 779
         $list = array();
780 780
     }
781 781
 
782
-	if ( ! is_array( $list ) ) {
783
-		return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
784
-	}
782
+    if ( ! is_array( $list ) ) {
783
+        return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
784
+    }
785 785
 
786
-	return $list;
786
+    return $list;
787 787
 }
788 788
 
789 789
 /**
@@ -824,17 +824,17 @@  discard block
 block discarded – undo
824 824
  */
825 825
 function wpinv_clean( $var ) {
826 826
 
827
-	if ( is_array( $var ) ) {
828
-		return array_map( 'wpinv_clean', $var );
827
+    if ( is_array( $var ) ) {
828
+        return array_map( 'wpinv_clean', $var );
829 829
     }
830 830
 
831 831
     if ( is_object( $var ) ) {
832
-		$object_vars = get_object_vars( $var );
833
-		foreach ( $object_vars as $property_name => $property_value ) {
834
-			$var->$property_name = wpinv_clean( $property_value );
832
+        $object_vars = get_object_vars( $var );
833
+        foreach ( $object_vars as $property_name => $property_value ) {
834
+            $var->$property_name = wpinv_clean( $property_value );
835 835
         }
836 836
         return $var;
837
-	}
837
+    }
838 838
 
839 839
     return is_string( $var ) ? sanitize_text_field( stripslashes( $var ) ) : $var;
840 840
 }
@@ -847,7 +847,7 @@  discard block
 block discarded – undo
847 847
  */
848 848
 function getpaid_convert_price_string_to_options( $str ) {
849 849
 
850
-	$raw_options = array_map( 'trim', explode( ',', $str ) );
850
+    $raw_options = array_map( 'trim', explode( ',', $str ) );
851 851
     $options     = array();
852 852
 
853 853
     foreach ( $raw_options as $option ) {
@@ -936,7 +936,7 @@  discard block
 block discarded – undo
936 936
  * @return string
937 937
  */
938 938
 function getpaid_date_format() {
939
-	return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
939
+    return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
940 940
 }
941 941
 
942 942
 /**
@@ -945,7 +945,7 @@  discard block
 block discarded – undo
945 945
  * @return string
946 946
  */
947 947
 function getpaid_time_format() {
948
-	return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
948
+    return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
949 949
 }
950 950
 
951 951
 /**
@@ -958,15 +958,15 @@  discard block
 block discarded – undo
958 958
 function getpaid_limit_length( $string, $limit ) {
959 959
     $str_limit = $limit - 3;
960 960
 
961
-	if ( function_exists( 'mb_strimwidth' ) ) {
962
-		if ( mb_strlen( $string ) > $limit ) {
963
-			$string = mb_strimwidth( $string, 0, $str_limit ) . '...';
964
-		}
965
-	} else {
966
-		if ( strlen( $string ) > $limit ) {
967
-			$string = substr( $string, 0, $str_limit ) . '...';
968
-		}
969
-	}
961
+    if ( function_exists( 'mb_strimwidth' ) ) {
962
+        if ( mb_strlen( $string ) > $limit ) {
963
+            $string = mb_strimwidth( $string, 0, $str_limit ) . '...';
964
+        }
965
+    } else {
966
+        if ( strlen( $string ) > $limit ) {
967
+            $string = substr( $string, 0, $str_limit ) . '...';
968
+        }
969
+    }
970 970
     return $string;
971 971
 
972 972
 }
@@ -1096,12 +1096,12 @@  discard block
 block discarded – undo
1096 1096
     $types = get_allowed_mime_types();
1097 1097
 
1098 1098
     if ( isset( $types['htm|html'] ) ) {
1099
-		unset( $types['htm|html'] );
1100
-	}
1099
+        unset( $types['htm|html'] );
1100
+    }
1101 1101
 
1102 1102
     if ( isset( $types['js'] ) ) {
1103
-		unset( $types['js'] );
1104
-	}
1103
+        unset( $types['js'] );
1104
+    }
1105 1105
 
1106 1106
     return $types;
1107 1107
 
@@ -1157,11 +1157,11 @@  discard block
 block discarded – undo
1157 1157
  * @return string Returns converted string.
1158 1158
  */
1159 1159
 function getpaid_strtolower( $string, $charset = 'UTF-8' ) {
1160
-	if ( function_exists( 'mb_convert_case' ) ) {
1161
-		return mb_convert_case( $string, MB_CASE_LOWER, $charset );
1162
-	} else {
1163
-		return strtolower( $string );
1164
-	}
1160
+    if ( function_exists( 'mb_convert_case' ) ) {
1161
+        return mb_convert_case( $string, MB_CASE_LOWER, $charset );
1162
+    } else {
1163
+        return strtolower( $string );
1164
+    }
1165 1165
 }
1166 1166
 
1167 1167
 /**
@@ -1174,9 +1174,9 @@  discard block
 block discarded – undo
1174 1174
  * @return string Returns converted string.
1175 1175
  */
1176 1176
 function getpaid_strtoupper( $string, $charset = 'UTF-8' ) {
1177
-	if ( function_exists( 'mb_convert_case' ) ) {
1178
-		return mb_convert_case( $string, MB_CASE_UPPER, $charset );
1179
-	} else {
1180
-		return strtoupper( $string );
1181
-	}
1177
+    if ( function_exists( 'mb_convert_case' ) ) {
1178
+        return mb_convert_case( $string, MB_CASE_UPPER, $charset );
1179
+    } else {
1180
+        return strtoupper( $string );
1181
+    }
1182 1182
 }
1183 1183
\ No newline at end of file
Please login to merge, or discard this patch.