Passed
Push — master ( 332b80...aae416 )
by Kiran
19:30 queued 13:22
created
vendor/ayecode/wp-super-duper/hello-world.php 1 patch
Indentation   +106 added lines, -106 removed lines patch added patch discarded remove patch
@@ -3,114 +3,114 @@  discard block
 block discarded – undo
3 3
 class SD_Hello_World extends WP_Super_Duper {
4 4
 
5 5
 
6
-	public $arguments;
7
-
8
-	/**
9
-	 * Sets up the widgets name etc
10
-	 */
11
-	public function __construct() {
12
-
13
-		$options = array(
14
-			'textdomain'     => 'super-duper',
15
-			// textdomain of the plugin/theme (used to prefix the Gutenberg block)
16
-			'block-icon'     => 'fas fa-globe-americas',
17
-			// Dash icon name for the block: https://developer.wordpress.org/resource/dashicons/#arrow-right
18
-			// OR font-awesome 5 class name: fas fa-globe-americas
19
-			'block-category' => 'widgets',
20
-			// the category for the block, 'common', 'formatting', 'layout', 'widgets', 'embed'.
21
-			'block-keywords' => "['hello','world']",
22
-			// used in the block search, MAX 3
23
-			'block-output'   => array( // the block visual output elements as an array
6
+    public $arguments;
7
+
8
+    /**
9
+     * Sets up the widgets name etc
10
+     */
11
+    public function __construct() {
12
+
13
+        $options = array(
14
+            'textdomain'     => 'super-duper',
15
+            // textdomain of the plugin/theme (used to prefix the Gutenberg block)
16
+            'block-icon'     => 'fas fa-globe-americas',
17
+            // Dash icon name for the block: https://developer.wordpress.org/resource/dashicons/#arrow-right
18
+            // OR font-awesome 5 class name: fas fa-globe-americas
19
+            'block-category' => 'widgets',
20
+            // the category for the block, 'common', 'formatting', 'layout', 'widgets', 'embed'.
21
+            'block-keywords' => "['hello','world']",
22
+            // used in the block search, MAX 3
23
+            'block-output'   => array( // the block visual output elements as an array
24 24
 //				array(
25 25
 //					'element' => 'p',
26 26
 //					'title'   => __( 'Placeholder', 'ayecode-connect' ),
27 27
 //					'class'   => '[%className%]',
28 28
 //					'content' => 'Hello: [%after_text%]' // block properties can be added by wrapping them in [%name%]
29 29
 //				)
30
-				array(
31
-					'element'       => 'BlocksProps',
32
-					'inner_element' => 'p',
33
-					'blockProps'    => array(
34
-						'className'               => '[%WrapClass%]',
30
+                array(
31
+                    'element'       => 'BlocksProps',
32
+                    'inner_element' => 'p',
33
+                    'blockProps'    => array(
34
+                        'className'               => '[%WrapClass%]',
35 35
 //						'content' => 'Hello: [%after_text%]'
36 36
 //						'if_dangerouslySetInnerHTML' => '{__html: blockstrap_build_shape(props.attributes) }',
37
-					),
38
-					'content' => 'Hello: [%after_text%]' // block properties can be added by wrapping them in [%name%]
39
-
40
-
41
-				),
42
-			),
43
-			'block-wrap'    => '', // You can specify the type of element to wrap the block `div` or `span` etc.. Or blank for no wrap at all.
44
-			'class_name'     => __CLASS__,
45
-			// The calling class name
46
-			'base_id'        => 'hello_world',
47
-			// this is used as the widget id and the shortcode id.
48
-			'name'           => __( 'Hello World', 'ayecode-connect' ),
49
-			// the name of the widget/block
50
-			'widget_ops'     => array(
51
-				'classname'   => 'hello-world-class',
52
-				// widget class
53
-				'description' => esc_html__( 'This is an example that will take a text parameter and output it after `Hello:`.', 'ayecode-connect' ),
54
-				// widget description
55
-			),
56
-			'no_wrap'       => true, // This will prevent the widget being wrapped in the containing widget class div.
57
-			'arguments'      => array( // these are the arguments that will be used in the widget, shortcode and block settings.
58
-				'after_text' => array( // this is the input name=''
59
-					'title'       => __( 'Text after hello:', 'ayecode-connect' ),
60
-					// input title
61
-					'desc'        => __( 'This is the text that will appear after `Hello:`.', 'ayecode-connect' ),
62
-					// input description
63
-					'type'        => 'text',
64
-					// the type of input, test, select, checkbox etc.
65
-					'placeholder' => 'World',
66
-					// the input placeholder text.
67
-					'desc_tip'    => true,
68
-					// if the input should show the widget description text as a tooltip.
69
-					'default'     => 'World',
70
-					// the input default value.
71
-					'advanced'    => false
72
-					// not yet implemented
73
-				),
74
-			)
75
-		);
76
-
77
-		parent::__construct( $options );
78
-	}
79
-
80
-
81
-	/**
82
-	 * This is the output function for the widget, shortcode and block (front end).
83
-	 *
84
-	 * @param array $args The arguments values.
85
-	 * @param array $widget_args The widget arguments when used.
86
-	 * @param string $content The shortcode content argument
87
-	 *
88
-	 * @return string
89
-	 */
90
-	public function output( $args = array(), $widget_args = array(), $content = '' ) {
91
-
92
-		/**
93
-		 * @var string $after_text
94
-		 * @var string $another_input This is added by filter below.
95
-		 */
96
-		extract( $args, EXTR_SKIP );
97
-
98
-		/*
37
+                    ),
38
+                    'content' => 'Hello: [%after_text%]' // block properties can be added by wrapping them in [%name%]
39
+
40
+
41
+                ),
42
+            ),
43
+            'block-wrap'    => '', // You can specify the type of element to wrap the block `div` or `span` etc.. Or blank for no wrap at all.
44
+            'class_name'     => __CLASS__,
45
+            // The calling class name
46
+            'base_id'        => 'hello_world',
47
+            // this is used as the widget id and the shortcode id.
48
+            'name'           => __( 'Hello World', 'ayecode-connect' ),
49
+            // the name of the widget/block
50
+            'widget_ops'     => array(
51
+                'classname'   => 'hello-world-class',
52
+                // widget class
53
+                'description' => esc_html__( 'This is an example that will take a text parameter and output it after `Hello:`.', 'ayecode-connect' ),
54
+                // widget description
55
+            ),
56
+            'no_wrap'       => true, // This will prevent the widget being wrapped in the containing widget class div.
57
+            'arguments'      => array( // these are the arguments that will be used in the widget, shortcode and block settings.
58
+                'after_text' => array( // this is the input name=''
59
+                    'title'       => __( 'Text after hello:', 'ayecode-connect' ),
60
+                    // input title
61
+                    'desc'        => __( 'This is the text that will appear after `Hello:`.', 'ayecode-connect' ),
62
+                    // input description
63
+                    'type'        => 'text',
64
+                    // the type of input, test, select, checkbox etc.
65
+                    'placeholder' => 'World',
66
+                    // the input placeholder text.
67
+                    'desc_tip'    => true,
68
+                    // if the input should show the widget description text as a tooltip.
69
+                    'default'     => 'World',
70
+                    // the input default value.
71
+                    'advanced'    => false
72
+                    // not yet implemented
73
+                ),
74
+            )
75
+        );
76
+
77
+        parent::__construct( $options );
78
+    }
79
+
80
+
81
+    /**
82
+     * This is the output function for the widget, shortcode and block (front end).
83
+     *
84
+     * @param array $args The arguments values.
85
+     * @param array $widget_args The widget arguments when used.
86
+     * @param string $content The shortcode content argument
87
+     *
88
+     * @return string
89
+     */
90
+    public function output( $args = array(), $widget_args = array(), $content = '' ) {
91
+
92
+        /**
93
+         * @var string $after_text
94
+         * @var string $another_input This is added by filter below.
95
+         */
96
+        extract( $args, EXTR_SKIP );
97
+
98
+        /*
99 99
 		 * This value is added by filter so might not exist if filter is removed so we check.
100 100
 		 */
101
-		if ( ! isset( $another_input ) ) {
102
-			$another_input = '';
103
-		}
101
+        if ( ! isset( $another_input ) ) {
102
+            $another_input = '';
103
+        }
104 104
 
105
-		return "Helllo: " . $after_text . "" . $another_input;
105
+        return "Helllo: " . $after_text . "" . $another_input;
106 106
 
107
-	}
107
+    }
108 108
 
109 109
 }
110 110
 
111 111
 // register it.
112 112
 add_action( 'widgets_init', function () {
113
-	register_widget( 'SD_Hello_World' );
113
+    register_widget( 'SD_Hello_World' );
114 114
 } );
115 115
 
116 116
 
@@ -123,26 +123,26 @@  discard block
 block discarded – undo
123 123
  */
124 124
 function _my_extra_arguments( $options ) {
125 125
 
126
-	/*
126
+    /*
127 127
 	 * Add a new input option.
128 128
 	 */
129
-	$options['arguments']['another_input'] = array(
130
-		'name'        => 'another_input', // this is the input name=''
131
-		'title'       => __( 'Another input:', 'ayecode-connect' ), // input title
132
-		'desc'        => __( 'This is an input added via filter.', 'ayecode-connect' ), // input description
133
-		'type'        => 'text', // the type of input, test, select, checkbox etc.
134
-		'placeholder' => 'Placeholder text', // the input placeholder text.
135
-		'desc_tip'    => true, // if the input should show the widget description text as a tooltip.
136
-		'default'     => '', // the input default value.
137
-		'advanced'    => false // not yet implemented
138
-	);
139
-
140
-	/*
129
+    $options['arguments']['another_input'] = array(
130
+        'name'        => 'another_input', // this is the input name=''
131
+        'title'       => __( 'Another input:', 'ayecode-connect' ), // input title
132
+        'desc'        => __( 'This is an input added via filter.', 'ayecode-connect' ), // input description
133
+        'type'        => 'text', // the type of input, test, select, checkbox etc.
134
+        'placeholder' => 'Placeholder text', // the input placeholder text.
135
+        'desc_tip'    => true, // if the input should show the widget description text as a tooltip.
136
+        'default'     => '', // the input default value.
137
+        'advanced'    => false // not yet implemented
138
+    );
139
+
140
+    /*
141 141
 	 * Output the new option in the block output also.
142 142
 	 */
143
-	$options['block-output']['element::p']['content'] = $options['block-output']['element::p']['content'] . " [%another_input%]";;
143
+    $options['block-output']['element::p']['content'] = $options['block-output']['element::p']['content'] . " [%another_input%]";;
144 144
 
145
-	return $options;
145
+    return $options;
146 146
 }
147 147
 
148 148
 //add_filter( 'wp_super_duper_options_hello_world', '_my_extra_arguments' );
149 149
\ No newline at end of file
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +616 added lines, -616 removed lines patch added patch discarded remove patch
@@ -14,620 +14,620 @@
 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' ), 10 );
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' );
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
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
383
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'jquery' ), $version, true );
384
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
-	}
386
-
387
-	public function wpinv_actions() {
388
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
389
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
-		}
391
-
392
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
-		}
395
-	}
396
-
397
-	/**
398
-	 * Fires an action after verifying that a user can fire them.
399
-	 *
400
-	 * Note: If the action is on an invoice, subscription etc, esure that the
401
-	 * current user owns the invoice/subscription.
402
-	 */
403
-	public function maybe_do_authenticated_action() {
404
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
-			$data = wp_unslash( $_REQUEST );
407
-
408
-			if ( is_user_logged_in() ) {
409
-				do_action( "getpaid_authenticated_action_$key", $data );
410
-			}
411
-
412
-			do_action( "getpaid_unauthenticated_action_$key", $data );
413
-		}
414
-	}
415
-
416
-	public function pre_get_posts( $wp_query ) {
417
-		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() ) {
418
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
-		}
420
-
421
-		return $wp_query;
422
-	}
423
-
424
-	/**
425
-	 * Register widgets
426
-	 *
427
-	 */
428
-	public function register_widgets() {
429
-		global $pagenow;
430
-
431
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
432
-		// So we disable our widgets when editing a page with UX Builder.
433
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
-			return;
435
-		}
436
-
437
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
-
439
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
-			// don't initiate in these conditions.
441
-		} else {
442
-			// Only load allowed widgets.
443
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
-			$widgets = apply_filters(
445
-				'getpaid_widget_classes',
446
-				array(
447
-					'WPInv_Checkout_Widget',
448
-					'WPInv_History_Widget',
449
-					'WPInv_Receipt_Widget',
450
-					'WPInv_Subscriptions_Widget',
451
-					'WPInv_Buy_Item_Widget',
452
-					'WPInv_Messages_Widget',
453
-					'WPInv_GetPaid_Widget',
454
-					'WPInv_Invoice_Widget',
455
-				)
456
-			);
457
-
458
-			// For each widget...
459
-			foreach ( $widgets as $widget ) {
460
-				// Abort early if it is excluded for this page.
461
-				if ( in_array( $widget, $exclude ) ) {
462
-					continue;
463
-				}
464
-
465
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
-					register_widget( $widget );
468
-				} else {
469
-					new $widget();
470
-				}
471
-			}
472
-		}
473
-	}
474
-
475
-	/**
476
-	 * Upgrades the database.
477
-	 *
478
-	 * @since 2.0.2
479
-	 */
480
-	public function maybe_upgrade_database() {
481
-		// Ensure the database tables are up to date.
482
-		GetPaid_Installer::maybe_create_db_tables();
483
-
484
-		$wpi_version = get_option( 'wpinv_version', 0 );
485
-
486
-		if ( $wpi_version == WPINV_VERSION ) {
487
-			return;
488
-		}
489
-
490
-		$installer = new GetPaid_Installer();
491
-
492
-		if ( empty( $wpi_version ) ) {
493
-			return $installer->upgrade_db( 0 );
494
-		}
495
-
496
-		$upgrades  = array(
497
-			'0.0.5' => '004',
498
-			'1.0.3' => '102',
499
-			'2.0.0' => '118',
500
-			'2.8.0' => '279',
501
-		);
502
-
503
-		foreach ( $upgrades as $key => $method ) {
504
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
505
-				return $installer->upgrade_db( $method );
506
-			}
507
-		}
508
-	}
509
-
510
-	/**
511
-	 * Flushes the permalinks if needed.
512
-	 *
513
-	 * @since 2.0.8
514
-	 */
515
-	public function maybe_flush_permalinks() {
516
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
517
-
518
-		if ( ! empty( $flush ) ) {
519
-			flush_rewrite_rules();
520
-			delete_option( 'wpinv_flush_permalinks' );
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Remove our pages from yoast sitemaps.
526
-	 *
527
-	 * @since 1.0.19
528
-	 * @param int[] $excluded_posts_ids
529
-	 */
530
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
-		// Ensure that we have an array.
532
-		if ( ! is_array( $excluded_posts_ids ) ) {
533
-			$excluded_posts_ids = array();
534
-		}
535
-
536
-		// Prepare our pages.
537
-		$our_pages = array();
538
-
539
-		// Checkout page.
540
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
541
-
542
-		// Success page.
543
-		$our_pages[] = wpinv_get_option( 'success_page', false );
544
-
545
-		// Failure page.
546
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
547
-
548
-		// History page.
549
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
-
551
-		// Subscriptions page.
552
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
-
554
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
-
556
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
-
558
-		return array_unique( $excluded_posts_ids );
559
-	}
560
-
561
-	/**
562
-	 * Remove our pages from yoast sitemaps.
563
-	 *
564
-	 * @since 1.0.19
565
-	 * @param string[] $post_types
566
-	 */
567
-	public function exclude_invoicing_post_types( $post_types ) {
568
-		// Ensure that we have an array.
569
-		if ( ! is_array( $post_types ) ) {
570
-			$post_types = array();
571
-		}
572
-
573
-		// Remove our post types.
574
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
-	}
576
-
577
-	/**
578
-	 * Displays additional footer code.
579
-	 *
580
-	 * @since 2.0.0
581
-	 */
582
-	public function wp_footer() {
583
-		wpinv_get_template( 'frontend-footer.php' );
584
-	}
585
-
586
-	/**
587
-	 * Displays additional header code.
588
-	 *
589
-	 * @since 2.0.0
590
-	 */
591
-	public function wp_head() {
592
-		wpinv_get_template( 'frontend-head.php' );
593
-	}
594
-
595
-	/**
596
-	 * Custom query vars.
597
-	 *
598
-	 */
599
-	public function custom_query_vars( $vars ) {
600
-		$vars[] = 'getpaid-ipn';
601
-		return $vars;
602
-	}
603
-
604
-	/**
605
-	 * Add rewrite tags and rules.
606
-	 *
607
-	 */
608
-	public function add_rewrite_rule() {
609
-		$tag = 'getpaid-ipn';
610
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
611
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
-	}
613
-
614
-	/**
615
-	 * Processes non-query string ipns.
616
-	 *
617
-	 */
618
-	public function maybe_process_new_ipn( $query ) {
619
-		if ( is_admin() || ! $query->is_main_query() ) {
620
-			return;
621
-		}
622
-
623
-		$gateway = get_query_var( 'getpaid-ipn' );
624
-
625
-		if ( ! empty( $gateway ) ) {
626
-			$gateway = sanitize_text_field( $gateway );
627
-			nocache_headers();
628
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
629
-			do_action( "wpinv_verify_{$gateway}_ipn" );
630
-			exit;
631
-		}
632
-	}
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' ), 10 );
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' );
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
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
383
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'jquery' ), $version, true );
384
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
+    }
386
+
387
+    public function wpinv_actions() {
388
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
389
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
+        }
391
+
392
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
+        }
395
+    }
396
+
397
+    /**
398
+     * Fires an action after verifying that a user can fire them.
399
+     *
400
+     * Note: If the action is on an invoice, subscription etc, esure that the
401
+     * current user owns the invoice/subscription.
402
+     */
403
+    public function maybe_do_authenticated_action() {
404
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
+            $data = wp_unslash( $_REQUEST );
407
+
408
+            if ( is_user_logged_in() ) {
409
+                do_action( "getpaid_authenticated_action_$key", $data );
410
+            }
411
+
412
+            do_action( "getpaid_unauthenticated_action_$key", $data );
413
+        }
414
+    }
415
+
416
+    public function pre_get_posts( $wp_query ) {
417
+        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() ) {
418
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
+        }
420
+
421
+        return $wp_query;
422
+    }
423
+
424
+    /**
425
+     * Register widgets
426
+     *
427
+     */
428
+    public function register_widgets() {
429
+        global $pagenow;
430
+
431
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
432
+        // So we disable our widgets when editing a page with UX Builder.
433
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
+            return;
435
+        }
436
+
437
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
+
439
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
+            // don't initiate in these conditions.
441
+        } else {
442
+            // Only load allowed widgets.
443
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
+            $widgets = apply_filters(
445
+                'getpaid_widget_classes',
446
+                array(
447
+                    'WPInv_Checkout_Widget',
448
+                    'WPInv_History_Widget',
449
+                    'WPInv_Receipt_Widget',
450
+                    'WPInv_Subscriptions_Widget',
451
+                    'WPInv_Buy_Item_Widget',
452
+                    'WPInv_Messages_Widget',
453
+                    'WPInv_GetPaid_Widget',
454
+                    'WPInv_Invoice_Widget',
455
+                )
456
+            );
457
+
458
+            // For each widget...
459
+            foreach ( $widgets as $widget ) {
460
+                // Abort early if it is excluded for this page.
461
+                if ( in_array( $widget, $exclude ) ) {
462
+                    continue;
463
+                }
464
+
465
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
+                    register_widget( $widget );
468
+                } else {
469
+                    new $widget();
470
+                }
471
+            }
472
+        }
473
+    }
474
+
475
+    /**
476
+     * Upgrades the database.
477
+     *
478
+     * @since 2.0.2
479
+     */
480
+    public function maybe_upgrade_database() {
481
+        // Ensure the database tables are up to date.
482
+        GetPaid_Installer::maybe_create_db_tables();
483
+
484
+        $wpi_version = get_option( 'wpinv_version', 0 );
485
+
486
+        if ( $wpi_version == WPINV_VERSION ) {
487
+            return;
488
+        }
489
+
490
+        $installer = new GetPaid_Installer();
491
+
492
+        if ( empty( $wpi_version ) ) {
493
+            return $installer->upgrade_db( 0 );
494
+        }
495
+
496
+        $upgrades  = array(
497
+            '0.0.5' => '004',
498
+            '1.0.3' => '102',
499
+            '2.0.0' => '118',
500
+            '2.8.0' => '279',
501
+        );
502
+
503
+        foreach ( $upgrades as $key => $method ) {
504
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
505
+                return $installer->upgrade_db( $method );
506
+            }
507
+        }
508
+    }
509
+
510
+    /**
511
+     * Flushes the permalinks if needed.
512
+     *
513
+     * @since 2.0.8
514
+     */
515
+    public function maybe_flush_permalinks() {
516
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
517
+
518
+        if ( ! empty( $flush ) ) {
519
+            flush_rewrite_rules();
520
+            delete_option( 'wpinv_flush_permalinks' );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Remove our pages from yoast sitemaps.
526
+     *
527
+     * @since 1.0.19
528
+     * @param int[] $excluded_posts_ids
529
+     */
530
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
+        // Ensure that we have an array.
532
+        if ( ! is_array( $excluded_posts_ids ) ) {
533
+            $excluded_posts_ids = array();
534
+        }
535
+
536
+        // Prepare our pages.
537
+        $our_pages = array();
538
+
539
+        // Checkout page.
540
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
541
+
542
+        // Success page.
543
+        $our_pages[] = wpinv_get_option( 'success_page', false );
544
+
545
+        // Failure page.
546
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
547
+
548
+        // History page.
549
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
+
551
+        // Subscriptions page.
552
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
+
554
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
+
556
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
+
558
+        return array_unique( $excluded_posts_ids );
559
+    }
560
+
561
+    /**
562
+     * Remove our pages from yoast sitemaps.
563
+     *
564
+     * @since 1.0.19
565
+     * @param string[] $post_types
566
+     */
567
+    public function exclude_invoicing_post_types( $post_types ) {
568
+        // Ensure that we have an array.
569
+        if ( ! is_array( $post_types ) ) {
570
+            $post_types = array();
571
+        }
572
+
573
+        // Remove our post types.
574
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
+    }
576
+
577
+    /**
578
+     * Displays additional footer code.
579
+     *
580
+     * @since 2.0.0
581
+     */
582
+    public function wp_footer() {
583
+        wpinv_get_template( 'frontend-footer.php' );
584
+    }
585
+
586
+    /**
587
+     * Displays additional header code.
588
+     *
589
+     * @since 2.0.0
590
+     */
591
+    public function wp_head() {
592
+        wpinv_get_template( 'frontend-head.php' );
593
+    }
594
+
595
+    /**
596
+     * Custom query vars.
597
+     *
598
+     */
599
+    public function custom_query_vars( $vars ) {
600
+        $vars[] = 'getpaid-ipn';
601
+        return $vars;
602
+    }
603
+
604
+    /**
605
+     * Add rewrite tags and rules.
606
+     *
607
+     */
608
+    public function add_rewrite_rule() {
609
+        $tag = 'getpaid-ipn';
610
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
611
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
+    }
613
+
614
+    /**
615
+     * Processes non-query string ipns.
616
+     *
617
+     */
618
+    public function maybe_process_new_ipn( $query ) {
619
+        if ( is_admin() || ! $query->is_main_query() ) {
620
+            return;
621
+        }
622
+
623
+        $gateway = get_query_var( 'getpaid-ipn' );
624
+
625
+        if ( ! empty( $gateway ) ) {
626
+            $gateway = sanitize_text_field( $gateway );
627
+            nocache_headers();
628
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
629
+            do_action( "wpinv_verify_{$gateway}_ipn" );
630
+            exit;
631
+        }
632
+    }
633 633
 }
Please login to merge, or discard this patch.
widgets/subscriptions.php 1 patch
Indentation   +347 added lines, -347 removed lines patch added patch discarded remove patch
@@ -14,143 +14,143 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class WPInv_Subscriptions_Widget extends WP_Super_Duper {
16 16
 
17
-	/**
18
-	 * Register the widget with WordPress.
19
-	 *
20
-	 */
21
-	public function __construct() {
22
-
23
-		$options = array(
24
-			'textdomain'     => 'invoicing',
25
-			'block-icon'     => 'controls-repeat',
26
-			'block-category' => 'widgets',
27
-			'block-keywords' => "['invoicing','subscriptions', 'getpaid']",
28
-			'class_name'     => __CLASS__,
29
-			'base_id'        => 'wpinv_subscriptions',
30
-			'name'           => __( 'GetPaid > Subscriptions', 'invoicing' ),
31
-			'widget_ops'     => array(
32
-				'classname'   => 'getpaid-subscriptions bsui',
33
-				'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ),
34
-			),
35
-			'arguments'      => array(
36
-				'title' => array(
37
-					'title'    => __( 'Widget title', 'invoicing' ),
38
-					'desc'     => __( 'Enter widget title.', 'invoicing' ),
39
-					'type'     => 'text',
40
-					'desc_tip' => true,
41
-					'default'  => '',
42
-					'advanced' => false,
43
-				),
44
-			),
45
-
46
-		);
47
-
48
-		parent::__construct( $options );
49
-	}
50
-
51
-	/**
52
-	 * Retrieves current user's subscriptions.
53
-	 *
54
-	 * @return GetPaid_Subscriptions_Query
55
-	 */
56
-	public function get_subscriptions() {
57
-
58
-		// Prepare license args.
59
-		$args  = array(
60
-			'customer_in' => get_current_user_id(),
61
-			'paged'       => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1,
62
-		);
63
-
64
-		return new GetPaid_Subscriptions_Query( $args );
65
-
66
-	}
67
-
68
-	/**
69
-	 * The Super block output function.
70
-	 *
71
-	 * @param array $args
72
-	 * @param array $widget_args
73
-	 * @param string $content
74
-	 *
75
-	 * @return mixed|string|bool
76
-	 */
77
-	public function output( $args = array(), $widget_args = array(), $content = '' ) {
78
-
79
-		// Ensure that the user is logged in.
80
-		if ( ! is_user_logged_in() ) {
81
-
82
-			return aui()->alert(
83
-				array(
84
-					'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ),
85
-					'type'    => 'error',
86
-				)
87
-			);
88
-
89
-		}
90
-
91
-		// Are we displaying a single subscription?
92
-		if ( isset( $_GET['subscription'] ) ) {
93
-			return $this->display_single_subscription( intval( $_GET['subscription'] ) );
94
-		}
95
-
96
-		// Retrieve the user's subscriptions.
97
-		$subscriptions = $this->get_subscriptions();
98
-
99
-		// Start the output buffer.
100
-		ob_start();
101
-
102
-		// Backwards compatibility.
103
-		do_action( 'wpinv_before_user_subscriptions' );
104
-
105
-		// Display errors and notices.
106
-		wpinv_print_errors();
107
-
108
-		do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions );
109
-
110
-		// Print the table header.
111
-		$this->print_table_header();
112
-
113
-		// Print table body.
114
-		$this->print_table_body( $subscriptions->get_results() );
115
-
116
-		// Print table footer.
117
-		$this->print_table_footer();
118
-
119
-		// Print the navigation.
120
-		$this->print_navigation( $subscriptions->get_total() );
121
-
122
-		// Backwards compatibility.
123
-		do_action( 'wpinv_after_user_subscriptions' );
124
-
125
-		// Return the output.
126
-		return ob_get_clean();
127
-
128
-	}
129
-
130
-	/**
131
-	 * Retrieves the subscription columns.
132
-	 *
133
-	 * @return array
134
-	 */
135
-	public function get_subscriptions_table_columns() {
17
+    /**
18
+     * Register the widget with WordPress.
19
+     *
20
+     */
21
+    public function __construct() {
22
+
23
+        $options = array(
24
+            'textdomain'     => 'invoicing',
25
+            'block-icon'     => 'controls-repeat',
26
+            'block-category' => 'widgets',
27
+            'block-keywords' => "['invoicing','subscriptions', 'getpaid']",
28
+            'class_name'     => __CLASS__,
29
+            'base_id'        => 'wpinv_subscriptions',
30
+            'name'           => __( 'GetPaid > Subscriptions', 'invoicing' ),
31
+            'widget_ops'     => array(
32
+                'classname'   => 'getpaid-subscriptions bsui',
33
+                'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ),
34
+            ),
35
+            'arguments'      => array(
36
+                'title' => array(
37
+                    'title'    => __( 'Widget title', 'invoicing' ),
38
+                    'desc'     => __( 'Enter widget title.', 'invoicing' ),
39
+                    'type'     => 'text',
40
+                    'desc_tip' => true,
41
+                    'default'  => '',
42
+                    'advanced' => false,
43
+                ),
44
+            ),
45
+
46
+        );
47
+
48
+        parent::__construct( $options );
49
+    }
50
+
51
+    /**
52
+     * Retrieves current user's subscriptions.
53
+     *
54
+     * @return GetPaid_Subscriptions_Query
55
+     */
56
+    public function get_subscriptions() {
57
+
58
+        // Prepare license args.
59
+        $args  = array(
60
+            'customer_in' => get_current_user_id(),
61
+            'paged'       => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1,
62
+        );
63
+
64
+        return new GetPaid_Subscriptions_Query( $args );
65
+
66
+    }
67
+
68
+    /**
69
+     * The Super block output function.
70
+     *
71
+     * @param array $args
72
+     * @param array $widget_args
73
+     * @param string $content
74
+     *
75
+     * @return mixed|string|bool
76
+     */
77
+    public function output( $args = array(), $widget_args = array(), $content = '' ) {
78
+
79
+        // Ensure that the user is logged in.
80
+        if ( ! is_user_logged_in() ) {
81
+
82
+            return aui()->alert(
83
+                array(
84
+                    'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ),
85
+                    'type'    => 'error',
86
+                )
87
+            );
88
+
89
+        }
90
+
91
+        // Are we displaying a single subscription?
92
+        if ( isset( $_GET['subscription'] ) ) {
93
+            return $this->display_single_subscription( intval( $_GET['subscription'] ) );
94
+        }
95
+
96
+        // Retrieve the user's subscriptions.
97
+        $subscriptions = $this->get_subscriptions();
98
+
99
+        // Start the output buffer.
100
+        ob_start();
101
+
102
+        // Backwards compatibility.
103
+        do_action( 'wpinv_before_user_subscriptions' );
104
+
105
+        // Display errors and notices.
106
+        wpinv_print_errors();
107
+
108
+        do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions );
109
+
110
+        // Print the table header.
111
+        $this->print_table_header();
112
+
113
+        // Print table body.
114
+        $this->print_table_body( $subscriptions->get_results() );
115
+
116
+        // Print table footer.
117
+        $this->print_table_footer();
118
+
119
+        // Print the navigation.
120
+        $this->print_navigation( $subscriptions->get_total() );
121
+
122
+        // Backwards compatibility.
123
+        do_action( 'wpinv_after_user_subscriptions' );
124
+
125
+        // Return the output.
126
+        return ob_get_clean();
127
+
128
+    }
129
+
130
+    /**
131
+     * Retrieves the subscription columns.
132
+     *
133
+     * @return array
134
+     */
135
+    public function get_subscriptions_table_columns() {
136 136
 
137
-		$columns = array(
138
-			'subscription' => __( 'Subscription', 'invoicing' ),
139
-			'amount'       => __( 'Amount', 'invoicing' ),
140
-			'renewal-date' => __( 'Next payment', 'invoicing' ),
141
-			'status'       => __( 'Status', 'invoicing' ),
142
-		);
137
+        $columns = array(
138
+            'subscription' => __( 'Subscription', 'invoicing' ),
139
+            'amount'       => __( 'Amount', 'invoicing' ),
140
+            'renewal-date' => __( 'Next payment', 'invoicing' ),
141
+            'status'       => __( 'Status', 'invoicing' ),
142
+        );
143 143
 
144
-		return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns );
145
-	}
144
+        return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns );
145
+    }
146 146
 
147
-	/**
148
-	 * Displays the table header.
149
-	 *
150
-	 */
151
-	public function print_table_header() {
147
+    /**
148
+     * Displays the table header.
149
+     *
150
+     */
151
+    public function print_table_header() {
152 152
 
153
-		?>
153
+        ?>
154 154
 
155 155
 			<table class="table table-bordered table-striped">
156 156
 
@@ -166,122 +166,122 @@  discard block
 block discarded – undo
166 166
 
167 167
 		<?php
168 168
 
169
-	}
169
+    }
170 170
 
171
-	/**
172
-	 * Displays the table body.
173
-	 *
174
-	 * @param WPInv_Subscription[] $subscriptions
175
-	 */
176
-	public function print_table_body( $subscriptions ) {
171
+    /**
172
+     * Displays the table body.
173
+     *
174
+     * @param WPInv_Subscription[] $subscriptions
175
+     */
176
+    public function print_table_body( $subscriptions ) {
177 177
 
178
-		if ( empty( $subscriptions ) ) {
179
-			$this->print_table_body_no_subscriptions();
180
-		} else {
181
-			$this->print_table_body_subscriptions( $subscriptions );
182
-		}
178
+        if ( empty( $subscriptions ) ) {
179
+            $this->print_table_body_no_subscriptions();
180
+        } else {
181
+            $this->print_table_body_subscriptions( $subscriptions );
182
+        }
183 183
 
184
-	}
184
+    }
185 185
 
186
-	/**
187
-	 * Displays the table body if no subscriptions were found.
188
-	 *
189
-	 */
190
-	public function print_table_body_no_subscriptions() {
186
+    /**
187
+     * Displays the table body if no subscriptions were found.
188
+     *
189
+     */
190
+    public function print_table_body_no_subscriptions() {
191 191
 
192
-		?>
192
+        ?>
193 193
 		<tbody>
194 194
 
195 195
 			<tr>
196 196
 				<td colspan="<?php echo count( $this->get_subscriptions_table_columns() ); ?>">
197 197
 
198 198
 					<?php
199
-						aui()->alert(
200
-							array(
201
-								'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ),
202
-								'type'    => 'warning',
203
-							),
199
+                        aui()->alert(
200
+                            array(
201
+                                'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ),
202
+                                'type'    => 'warning',
203
+                            ),
204 204
                             true
205
-						);
206
-					?>
205
+                        );
206
+                    ?>
207 207
 
208 208
 				</td>
209 209
 			</tr>
210 210
 
211 211
 		</tbody>
212 212
 		<?php
213
-	}
213
+    }
214 214
 
215
-	/**
216
-	 * Displays the table body if subscriptions were found.
217
-	 *
218
-	 * @param WPInv_Subscription[] $subscriptions
219
-	 */
220
-	public function print_table_body_subscriptions( $subscriptions ) {
215
+    /**
216
+     * Displays the table body if subscriptions were found.
217
+     *
218
+     * @param WPInv_Subscription[] $subscriptions
219
+     */
220
+    public function print_table_body_subscriptions( $subscriptions ) {
221 221
 
222
-		?>
222
+        ?>
223 223
 		<tbody>
224 224
 
225 225
 			<?php foreach ( $subscriptions as $subscription ) : ?>
226 226
 				<tr class="getpaid-subscriptions-table-row subscription-<?php echo (int) $subscription->get_id(); ?>">
227 227
 					<?php
228
-						wpinv_get_template(
229
-							'subscriptions/subscriptions-table-row.php',
230
-							array(
231
-								'subscription' => $subscription,
232
-								'widget'       => $this,
233
-							)
234
-						);
235
-					?>
228
+                        wpinv_get_template(
229
+                            'subscriptions/subscriptions-table-row.php',
230
+                            array(
231
+                                'subscription' => $subscription,
232
+                                'widget'       => $this,
233
+                            )
234
+                        );
235
+                    ?>
236 236
 				</tr>
237 237
 			<?php endforeach; ?>
238 238
 
239 239
 		</tbody>
240 240
 		<?php
241
-	}
242
-
243
-	/**
244
-	 * Adds row actions to a column
245
-	 *
246
-	 * @param string $content column content
247
-	 * @param WPInv_Subscription $subscription
248
-	 * @since       1.0.0
249
-	 * @return      string
250
-	 */
251
-	public function add_row_actions( $content, $subscription ) {
252
-
253
-		// Prepare row actions.
254
-		$actions = array();
255
-
256
-		// View subscription action.
257
-		$view_url        = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
258
-		$view_url        = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), $view_url ) );
259
-		$actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>';
260
-
261
-		// Filter the actions.
262
-		$actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription );
263
-
264
-		$sanitized  = array();
265
-		foreach ( $actions as $key => $action ) {
266
-			$key         = sanitize_html_class( $key );
267
-			$action      = wp_kses_post( $action );
268
-			$sanitized[] = "<span class='$key'>$action</span>";
269
-		}
270
-
271
-		$row_actions  = "<small class='form-text getpaid-subscription-item-actions'>";
272
-		$row_actions .= implode( ' | ', $sanitized );
273
-		$row_actions .= '</small>';
274
-
275
-		return $content . $row_actions;
276
-	}
277
-
278
-	/**
279
-	 * Displays the table footer.
280
-	 *
281
-	 */
282
-	public function print_table_footer() {
283
-
284
-		?>
241
+    }
242
+
243
+    /**
244
+     * Adds row actions to a column
245
+     *
246
+     * @param string $content column content
247
+     * @param WPInv_Subscription $subscription
248
+     * @since       1.0.0
249
+     * @return      string
250
+     */
251
+    public function add_row_actions( $content, $subscription ) {
252
+
253
+        // Prepare row actions.
254
+        $actions = array();
255
+
256
+        // View subscription action.
257
+        $view_url        = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
258
+        $view_url        = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), $view_url ) );
259
+        $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>';
260
+
261
+        // Filter the actions.
262
+        $actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription );
263
+
264
+        $sanitized  = array();
265
+        foreach ( $actions as $key => $action ) {
266
+            $key         = sanitize_html_class( $key );
267
+            $action      = wp_kses_post( $action );
268
+            $sanitized[] = "<span class='$key'>$action</span>";
269
+        }
270
+
271
+        $row_actions  = "<small class='form-text getpaid-subscription-item-actions'>";
272
+        $row_actions .= implode( ' | ', $sanitized );
273
+        $row_actions .= '</small>';
274
+
275
+        return $content . $row_actions;
276
+    }
277
+
278
+    /**
279
+     * Displays the table footer.
280
+     *
281
+     */
282
+    public function print_table_footer() {
283
+
284
+        ?>
285 285
 
286 286
 				<tfoot>
287 287
 					<tr>
@@ -296,145 +296,145 @@  discard block
 block discarded – undo
296 296
 			</table>
297 297
 		<?php
298 298
 
299
-	}
299
+    }
300 300
 
301
-	/**
302
-	 * Displays the navigation.
303
-	 *
304
-	 * @param int $total
305
-	 */
306
-	public function print_navigation( $total ) {
301
+    /**
302
+     * Displays the navigation.
303
+     *
304
+     * @param int $total
305
+     */
306
+    public function print_navigation( $total ) {
307 307
 
308
-		if ( $total < 1 ) {
308
+        if ( $total < 1 ) {
309 309
 
310
-			// Out-of-bounds, run the query again without LIMIT for total count.
311
-			$args  = array(
312
-				'customer_in' => get_current_user_id(),
313
-				'fields'      => 'id',
314
-			);
310
+            // Out-of-bounds, run the query again without LIMIT for total count.
311
+            $args  = array(
312
+                'customer_in' => get_current_user_id(),
313
+                'fields'      => 'id',
314
+            );
315 315
 
316
-			$count_query = new GetPaid_Subscriptions_Query( $args );
317
-			$total       = $count_query->get_total();
318
-		}
316
+            $count_query = new GetPaid_Subscriptions_Query( $args );
317
+            $total       = $count_query->get_total();
318
+        }
319 319
 
320
-		// Abort if we do not have pages.
321
-		if ( 2 > $total ) {
322
-			return;
323
-		}
320
+        // Abort if we do not have pages.
321
+        if ( 2 > $total ) {
322
+            return;
323
+        }
324 324
 
325
-		?>
325
+        ?>
326 326
 
327 327
 		<div class="getpaid-subscriptions-pagination">
328 328
 			<?php
329
-				$big = 999999;
330
-
331
-				echo wp_kses_post(
332
-					getpaid_paginate_links(
333
-						array(
334
-							'base'   => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
335
-							'format' => '?paged=%#%',
336
-							'total'  => (int) ceil( $total / 10 ),
337
-						)
338
-					)
339
-				);
340
-			?>
329
+                $big = 999999;
330
+
331
+                echo wp_kses_post(
332
+                    getpaid_paginate_links(
333
+                        array(
334
+                            'base'   => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
335
+                            'format' => '?paged=%#%',
336
+                            'total'  => (int) ceil( $total / 10 ),
337
+                        )
338
+                    )
339
+                );
340
+            ?>
341 341
 		</div>
342 342
 
343 343
 		<?php
344
-	}
345
-
346
-	/**
347
-	 * Returns a single subscription's columns.
348
-	 *
349
-	 * @param WPInv_Subscription $subscription
350
-	 *
351
-	 * @return array
352
-	 */
353
-	public function get_single_subscription_columns( $subscription ) {
354
-
355
-		// Prepare subscription detail columns.
356
-		$subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_invoice_id(), $subscription->get_id() );
357
-		$items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
358
-		$fields             = apply_filters(
359
-			'getpaid_single_subscription_details_fields',
360
-			array(
361
-				'status'           => __( 'Status', 'invoicing' ),
362
-				'initial_amount'   => __( 'Initial amount', 'invoicing' ),
363
-				'recurring_amount' => __( 'Recurring amount', 'invoicing' ),
364
-				'start_date'       => __( 'Start date', 'invoicing' ),
365
-				'expiry_date'      => __( 'Next payment', 'invoicing' ),
366
-				'payments'         => __( 'Payments', 'invoicing' ),
367
-				'item'             => $items_count > 1 ? __( 'Items', $items_count, 'invoicing' ) : __( 'Item', 'invoicing' )
368
-			),
369
-			$subscription,
370
-			$items_count
371
-		);
372
-
373
-		if ( isset( $fields['expiry_date'] ) ) {
374
-
375
-			if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) {
376
-				$fields['expiry_date'] = __( 'End date', 'invoicing' );
377
-			}
378
-
379
-			if ( 'pending' === $subscription->get_status() ) {
380
-				unset( $fields['expiry_date'] );
381
-			}
382
-		}
383
-
384
-		if ( isset( $fields['start_date'] ) && 'pending' === $subscription->get_status() ) {
385
-			unset( $fields['start_date'] );
386
-		}
387
-
388
-		if ( $subscription->get_initial_amount() === $subscription->get_recurring_amount() ) {
389
-			unset( $fields['initial_amount'] );
390
-		}
391
-
392
-		return $fields;
393
-	}
394
-
395
-	/**
396
-	 * Displays a single subscription.
397
-	 *
398
-	 * @param string $subscription
399
-	 *
400
-	 * @return string
401
-	 */
402
-	public function display_single_subscription( $subscription ) {
403
-
404
-		// Fetch the subscription.
405
-		$subscription = new WPInv_Subscription( (int) $subscription );
406
-
407
-		if ( ! $subscription->exists() ) {
408
-
409
-			return aui()->alert(
410
-				array(
411
-					'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ),
412
-					'type'    => 'error',
413
-				)
414
-			);
415
-
416
-		}
417
-
418
-		// Ensure that the user owns this subscription key.
419
-		if ( get_current_user_id() != $subscription->get_customer_id() && ! wpinv_current_user_can_manage_invoicing() ) {
420
-
421
-			return aui()->alert(
422
-				array(
423
-					'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ),
424
-					'type'    => 'error',
425
-				)
426
-			);
427
-
428
-		}
429
-
430
-		return wpinv_get_template_html(
431
-			'subscriptions/subscription-details.php',
432
-			array(
433
-				'subscription' => $subscription,
434
-				'widget'       => $this,
435
-			)
436
-		);
437
-
438
-	}
344
+    }
345
+
346
+    /**
347
+     * Returns a single subscription's columns.
348
+     *
349
+     * @param WPInv_Subscription $subscription
350
+     *
351
+     * @return array
352
+     */
353
+    public function get_single_subscription_columns( $subscription ) {
354
+
355
+        // Prepare subscription detail columns.
356
+        $subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_invoice_id(), $subscription->get_id() );
357
+        $items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
358
+        $fields             = apply_filters(
359
+            'getpaid_single_subscription_details_fields',
360
+            array(
361
+                'status'           => __( 'Status', 'invoicing' ),
362
+                'initial_amount'   => __( 'Initial amount', 'invoicing' ),
363
+                'recurring_amount' => __( 'Recurring amount', 'invoicing' ),
364
+                'start_date'       => __( 'Start date', 'invoicing' ),
365
+                'expiry_date'      => __( 'Next payment', 'invoicing' ),
366
+                'payments'         => __( 'Payments', 'invoicing' ),
367
+                'item'             => $items_count > 1 ? __( 'Items', $items_count, 'invoicing' ) : __( 'Item', 'invoicing' )
368
+            ),
369
+            $subscription,
370
+            $items_count
371
+        );
372
+
373
+        if ( isset( $fields['expiry_date'] ) ) {
374
+
375
+            if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) {
376
+                $fields['expiry_date'] = __( 'End date', 'invoicing' );
377
+            }
378
+
379
+            if ( 'pending' === $subscription->get_status() ) {
380
+                unset( $fields['expiry_date'] );
381
+            }
382
+        }
383
+
384
+        if ( isset( $fields['start_date'] ) && 'pending' === $subscription->get_status() ) {
385
+            unset( $fields['start_date'] );
386
+        }
387
+
388
+        if ( $subscription->get_initial_amount() === $subscription->get_recurring_amount() ) {
389
+            unset( $fields['initial_amount'] );
390
+        }
391
+
392
+        return $fields;
393
+    }
394
+
395
+    /**
396
+     * Displays a single subscription.
397
+     *
398
+     * @param string $subscription
399
+     *
400
+     * @return string
401
+     */
402
+    public function display_single_subscription( $subscription ) {
403
+
404
+        // Fetch the subscription.
405
+        $subscription = new WPInv_Subscription( (int) $subscription );
406
+
407
+        if ( ! $subscription->exists() ) {
408
+
409
+            return aui()->alert(
410
+                array(
411
+                    'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ),
412
+                    'type'    => 'error',
413
+                )
414
+            );
415
+
416
+        }
417
+
418
+        // Ensure that the user owns this subscription key.
419
+        if ( get_current_user_id() != $subscription->get_customer_id() && ! wpinv_current_user_can_manage_invoicing() ) {
420
+
421
+            return aui()->alert(
422
+                array(
423
+                    'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ),
424
+                    'type'    => 'error',
425
+                )
426
+            );
427
+
428
+        }
429
+
430
+        return wpinv_get_template_html(
431
+            'subscriptions/subscription-details.php',
432
+            array(
433
+                'subscription' => $subscription,
434
+                'widget'       => $this,
435
+            )
436
+        );
437
+
438
+    }
439 439
 
440 440
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/file_upload.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -21,20 +21,20 @@
 block discarded – undo
21 21
 
22 22
 foreach ( $file_types as $file_type ) {
23 23
 
24
-	if ( isset( $all_types[ $file_type ] ) ) {
25
-		$types[]   = $all_types[ $file_type ];
26
-		$file_type = explode( '|', $file_type );
24
+    if ( isset( $all_types[ $file_type ] ) ) {
25
+        $types[]   = $all_types[ $file_type ];
26
+        $file_type = explode( '|', $file_type );
27 27
 
28
-		foreach ( $file_type as $type ) {
29
-			$type     = trim( $type );
30
-			$types[]  = ".$type";
31
-			$_types[] = $type;
32
-		}
28
+        foreach ( $file_type as $type ) {
29
+            $type     = trim( $type );
30
+            $types[]  = ".$type";
31
+            $_types[] = $type;
32
+        }
33 33
 }
34 34
 }
35 35
 
36 36
 if ( ! empty( $required ) ) {
37
-	$label .= "<span class='text-danger'> *</span>";
37
+    $label .= "<span class='text-danger'> *</span>";
38 38
 }
39 39
 ?>
40 40
 <label><span v-html="form_element.label"></span></label>
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +282 added lines, -282 removed lines patch added patch discarded remove patch
@@ -13,47 +13,47 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array(
28
-		'subscription',
29
-		'addons',
30
-		'single_subscription_group',
31
-		'multiple_subscription_groups',
32
-		'subscription_date_change',
33
-		'subscription_bill_times_change',
34
-	);
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array(
28
+        'subscription',
29
+        'addons',
30
+        'single_subscription_group',
31
+        'multiple_subscription_groups',
32
+        'subscription_date_change',
33
+        'subscription_bill_times_change',
34
+    );
35
+
36
+    /**
37
+     * Payment method order.
38
+     *
39
+     * @var int
40
+     */
41
+    public $order = 8;
35 42
 
36 43
     /**
37
-	 * Payment method order.
38
-	 *
39
-	 * @var int
40
-	 */
41
-	public $order = 8;
42
-
43
-	/**
44
-	 * Bank transfer instructions.
45
-	 */
46
-	public $instructions;
47
-
48
-	/**
49
-	 * Locale array.
50
-	 */
51
-	public $locale;
44
+     * Bank transfer instructions.
45
+     */
46
+    public $instructions;
52 47
 
53 48
     /**
54
-	 * Class constructor.
55
-	 */
56
-	public function __construct() {
49
+     * Locale array.
50
+     */
51
+    public $locale;
52
+
53
+    /**
54
+     * Class constructor.
55
+     */
56
+    public function __construct() {
57 57
         parent::__construct();
58 58
 
59 59
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -61,24 +61,24 @@  discard block
 block discarded – undo
61 61
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
62 62
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
63 63
 
64
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
69
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
64
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
69
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
70 70
 
71 71
     }
72 72
 
73 73
     /**
74
-	 * Process Payment.
75
-	 *
76
-	 * @param WPInv_Invoice $invoice Invoice.
77
-	 * @param array $submission_data Posted checkout fields.
78
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
79
-	 * @return array
80
-	 */
81
-	public function process_payment( $invoice, $submission_data, $submission ) {
74
+     * Process Payment.
75
+     *
76
+     * @param WPInv_Invoice $invoice Invoice.
77
+     * @param array $submission_data Posted checkout fields.
78
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
79
+     * @return array
80
+     */
81
+    public function process_payment( $invoice, $submission_data, $submission ) {
82 82
 
83 83
         // Add a transaction id.
84 84
         $invoice->set_transaction_id( $invoice->generate_key( 'bt_' ) );
@@ -99,66 +99,66 @@  discard block
 block discarded – undo
99 99
     }
100 100
 
101 101
     /**
102
-	 * Output for the order received page.
103
-	 *
104
-	 * @param WPInv_Invoice $invoice Invoice.
105
-	 */
106
-	public function thankyou_page( $invoice ) {
102
+     * Output for the order received page.
103
+     *
104
+     * @param WPInv_Invoice $invoice Invoice.
105
+     */
106
+    public function thankyou_page( $invoice ) {
107 107
 
108 108
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
109 109
 
110
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
110
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
111 111
 
112 112
             if ( ! empty( $this->instructions ) ) {
113 113
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
114
-			}
114
+            }
115 115
 
116
-			$this->bank_details( $invoice );
116
+            $this->bank_details( $invoice );
117 117
 
118
-			echo '</div>';
118
+            echo '</div>';
119 119
 
120 120
         }
121 121
 
122
-	}
122
+    }
123 123
 
124 124
     /**
125
-	 * Add content to the WPI emails.
126
-	 *
127
-	 * @param WPInv_Invoice $invoice Invoice.
128
-	 * @param string     $email_type Email format: plain text or HTML.
129
-	 * @param bool     $sent_to_admin Sent to admin.
130
-	 */
131
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
125
+     * Add content to the WPI emails.
126
+     *
127
+     * @param WPInv_Invoice $invoice Invoice.
128
+     * @param string     $email_type Email format: plain text or HTML.
129
+     * @param bool     $sent_to_admin Sent to admin.
130
+     */
131
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
132 132
 
133
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
133
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
134 134
 
135
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
135
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
136 136
 
137
-			if ( $this->instructions ) {
138
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
137
+            if ( $this->instructions ) {
138
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
139 139
             }
140 140
 
141
-			$this->bank_details( $invoice );
141
+            $this->bank_details( $invoice );
142 142
 
143
-			echo '</div>';
143
+            echo '</div>';
144 144
 
145
-		}
145
+        }
146 146
 
147 147
     }
148 148
 
149 149
     /**
150
-	 * Get bank details and place into a list format.
151
-	 *
152
-	 * @param WPInv_Invoice $invoice Invoice.
153
-	 */
154
-	protected function bank_details( $invoice ) {
150
+     * Get bank details and place into a list format.
151
+     *
152
+     * @param WPInv_Invoice $invoice Invoice.
153
+     */
154
+    protected function bank_details( $invoice ) {
155 155
 
156
-		// Get the invoice country and country $locale.
157
-		$country = $invoice->get_country();
158
-		$locale  = $this->get_country_locale();
156
+        // Get the invoice country and country $locale.
157
+        $country = $invoice->get_country();
158
+        $locale  = $this->get_country_locale();
159 159
 
160
-		// Get shortcode label in the $locale array and use appropriate one.
161
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
160
+        // Get shortcode label in the $locale array and use appropriate one.
161
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
162 162
 
163 163
         $bank_fields = array(
164 164
             'ac_name'   => __( 'Account Name', 'invoicing' ),
@@ -177,11 +177,11 @@  discard block
 block discarded – undo
177 177
 
178 178
             if ( ! empty( $value ) ) {
179 179
                 $bank_info[ $field ] = array(
180
-					'label' => $label,
181
-					'value' => $value,
182
-				);
180
+                    'label' => $label,
181
+                    'value' => $value,
182
+                );
183 183
             }
184
-		}
184
+        }
185 185
 
186 186
         $bank_info = apply_filters( 'wpinv_bank_info', $bank_info, $invoice );
187 187
 
@@ -189,139 +189,139 @@  discard block
 block discarded – undo
189 189
             return;
190 190
         }
191 191
 
192
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
192
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
193 193
 
194
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
194
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
195 195
 
196
-		foreach ( $bank_info as $key => $data ) {
197
-			echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
198
-		}
196
+        foreach ( $bank_info as $key => $data ) {
197
+            echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
198
+        }
199 199
 
200
-		echo '</table>';
200
+        echo '</table>';
201 201
 
202 202
     }
203 203
 
204 204
     /**
205
-	 * Get country locale if localized.
206
-	 *
207
-	 * @return array
208
-	 */
209
-	public function get_country_locale() {
210
-
211
-		if ( empty( $this->locale ) ) {
212
-
213
-			// Locale information to be used - only those that are not 'Sort Code'.
214
-			$this->locale = apply_filters(
215
-				'getpaid_get_bank_transfer_locale',
216
-				array(
217
-					'AU' => array(
218
-						'sortcode' => array(
219
-							'label' => __( 'BSB', 'invoicing' ),
220
-						),
221
-					),
222
-					'CA' => array(
223
-						'sortcode' => array(
224
-							'label' => __( 'Bank transit number', 'invoicing' ),
225
-						),
226
-					),
227
-					'IN' => array(
228
-						'sortcode' => array(
229
-							'label' => __( 'IFSC', 'invoicing' ),
230
-						),
231
-					),
232
-					'IT' => array(
233
-						'sortcode' => array(
234
-							'label' => __( 'Branch sort', 'invoicing' ),
235
-						),
236
-					),
237
-					'NZ' => array(
238
-						'sortcode' => array(
239
-							'label' => __( 'Bank code', 'invoicing' ),
240
-						),
241
-					),
242
-					'SE' => array(
243
-						'sortcode' => array(
244
-							'label' => __( 'Bank code', 'invoicing' ),
245
-						),
246
-					),
247
-					'US' => array(
248
-						'sortcode' => array(
249
-							'label' => __( 'Routing number', 'invoicing' ),
250
-						),
251
-					),
252
-					'ZA' => array(
253
-						'sortcode' => array(
254
-							'label' => __( 'Branch code', 'invoicing' ),
255
-						),
256
-					),
257
-				)
258
-			);
259
-
260
-		}
261
-
262
-		return $this->locale;
263
-
264
-	}
265
-
266
-	/**
267
-	 * Filters the gateway settings.
268
-	 *
269
-	 * @param array $admin_settings
270
-	 */
271
-	public function admin_settings( $admin_settings ) {
205
+     * Get country locale if localized.
206
+     *
207
+     * @return array
208
+     */
209
+    public function get_country_locale() {
210
+
211
+        if ( empty( $this->locale ) ) {
212
+
213
+            // Locale information to be used - only those that are not 'Sort Code'.
214
+            $this->locale = apply_filters(
215
+                'getpaid_get_bank_transfer_locale',
216
+                array(
217
+                    'AU' => array(
218
+                        'sortcode' => array(
219
+                            'label' => __( 'BSB', 'invoicing' ),
220
+                        ),
221
+                    ),
222
+                    'CA' => array(
223
+                        'sortcode' => array(
224
+                            'label' => __( 'Bank transit number', 'invoicing' ),
225
+                        ),
226
+                    ),
227
+                    'IN' => array(
228
+                        'sortcode' => array(
229
+                            'label' => __( 'IFSC', 'invoicing' ),
230
+                        ),
231
+                    ),
232
+                    'IT' => array(
233
+                        'sortcode' => array(
234
+                            'label' => __( 'Branch sort', 'invoicing' ),
235
+                        ),
236
+                    ),
237
+                    'NZ' => array(
238
+                        'sortcode' => array(
239
+                            'label' => __( 'Bank code', 'invoicing' ),
240
+                        ),
241
+                    ),
242
+                    'SE' => array(
243
+                        'sortcode' => array(
244
+                            'label' => __( 'Bank code', 'invoicing' ),
245
+                        ),
246
+                    ),
247
+                    'US' => array(
248
+                        'sortcode' => array(
249
+                            'label' => __( 'Routing number', 'invoicing' ),
250
+                        ),
251
+                    ),
252
+                    'ZA' => array(
253
+                        'sortcode' => array(
254
+                            'label' => __( 'Branch code', 'invoicing' ),
255
+                        ),
256
+                    ),
257
+                )
258
+            );
259
+
260
+        }
261
+
262
+        return $this->locale;
263
+
264
+    }
265
+
266
+    /**
267
+     * Filters the gateway settings.
268
+     *
269
+     * @param array $admin_settings
270
+     */
271
+    public function admin_settings( $admin_settings ) {
272 272
 
273 273
         $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
274
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
274
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
275 275
 
276
-		$locale  = $this->get_country_locale();
276
+        $locale  = $this->get_country_locale();
277 277
 
278
-		// Get sortcode label in the $locale array and use appropriate one.
279
-		$country  = wpinv_default_billing_country();
280
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
278
+        // Get sortcode label in the $locale array and use appropriate one.
279
+        $country  = wpinv_default_billing_country();
280
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
281 281
 
282
-		$admin_settings['bank_transfer_ac_name'] = array(
282
+        $admin_settings['bank_transfer_ac_name'] = array(
283 283
             'type' => 'text',
284 284
             'id'   => 'bank_transfer_ac_name',
285 285
             'name' => __( 'Account Name', 'invoicing' ),
286
-		);
286
+        );
287 287
 
288
-		$admin_settings['bank_transfer_ac_no'] = array(
288
+        $admin_settings['bank_transfer_ac_no'] = array(
289 289
             'type' => 'text',
290 290
             'id'   => 'bank_transfer_ac_no',
291 291
             'name' => __( 'Account Number', 'invoicing' ),
292
-		);
292
+        );
293 293
 
294
-		$admin_settings['bank_transfer_bank_name'] = array(
294
+        $admin_settings['bank_transfer_bank_name'] = array(
295 295
             'type' => 'text',
296 296
             'id'   => 'bank_transfer_bank_name',
297 297
             'name' => __( 'Bank Name', 'invoicing' ),
298
-		);
298
+        );
299 299
 
300
-		$admin_settings['bank_transfer_ifsc'] = array(
300
+        $admin_settings['bank_transfer_ifsc'] = array(
301 301
             'type' => 'text',
302 302
             'id'   => 'bank_transfer_ifsc',
303 303
             'name' => __( 'IFSC Code', 'invoicing' ),
304
-		);
304
+        );
305 305
 
306
-		$admin_settings['bank_transfer_iban'] = array(
306
+        $admin_settings['bank_transfer_iban'] = array(
307 307
             'type' => 'text',
308 308
             'id'   => 'bank_transfer_iban',
309 309
             'name' => __( 'IBAN', 'invoicing' ),
310
-		);
310
+        );
311 311
 
312
-		$admin_settings['bank_transfer_bic'] = array(
312
+        $admin_settings['bank_transfer_bic'] = array(
313 313
             'type' => 'text',
314 314
             'id'   => 'bank_transfer_bic',
315 315
             'name' => __( 'BIC/Swift Code', 'invoicing' ),
316
-		);
316
+        );
317 317
 
318
-		$admin_settings['bank_transfer_sort_code'] = array(
319
-			'type' => 'text',
320
-			'id'   => 'bank_transfer_sort_code',
321
-			'name' => $sortcode,
322
-		);
318
+        $admin_settings['bank_transfer_sort_code'] = array(
319
+            'type' => 'text',
320
+            'id'   => 'bank_transfer_sort_code',
321
+            'name' => $sortcode,
322
+        );
323 323
 
324
-		$admin_settings['bank_transfer_info'] = array(
324
+        $admin_settings['bank_transfer_info'] = array(
325 325
             'id'   => 'bank_transfer_info',
326 326
             'name' => __( 'Instructions', 'invoicing' ),
327 327
             'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
@@ -331,17 +331,17 @@  discard block
 block discarded – undo
331 331
             'rows' => 5,
332 332
         );
333 333
 
334
-		return $admin_settings;
335
-	}
334
+        return $admin_settings;
335
+    }
336 336
 
337
-	/**
338
-	 * Processes invoice addons.
339
-	 *
340
-	 * @param WPInv_Invoice $invoice
341
-	 * @param GetPaid_Form_Item[] $items
342
-	 * @return WPInv_Invoice
343
-	 */
344
-	public function process_addons( $invoice, $items ) {
337
+    /**
338
+     * Processes invoice addons.
339
+     *
340
+     * @param WPInv_Invoice $invoice
341
+     * @param GetPaid_Form_Item[] $items
342
+     * @return WPInv_Invoice
343
+     */
344
+    public function process_addons( $invoice, $items ) {
345 345
 
346 346
         foreach ( $items as $item ) {
347 347
             $invoice->add_item( $item );
@@ -349,98 +349,98 @@  discard block
 block discarded – undo
349 349
 
350 350
         $invoice->recalculate_total();
351 351
         $invoice->save();
352
-	}
353
-
354
-	/**
355
-	 * (Maybe) renews a bank transfer subscription profile.
356
-	 *
357
-	 *
358
-	 * @param WPInv_Subscription $subscription
359
-	 */
360
-	public function maybe_renew_subscription( $subscription ) {
361
-		// Ensure its our subscription && it's active.
362
-		if ( $this->id === $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
363
-			add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
364
-
365
-			$invoice = $subscription->create_payment();
366
-
367
-			if ( ! empty( $invoice ) ) {
368
-				$is_logged_in = is_user_logged_in();
369
-
370
-				// Cron run.
371
-				if ( ! $is_logged_in ) {
372
-					$note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
373
-
374
-					$invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
375
-				}
376
-			}
377
-
378
-			remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
379
-		}
380
-	}
381
-
382
-	/**
383
-	 * Process a bank transfer payment.
384
-	 *
385
-	 *
352
+    }
353
+
354
+    /**
355
+     * (Maybe) renews a bank transfer subscription profile.
356
+     *
357
+     *
358
+     * @param WPInv_Subscription $subscription
359
+     */
360
+    public function maybe_renew_subscription( $subscription ) {
361
+        // Ensure its our subscription && it's active.
362
+        if ( $this->id === $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
363
+            add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
364
+
365
+            $invoice = $subscription->create_payment();
366
+
367
+            if ( ! empty( $invoice ) ) {
368
+                $is_logged_in = is_user_logged_in();
369
+
370
+                // Cron run.
371
+                if ( ! $is_logged_in ) {
372
+                    $note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
373
+
374
+                    $invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
375
+                }
376
+            }
377
+
378
+            remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
379
+        }
380
+    }
381
+
382
+    /**
383
+     * Process a bank transfer payment.
384
+     *
385
+     *
386 386
      * @param WPInv_Invoice $invoice
387
-	 */
388
-	public function invoice_paid( $invoice ) {
389
-
390
-		// Abort if not paid by bank transfer.
391
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
392
-			return;
393
-		}
394
-
395
-		// Is it a parent payment?
396
-		if ( 0 == $invoice->get_parent_id() ) {
397
-
398
-			// (Maybe) activate subscriptions.
399
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
400
-
401
-			if ( ! empty( $subscriptions ) ) {
402
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
403
-
404
-				foreach ( $subscriptions as $subscription ) {
405
-					if ( $subscription->exists() ) {
406
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
407
-						$expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
408
-
409
-						$subscription->set_next_renewal_date( $expiry );
410
-						$subscription->set_date_created( current_time( 'mysql' ) );
411
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
412
-						$subscription->activate();
413
-					}
414
-				}
415
-			}
416
-		} else {
417
-
418
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
419
-
420
-			// Renew the subscription.
421
-			if ( $subscription && $subscription->exists() ) {
422
-				$subscription->add_payment( array(), $invoice );
423
-				$subscription->renew( strtotime( $invoice->get_date_created() ) );
424
-			}
425
-		}
387
+     */
388
+    public function invoice_paid( $invoice ) {
389
+
390
+        // Abort if not paid by bank transfer.
391
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
392
+            return;
393
+        }
394
+
395
+        // Is it a parent payment?
396
+        if ( 0 == $invoice->get_parent_id() ) {
397
+
398
+            // (Maybe) activate subscriptions.
399
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
400
+
401
+            if ( ! empty( $subscriptions ) ) {
402
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
403
+
404
+                foreach ( $subscriptions as $subscription ) {
405
+                    if ( $subscription->exists() ) {
406
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
407
+                        $expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
408
+
409
+                        $subscription->set_next_renewal_date( $expiry );
410
+                        $subscription->set_date_created( current_time( 'mysql' ) );
411
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
412
+                        $subscription->activate();
413
+                    }
414
+                }
415
+            }
416
+        } else {
417
+
418
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
419
+
420
+            // Renew the subscription.
421
+            if ( $subscription && $subscription->exists() ) {
422
+                $subscription->add_payment( array(), $invoice );
423
+                $subscription->renew( strtotime( $invoice->get_date_created() ) );
424
+            }
425
+        }
426 426
 
427 427
     }
428 428
 
429
-	/**
430
-	 * Force created from payment false to allow email for auto renewal generation invoice.
431
-	 *
432
-	 * @since 2.8.11
433
-	 *
434
-	 * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
435
-	 * @param int  $invoice Invoice ID.
436
-	 * @return bool True when invoice created via payment form else false.
437
-	 */
438
-	public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
439
-		if ( $is_payment_form_invoice ) {
440
-			$is_payment_form_invoice = false;
441
-		}
442
-
443
-		return $is_payment_form_invoice;
444
-	}
429
+    /**
430
+     * Force created from payment false to allow email for auto renewal generation invoice.
431
+     *
432
+     * @since 2.8.11
433
+     *
434
+     * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
435
+     * @param int  $invoice Invoice ID.
436
+     * @return bool True when invoice created via payment form else false.
437
+     */
438
+    public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
439
+        if ( $is_payment_form_invoice ) {
440
+            $is_payment_form_invoice = false;
441
+        }
442
+
443
+        return $is_payment_form_invoice;
444
+    }
445 445
 
446 446
 }
Please login to merge, or discard this patch.
includes/class-getpaid-post-types.php 1 patch
Indentation   +295 added lines, -295 removed lines patch added patch discarded remove patch
@@ -15,321 +15,321 @@
 block discarded – undo
15 15
 class GetPaid_Post_Types {
16 16
 
17 17
     /**
18
-	 * Hook in methods.
19
-	 */
20
-	public function __construct() {
21
-		add_action( 'init', array( __CLASS__, 'register_post_types' ), 1 );
22
-		add_action( 'init', array( __CLASS__, 'register_post_status' ), 4 );
23
-		add_action( 'getpaid_flush_rewrite_rules', array( __CLASS__, 'flush_rewrite_rules' ) );
24
-		add_action( 'getpaid_after_register_post_types', array( __CLASS__, 'maybe_flush_rewrite_rules' ) );
25
-	}
18
+     * Hook in methods.
19
+     */
20
+    public function __construct() {
21
+        add_action( 'init', array( __CLASS__, 'register_post_types' ), 1 );
22
+        add_action( 'init', array( __CLASS__, 'register_post_status' ), 4 );
23
+        add_action( 'getpaid_flush_rewrite_rules', array( __CLASS__, 'flush_rewrite_rules' ) );
24
+        add_action( 'getpaid_after_register_post_types', array( __CLASS__, 'maybe_flush_rewrite_rules' ) );
25
+    }
26 26
 
27
-	/**
28
-	 * Register core post types.
29
-	 */
30
-	public static function register_post_types() {
27
+    /**
28
+     * Register core post types.
29
+     */
30
+    public static function register_post_types() {
31 31
 
32
-		if ( ! is_blog_installed() || post_type_exists( 'wpi_item' ) ) {
33
-			return;
34
-		}
32
+        if ( ! is_blog_installed() || post_type_exists( 'wpi_item' ) ) {
33
+            return;
34
+        }
35 35
 
36
-		$capabilities = wpinv_current_user_can_manage_invoicing();
36
+        $capabilities = wpinv_current_user_can_manage_invoicing();
37 37
 
38
-		// Fires before registering post types.
39
-		do_action( 'getpaid_register_post_types' );
38
+        // Fires before registering post types.
39
+        do_action( 'getpaid_register_post_types' );
40 40
 
41
-		// Register item post type.
42
-		register_post_type(
43
-			'wpi_item',
44
-			apply_filters(
45
-				'wpinv_register_post_type_invoice_item',
46
-				array(
47
-					'labels'            => array(
48
-						'name'               => _x( 'Items', 'post type general name', 'invoicing' ),
49
-						'singular_name'      => _x( 'Item', 'post type singular name', 'invoicing' ),
50
-						'menu_name'          => _x( 'Items', 'admin menu', 'invoicing' ),
51
-						'name_admin_bar'     => _x( 'Item', 'add new on admin bar', 'invoicing' ),
52
-						'add_new'            => _x( 'Add New', 'Item', 'invoicing' ),
53
-						'add_new_item'       => __( 'Add New Item', 'invoicing' ),
54
-						'new_item'           => __( 'New Item', 'invoicing' ),
55
-						'edit_item'          => __( 'Edit Item', 'invoicing' ),
56
-						'view_item'          => __( 'View Item', 'invoicing' ),
57
-						'all_items'          => __( 'Items', 'invoicing' ),
58
-						'search_items'       => __( 'Search items', 'invoicing' ),
59
-						'parent_item_colon'  => __( 'Parent item:', 'invoicing' ),
60
-						'not_found'          => __( 'No items found.', 'invoicing' ),
61
-						'not_found_in_trash' => __( 'No items found in trash.', 'invoicing' ),
62
-					),
63
-					'description'       => __( 'This is where you can add new invoice items.', 'invoicing' ),
64
-					'public'            => false,
65
-					'has_archive'       => false,
66
-					'_builtin'          => false,
67
-					'show_ui'           => $capabilities ? true : false,
68
-					'show_in_menu'      => $capabilities ? 'wpinv' : false,
69
-					'show_in_nav_menus' => false,
70
-					'supports'          => array( 'title', 'excerpt', 'thumbnail' ),
71
-					'rewrite'           => false,
72
-					'query_var'         => false,
73
-					'map_meta_cap'      => true,
74
-					'show_in_admin_bar' => $capabilities ? true : false,
75
-					'can_export'        => $capabilities ? true : false
76
-				)
77
-			)
78
-		);
41
+        // Register item post type.
42
+        register_post_type(
43
+            'wpi_item',
44
+            apply_filters(
45
+                'wpinv_register_post_type_invoice_item',
46
+                array(
47
+                    'labels'            => array(
48
+                        'name'               => _x( 'Items', 'post type general name', 'invoicing' ),
49
+                        'singular_name'      => _x( 'Item', 'post type singular name', 'invoicing' ),
50
+                        'menu_name'          => _x( 'Items', 'admin menu', 'invoicing' ),
51
+                        'name_admin_bar'     => _x( 'Item', 'add new on admin bar', 'invoicing' ),
52
+                        'add_new'            => _x( 'Add New', 'Item', 'invoicing' ),
53
+                        'add_new_item'       => __( 'Add New Item', 'invoicing' ),
54
+                        'new_item'           => __( 'New Item', 'invoicing' ),
55
+                        'edit_item'          => __( 'Edit Item', 'invoicing' ),
56
+                        'view_item'          => __( 'View Item', 'invoicing' ),
57
+                        'all_items'          => __( 'Items', 'invoicing' ),
58
+                        'search_items'       => __( 'Search items', 'invoicing' ),
59
+                        'parent_item_colon'  => __( 'Parent item:', 'invoicing' ),
60
+                        'not_found'          => __( 'No items found.', 'invoicing' ),
61
+                        'not_found_in_trash' => __( 'No items found in trash.', 'invoicing' ),
62
+                    ),
63
+                    'description'       => __( 'This is where you can add new invoice items.', 'invoicing' ),
64
+                    'public'            => false,
65
+                    'has_archive'       => false,
66
+                    '_builtin'          => false,
67
+                    'show_ui'           => $capabilities ? true : false,
68
+                    'show_in_menu'      => $capabilities ? 'wpinv' : false,
69
+                    'show_in_nav_menus' => false,
70
+                    'supports'          => array( 'title', 'excerpt', 'thumbnail' ),
71
+                    'rewrite'           => false,
72
+                    'query_var'         => false,
73
+                    'map_meta_cap'      => true,
74
+                    'show_in_admin_bar' => $capabilities ? true : false,
75
+                    'can_export'        => $capabilities ? true : false
76
+                )
77
+            )
78
+        );
79 79
 
80
-		// Register payment form post type.
81
-		register_post_type(
82
-			'wpi_payment_form',
83
-			apply_filters(
84
-				'wpinv_register_post_type_payment_form',
85
-				array(
86
-					'labels'            => array(
87
-						'name'               => _x( 'Payment Forms', 'post type general name', 'invoicing' ),
88
-						'singular_name'      => _x( 'Payment Form', 'post type singular name', 'invoicing' ),
89
-						'menu_name'          => _x( 'Payment Forms', 'admin menu', 'invoicing' ),
90
-						'name_admin_bar'     => _x( 'Payment Form', 'add new on admin bar', 'invoicing' ),
91
-						'add_new'            => _x( 'Add New', 'Payment Form', 'invoicing' ),
92
-						'add_new_item'       => __( 'Add New Payment Form', 'invoicing' ),
93
-						'new_item'           => __( 'New Payment Form', 'invoicing' ),
94
-						'edit_item'          => __( 'Edit Payment Form', 'invoicing' ),
95
-						'view_item'          => __( 'View Payment Form', 'invoicing' ),
96
-						'all_items'          => __( 'Payment Forms', 'invoicing' ),
97
-						'search_items'       => __( 'Search Payment Forms', 'invoicing' ),
98
-						'parent_item_colon'  => __( 'Parent Payment Forms:', 'invoicing' ),
99
-						'not_found'          => __( 'No payment forms found.', 'invoicing' ),
100
-						'not_found_in_trash' => __( 'No payment forms found in trash.', 'invoicing' ),
101
-					),
102
-					'description'       => __( 'Add new payment forms.', 'invoicing' ),
103
-					'public'            => false,
104
-					'show_ui'           => $capabilities ? true : false,
105
-					'show_in_menu'      => $capabilities ? 'wpinv' : false,
106
-					'show_in_nav_menus' => false,
107
-					'query_var'         => false,
108
-					'rewrite'           => true,
109
-					'map_meta_cap'      => true,
110
-					'has_archive'       => false,
111
-					'hierarchical'      => false,
112
-					'menu_position'     => null,
113
-					'supports'          => array( 'title' ),
114
-					'menu_icon'         => 'dashicons-media-form',
115
-				)
116
-			)
117
-		);
80
+        // Register payment form post type.
81
+        register_post_type(
82
+            'wpi_payment_form',
83
+            apply_filters(
84
+                'wpinv_register_post_type_payment_form',
85
+                array(
86
+                    'labels'            => array(
87
+                        'name'               => _x( 'Payment Forms', 'post type general name', 'invoicing' ),
88
+                        'singular_name'      => _x( 'Payment Form', 'post type singular name', 'invoicing' ),
89
+                        'menu_name'          => _x( 'Payment Forms', 'admin menu', 'invoicing' ),
90
+                        'name_admin_bar'     => _x( 'Payment Form', 'add new on admin bar', 'invoicing' ),
91
+                        'add_new'            => _x( 'Add New', 'Payment Form', 'invoicing' ),
92
+                        'add_new_item'       => __( 'Add New Payment Form', 'invoicing' ),
93
+                        'new_item'           => __( 'New Payment Form', 'invoicing' ),
94
+                        'edit_item'          => __( 'Edit Payment Form', 'invoicing' ),
95
+                        'view_item'          => __( 'View Payment Form', 'invoicing' ),
96
+                        'all_items'          => __( 'Payment Forms', 'invoicing' ),
97
+                        'search_items'       => __( 'Search Payment Forms', 'invoicing' ),
98
+                        'parent_item_colon'  => __( 'Parent Payment Forms:', 'invoicing' ),
99
+                        'not_found'          => __( 'No payment forms found.', 'invoicing' ),
100
+                        'not_found_in_trash' => __( 'No payment forms found in trash.', 'invoicing' ),
101
+                    ),
102
+                    'description'       => __( 'Add new payment forms.', 'invoicing' ),
103
+                    'public'            => false,
104
+                    'show_ui'           => $capabilities ? true : false,
105
+                    'show_in_menu'      => $capabilities ? 'wpinv' : false,
106
+                    'show_in_nav_menus' => false,
107
+                    'query_var'         => false,
108
+                    'rewrite'           => true,
109
+                    'map_meta_cap'      => true,
110
+                    'has_archive'       => false,
111
+                    'hierarchical'      => false,
112
+                    'menu_position'     => null,
113
+                    'supports'          => array( 'title' ),
114
+                    'menu_icon'         => 'dashicons-media-form',
115
+                )
116
+            )
117
+        );
118 118
 
119
-		// Register invoice post type.
120
-		register_post_type(
121
-			'wpi_invoice',
122
-			apply_filters(
123
-				'wpinv_register_post_type_invoice',
124
-				array(
125
-					'labels'              => array(
126
-						'name'                  => __( 'Invoices', 'invoicing' ),
127
-						'singular_name'         => __( 'Invoice', 'invoicing' ),
128
-						'all_items'             => __( 'Invoices', 'invoicing' ),
129
-						'menu_name'             => _x( 'Invoices', 'Admin menu name', 'invoicing' ),
130
-						'add_new'               => __( 'Add New', 'invoicing' ),
131
-						'add_new_item'          => __( 'Add new invoice', 'invoicing' ),
132
-						'edit'                  => __( 'Edit', 'invoicing' ),
133
-						'edit_item'             => __( 'Edit invoice', 'invoicing' ),
134
-						'new_item'              => __( 'New invoice', 'invoicing' ),
135
-						'view_item'             => __( 'View invoice', 'invoicing' ),
136
-						'view_items'            => __( 'View Invoices', 'invoicing' ),
137
-						'search_items'          => __( 'Search invoices', 'invoicing' ),
138
-						'not_found'             => __( 'No invoices found', 'invoicing' ),
139
-						'not_found_in_trash'    => __( 'No invoices found in trash', 'invoicing' ),
140
-						'parent'                => __( 'Parent invoice', 'invoicing' ),
141
-						'featured_image'        => __( 'Invoice image', 'invoicing' ),
142
-						'set_featured_image'    => __( 'Set invoice image', 'invoicing' ),
143
-						'remove_featured_image' => __( 'Remove invoice image', 'invoicing' ),
144
-						'use_featured_image'    => __( 'Use as invoice image', 'invoicing' ),
145
-						'insert_into_item'      => __( 'Insert into invoice', 'invoicing' ),
146
-						'uploaded_to_this_item' => __( 'Uploaded to this invoice', 'invoicing' ),
147
-						'filter_items_list'     => __( 'Filter invoices', 'invoicing' ),
148
-						'items_list_navigation' => __( 'Invoices navigation', 'invoicing' ),
149
-						'items_list'            => __( 'Invoices list', 'invoicing' ),
150
-					),
151
-					'description'         => __( 'This is where invoices are stored.', 'invoicing' ),
152
-					'public'              => true,
153
-					'has_archive'         => false,
154
-					'publicly_queryable'  => true,
155
-        			'exclude_from_search' => true,
156
-        			'show_ui'             => $capabilities ? true : false,
157
-					'show_in_menu'        => $capabilities ? 'wpinv' : false,
158
-					'show_in_nav_menus'   => false,
159
-					'supports'            => array( 'title', 'author', 'excerpt' ),
160
-					'rewrite'             => array(
161
-						'slug'       => 'invoice',
162
-						'with_front' => false,
163
-					),
164
-					'query_var'           => false,
165
-					'map_meta_cap'        => true,
166
-					'show_in_admin_bar'   => $capabilities ? true : false,
167
-					'can_export'          => $capabilities ? true : false,
168
-					'hierarchical'        => false,
169
-					'menu_position'       => null,
170
-					'menu_icon'           => 'dashicons-media-spreadsheet',
171
-				)
172
-			)
173
-		);
119
+        // Register invoice post type.
120
+        register_post_type(
121
+            'wpi_invoice',
122
+            apply_filters(
123
+                'wpinv_register_post_type_invoice',
124
+                array(
125
+                    'labels'              => array(
126
+                        'name'                  => __( 'Invoices', 'invoicing' ),
127
+                        'singular_name'         => __( 'Invoice', 'invoicing' ),
128
+                        'all_items'             => __( 'Invoices', 'invoicing' ),
129
+                        'menu_name'             => _x( 'Invoices', 'Admin menu name', 'invoicing' ),
130
+                        'add_new'               => __( 'Add New', 'invoicing' ),
131
+                        'add_new_item'          => __( 'Add new invoice', 'invoicing' ),
132
+                        'edit'                  => __( 'Edit', 'invoicing' ),
133
+                        'edit_item'             => __( 'Edit invoice', 'invoicing' ),
134
+                        'new_item'              => __( 'New invoice', 'invoicing' ),
135
+                        'view_item'             => __( 'View invoice', 'invoicing' ),
136
+                        'view_items'            => __( 'View Invoices', 'invoicing' ),
137
+                        'search_items'          => __( 'Search invoices', 'invoicing' ),
138
+                        'not_found'             => __( 'No invoices found', 'invoicing' ),
139
+                        'not_found_in_trash'    => __( 'No invoices found in trash', 'invoicing' ),
140
+                        'parent'                => __( 'Parent invoice', 'invoicing' ),
141
+                        'featured_image'        => __( 'Invoice image', 'invoicing' ),
142
+                        'set_featured_image'    => __( 'Set invoice image', 'invoicing' ),
143
+                        'remove_featured_image' => __( 'Remove invoice image', 'invoicing' ),
144
+                        'use_featured_image'    => __( 'Use as invoice image', 'invoicing' ),
145
+                        'insert_into_item'      => __( 'Insert into invoice', 'invoicing' ),
146
+                        'uploaded_to_this_item' => __( 'Uploaded to this invoice', 'invoicing' ),
147
+                        'filter_items_list'     => __( 'Filter invoices', 'invoicing' ),
148
+                        'items_list_navigation' => __( 'Invoices navigation', 'invoicing' ),
149
+                        'items_list'            => __( 'Invoices list', 'invoicing' ),
150
+                    ),
151
+                    'description'         => __( 'This is where invoices are stored.', 'invoicing' ),
152
+                    'public'              => true,
153
+                    'has_archive'         => false,
154
+                    'publicly_queryable'  => true,
155
+                    'exclude_from_search' => true,
156
+                    'show_ui'             => $capabilities ? true : false,
157
+                    'show_in_menu'        => $capabilities ? 'wpinv' : false,
158
+                    'show_in_nav_menus'   => false,
159
+                    'supports'            => array( 'title', 'author', 'excerpt' ),
160
+                    'rewrite'             => array(
161
+                        'slug'       => 'invoice',
162
+                        'with_front' => false,
163
+                    ),
164
+                    'query_var'           => false,
165
+                    'map_meta_cap'        => true,
166
+                    'show_in_admin_bar'   => $capabilities ? true : false,
167
+                    'can_export'          => $capabilities ? true : false,
168
+                    'hierarchical'        => false,
169
+                    'menu_position'       => null,
170
+                    'menu_icon'           => 'dashicons-media-spreadsheet',
171
+                )
172
+            )
173
+        );
174 174
 
175
-		// Register discount post type.
176
-		register_post_type(
177
-			'wpi_discount',
178
-			apply_filters(
179
-				'wpinv_register_post_type_discount',
180
-				array(
181
-					'labels'              => array(
182
-						'name'                  => __( 'Discounts', 'invoicing' ),
183
-						'singular_name'         => __( 'Discount', 'invoicing' ),
184
-						'all_items'             => __( 'Discounts', 'invoicing' ),
185
-						'menu_name'             => _x( 'Discounts', 'Admin menu name', 'invoicing' ),
186
-						'add_new'               => __( 'Add New', 'invoicing' ),
187
-						'add_new_item'          => __( 'Add new discount', 'invoicing' ),
188
-						'edit'                  => __( 'Edit', 'invoicing' ),
189
-						'edit_item'             => __( 'Edit discount', 'invoicing' ),
190
-						'new_item'              => __( 'New discount', 'invoicing' ),
191
-						'view_item'             => __( 'View discount', 'invoicing' ),
192
-						'view_items'            => __( 'View Discounts', 'invoicing' ),
193
-						'search_items'          => __( 'Search discounts', 'invoicing' ),
194
-						'not_found'             => __( 'No discounts found', 'invoicing' ),
195
-						'not_found_in_trash'    => __( 'No discounts found in trash', 'invoicing' ),
196
-						'parent'                => __( 'Parent discount', 'invoicing' ),
197
-						'featured_image'        => __( 'Discount image', 'invoicing' ),
198
-						'set_featured_image'    => __( 'Set discount image', 'invoicing' ),
199
-						'remove_featured_image' => __( 'Remove discount image', 'invoicing' ),
200
-						'use_featured_image'    => __( 'Use as discount image', 'invoicing' ),
201
-						'insert_into_item'      => __( 'Insert into discount', 'invoicing' ),
202
-						'uploaded_to_this_item' => __( 'Uploaded to this discount', 'invoicing' ),
203
-						'filter_items_list'     => __( 'Filter discounts', 'invoicing' ),
204
-						'items_list_navigation' => __( 'Discount navigation', 'invoicing' ),
205
-						'items_list'            => __( 'Discounts list', 'invoicing' ),
206
-					),
207
-					'description'         => __( 'This is where you can add new discounts that users can use in invoices.', 'invoicing' ),
208
-					'public'              => false,
209
-					'can_export'          => $capabilities ? true : false,
210
-					'_builtin'            => false,
211
-					'publicly_queryable'  => false,
212
-					'exclude_from_search' => true,
213
-					'show_ui'             => $capabilities ? true : false,
214
-					'show_in_menu'        => $capabilities ? 'wpinv' : false,
215
-					'query_var'           => false,
216
-					'rewrite'             => false,
217
-					'map_meta_cap'        => true,
218
-					'has_archive'         => false,
219
-					'hierarchical'        => false,
220
-					'supports'            => array( 'title', 'excerpt' ),
221
-					'show_in_nav_menus'   => false,
222
-					'show_in_admin_bar'   => $capabilities ? true : false,
223
-					'menu_position'       => null,
224
-				)
225
-			)
226
-		);
175
+        // Register discount post type.
176
+        register_post_type(
177
+            'wpi_discount',
178
+            apply_filters(
179
+                'wpinv_register_post_type_discount',
180
+                array(
181
+                    'labels'              => array(
182
+                        'name'                  => __( 'Discounts', 'invoicing' ),
183
+                        'singular_name'         => __( 'Discount', 'invoicing' ),
184
+                        'all_items'             => __( 'Discounts', 'invoicing' ),
185
+                        'menu_name'             => _x( 'Discounts', 'Admin menu name', 'invoicing' ),
186
+                        'add_new'               => __( 'Add New', 'invoicing' ),
187
+                        'add_new_item'          => __( 'Add new discount', 'invoicing' ),
188
+                        'edit'                  => __( 'Edit', 'invoicing' ),
189
+                        'edit_item'             => __( 'Edit discount', 'invoicing' ),
190
+                        'new_item'              => __( 'New discount', 'invoicing' ),
191
+                        'view_item'             => __( 'View discount', 'invoicing' ),
192
+                        'view_items'            => __( 'View Discounts', 'invoicing' ),
193
+                        'search_items'          => __( 'Search discounts', 'invoicing' ),
194
+                        'not_found'             => __( 'No discounts found', 'invoicing' ),
195
+                        'not_found_in_trash'    => __( 'No discounts found in trash', 'invoicing' ),
196
+                        'parent'                => __( 'Parent discount', 'invoicing' ),
197
+                        'featured_image'        => __( 'Discount image', 'invoicing' ),
198
+                        'set_featured_image'    => __( 'Set discount image', 'invoicing' ),
199
+                        'remove_featured_image' => __( 'Remove discount image', 'invoicing' ),
200
+                        'use_featured_image'    => __( 'Use as discount image', 'invoicing' ),
201
+                        'insert_into_item'      => __( 'Insert into discount', 'invoicing' ),
202
+                        'uploaded_to_this_item' => __( 'Uploaded to this discount', 'invoicing' ),
203
+                        'filter_items_list'     => __( 'Filter discounts', 'invoicing' ),
204
+                        'items_list_navigation' => __( 'Discount navigation', 'invoicing' ),
205
+                        'items_list'            => __( 'Discounts list', 'invoicing' ),
206
+                    ),
207
+                    'description'         => __( 'This is where you can add new discounts that users can use in invoices.', 'invoicing' ),
208
+                    'public'              => false,
209
+                    'can_export'          => $capabilities ? true : false,
210
+                    '_builtin'            => false,
211
+                    'publicly_queryable'  => false,
212
+                    'exclude_from_search' => true,
213
+                    'show_ui'             => $capabilities ? true : false,
214
+                    'show_in_menu'        => $capabilities ? 'wpinv' : false,
215
+                    'query_var'           => false,
216
+                    'rewrite'             => false,
217
+                    'map_meta_cap'        => true,
218
+                    'has_archive'         => false,
219
+                    'hierarchical'        => false,
220
+                    'supports'            => array( 'title', 'excerpt' ),
221
+                    'show_in_nav_menus'   => false,
222
+                    'show_in_admin_bar'   => $capabilities ? true : false,
223
+                    'menu_position'       => null,
224
+                )
225
+            )
226
+        );
227 227
 
228
-		do_action( 'getpaid_after_register_post_types' );
229
-	}
228
+        do_action( 'getpaid_after_register_post_types' );
229
+    }
230 230
 
231
-	/**
232
-	 * Register our custom post statuses.
233
-	 */
234
-	public static function register_post_status() {
231
+    /**
232
+     * Register our custom post statuses.
233
+     */
234
+    public static function register_post_status() {
235 235
 
236
-		$invoice_statuses = apply_filters(
237
-			'getpaid_register_invoice_post_statuses',
238
-			array(
236
+        $invoice_statuses = apply_filters(
237
+            'getpaid_register_invoice_post_statuses',
238
+            array(
239 239
 
240
-				'wpi-pending'    => array(
241
-					'label'                     => _x( 'Pending Payment', 'Invoice status', 'invoicing' ),
242
-        			'public'                    => true,
243
-        			'exclude_from_search'       => true,
244
-        			'show_in_admin_all_list'    => true,
245
-					'show_in_admin_status_list' => true,
246
-					/* translators: %s: number of invoices */
247
-        			'label_count'               => _n_noop( 'Pending Payment <span class="count">(%s)</span>', 'Pending Payment <span class="count">(%s)</span>', 'invoicing' ),
248
-				),
240
+                'wpi-pending'    => array(
241
+                    'label'                     => _x( 'Pending Payment', 'Invoice status', 'invoicing' ),
242
+                    'public'                    => true,
243
+                    'exclude_from_search'       => true,
244
+                    'show_in_admin_all_list'    => true,
245
+                    'show_in_admin_status_list' => true,
246
+                    /* translators: %s: number of invoices */
247
+                    'label_count'               => _n_noop( 'Pending Payment <span class="count">(%s)</span>', 'Pending Payment <span class="count">(%s)</span>', 'invoicing' ),
248
+                ),
249 249
 
250
-				'wpi-processing' => array(
251
-					'label'                     => _x( 'Processing', 'Invoice status', 'invoicing' ),
252
-        			'public'                    => true,
253
-        			'exclude_from_search'       => true,
254
-        			'show_in_admin_all_list'    => true,
255
-					'show_in_admin_status_list' => true,
256
-					/* translators: %s: number of invoices */
257
-        			'label_count'               => _n_noop( 'Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing' ),
258
-				),
250
+                'wpi-processing' => array(
251
+                    'label'                     => _x( 'Processing', 'Invoice status', 'invoicing' ),
252
+                    'public'                    => true,
253
+                    'exclude_from_search'       => true,
254
+                    'show_in_admin_all_list'    => true,
255
+                    'show_in_admin_status_list' => true,
256
+                    /* translators: %s: number of invoices */
257
+                    'label_count'               => _n_noop( 'Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing' ),
258
+                ),
259 259
 
260
-				'wpi-onhold'     => array(
261
-					'label'                     => _x( 'On Hold', 'Invoice status', 'invoicing' ),
262
-        			'public'                    => true,
263
-        			'exclude_from_search'       => true,
264
-        			'show_in_admin_all_list'    => true,
265
-					'show_in_admin_status_list' => true,
266
-					/* translators: %s: number of invoices */
267
-        			'label_count'               => _n_noop( 'On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing' ),
268
-				),
260
+                'wpi-onhold'     => array(
261
+                    'label'                     => _x( 'On Hold', 'Invoice status', 'invoicing' ),
262
+                    'public'                    => true,
263
+                    'exclude_from_search'       => true,
264
+                    'show_in_admin_all_list'    => true,
265
+                    'show_in_admin_status_list' => true,
266
+                    /* translators: %s: number of invoices */
267
+                    'label_count'               => _n_noop( 'On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing' ),
268
+                ),
269 269
 
270
-				'wpi-cancelled'  => array(
271
-					'label'                     => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
272
-        			'public'                    => true,
273
-        			'exclude_from_search'       => true,
274
-        			'show_in_admin_all_list'    => true,
275
-					'show_in_admin_status_list' => true,
276
-					/* translators: %s: number of invoices */
277
-        			'label_count'               => _n_noop( 'Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing' ),
278
-				),
270
+                'wpi-cancelled'  => array(
271
+                    'label'                     => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
272
+                    'public'                    => true,
273
+                    'exclude_from_search'       => true,
274
+                    'show_in_admin_all_list'    => true,
275
+                    'show_in_admin_status_list' => true,
276
+                    /* translators: %s: number of invoices */
277
+                    'label_count'               => _n_noop( 'Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing' ),
278
+                ),
279 279
 
280
-				'wpi-refunded'   => array(
281
-					'label'                     => _x( 'Refunded', 'Invoice status', 'invoicing' ),
282
-        			'public'                    => true,
283
-        			'exclude_from_search'       => true,
284
-        			'show_in_admin_all_list'    => true,
285
-					'show_in_admin_status_list' => true,
286
-					/* translators: %s: number of invoices */
287
-        			'label_count'               => _n_noop( 'Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing' ),
288
-				),
280
+                'wpi-refunded'   => array(
281
+                    'label'                     => _x( 'Refunded', 'Invoice status', 'invoicing' ),
282
+                    'public'                    => true,
283
+                    'exclude_from_search'       => true,
284
+                    'show_in_admin_all_list'    => true,
285
+                    'show_in_admin_status_list' => true,
286
+                    /* translators: %s: number of invoices */
287
+                    'label_count'               => _n_noop( 'Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing' ),
288
+                ),
289 289
 
290
-				'wpi-failed'     => array(
291
-					'label'                     => _x( 'Failed', 'Invoice status', 'invoicing' ),
292
-        			'public'                    => true,
293
-        			'exclude_from_search'       => true,
294
-        			'show_in_admin_all_list'    => true,
295
-					'show_in_admin_status_list' => true,
296
-					/* translators: %s: number of invoices */
297
-        			'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing' ),
298
-				),
290
+                'wpi-failed'     => array(
291
+                    'label'                     => _x( 'Failed', 'Invoice status', 'invoicing' ),
292
+                    'public'                    => true,
293
+                    'exclude_from_search'       => true,
294
+                    'show_in_admin_all_list'    => true,
295
+                    'show_in_admin_status_list' => true,
296
+                    /* translators: %s: number of invoices */
297
+                    'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing' ),
298
+                ),
299 299
 
300
-				'wpi-renewal'    => array(
301
-					'label'                     => _x( 'Renewal', 'Invoice status', 'invoicing' ),
302
-        			'public'                    => true,
303
-        			'exclude_from_search'       => true,
304
-        			'show_in_admin_all_list'    => true,
305
-					'show_in_admin_status_list' => true,
306
-					/* translators: %s: number of invoices */
307
-        			'label_count'               => _n_noop( 'Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing' ),
308
-				),
309
-			)
310
-		);
300
+                'wpi-renewal'    => array(
301
+                    'label'                     => _x( 'Renewal', 'Invoice status', 'invoicing' ),
302
+                    'public'                    => true,
303
+                    'exclude_from_search'       => true,
304
+                    'show_in_admin_all_list'    => true,
305
+                    'show_in_admin_status_list' => true,
306
+                    /* translators: %s: number of invoices */
307
+                    'label_count'               => _n_noop( 'Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing' ),
308
+                ),
309
+            )
310
+        );
311 311
 
312
-		foreach ( $invoice_statuses as $invoice_statuse => $args ) {
313
-			register_post_status( $invoice_statuse, $args );
314
-		}
315
-	}
312
+        foreach ( $invoice_statuses as $invoice_statuse => $args ) {
313
+            register_post_status( $invoice_statuse, $args );
314
+        }
315
+    }
316 316
 
317
-	/**
318
-	 * Flush rewrite rules.
319
-	 */
320
-	public static function flush_rewrite_rules() {
321
-		flush_rewrite_rules();
322
-	}
317
+    /**
318
+     * Flush rewrite rules.
319
+     */
320
+    public static function flush_rewrite_rules() {
321
+        flush_rewrite_rules();
322
+    }
323 323
 
324
-	/**
325
-	 * Flush rules to prevent 404.
326
-	 *
327
-	 */
328
-	public static function maybe_flush_rewrite_rules() {
329
-		if ( ! get_option( 'getpaid_flushed_rewrite_rules' ) ) {
330
-			update_option( 'getpaid_flushed_rewrite_rules', '1' );
331
-			self::flush_rewrite_rules();
332
-		}
333
-	}
324
+    /**
325
+     * Flush rules to prevent 404.
326
+     *
327
+     */
328
+    public static function maybe_flush_rewrite_rules() {
329
+        if ( ! get_option( 'getpaid_flushed_rewrite_rules' ) ) {
330
+            update_option( 'getpaid_flushed_rewrite_rules', '1' );
331
+            self::flush_rewrite_rules();
332
+        }
333
+    }
334 334
 
335 335
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/ayecode-ui-settings.php 1 patch
Indentation   +1975 added lines, -1975 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * Bail if we are not in WP.
14 14
  */
15 15
 if ( ! defined( 'ABSPATH' ) ) {
16
-	exit;
16
+    exit;
17 17
 }
18 18
 
19 19
 /**
@@ -21,480 +21,480 @@  discard block
 block discarded – undo
21 21
  */
22 22
 if ( ! class_exists( 'AyeCode_UI_Settings' ) ) {
23 23
 
24
-	/**
25
-	 * A Class to be able to change settings for Font Awesome.
26
-	 *
27
-	 * Class AyeCode_UI_Settings
28
-	 * @ver 1.0.0
29
-	 * @todo decide how to implement textdomain
30
-	 */
31
-	class AyeCode_UI_Settings {
32
-
33
-		/**
34
-		 * Class version version.
35
-		 *
36
-		 * @var string
37
-		 */
38
-		public $version = '0.2.26';
39
-
40
-		/**
41
-		 * Class textdomain.
42
-		 *
43
-		 * @var string
44
-		 */
45
-		public $textdomain = 'aui';
46
-
47
-		/**
48
-		 * Latest version of Bootstrap at time of publish published.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public $latest = "5.2.2";
53
-
54
-		/**
55
-		 * Current version of select2 being used.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public $select2_version = "4.0.11";
60
-
61
-		/**
62
-		 * The title.
63
-		 *
64
-		 * @var string
65
-		 */
66
-		public $name = 'AyeCode UI';
67
-
68
-		/**
69
-		 * The relative url to the assets.
70
-		 *
71
-		 * @var string
72
-		 */
73
-		public $url = '';
74
-
75
-		/**
76
-		 * Holds the settings values.
77
-		 *
78
-		 * @var array
79
-		 */
80
-		private $settings;
81
-
82
-		/**
83
-		 * AyeCode_UI_Settings instance.
84
-		 *
85
-		 * @access private
86
-		 * @since  1.0.0
87
-		 * @var    AyeCode_UI_Settings There can be only one!
88
-		 */
89
-		private static $instance = null;
90
-
91
-
92
-		/**
93
-		 * Main AyeCode_UI_Settings Instance.
94
-		 *
95
-		 * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
-		 *
97
-		 * @since 1.0.0
98
-		 * @static
99
-		 * @return AyeCode_UI_Settings - Main instance.
100
-		 */
101
-		public static function instance() {
102
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
103
-
104
-				self::$instance = new AyeCode_UI_Settings;
105
-
106
-				add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
-
108
-				if ( is_admin() ) {
109
-					add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
-					add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
-
112
-					// Maybe show example page
113
-					add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
-
115
-					if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
-						add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
-					}
118
-				}
24
+    /**
25
+     * A Class to be able to change settings for Font Awesome.
26
+     *
27
+     * Class AyeCode_UI_Settings
28
+     * @ver 1.0.0
29
+     * @todo decide how to implement textdomain
30
+     */
31
+    class AyeCode_UI_Settings {
32
+
33
+        /**
34
+         * Class version version.
35
+         *
36
+         * @var string
37
+         */
38
+        public $version = '0.2.26';
39
+
40
+        /**
41
+         * Class textdomain.
42
+         *
43
+         * @var string
44
+         */
45
+        public $textdomain = 'aui';
119 46
 
120
-				add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
47
+        /**
48
+         * Latest version of Bootstrap at time of publish published.
49
+         *
50
+         * @var string
51
+         */
52
+        public $latest = "5.2.2";
53
+
54
+        /**
55
+         * Current version of select2 being used.
56
+         *
57
+         * @var string
58
+         */
59
+        public $select2_version = "4.0.11";
121 60
 
122
-				do_action( 'ayecode_ui_settings_loaded' );
123
-			}
61
+        /**
62
+         * The title.
63
+         *
64
+         * @var string
65
+         */
66
+        public $name = 'AyeCode UI';
124 67
 
125
-			return self::$instance;
126
-		}
68
+        /**
69
+         * The relative url to the assets.
70
+         *
71
+         * @var string
72
+         */
73
+        public $url = '';
127 74
 
128
-		/**
129
-		 * Add custom colors to the color selector.
130
-		 *
131
-		 * @param $theme_colors
132
-		 * @param $include_outlines
133
-		 * @param $include_branding
134
-		 *
135
-		 * @return mixed
136
-		 */
137
-		public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
75
+        /**
76
+         * Holds the settings values.
77
+         *
78
+         * @var array
79
+         */
80
+        private $settings;
138 81
 
82
+        /**
83
+         * AyeCode_UI_Settings instance.
84
+         *
85
+         * @access private
86
+         * @since  1.0.0
87
+         * @var    AyeCode_UI_Settings There can be only one!
88
+         */
89
+        private static $instance = null;
139 90
 
140
-			$setting = wp_get_global_settings();
141 91
 
142
-			if(!empty($setting['color']['palette']['custom'])){
143
-				foreach($setting['color']['palette']['custom'] as $color){
144
-					$theme_colors[$color['slug']] = esc_attr($color['name']);
145
-				}
146
-			}
147
-
148
-			return $theme_colors;
149
-		}
150
-
151
-		/**
152
-		 * Setup some constants.
153
-		 */
154
-		public function constants(){
155
-			define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
-			define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
-			define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
-			define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
-			define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
-			define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
-			define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
-			define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
-			define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
-			define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
-			define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
-			define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
-			define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
-			define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
-			define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
-			define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
-
172
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
-				define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
-			}
175
-			if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
-				define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
-			}
178
-			if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
-				define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
-			}
181
-			if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
-				define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
-			}
184
-			if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
-				define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
-			}
187
-			if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
-				define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
-			}
190
-			if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
-				define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
-			}
193
-			if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
-				define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
-			}
196
-			if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
-				define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
-			}
199
-			if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
-				define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
-			}
202
-			if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
-				define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
-			}
205
-			if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
-				define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
-			}
208
-			if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
-				define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
-			}
211
-			if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
-				define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
-			}
214
-			if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
-				define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
-			}
217
-			if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
-				define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
-			}
220
-
221
-		}
222
-
223
-		public static function get_colors( $original = false){
224
-
225
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
-				return array();
227
-			}
228
-			if ( $original ) {
229
-				return array(
230
-					'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
-					'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
-					'info'      => AUI_INFO_COLOR_ORIGINAL,
233
-					'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
-					'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
-					'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
-					'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
-					'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
-					'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
-					'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
-					'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
-					'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
-					'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
-					'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
-					'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
-					'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
-				);
247
-			}
248
-
249
-			return array(
250
-				'primary'   => AUI_PRIMARY_COLOR,
251
-				'secondary' => AUI_SECONDARY_COLOR,
252
-				'info'      => AUI_INFO_COLOR,
253
-				'warning'   => AUI_WARNING_COLOR,
254
-				'danger'    => AUI_DANGER_COLOR,
255
-				'success'   => AUI_SUCCESS_COLOR,
256
-				'light'     => AUI_LIGHT_COLOR,
257
-				'dark'      => AUI_DARK_COLOR,
258
-				'white'     => AUI_WHITE_COLOR,
259
-				'purple'    => AUI_PURPLE_COLOR,
260
-				'salmon'    => AUI_SALMON_COLOR,
261
-				'cyan'      => AUI_CYAN_COLOR,
262
-				'gray'      => AUI_GRAY_COLOR,
263
-				'indigo'    => AUI_INDIGO_COLOR,
264
-				'orange'    => AUI_ORANGE_COLOR,
265
-				'black'     => AUI_BLACK_COLOR,
266
-			);
267
-		}
268
-
269
-		/**
270
-		 * Add admin body class to show when BS5 is active.
271
-		 *
272
-		 * @param $classes
273
-		 *
274
-		 * @return mixed
275
-		 */
276
-		public function add_bs5_admin_body_class( $classes = '' ) {
277
-			$classes .= ' aui_bs5';
278
-
279
-			return $classes;
280
-		}
281
-
282
-		/**
283
-		 * Add a body class to show when BS5 is active.
284
-		 *
285
-		 * @param $classes
286
-		 *
287
-		 * @return mixed
288
-		 */
289
-		public function add_bs5_body_class( $classes ) {
290
-			$classes[] = 'aui_bs5';
291
-
292
-			return $classes;
293
-		}
294
-
295
-		/**
296
-		 * Initiate the settings and add the required action hooks.
297
-		 */
298
-		public function init() {
92
+        /**
93
+         * Main AyeCode_UI_Settings Instance.
94
+         *
95
+         * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
+         *
97
+         * @since 1.0.0
98
+         * @static
99
+         * @return AyeCode_UI_Settings - Main instance.
100
+         */
101
+        public static function instance() {
102
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
103
+
104
+                self::$instance = new AyeCode_UI_Settings;
105
+
106
+                add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
+
108
+                if ( is_admin() ) {
109
+                    add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
+                    add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
+
112
+                    // Maybe show example page
113
+                    add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
+
115
+                    if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
+                        add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
+                    }
118
+                }
119
+
120
+                add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
121
+
122
+                do_action( 'ayecode_ui_settings_loaded' );
123
+            }
124
+
125
+            return self::$instance;
126
+        }
127
+
128
+        /**
129
+         * Add custom colors to the color selector.
130
+         *
131
+         * @param $theme_colors
132
+         * @param $include_outlines
133
+         * @param $include_branding
134
+         *
135
+         * @return mixed
136
+         */
137
+        public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
138
+
139
+
140
+            $setting = wp_get_global_settings();
141
+
142
+            if(!empty($setting['color']['palette']['custom'])){
143
+                foreach($setting['color']['palette']['custom'] as $color){
144
+                    $theme_colors[$color['slug']] = esc_attr($color['name']);
145
+                }
146
+            }
147
+
148
+            return $theme_colors;
149
+        }
150
+
151
+        /**
152
+         * Setup some constants.
153
+         */
154
+        public function constants(){
155
+            define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
+            define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
+            define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
+            define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
+            define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
+            define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
+            define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
+            define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
+            define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
+            define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
+            define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
+            define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
+            define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
+            define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
+            define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
+            define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
+
172
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
+                define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
+            }
175
+            if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
+                define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
+            }
178
+            if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
+                define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
+            }
181
+            if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
+                define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
+            }
184
+            if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
+                define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
+            }
187
+            if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
+                define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
+            }
190
+            if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
+                define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
+            }
193
+            if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
+                define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
+            }
196
+            if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
+                define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
+            }
199
+            if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
+                define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
+            }
202
+            if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
+                define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
+            }
205
+            if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
+                define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
+            }
208
+            if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
+                define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
+            }
211
+            if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
+                define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
+            }
214
+            if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
+                define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
+            }
217
+            if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
+                define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
+            }
220
+
221
+        }
222
+
223
+        public static function get_colors( $original = false){
224
+
225
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
+                return array();
227
+            }
228
+            if ( $original ) {
229
+                return array(
230
+                    'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
+                    'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
+                    'info'      => AUI_INFO_COLOR_ORIGINAL,
233
+                    'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
+                    'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
+                    'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
+                    'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
+                    'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
+                    'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
+                    'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
+                    'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
+                    'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
+                    'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
+                    'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
+                    'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
+                    'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
+                );
247
+            }
248
+
249
+            return array(
250
+                'primary'   => AUI_PRIMARY_COLOR,
251
+                'secondary' => AUI_SECONDARY_COLOR,
252
+                'info'      => AUI_INFO_COLOR,
253
+                'warning'   => AUI_WARNING_COLOR,
254
+                'danger'    => AUI_DANGER_COLOR,
255
+                'success'   => AUI_SUCCESS_COLOR,
256
+                'light'     => AUI_LIGHT_COLOR,
257
+                'dark'      => AUI_DARK_COLOR,
258
+                'white'     => AUI_WHITE_COLOR,
259
+                'purple'    => AUI_PURPLE_COLOR,
260
+                'salmon'    => AUI_SALMON_COLOR,
261
+                'cyan'      => AUI_CYAN_COLOR,
262
+                'gray'      => AUI_GRAY_COLOR,
263
+                'indigo'    => AUI_INDIGO_COLOR,
264
+                'orange'    => AUI_ORANGE_COLOR,
265
+                'black'     => AUI_BLACK_COLOR,
266
+            );
267
+        }
268
+
269
+        /**
270
+         * Add admin body class to show when BS5 is active.
271
+         *
272
+         * @param $classes
273
+         *
274
+         * @return mixed
275
+         */
276
+        public function add_bs5_admin_body_class( $classes = '' ) {
277
+            $classes .= ' aui_bs5';
278
+
279
+            return $classes;
280
+        }
281
+
282
+        /**
283
+         * Add a body class to show when BS5 is active.
284
+         *
285
+         * @param $classes
286
+         *
287
+         * @return mixed
288
+         */
289
+        public function add_bs5_body_class( $classes ) {
290
+            $classes[] = 'aui_bs5';
291
+
292
+            return $classes;
293
+        }
294
+
295
+        /**
296
+         * Initiate the settings and add the required action hooks.
297
+         */
298
+        public function init() {
299 299
             global $aui_bs5;
300 300
 
301
-			// Maybe fix settings
302
-			if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
-				$db_settings = get_option( 'ayecode-ui-settings' );
304
-				if ( ! empty( $db_settings ) ) {
305
-					$db_settings['css_backend'] = 'compatibility';
306
-					$db_settings['js_backend'] = 'core-popper';
307
-					update_option( 'ayecode-ui-settings', $db_settings );
308
-					wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
-				}
310
-			}
301
+            // Maybe fix settings
302
+            if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
+                $db_settings = get_option( 'ayecode-ui-settings' );
304
+                if ( ! empty( $db_settings ) ) {
305
+                    $db_settings['css_backend'] = 'compatibility';
306
+                    $db_settings['js_backend'] = 'core-popper';
307
+                    update_option( 'ayecode-ui-settings', $db_settings );
308
+                    wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
+                }
310
+            }
311 311
 
312
-			$this->constants();
313
-			$this->settings = $this->get_settings();
314
-			$this->url = $this->get_url();
312
+            $this->constants();
313
+            $this->settings = $this->get_settings();
314
+            $this->url = $this->get_url();
315 315
 
316 316
             // define the version
317
-			$aui_bs5 = $this->settings['bs_ver'] === '5';
318
-
319
-			if ( $aui_bs5 ) {
320
-				include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
-				add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
-				add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
-			}
324
-
325
-			/**
326
-			 * Maybe load CSS
327
-			 *
328
-			 * We load super early in case there is a theme version that might change the colors
329
-			 */
330
-			if ( $this->settings['css'] ) {
331
-				$priority = $this->is_bs3_compat() ? 100 : 1;
317
+            $aui_bs5 = $this->settings['bs_ver'] === '5';
318
+
319
+            if ( $aui_bs5 ) {
320
+                include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
+                add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
+                add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
+            }
324
+
325
+            /**
326
+             * Maybe load CSS
327
+             *
328
+             * We load super early in case there is a theme version that might change the colors
329
+             */
330
+            if ( $this->settings['css'] ) {
331
+                $priority = $this->is_bs3_compat() ? 100 : 1;
332 332
                 $priority = $aui_bs5 ? 10 : $priority;
333
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
-			}
335
-			if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
-			}
338
-
339
-			// maybe load JS
340
-			if ( $this->settings['js'] ) {
341
-				$priority = $this->is_bs3_compat() ? 100 : 1;
342
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
-			}
344
-			if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
-			}
347
-
348
-			// Maybe set the HTML font size
349
-			if ( $this->settings['html_font_size'] ) {
350
-				add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
-			}
352
-
353
-			// Maybe show backend style error
354
-			if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
-				add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
-			}
357
-
358
-		}
359
-
360
-		/**
361
-		 * Show admin notice if backend scripts not loaded.
362
-		 */
363
-		public function show_admin_style_notice(){
364
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
-			$message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
-		}
369
-
370
-		/**
371
-		 * Check if we should load the admin scripts or not.
372
-		 *
373
-		 * @return bool
374
-		 */
375
-		public function load_admin_scripts(){
376
-			$result = true;
377
-
378
-			// check if specifically disabled
379
-			if(!empty($this->settings['disable_admin'])){
380
-				$url_parts = explode("\n",$this->settings['disable_admin']);
381
-				foreach($url_parts as $part){
382
-					if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
-						return false; // return early, no point checking further
384
-					}
385
-				}
386
-			}
387
-
388
-			return $result;
389
-		}
390
-
391
-		/**
392
-		 * Add a html font size to the footer.
393
-		 */
394
-		public function html_font_size(){
395
-			$this->settings = $this->get_settings();
396
-			echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
-		}
398
-
399
-		/**
400
-		 * Check if the current admin screen should load scripts.
401
-		 *
402
-		 * @return bool
403
-		 */
404
-		public function is_aui_screen(){
333
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
+            }
335
+            if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
+            }
338
+
339
+            // maybe load JS
340
+            if ( $this->settings['js'] ) {
341
+                $priority = $this->is_bs3_compat() ? 100 : 1;
342
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
+            }
344
+            if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
+            }
347
+
348
+            // Maybe set the HTML font size
349
+            if ( $this->settings['html_font_size'] ) {
350
+                add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
+            }
352
+
353
+            // Maybe show backend style error
354
+            if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
+                add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
+            }
357
+
358
+        }
359
+
360
+        /**
361
+         * Show admin notice if backend scripts not loaded.
362
+         */
363
+        public function show_admin_style_notice(){
364
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
+            $message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
+        }
369
+
370
+        /**
371
+         * Check if we should load the admin scripts or not.
372
+         *
373
+         * @return bool
374
+         */
375
+        public function load_admin_scripts(){
376
+            $result = true;
377
+
378
+            // check if specifically disabled
379
+            if(!empty($this->settings['disable_admin'])){
380
+                $url_parts = explode("\n",$this->settings['disable_admin']);
381
+                foreach($url_parts as $part){
382
+                    if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
+                        return false; // return early, no point checking further
384
+                    }
385
+                }
386
+            }
387
+
388
+            return $result;
389
+        }
390
+
391
+        /**
392
+         * Add a html font size to the footer.
393
+         */
394
+        public function html_font_size(){
395
+            $this->settings = $this->get_settings();
396
+            echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
+        }
398
+
399
+        /**
400
+         * Check if the current admin screen should load scripts.
401
+         *
402
+         * @return bool
403
+         */
404
+        public function is_aui_screen(){
405 405
 //			echo '###';exit;
406
-			$load = false;
407
-			// check if we should load or not
408
-			if ( is_admin() ) {
409
-				// Only enable on set pages
410
-				$aui_screens = array(
411
-					'page',
406
+            $load = false;
407
+            // check if we should load or not
408
+            if ( is_admin() ) {
409
+                // Only enable on set pages
410
+                $aui_screens = array(
411
+                    'page',
412 412
                     //'docs',
413
-					'post',
414
-					'settings_page_ayecode-ui-settings',
415
-					'appearance_page_gutenberg-widgets',
416
-					'widgets',
417
-					'ayecode-ui-settings',
418
-					'site-editor'
419
-				);
420
-				$screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
413
+                    'post',
414
+                    'settings_page_ayecode-ui-settings',
415
+                    'appearance_page_gutenberg-widgets',
416
+                    'widgets',
417
+                    'ayecode-ui-settings',
418
+                    'site-editor'
419
+                );
420
+                $screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
421 421
 
422
-				$screen = get_current_screen();
422
+                $screen = get_current_screen();
423 423
 
424 424
 //				echo '###'.$screen->id;
425 425
 
426
-				// check if we are on a AUI screen
427
-				if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
-					$load = true;
429
-				}
426
+                // check if we are on a AUI screen
427
+                if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
+                    $load = true;
429
+                }
430 430
 
431
-				//load for widget previews in WP 5.8
432
-				if( !empty($_REQUEST['legacy-widget-preview'])){
433
-					$load = true;
434
-				}
435
-			}
431
+                //load for widget previews in WP 5.8
432
+                if( !empty($_REQUEST['legacy-widget-preview'])){
433
+                    $load = true;
434
+                }
435
+            }
436 436
 
437 437
 
438 438
 
439
-			return apply_filters( 'aui_load_on_admin' , $load );
440
-		}
439
+            return apply_filters( 'aui_load_on_admin' , $load );
440
+        }
441 441
 
442
-		/**
443
-		 * Check if the current theme is a block theme.
444
-		 *
445
-		 * @return bool
446
-		 */
447
-		public static function is_block_theme() {
448
-			if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
-				return true;
450
-			}
442
+        /**
443
+         * Check if the current theme is a block theme.
444
+         *
445
+         * @return bool
446
+         */
447
+        public static function is_block_theme() {
448
+            if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
+                return true;
450
+            }
451 451
 
452
-			return false;
453
-		}
452
+            return false;
453
+        }
454 454
 
455
-		/**
456
-		 * Adds the styles.
457
-		 */
458
-		public function enqueue_style() {
455
+        /**
456
+         * Adds the styles.
457
+         */
458
+        public function enqueue_style() {
459 459
             global $aui_bs5;
460 460
 
461 461
             $load_fse = false;
462 462
 
463
-			if( is_admin() && !$this->is_aui_screen()){
464
-				// don't add wp-admin scripts if not requested to
465
-			}else{
466
-				$css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
463
+            if( is_admin() && !$this->is_aui_screen()){
464
+                // don't add wp-admin scripts if not requested to
465
+            }else{
466
+                $css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
467 467
 
468
-				$rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
468
+                $rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
469 469
 
470 470
                 $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
471 471
 
472
-				if($this->settings[$css_setting]){
473
-					$compatibility = $this->settings[$css_setting]=='core' ? false : true;
474
-					$url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
472
+                if($this->settings[$css_setting]){
473
+                    $compatibility = $this->settings[$css_setting]=='core' ? false : true;
474
+                    $url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
475 475
 
476 476
 
477 477
 
478
-					wp_register_style( 'ayecode-ui', $url, array(), $this->version );
479
-					wp_enqueue_style( 'ayecode-ui' );
478
+                    wp_register_style( 'ayecode-ui', $url, array(), $this->version );
479
+                    wp_enqueue_style( 'ayecode-ui' );
480 480
 
481
-					$current_screen = function_exists('get_current_screen' ) ? get_current_screen() : '';
481
+                    $current_screen = function_exists('get_current_screen' ) ? get_current_screen() : '';
482 482
 
483 483
 //					if ( is_admin() && !empty($_REQUEST['postType']) ) {
484
-					if ( is_admin() && ( !empty($_REQUEST['postType']) || $current_screen->is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
485
-						$url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
486
-						wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
487
-						wp_enqueue_style( 'ayecode-ui-fse' );
488
-						$load_fse = true;
489
-					}
484
+                    if ( is_admin() && ( !empty($_REQUEST['postType']) || $current_screen->is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
485
+                        $url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
486
+                        wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
487
+                        wp_enqueue_style( 'ayecode-ui-fse' );
488
+                        $load_fse = true;
489
+                    }
490 490
 
491 491
 
492
-					// flatpickr
493
-					wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
492
+                    // flatpickr
493
+                    wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
494 494
 
495
-					// fix some wp-admin issues
496
-					if(is_admin()){
497
-						$custom_css = "
495
+                    // fix some wp-admin issues
496
+                    if(is_admin()){
497
+                        $custom_css = "
498 498
                 body{
499 499
                     background-color: #f1f1f1;
500 500
                     font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
@@ -535,67 +535,67 @@  discard block
 block discarded – undo
535 535
 				}
536 536
                 ";
537 537
 
538
-						// @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
539
-						$custom_css .= "
538
+                        // @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
539
+                        $custom_css .= "
540 540
 						.edit-post-sidebar input[type=color].components-text-control__input{
541 541
 						    padding: 0;
542 542
 						}
543 543
 					";
544
-						wp_add_inline_style( 'ayecode-ui', $custom_css );
545
-					}
544
+                        wp_add_inline_style( 'ayecode-ui', $custom_css );
545
+                    }
546 546
 
547
-					// custom changes
548
-					if ( $load_fse ) {
549
-						wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility) );
550
-					}else{
551
-						wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
547
+                    // custom changes
548
+                    if ( $load_fse ) {
549
+                        wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility) );
550
+                    }else{
551
+                        wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
552 552
 
553
-					}
553
+                    }
554 554
 
555
-				}
556
-			}
555
+                }
556
+            }
557 557
 
558 558
 
559
-		}
559
+        }
560 560
 
561
-		/**
562
-		 * Get inline script used if bootstrap enqueued
563
-		 *
564
-		 * If this remains small then its best to use this than to add another JS file.
565
-		 */
566
-		public function inline_script() {
561
+        /**
562
+         * Get inline script used if bootstrap enqueued
563
+         *
564
+         * If this remains small then its best to use this than to add another JS file.
565
+         */
566
+        public function inline_script() {
567 567
             global $aui_bs5;
568
-			// Flatpickr calendar locale
569
-			$flatpickr_locale = self::flatpickr_locale();
570
-
571
-			ob_start();
572
-			if ( $aui_bs5 ) {
573
-				include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
574
-			}else{
575
-				include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
568
+            // Flatpickr calendar locale
569
+            $flatpickr_locale = self::flatpickr_locale();
570
+
571
+            ob_start();
572
+            if ( $aui_bs5 ) {
573
+                include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
574
+            }else{
575
+                include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
576 576
             }
577 577
 
578
-			$output = ob_get_clean();
578
+            $output = ob_get_clean();
579 579
 
580
-			/*
580
+            /*
581 581
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
582 582
 			 */
583
-			return str_replace( array(
584
-				'<script>',
585
-				'</script>'
586
-			), '', self::minify_js($output) );
587
-		}
588
-
589
-
590
-		/**
591
-		 * JS to help with conflict issues with other plugins and themes using bootstrap v3.
592
-		 *
593
-		 * @TODO we may need this when other conflicts arrise.
594
-		 * @return mixed
595
-		 */
596
-		public static function bs3_compat_js() {
597
-			ob_start();
598
-			?>
583
+            return str_replace( array(
584
+                '<script>',
585
+                '</script>'
586
+            ), '', self::minify_js($output) );
587
+        }
588
+
589
+
590
+        /**
591
+         * JS to help with conflict issues with other plugins and themes using bootstrap v3.
592
+         *
593
+         * @TODO we may need this when other conflicts arrise.
594
+         * @return mixed
595
+         */
596
+        public static function bs3_compat_js() {
597
+            ob_start();
598
+            ?>
599 599
             <script>
600 600
 				<?php if( defined( 'FUSION_BUILDER_VERSION' ) ){ ?>
601 601
                 /* With Avada builder */
@@ -603,20 +603,20 @@  discard block
 block discarded – undo
603 603
 				<?php } ?>
604 604
             </script>
605 605
 			<?php
606
-			return str_replace( array(
607
-				'<script>',
608
-				'</script>'
609
-			), '', ob_get_clean());
610
-		}
611
-
612
-		/**
613
-		 * Get inline script used if bootstrap file browser enqueued.
614
-		 *
615
-		 * If this remains small then its best to use this than to add another JS file.
616
-		 */
617
-		public function inline_script_file_browser(){
618
-			ob_start();
619
-			?>
606
+            return str_replace( array(
607
+                '<script>',
608
+                '</script>'
609
+            ), '', ob_get_clean());
610
+        }
611
+
612
+        /**
613
+         * Get inline script used if bootstrap file browser enqueued.
614
+         *
615
+         * If this remains small then its best to use this than to add another JS file.
616
+         */
617
+        public function inline_script_file_browser(){
618
+            ob_start();
619
+            ?>
620 620
             <script>
621 621
                 // run on doc ready
622 622
                 jQuery(document).ready(function () {
@@ -624,282 +624,282 @@  discard block
 block discarded – undo
624 624
                 });
625 625
             </script>
626 626
 			<?php
627
-			$output = ob_get_clean();
627
+            $output = ob_get_clean();
628 628
 
629
-			/*
629
+            /*
630 630
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
631 631
 			 */
632
-			return str_replace( array(
633
-				'<script>',
634
-				'</script>'
635
-			), '', $output );
636
-		}
632
+            return str_replace( array(
633
+                '<script>',
634
+                '</script>'
635
+            ), '', $output );
636
+        }
637 637
 
638
-		/**
639
-		 * Adds the Font Awesome JS.
640
-		 */
641
-		public function enqueue_scripts() {
638
+        /**
639
+         * Adds the Font Awesome JS.
640
+         */
641
+        public function enqueue_scripts() {
642 642
 
643
-			if( is_admin() && !$this->is_aui_screen()){
644
-				// don't add wp-admin scripts if not requested to
645
-			}else {
643
+            if( is_admin() && !$this->is_aui_screen()){
644
+                // don't add wp-admin scripts if not requested to
645
+            }else {
646 646
 
647
-				$js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
647
+                $js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
648 648
 
649
-				$bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
649
+                $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
650 650
 
651
-				// select2
652
-				wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
651
+                // select2
652
+                wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
653 653
 
654
-				// flatpickr
655
-				wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
654
+                // flatpickr
655
+                wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
656 656
 
657
-				// iconpicker
658
-				if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
659
-					wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
660
-				}else{
661
-					wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
662
-				}
657
+                // iconpicker
658
+                if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
659
+                    wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
660
+                }else{
661
+                    wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
662
+                }
663 663
 
664
-				// Bootstrap file browser
665
-				wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
666
-				wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
667
-
668
-				$load_inline = false;
669
-
670
-				if ( $this->settings[ $js_setting ] == 'core-popper' ) {
671
-					// Bootstrap bundle
672
-					$url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
673
-					wp_register_script( 'bootstrap-js-bundle', $url, array(
674
-						'select2',
675
-						'jquery'
676
-					), $this->version, $this->is_bs3_compat() );
677
-					// if in admin then add to footer for compatibility.
678
-					is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
679
-					$script = $this->inline_script();
680
-					wp_add_inline_script( 'bootstrap-js-bundle', $script );
681
-				} elseif ( $this->settings[ $js_setting ] == 'popper' ) {
682
-					$url = $this->url . 'assets/js/popper.min.js'; //@todo we need to update this to bs5
683
-					wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
684
-					wp_enqueue_script( 'bootstrap-js-popper' );
685
-					$load_inline = true;
686
-				} else {
687
-					$load_inline = true;
688
-				}
664
+                // Bootstrap file browser
665
+                wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
666
+                wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
667
+
668
+                $load_inline = false;
669
+
670
+                if ( $this->settings[ $js_setting ] == 'core-popper' ) {
671
+                    // Bootstrap bundle
672
+                    $url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
673
+                    wp_register_script( 'bootstrap-js-bundle', $url, array(
674
+                        'select2',
675
+                        'jquery'
676
+                    ), $this->version, $this->is_bs3_compat() );
677
+                    // if in admin then add to footer for compatibility.
678
+                    is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
679
+                    $script = $this->inline_script();
680
+                    wp_add_inline_script( 'bootstrap-js-bundle', $script );
681
+                } elseif ( $this->settings[ $js_setting ] == 'popper' ) {
682
+                    $url = $this->url . 'assets/js/popper.min.js'; //@todo we need to update this to bs5
683
+                    wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
684
+                    wp_enqueue_script( 'bootstrap-js-popper' );
685
+                    $load_inline = true;
686
+                } else {
687
+                    $load_inline = true;
688
+                }
689 689
 
690
-				// Load needed inline scripts by faking the loading of a script if the main script is not being loaded
691
-				if ( $load_inline ) {
692
-					wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
693
-					wp_enqueue_script( 'bootstrap-dummy' );
694
-					$script = $this->inline_script();
695
-					wp_add_inline_script( 'bootstrap-dummy', $script );
696
-				}
697
-			}
698
-
699
-		}
700
-
701
-		/**
702
-		 * Enqueue flatpickr if called.
703
-		 */
704
-		public function enqueue_flatpickr(){
705
-			wp_enqueue_style( 'flatpickr' );
706
-			wp_enqueue_script( 'flatpickr' );
707
-		}
708
-
709
-		/**
710
-		 * Enqueue iconpicker if called.
711
-		 */
712
-		public function enqueue_iconpicker(){
713
-			wp_enqueue_style( 'iconpicker' );
714
-			wp_enqueue_script( 'iconpicker' );
715
-		}
716
-
717
-		/**
718
-		 * Get the url path to the current folder.
719
-		 *
720
-		 * @return string
721
-		 */
722
-		public function get_url() {
723
-			$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
724
-			$content_url = untrailingslashit( WP_CONTENT_URL );
725
-
726
-			// Replace http:// to https://.
727
-			if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
728
-				$content_url = str_replace( 'http://', 'https://', $content_url );
729
-			}
730
-
731
-			// Check if we are inside a plugin
732
-			$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
733
-			$url = str_replace( $content_dir, $content_url, $file_dir );
734
-
735
-			return trailingslashit( $url );
736
-		}
737
-
738
-		/**
739
-		 * Get the url path to the current folder.
740
-		 *
741
-		 * @return string
742
-		 */
743
-		public function get_url_old() {
744
-
745
-			$url = '';
746
-			// check if we are inside a plugin
747
-			$file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
748
-
749
-			// add check in-case user has changed wp-content dir name.
750
-			$wp_content_folder_name = basename(WP_CONTENT_DIR);
751
-			$dir_parts = explode("/$wp_content_folder_name/",$file_dir);
752
-			$url_parts = explode("/$wp_content_folder_name/",plugins_url());
753
-
754
-			if(!empty($url_parts[0]) && !empty($dir_parts[1])){
755
-				$url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
756
-			}
757
-
758
-			return $url;
759
-		}
760
-
761
-		/**
762
-		 * Register the database settings with WordPress.
763
-		 */
764
-		public function register_settings() {
765
-			register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
766
-		}
767
-
768
-		/**
769
-		 * Add the WordPress settings menu item.
770
-		 * @since 1.0.10 Calling function name direct will fail theme check so we don't.
771
-		 */
772
-		public function menu_item() {
773
-			$menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
774
-			call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
775
-				$this,
776
-				'settings_page'
777
-			) );
778
-		}
779
-
780
-		/**
781
-		 * Get a list of themes and their default JS settings.
782
-		 *
783
-		 * @return array
784
-		 */
785
-		public function theme_js_settings(){
786
-			return array(
787
-				'ayetheme' => 'popper',
788
-				'listimia' => 'required',
789
-				'listimia_backend' => 'core-popper',
790
-				//'avada'    => 'required', // removed as we now add compatibility
791
-			);
792
-		}
793
-
794
-		/**
690
+                // Load needed inline scripts by faking the loading of a script if the main script is not being loaded
691
+                if ( $load_inline ) {
692
+                    wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
693
+                    wp_enqueue_script( 'bootstrap-dummy' );
694
+                    $script = $this->inline_script();
695
+                    wp_add_inline_script( 'bootstrap-dummy', $script );
696
+                }
697
+            }
698
+
699
+        }
700
+
701
+        /**
702
+         * Enqueue flatpickr if called.
703
+         */
704
+        public function enqueue_flatpickr(){
705
+            wp_enqueue_style( 'flatpickr' );
706
+            wp_enqueue_script( 'flatpickr' );
707
+        }
708
+
709
+        /**
710
+         * Enqueue iconpicker if called.
711
+         */
712
+        public function enqueue_iconpicker(){
713
+            wp_enqueue_style( 'iconpicker' );
714
+            wp_enqueue_script( 'iconpicker' );
715
+        }
716
+
717
+        /**
718
+         * Get the url path to the current folder.
719
+         *
720
+         * @return string
721
+         */
722
+        public function get_url() {
723
+            $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
724
+            $content_url = untrailingslashit( WP_CONTENT_URL );
725
+
726
+            // Replace http:// to https://.
727
+            if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
728
+                $content_url = str_replace( 'http://', 'https://', $content_url );
729
+            }
730
+
731
+            // Check if we are inside a plugin
732
+            $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
733
+            $url = str_replace( $content_dir, $content_url, $file_dir );
734
+
735
+            return trailingslashit( $url );
736
+        }
737
+
738
+        /**
739
+         * Get the url path to the current folder.
740
+         *
741
+         * @return string
742
+         */
743
+        public function get_url_old() {
744
+
745
+            $url = '';
746
+            // check if we are inside a plugin
747
+            $file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
748
+
749
+            // add check in-case user has changed wp-content dir name.
750
+            $wp_content_folder_name = basename(WP_CONTENT_DIR);
751
+            $dir_parts = explode("/$wp_content_folder_name/",$file_dir);
752
+            $url_parts = explode("/$wp_content_folder_name/",plugins_url());
753
+
754
+            if(!empty($url_parts[0]) && !empty($dir_parts[1])){
755
+                $url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
756
+            }
757
+
758
+            return $url;
759
+        }
760
+
761
+        /**
762
+         * Register the database settings with WordPress.
763
+         */
764
+        public function register_settings() {
765
+            register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
766
+        }
767
+
768
+        /**
769
+         * Add the WordPress settings menu item.
770
+         * @since 1.0.10 Calling function name direct will fail theme check so we don't.
771
+         */
772
+        public function menu_item() {
773
+            $menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
774
+            call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
775
+                $this,
776
+                'settings_page'
777
+            ) );
778
+        }
779
+
780
+        /**
781
+         * Get a list of themes and their default JS settings.
782
+         *
783
+         * @return array
784
+         */
785
+        public function theme_js_settings(){
786
+            return array(
787
+                'ayetheme' => 'popper',
788
+                'listimia' => 'required',
789
+                'listimia_backend' => 'core-popper',
790
+                //'avada'    => 'required', // removed as we now add compatibility
791
+            );
792
+        }
793
+
794
+        /**
795 795
          * Get the date the site was installed.
796 796
          *
797
-		 * @return false|string
798
-		 */
797
+         * @return false|string
798
+         */
799 799
         public function get_site_install_date() {
800
-	        global $wpdb; // This gives you access to the WordPress database object
800
+            global $wpdb; // This gives you access to the WordPress database object
801 801
 
802
-	        // Prepare the SQL query to get the oldest registration date
803
-	        $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
802
+            // Prepare the SQL query to get the oldest registration date
803
+            $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
804 804
 
805
-	        // Execute the query
806
-	        $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
805
+            // Execute the query
806
+            $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
807 807
 
808
-	        return $date ? $date : false;
808
+            return $date ? $date : false;
809 809
         }
810 810
 
811
-		/**
812
-		 * Show admin notice if backend scripts not loaded.
813
-		 */
814
-		public function show_admin_version_notice(){
815
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
816
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
817
-			$message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
818
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
819
-		}
820
-
821
-		/**
822
-		 * Get the current Font Awesome output settings.
823
-		 *
824
-		 * @return array The array of settings.
825
-		 */
826
-		public function get_settings() {
827
-
828
-			$db_settings = get_option( 'ayecode-ui-settings' );
811
+        /**
812
+         * Show admin notice if backend scripts not loaded.
813
+         */
814
+        public function show_admin_version_notice(){
815
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
816
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
817
+            $message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
818
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
819
+        }
820
+
821
+        /**
822
+         * Get the current Font Awesome output settings.
823
+         *
824
+         * @return array The array of settings.
825
+         */
826
+        public function get_settings() {
827
+
828
+            $db_settings = get_option( 'ayecode-ui-settings' );
829 829
 
830 830
             // Maybe show default version notice
831
-			$site_install_date = new DateTime( self::get_site_install_date() );
832
-			$switch_over_date = new DateTime("2024-02-01");
833
-			if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
834
-				add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
835
-			}
836
-
837
-			$js_default = 'core-popper';
838
-			$js_default_backend = $js_default;
839
-
840
-			// maybe set defaults (if no settings set)
841
-			if(empty($db_settings)){
842
-				$active_theme = strtolower( get_template() ); // active parent theme.
843
-				$theme_js_settings = self::theme_js_settings();
844
-				if(isset($theme_js_settings[$active_theme])){
845
-					$js_default = $theme_js_settings[$active_theme];
846
-					$js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
847
-				}
848
-			}
831
+            $site_install_date = new DateTime( self::get_site_install_date() );
832
+            $switch_over_date = new DateTime("2024-02-01");
833
+            if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
834
+                add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
835
+            }
849 836
 
850
-			/**
851
-			 * Filter the default settings.
852
-			 */
853
-			$defaults = apply_filters( 'ayecode-ui-default-settings', array(
854
-				'css'            => 'compatibility', // core, compatibility
855
-				'js'             => $js_default, // js to load, core-popper, popper
856
-				'html_font_size' => '16', // js to load, core-popper, popper
857
-				'css_backend'    => 'compatibility', // core, compatibility
858
-				'js_backend'     => $js_default_backend, // js to load, core-popper, popper
859
-				'disable_admin'  => '', // URL snippets to disable loading on admin
837
+            $js_default = 'core-popper';
838
+            $js_default_backend = $js_default;
839
+
840
+            // maybe set defaults (if no settings set)
841
+            if(empty($db_settings)){
842
+                $active_theme = strtolower( get_template() ); // active parent theme.
843
+                $theme_js_settings = self::theme_js_settings();
844
+                if(isset($theme_js_settings[$active_theme])){
845
+                    $js_default = $theme_js_settings[$active_theme];
846
+                    $js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
847
+                }
848
+            }
849
+
850
+            /**
851
+             * Filter the default settings.
852
+             */
853
+            $defaults = apply_filters( 'ayecode-ui-default-settings', array(
854
+                'css'            => 'compatibility', // core, compatibility
855
+                'js'             => $js_default, // js to load, core-popper, popper
856
+                'html_font_size' => '16', // js to load, core-popper, popper
857
+                'css_backend'    => 'compatibility', // core, compatibility
858
+                'js_backend'     => $js_default_backend, // js to load, core-popper, popper
859
+                'disable_admin'  => '', // URL snippets to disable loading on admin
860 860
                 'bs_ver'         => '5', // The default bootstrap version to sue by default
861
-			), $db_settings );
861
+            ), $db_settings );
862 862
 
863
-			$settings = wp_parse_args( $db_settings, $defaults );
863
+            $settings = wp_parse_args( $db_settings, $defaults );
864 864
 
865
-			/**
866
-			 * Filter the Bootstrap settings.
867
-			 *
868
-			 * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
869
-			 */
870
-			return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
871
-		}
865
+            /**
866
+             * Filter the Bootstrap settings.
867
+             *
868
+             * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
869
+             */
870
+            return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
871
+        }
872 872
 
873 873
 
874
-		/**
875
-		 * The settings page html output.
876
-		 */
877
-		public function settings_page() {
878
-			if ( ! current_user_can( 'manage_options' ) ) {
879
-				wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
880
-			}
874
+        /**
875
+         * The settings page html output.
876
+         */
877
+        public function settings_page() {
878
+            if ( ! current_user_can( 'manage_options' ) ) {
879
+                wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
880
+            }
881 881
             $overrides = apply_filters( 'ayecode-ui-settings', array(), array(), array() );
882 882
 
883
-			?>
883
+            ?>
884 884
             <div class="wrap">
885 885
                 <h1><?php echo esc_attr( $this->name ); ?></h1>
886 886
                 <p><?php echo esc_html( apply_filters( 'ayecode-ui-settings-message', __("Here you can adjust settings if you are having compatibility issues.", 'ayecode-connect' ) ) );?></p>
887 887
                 <form method="post" action="options.php">
888 888
 					<?php
889
-					settings_fields( 'ayecode-ui-settings' );
890
-					do_settings_sections( 'ayecode-ui-settings' );
891
-					?>
889
+                    settings_fields( 'ayecode-ui-settings' );
890
+                    do_settings_sections( 'ayecode-ui-settings' );
891
+                    ?>
892 892
 
893 893
                     <h2><?php esc_html_e( 'BootStrap Version', 'ayecode-connect' ); ?></h2>
894 894
                     <p><?php echo esc_html( apply_filters( 'ayecode-ui-version-settings-message', __("V5 is recommended, however if you have another plugin installed using v4, you may need to use v4 also.", 'ayecode-connect' ) ) );?></p>
895 895
 	                <div class="bsui"><?php
896
-	                if ( ! empty( $overrides ) ) {
897
-		                echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
898
-			                'type'=> 'info',
899
-			                'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
900
-		                ));
901
-	                }
902
-	                ?>
896
+                    if ( ! empty( $overrides ) ) {
897
+                        echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
898
+                            'type'=> 'info',
899
+                            'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
900
+                        ));
901
+                    }
902
+                    ?>
903 903
                     </div>
904 904
                     <table class="form-table wpbs-table-version-settings">
905 905
                         <tr valign="top">
@@ -983,77 +983,77 @@  discard block
 block discarded – undo
983 983
                     </table>
984 984
 
985 985
 					<?php
986
-					submit_button();
987
-					?>
986
+                    submit_button();
987
+                    ?>
988 988
                 </form>
989 989
                 <div id="wpbs-version" data-aui-source="<?php echo esc_attr( $this->get_load_source() ); ?>"><?php echo esc_html( $this->version ); ?></div>
990 990
             </div>
991 991
 			<?php
992
-		}
992
+        }
993 993
 
994 994
         public function get_load_source(){
995
-	        $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
996
-	        $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
997
-
998
-	        // Find source plugin/theme of SD
999
-	        $source = array();
1000
-	        if ( strpos( $file, $plugins_dir ) !== false ) {
1001
-		        $source = explode( "/", plugin_basename( $file ) );
1002
-	        } else if ( function_exists( 'get_theme_root' ) ) {
1003
-		        $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1004
-
1005
-		        if ( strpos( $file, $themes_dir ) !== false ) {
1006
-			        $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1007
-		        }
1008
-	        }
995
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
996
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
997
+
998
+            // Find source plugin/theme of SD
999
+            $source = array();
1000
+            if ( strpos( $file, $plugins_dir ) !== false ) {
1001
+                $source = explode( "/", plugin_basename( $file ) );
1002
+            } else if ( function_exists( 'get_theme_root' ) ) {
1003
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1004
+
1005
+                if ( strpos( $file, $themes_dir ) !== false ) {
1006
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1007
+                }
1008
+            }
1009 1009
 
1010 1010
             return isset($source[0]) ? esc_attr($source[0]) : '';
1011 1011
         }
1012 1012
 
1013
-		public function customizer_settings($wp_customize){
1014
-			$wp_customize->add_section('aui_settings', array(
1015
-				'title'    => __('AyeCode UI', 'ayecode-connect' ),
1016
-				'priority' => 120,
1017
-			));
1018
-
1019
-			//  =============================
1020
-			//  = Color Picker              =
1021
-			//  =============================
1022
-			$wp_customize->add_setting('aui_options[color_primary]', array(
1023
-				'default'           => AUI_PRIMARY_COLOR,
1024
-				'sanitize_callback' => 'sanitize_hex_color',
1025
-				'capability'        => 'edit_theme_options',
1026
-				'type'              => 'option',
1027
-				'transport'         => 'refresh',
1028
-			));
1029
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1030
-				'label'    => __('Primary Color', 'ayecode-connect' ),
1031
-				'section'  => 'aui_settings',
1032
-				'settings' => 'aui_options[color_primary]',
1033
-			)));
1034
-
1035
-			$wp_customize->add_setting('aui_options[color_secondary]', array(
1036
-				'default'           => '#6c757d',
1037
-				'sanitize_callback' => 'sanitize_hex_color',
1038
-				'capability'        => 'edit_theme_options',
1039
-				'type'              => 'option',
1040
-				'transport'         => 'refresh',
1041
-			));
1042
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1043
-				'label'    => __('Secondary Color', 'ayecode-connect' ),
1044
-				'section'  => 'aui_settings',
1045
-				'settings' => 'aui_options[color_secondary]',
1046
-			)));
1047
-		}
1048
-
1049
-		/**
1050
-		 * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1051
-		 *
1052
-		 * @return mixed
1053
-		 */
1054
-		public static function bs3_compat_css() {
1055
-			ob_start();
1056
-			?>
1013
+        public function customizer_settings($wp_customize){
1014
+            $wp_customize->add_section('aui_settings', array(
1015
+                'title'    => __('AyeCode UI', 'ayecode-connect' ),
1016
+                'priority' => 120,
1017
+            ));
1018
+
1019
+            //  =============================
1020
+            //  = Color Picker              =
1021
+            //  =============================
1022
+            $wp_customize->add_setting('aui_options[color_primary]', array(
1023
+                'default'           => AUI_PRIMARY_COLOR,
1024
+                'sanitize_callback' => 'sanitize_hex_color',
1025
+                'capability'        => 'edit_theme_options',
1026
+                'type'              => 'option',
1027
+                'transport'         => 'refresh',
1028
+            ));
1029
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1030
+                'label'    => __('Primary Color', 'ayecode-connect' ),
1031
+                'section'  => 'aui_settings',
1032
+                'settings' => 'aui_options[color_primary]',
1033
+            )));
1034
+
1035
+            $wp_customize->add_setting('aui_options[color_secondary]', array(
1036
+                'default'           => '#6c757d',
1037
+                'sanitize_callback' => 'sanitize_hex_color',
1038
+                'capability'        => 'edit_theme_options',
1039
+                'type'              => 'option',
1040
+                'transport'         => 'refresh',
1041
+            ));
1042
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1043
+                'label'    => __('Secondary Color', 'ayecode-connect' ),
1044
+                'section'  => 'aui_settings',
1045
+                'settings' => 'aui_options[color_secondary]',
1046
+            )));
1047
+        }
1048
+
1049
+        /**
1050
+         * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1051
+         *
1052
+         * @return mixed
1053
+         */
1054
+        public static function bs3_compat_css() {
1055
+            ob_start();
1056
+            ?>
1057 1057
             <style>
1058 1058
                 /* Bootstrap 3 compatibility */
1059 1059
                 body.modal-open .modal-backdrop.show:not(.in) {opacity:0.5;}
@@ -1082,55 +1082,55 @@  discard block
 block discarded – undo
1082 1082
                 <?php } ?>
1083 1083
             </style>
1084 1084
 			<?php
1085
-			return str_replace( array(
1086
-				'<style>',
1087
-				'</style>'
1088
-			), '', self::minify_css( ob_get_clean() ) );
1089
-		}
1085
+            return str_replace( array(
1086
+                '<style>',
1087
+                '</style>'
1088
+            ), '', self::minify_css( ob_get_clean() ) );
1089
+        }
1090 1090
 
1091 1091
 
1092
-		public static function custom_css($compatibility = true) {
1092
+        public static function custom_css($compatibility = true) {
1093 1093
             global $aui_bs5;
1094 1094
 
1095
-			$colors = array();
1096
-			if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1095
+            $colors = array();
1096
+            if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1097 1097
 
1098 1098
 
1099
-				$setting = wp_get_global_settings();
1099
+                $setting = wp_get_global_settings();
1100 1100
 
1101 1101
 //                print_r(wp_get_global_styles());//exit;
1102 1102
 //                print_r(get_default_block_editor_settings());exit;
1103 1103
 
1104 1104
 //                print_r($setting);echo  '###';exit;
1105
-				if(!empty($setting['color']['palette']['theme'])){
1106
-					foreach($setting['color']['palette']['theme'] as $color){
1107
-						$colors[$color['slug']] = esc_attr($color['color']);
1108
-					}
1109
-				}
1105
+                if(!empty($setting['color']['palette']['theme'])){
1106
+                    foreach($setting['color']['palette']['theme'] as $color){
1107
+                        $colors[$color['slug']] = esc_attr($color['color']);
1108
+                    }
1109
+                }
1110 1110
 
1111
-				if(!empty($setting['color']['palette']['custom'])){
1112
-					foreach($setting['color']['palette']['custom'] as $color){
1113
-						$colors[$color['slug']] = esc_attr($color['color']);
1114
-					}
1115
-				}
1116
-			}else{
1117
-				$settings = get_option('aui_options');
1118
-				$colors = array(
1119
-					'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1120
-					'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1121
-				);
1122
-			}
1111
+                if(!empty($setting['color']['palette']['custom'])){
1112
+                    foreach($setting['color']['palette']['custom'] as $color){
1113
+                        $colors[$color['slug']] = esc_attr($color['color']);
1114
+                    }
1115
+                }
1116
+            }else{
1117
+                $settings = get_option('aui_options');
1118
+                $colors = array(
1119
+                    'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1120
+                    'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1121
+                );
1122
+            }
1123 1123
 
1124
-			ob_start();
1124
+            ob_start();
1125 1125
 
1126
-			?>
1126
+            ?>
1127 1127
             <style>
1128 1128
                 <?php
1129 1129
 
1130
-					// BS v3 compat
1131
-					if( self::is_bs3_compat() ){
1132
-						echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1133
-					}
1130
+                    // BS v3 compat
1131
+                    if( self::is_bs3_compat() ){
1132
+                        echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1133
+                    }
1134 1134
 
1135 1135
                     $current_screen = function_exists('get_current_screen' ) ? get_current_screen() : '';
1136 1136
                     $is_fse = false;
@@ -1138,26 +1138,26 @@  discard block
 block discarded – undo
1138 1138
                         $is_fse = true;
1139 1139
                     }
1140 1140
 
1141
-					if(!empty($colors)){
1142
-						$d_colors = self::get_colors(true);
1141
+                    if(!empty($colors)){
1142
+                        $d_colors = self::get_colors(true);
1143 1143
 
1144 1144
 //						$is_fse = !empty($_REQUEST['postType']) && $_REQUEST['postType']=='wp_template';
1145
-						foreach($colors as $key => $color ){
1146
-							if((empty( $d_colors[$key]) ||  $d_colors[$key] != $color) || $is_fse ) {
1147
-								$var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1148
-								$compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1149
-								echo $aui_bs5 ? self::css_overwrite_bs5($key,$var,$compat,$color) : self::css_overwrite($key,$var,$compat,$color); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1150
-							}
1151
-						}
1152
-					   // exit;
1153
-					}
1145
+                        foreach($colors as $key => $color ){
1146
+                            if((empty( $d_colors[$key]) ||  $d_colors[$key] != $color) || $is_fse ) {
1147
+                                $var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1148
+                                $compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1149
+                                echo $aui_bs5 ? self::css_overwrite_bs5($key,$var,$compat,$color) : self::css_overwrite($key,$var,$compat,$color); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1150
+                            }
1151
+                        }
1152
+                        // exit;
1153
+                    }
1154 1154
 
1155
-					// Set admin bar z-index lower when modal is open.
1156
-					echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1155
+                    // Set admin bar z-index lower when modal is open.
1156
+                    echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1157 1157
 
1158
-					if(is_admin()){
1159
-						echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1160
-					}
1158
+                    if(is_admin()){
1159
+                        echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1160
+                    }
1161 1161
 
1162 1162
                     if( $aui_bs5 && defined( 'BLOCKSTRAP_VERSION' )  ){
1163 1163
                         $css = '';
@@ -1177,28 +1177,28 @@  discard block
 block discarded – undo
1177 1177
                         }
1178 1178
 
1179 1179
                         // line height
1180
-                         if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1180
+                            if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1181 1181
                             $css .= '--bs-body-line-height: ' . esc_attr( $theme_settings['typography']['lineHeight'] ) . ';';
1182 1182
                         }
1183 1183
 
1184 1184
 
1185
-                           // font weight
1186
-                         if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1185
+                            // font weight
1186
+                            if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1187 1187
                             $css .= '--bs-body-font-weight: ' . esc_attr( $theme_settings['typography']['fontWeight'] ) . ';';
1188 1188
                         }
1189 1189
 
1190 1190
                         // Background
1191
-                         if( !empty( $theme_settings['color']['background'] ) ){
1191
+                            if( !empty( $theme_settings['color']['background'] ) ){
1192 1192
                             $css .= '--bs-body-bg: ' . esc_attr( $theme_settings['color']['background'] ) . ';';
1193 1193
                         }
1194 1194
 
1195
-                         // Background Gradient
1196
-                         if( !empty( $theme_settings['color']['gradient'] ) ){
1195
+                            // Background Gradient
1196
+                            if( !empty( $theme_settings['color']['gradient'] ) ){
1197 1197
                             $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1198 1198
                         }
1199 1199
 
1200
-                           // Background Gradient
1201
-                         if( !empty( $theme_settings['color']['gradient'] ) ){
1200
+                            // Background Gradient
1201
+                            if( !empty( $theme_settings['color']['gradient'] ) ){
1202 1202
                             $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1203 1203
                         }
1204 1204
 
@@ -1236,7 +1236,7 @@  discard block
 block discarded – undo
1236 1236
                             $headings_css .= 'background: ' . esc_attr( $theme_settings['elements']['heading']['color']['background'] ) . ';';
1237 1237
                         }
1238 1238
 
1239
-                         // heading font family
1239
+                            // heading font family
1240 1240
                         if( !empty( $theme_settings['elements']['heading']['typography']['fontFamily'] ) ){
1241 1241
                             $headings_css .= 'font-family: ' . esc_attr( $theme_settings['elements']['heading']['typography']['fontFamily']  ) . ';';
1242 1242
                         }
@@ -1249,21 +1249,21 @@  discard block
 block discarded – undo
1249 1249
 
1250 1250
                         foreach($hs as $hn){
1251 1251
                             $h_css = '';
1252
-                             if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1252
+                                if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1253 1253
                                 $h_css .= 'color: ' . esc_attr( $theme_settings['elements'][$hn]['color']['text'] ) . ';';
1254
-                             }
1254
+                                }
1255 1255
 
1256
-                              if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1256
+                                if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1257 1257
                                 $h_css .= 'font-size: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontSize']  ) . ';';
1258
-                             }
1258
+                                }
1259 1259
 
1260
-                              if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1260
+                                if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1261 1261
                                 $h_css .= 'font-family: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontFamily']  ) . ';';
1262
-                             }
1262
+                                }
1263 1263
 
1264
-                             if($h_css){
1264
+                                if($h_css){
1265 1265
                                 echo esc_attr( $bep  . $hn ) . '{'.esc_attr( $h_css ).'}';
1266
-                             }
1266
+                                }
1267 1267
                         }
1268 1268
                     }
1269 1269
 
@@ -1274,176 +1274,176 @@  discard block
 block discarded – undo
1274 1274
                 ?>
1275 1275
             </style>
1276 1276
 			<?php
1277
-			/*
1277
+            /*
1278 1278
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1279 1279
 			 */
1280
-			return str_replace( array(
1281
-				'<style>',
1282
-				'</style>'
1283
-			), '', self::minify_css( ob_get_clean() ) );
1284
-		}
1285
-
1286
-		/**
1287
-		 * Check if we should add booststrap 3 compatibility changes.
1288
-		 *
1289
-		 * @return bool
1290
-		 */
1291
-		public static function is_bs3_compat(){
1292
-			return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1293
-		}
1294
-
1295
-		public static function hex_to_rgb( $hex ) {
1296
-			// Remove '#' if present
1297
-			$hex = str_replace( '#', '', $hex );
1298
-
1299
-			// Check if input is RGB
1300
-			if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1301
-				$_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1302
-
1303
-				$rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1304
-				$rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1305
-				$rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1306
-
1307
-				return $rgb;
1308
-			}
1309
-
1310
-			// Convert 3-digit hex to 6-digit hex
1311
-			if ( strlen( $hex ) == 3 ) {
1312
-				$hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1313
-			}
1314
-
1315
-			// Convert hex to RGB
1316
-			$r = hexdec( substr( $hex, 0, 2 ) );
1317
-			$g = hexdec( substr( $hex, 2, 2 ) );
1318
-			$b = hexdec( substr( $hex, 4, 2 ) );
1319
-
1320
-			// Return RGB values as an array
1321
-			return $r . ',' . $g . ',' . $b;
1322
-		}
1323
-
1324
-		/**
1325
-		 * Build the CSS to overwrite a bootstrap color variable.
1326
-		 *
1327
-		 * @param $type
1328
-		 * @param $color_code
1329
-		 * @param $compatibility
1330
-		 *
1331
-		 * @return string
1332
-		 */
1333
-		public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1334
-			global $aui_bs5;
1335
-
1336
-			$is_var = false;
1337
-			$is_custom = strpos($type, 'custom-') !== false ? true : false;
1338
-			if(!$color_code){return '';}
1339
-			if(strpos($color_code, 'var') !== false){
1340
-				//if(!sanitize_hex_color($color_code)){
1341
-				$color_code = esc_attr($color_code);
1342
-				$is_var = true;
1280
+            return str_replace( array(
1281
+                '<style>',
1282
+                '</style>'
1283
+            ), '', self::minify_css( ob_get_clean() ) );
1284
+        }
1285
+
1286
+        /**
1287
+         * Check if we should add booststrap 3 compatibility changes.
1288
+         *
1289
+         * @return bool
1290
+         */
1291
+        public static function is_bs3_compat(){
1292
+            return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1293
+        }
1294
+
1295
+        public static function hex_to_rgb( $hex ) {
1296
+            // Remove '#' if present
1297
+            $hex = str_replace( '#', '', $hex );
1298
+
1299
+            // Check if input is RGB
1300
+            if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1301
+                $_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1302
+
1303
+                $rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1304
+                $rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1305
+                $rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1306
+
1307
+                return $rgb;
1308
+            }
1309
+
1310
+            // Convert 3-digit hex to 6-digit hex
1311
+            if ( strlen( $hex ) == 3 ) {
1312
+                $hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1313
+            }
1314
+
1315
+            // Convert hex to RGB
1316
+            $r = hexdec( substr( $hex, 0, 2 ) );
1317
+            $g = hexdec( substr( $hex, 2, 2 ) );
1318
+            $b = hexdec( substr( $hex, 4, 2 ) );
1319
+
1320
+            // Return RGB values as an array
1321
+            return $r . ',' . $g . ',' . $b;
1322
+        }
1323
+
1324
+        /**
1325
+         * Build the CSS to overwrite a bootstrap color variable.
1326
+         *
1327
+         * @param $type
1328
+         * @param $color_code
1329
+         * @param $compatibility
1330
+         *
1331
+         * @return string
1332
+         */
1333
+        public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1334
+            global $aui_bs5;
1335
+
1336
+            $is_var = false;
1337
+            $is_custom = strpos($type, 'custom-') !== false ? true : false;
1338
+            if(!$color_code){return '';}
1339
+            if(strpos($color_code, 'var') !== false){
1340
+                //if(!sanitize_hex_color($color_code)){
1341
+                $color_code = esc_attr($color_code);
1342
+                $is_var = true;
1343 1343
 //				$color_code = "rgba($color_code, 0.5)";
1344 1344
 //                echo '###1'.$color_code.'###';//exit;
1345
-			}
1345
+            }
1346 1346
 
1347 1347
 //            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1348 1348
 
1349
-			if(!$color_code){return '';}
1349
+            if(!$color_code){return '';}
1350 1350
 
1351
-			$rgb = self::hex_to_rgb($hex);
1351
+            $rgb = self::hex_to_rgb($hex);
1352 1352
 
1353
-			if($compatibility===true || $compatibility===1){
1354
-				$compatibility = '.bsui';
1355
-			}elseif(!$compatibility){
1356
-				$compatibility = '';
1357
-			}else{
1358
-				$compatibility = esc_attr($compatibility);
1359
-			}
1353
+            if($compatibility===true || $compatibility===1){
1354
+                $compatibility = '.bsui';
1355
+            }elseif(!$compatibility){
1356
+                $compatibility = '';
1357
+            }else{
1358
+                $compatibility = esc_attr($compatibility);
1359
+            }
1360 1360
 
1361
-			$prefix = $compatibility ? $compatibility . " " : "";
1361
+            $prefix = $compatibility ? $compatibility . " " : "";
1362 1362
 
1363 1363
 
1364 1364
             $output = '';
1365 1365
 
1366 1366
 //            echo '####'.$color_code;exit;
1367 1367
 
1368
-			$type = sanitize_html_class($type);
1368
+            $type = sanitize_html_class($type);
1369
+
1370
+            /**
1371
+             * c = color, b = background color, o = border-color, f = fill
1372
+             */
1373
+            $selectors = array(
1374
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1375
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1376
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1377
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1378
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1379
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1380
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1381
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1382
+                ".badge-{$type}"                                            => array( 'b' ),
1383
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1384
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1385
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1386
+                ".text-{$type}"                                     => array( 'c' ),
1387
+            );
1388
+
1389
+            if ( $aui_bs5 ) {
1390
+                unset($selectors[".alert-{$type}" ]);
1391
+            }
1369 1392
 
1370
-			/**
1371
-			 * c = color, b = background color, o = border-color, f = fill
1372
-			 */
1373
-			$selectors = array(
1374
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1375
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1376
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1377
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1378
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1379
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1380
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1381
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1382
-				".badge-{$type}"                                            => array( 'b' ),
1383
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1384
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1385
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1386
-				".text-{$type}"                                     => array( 'c' ),
1387
-			);
1388
-
1389
-			if ( $aui_bs5 ) {
1390
-				unset($selectors[".alert-{$type}" ]);
1391
-			}
1392
-
1393
-			if ( $type == 'primary' ) {
1394
-				$selectors = $selectors + array(
1395
-						'a'                                                                                                    => array( 'c' ),
1396
-						'.btn-link'                                                                                            => array( 'c' ),
1397
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1398
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1399
-							'b',
1400
-							'o'
1401
-						),
1402
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1403
-							'b',
1404
-							'o'
1405
-						),
1406
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1407
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1408
-						'.page-link'                                                                                           => array( 'c' ),
1409
-						'.page-item.active .page-link'                                                                         => array(
1410
-							'b',
1411
-							'o'
1412
-						),
1413
-						'.progress-bar'                                                                                        => array( 'b' ),
1414
-						'.list-group-item.active'                                                                              => array(
1415
-							'b',
1416
-							'o'
1417
-						),
1418
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1419
-					);
1420
-			}
1393
+            if ( $type == 'primary' ) {
1394
+                $selectors = $selectors + array(
1395
+                        'a'                                                                                                    => array( 'c' ),
1396
+                        '.btn-link'                                                                                            => array( 'c' ),
1397
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1398
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1399
+                            'b',
1400
+                            'o'
1401
+                        ),
1402
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1403
+                            'b',
1404
+                            'o'
1405
+                        ),
1406
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1407
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1408
+                        '.page-link'                                                                                           => array( 'c' ),
1409
+                        '.page-item.active .page-link'                                                                         => array(
1410
+                            'b',
1411
+                            'o'
1412
+                        ),
1413
+                        '.progress-bar'                                                                                        => array( 'b' ),
1414
+                        '.list-group-item.active'                                                                              => array(
1415
+                            'b',
1416
+                            'o'
1417
+                        ),
1418
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1419
+                    );
1420
+            }
1421 1421
 
1422 1422
 
1423 1423
 
1424 1424
             // link
1425
-			if ( $type === 'primary' ) {
1426
-				$output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1427
-				$output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1428
-				$output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1425
+            if ( $type === 'primary' ) {
1426
+                $output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1427
+                $output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1428
+                $output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1429 1429
 
1430
-				$output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1431
-				$output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1430
+                $output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1431
+                $output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1432 1432
 
1433 1433
                 // dropdown
1434
-				$output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1434
+                $output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1435 1435
 
1436 1436
                 // pagination
1437
-				$output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1437
+                $output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1438 1438
 
1439
-			}
1439
+            }
1440 1440
 
1441
-			$output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1442
-			$output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1441
+            $output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1442
+            $output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1443 1443
 
1444
-			//  buttons
1445
-			$output .= $prefix . ' .btn-'.esc_attr($type).'{';
1446
-			$output .= ' 
1444
+            //  buttons
1445
+            $output .= $prefix . ' .btn-'.esc_attr($type).'{';
1446
+            $output .= ' 
1447 1447
             --bs-btn-bg: '.esc_attr($color_code).';
1448 1448
             --bs-btn-border-color: '.esc_attr($color_code).';
1449 1449
             --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
@@ -1461,11 +1461,11 @@  discard block
 block discarded – undo
1461 1461
 //			--bs-btn-active-color: #fff;
1462 1462
 //			--bs-btn-disabled-color: #fff;
1463 1463
 //            ';
1464
-			$output .= '}';
1464
+            $output .= '}';
1465 1465
 
1466
-			//  buttons outline
1467
-			$output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1468
-			$output .= ' 
1466
+            //  buttons outline
1467
+            $output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1468
+            $output .= ' 
1469 1469
 			--bs-btn-color: '.esc_attr($color_code).';
1470 1470
             --bs-btn-border-color: '.esc_attr($color_code).';
1471 1471
             --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
@@ -1483,37 +1483,37 @@  discard block
 block discarded – undo
1483 1483
 //			--bs-btn-active-color: #fff;
1484 1484
 //			--bs-btn-disabled-color: #fff;
1485 1485
 //            ';
1486
-			$output .= '}';
1486
+            $output .= '}';
1487 1487
 
1488 1488
 
1489 1489
             // button hover
1490
-			$output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1491
-			$output .= ' 
1490
+            $output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1491
+            $output .= ' 
1492 1492
             box-shadow: 0 0.25rem 0.25rem 0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb), .1), 0 0.375rem 0.75rem -0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb) , .4);
1493 1493
             }
1494 1494
             ';
1495 1495
 
1496 1496
 
1497
-			if ( $aui_bs5 ) {
1497
+            if ( $aui_bs5 ) {
1498 1498
 //				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1499
-				$output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1500
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1501
-			}
1499
+                $output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1500
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1501
+            }
1502 1502
 
1503 1503
 
1504
-			if ( $is_custom ) {
1504
+            if ( $is_custom ) {
1505 1505
 
1506 1506
 //				echo '###'.$type;exit;
1507 1507
 
1508
-				// build rules into each type
1509
-				foreach($selectors as $selector => $types){
1510
-					$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1511
-					$types = array_combine($types,$types);
1512
-					if(isset($types['c'])){$color[] = $selector;}
1513
-					if(isset($types['b'])){$background[] = $selector;}
1514
-					if(isset($types['o'])){$border[] = $selector;}
1515
-					if(isset($types['f'])){$fill[] = $selector;}
1516
-				}
1508
+                // build rules into each type
1509
+                foreach($selectors as $selector => $types){
1510
+                    $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1511
+                    $types = array_combine($types,$types);
1512
+                    if(isset($types['c'])){$color[] = $selector;}
1513
+                    if(isset($types['b'])){$background[] = $selector;}
1514
+                    if(isset($types['o'])){$border[] = $selector;}
1515
+                    if(isset($types['f'])){$fill[] = $selector;}
1516
+                }
1517 1517
 
1518 1518
 //				// build rules into each type
1519 1519
 //				foreach($important_selectors as $selector => $types){
@@ -1525,68 +1525,68 @@  discard block
 block discarded – undo
1525 1525
 //					if(isset($types['f'])){$fill_i[] = $selector;}
1526 1526
 //				}
1527 1527
 
1528
-				// add any color rules
1529
-				if(!empty($color)){
1530
-					$output .= implode(",",$color) . "{color: $color_code;} ";
1531
-				}
1532
-				if(!empty($color_i)){
1533
-					$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1534
-				}
1528
+                // add any color rules
1529
+                if(!empty($color)){
1530
+                    $output .= implode(",",$color) . "{color: $color_code;} ";
1531
+                }
1532
+                if(!empty($color_i)){
1533
+                    $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1534
+                }
1535 1535
 
1536
-				// add any background color rules
1537
-				if(!empty($background)){
1538
-					$output .= implode(",",$background) . "{background-color: $color_code;} ";
1539
-				}
1540
-				if(!empty($background_i)){
1541
-					$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1536
+                // add any background color rules
1537
+                if(!empty($background)){
1538
+                    $output .= implode(",",$background) . "{background-color: $color_code;} ";
1539
+                }
1540
+                if(!empty($background_i)){
1541
+                    $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1542 1542
 //				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1543
-				}
1543
+                }
1544 1544
 
1545
-				// add any border color rules
1546
-				if(!empty($border)){
1547
-					$output .= implode(",",$border) . "{border-color: $color_code;} ";
1548
-				}
1549
-				if(!empty($border_i)){
1550
-					$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1551
-				}
1545
+                // add any border color rules
1546
+                if(!empty($border)){
1547
+                    $output .= implode(",",$border) . "{border-color: $color_code;} ";
1548
+                }
1549
+                if(!empty($border_i)){
1550
+                    $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1551
+                }
1552 1552
 
1553
-				// add any fill color rules
1554
-				if(!empty($fill)){
1555
-					$output .= implode(",",$fill) . "{fill: $color_code;} ";
1556
-				}
1557
-				if(!empty($fill_i)){
1558
-					$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1559
-				}
1553
+                // add any fill color rules
1554
+                if(!empty($fill)){
1555
+                    $output .= implode(",",$fill) . "{fill: $color_code;} ";
1556
+                }
1557
+                if(!empty($fill_i)){
1558
+                    $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1559
+                }
1560 1560
 
1561
-			}
1561
+            }
1562 1562
 
1563 1563
 
1564 1564
 
1565 1565
 
1566
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1567
-			// darken
1568
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1569
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1570
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1571
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1566
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1567
+            // darken
1568
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1569
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1570
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1571
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1572 1572
 
1573
-			// lighten
1574
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1573
+            // lighten
1574
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1575 1575
 
1576
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1577
-			$op_25 = $color_code."40"; // 25% opacity
1576
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1577
+            $op_25 = $color_code."40"; // 25% opacity
1578 1578
 
1579 1579
 
1580
-			// button states
1581
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1582
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1580
+            // button states
1581
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1582
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1583 1583
 //			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1584
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1585
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1584
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1585
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1586 1586
             $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1587 1587
             $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled):focus {box-shadow: 0 0.25rem 0.25rem 0.125rem rgba(var(--bs-{$type}-rgb), 0.1), 0 0.375rem 0.75rem -0.125rem rgba(var(--bs-{$type}-rgb), 0.4);} ";
1588 1588
 
1589
-			// text
1589
+            // text
1590 1590
 //			$output .= $prefix .".xxx, .text-{$type} {color: var(--bs-".esc_attr($type).");} ";
1591 1591
 
1592 1592
 
@@ -1601,777 +1601,777 @@  discard block
 block discarded – undo
1601 1601
 //				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1602 1602
 //			}
1603 1603
 
1604
-			// alerts
1605
-			if ( $aui_bs5 ) {
1604
+            // alerts
1605
+            if ( $aui_bs5 ) {
1606 1606
 //				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1607
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1608
-			}
1609
-
1610
-			return $output;
1611
-		}
1612
-
1613
-		/**
1614
-		 * Build the CSS to overwrite a bootstrap color variable.
1615
-		 *
1616
-		 * @param $type
1617
-		 * @param $color_code
1618
-		 * @param $compatibility
1619
-		 *
1620
-		 * @return string
1621
-		 */
1622
-		public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1607
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1608
+            }
1609
+
1610
+            return $output;
1611
+        }
1612
+
1613
+        /**
1614
+         * Build the CSS to overwrite a bootstrap color variable.
1615
+         *
1616
+         * @param $type
1617
+         * @param $color_code
1618
+         * @param $compatibility
1619
+         *
1620
+         * @return string
1621
+         */
1622
+        public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1623 1623
             global $aui_bs5;
1624 1624
 
1625
-			$is_var = false;
1626
-			if(!$color_code){return '';}
1627
-			if(strpos($color_code, 'var') !== false){
1628
-				//if(!sanitize_hex_color($color_code)){
1629
-				$color_code = esc_attr($color_code);
1630
-				$is_var = true;
1625
+            $is_var = false;
1626
+            if(!$color_code){return '';}
1627
+            if(strpos($color_code, 'var') !== false){
1628
+                //if(!sanitize_hex_color($color_code)){
1629
+                $color_code = esc_attr($color_code);
1630
+                $is_var = true;
1631 1631
 //				$color_code = "rgba($color_code, 0.5)";
1632 1632
 //                echo '###1'.$color_code.'###';//exit;
1633
-			}
1633
+            }
1634 1634
 
1635 1635
 //            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1636 1636
 
1637
-			if(!$color_code){return '';}
1637
+            if(!$color_code){return '';}
1638 1638
 
1639 1639
             $rgb = self::hex_to_rgb($hex);
1640 1640
 
1641
-			if($compatibility===true || $compatibility===1){
1642
-				$compatibility = '.bsui';
1643
-			}elseif(!$compatibility){
1644
-				$compatibility = '';
1645
-			}else{
1646
-				$compatibility = esc_attr($compatibility);
1647
-			}
1641
+            if($compatibility===true || $compatibility===1){
1642
+                $compatibility = '.bsui';
1643
+            }elseif(!$compatibility){
1644
+                $compatibility = '';
1645
+            }else{
1646
+                $compatibility = esc_attr($compatibility);
1647
+            }
1648 1648
 
1649 1649
 
1650 1650
 
1651 1651
 //            echo '####'.$color_code;exit;
1652 1652
 
1653
-			$type = sanitize_html_class($type);
1654
-
1655
-			/**
1656
-			 * c = color, b = background color, o = border-color, f = fill
1657
-			 */
1658
-			$selectors = array(
1659
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1660
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1661
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1662
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1663
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1664
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1665
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1666
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1667
-				".badge-{$type}"                                            => array( 'b' ),
1668
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1669
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1670
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1671
-			);
1672
-
1673
-			if ( $aui_bs5 ) {
1653
+            $type = sanitize_html_class($type);
1654
+
1655
+            /**
1656
+             * c = color, b = background color, o = border-color, f = fill
1657
+             */
1658
+            $selectors = array(
1659
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1660
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1661
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1662
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1663
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1664
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1665
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1666
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1667
+                ".badge-{$type}"                                            => array( 'b' ),
1668
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1669
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1670
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1671
+            );
1672
+
1673
+            if ( $aui_bs5 ) {
1674 1674
                 unset($selectors[".alert-{$type}" ]);
1675
-			}
1676
-
1677
-			if ( $type == 'primary' ) {
1678
-				$selectors = $selectors + array(
1679
-						'a'                                                                                                    => array( 'c' ),
1680
-						'.btn-link'                                                                                            => array( 'c' ),
1681
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1682
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1683
-							'b',
1684
-							'o'
1685
-						),
1686
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1687
-							'b',
1688
-							'o'
1689
-						),
1690
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1691
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1692
-						'.page-link'                                                                                           => array( 'c' ),
1693
-						'.page-item.active .page-link'                                                                         => array(
1694
-							'b',
1695
-							'o'
1696
-						),
1697
-						'.progress-bar'                                                                                        => array( 'b' ),
1698
-						'.list-group-item.active'                                                                              => array(
1699
-							'b',
1700
-							'o'
1701
-						),
1702
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1675
+            }
1676
+
1677
+            if ( $type == 'primary' ) {
1678
+                $selectors = $selectors + array(
1679
+                        'a'                                                                                                    => array( 'c' ),
1680
+                        '.btn-link'                                                                                            => array( 'c' ),
1681
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1682
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1683
+                            'b',
1684
+                            'o'
1685
+                        ),
1686
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1687
+                            'b',
1688
+                            'o'
1689
+                        ),
1690
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1691
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1692
+                        '.page-link'                                                                                           => array( 'c' ),
1693
+                        '.page-item.active .page-link'                                                                         => array(
1694
+                            'b',
1695
+                            'o'
1696
+                        ),
1697
+                        '.progress-bar'                                                                                        => array( 'b' ),
1698
+                        '.list-group-item.active'                                                                              => array(
1699
+                            'b',
1700
+                            'o'
1701
+                        ),
1702
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1703 1703
 //				    '.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1704 1704
 //				    '.custom-range::-moz-range-thumb' => array('b'),
1705 1705
 //				    '.custom-range::-ms-thumb' => array('b'),
1706
-					);
1707
-			}
1708
-
1709
-			$important_selectors = array(
1710
-				".bg-{$type}" => array('b','f'),
1711
-				".border-{$type}" => array('o'),
1712
-				".text-{$type}" => array('c'),
1713
-			);
1714
-
1715
-			$color = array();
1716
-			$color_i = array();
1717
-			$background = array();
1718
-			$background_i = array();
1719
-			$border = array();
1720
-			$border_i = array();
1721
-			$fill = array();
1722
-			$fill_i = array();
1723
-
1724
-			$output = '';
1725
-
1726
-			if ( $aui_bs5 ) {
1706
+                    );
1707
+            }
1708
+
1709
+            $important_selectors = array(
1710
+                ".bg-{$type}" => array('b','f'),
1711
+                ".border-{$type}" => array('o'),
1712
+                ".text-{$type}" => array('c'),
1713
+            );
1714
+
1715
+            $color = array();
1716
+            $color_i = array();
1717
+            $background = array();
1718
+            $background_i = array();
1719
+            $border = array();
1720
+            $border_i = array();
1721
+            $fill = array();
1722
+            $fill_i = array();
1723
+
1724
+            $output = '';
1725
+
1726
+            if ( $aui_bs5 ) {
1727 1727
 //				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1728
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1729
-			}
1730
-
1731
-			// build rules into each type
1732
-			foreach($selectors as $selector => $types){
1733
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1734
-				$types = array_combine($types,$types);
1735
-				if(isset($types['c'])){$color[] = $selector;}
1736
-				if(isset($types['b'])){$background[] = $selector;}
1737
-				if(isset($types['o'])){$border[] = $selector;}
1738
-				if(isset($types['f'])){$fill[] = $selector;}
1739
-			}
1740
-
1741
-			// build rules into each type
1742
-			foreach($important_selectors as $selector => $types){
1743
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1744
-				$types = array_combine($types,$types);
1745
-				if(isset($types['c'])){$color_i[] = $selector;}
1746
-				if(isset($types['b'])){$background_i[] = $selector;}
1747
-				if(isset($types['o'])){$border_i[] = $selector;}
1748
-				if(isset($types['f'])){$fill_i[] = $selector;}
1749
-			}
1750
-
1751
-			// add any color rules
1752
-			if(!empty($color)){
1753
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1754
-			}
1755
-			if(!empty($color_i)){
1756
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1757
-			}
1758
-
1759
-			// add any background color rules
1760
-			if(!empty($background)){
1761
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1762
-			}
1763
-			if(!empty($background_i)){
1764
-				$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1728
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1729
+            }
1730
+
1731
+            // build rules into each type
1732
+            foreach($selectors as $selector => $types){
1733
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1734
+                $types = array_combine($types,$types);
1735
+                if(isset($types['c'])){$color[] = $selector;}
1736
+                if(isset($types['b'])){$background[] = $selector;}
1737
+                if(isset($types['o'])){$border[] = $selector;}
1738
+                if(isset($types['f'])){$fill[] = $selector;}
1739
+            }
1740
+
1741
+            // build rules into each type
1742
+            foreach($important_selectors as $selector => $types){
1743
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1744
+                $types = array_combine($types,$types);
1745
+                if(isset($types['c'])){$color_i[] = $selector;}
1746
+                if(isset($types['b'])){$background_i[] = $selector;}
1747
+                if(isset($types['o'])){$border_i[] = $selector;}
1748
+                if(isset($types['f'])){$fill_i[] = $selector;}
1749
+            }
1750
+
1751
+            // add any color rules
1752
+            if(!empty($color)){
1753
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1754
+            }
1755
+            if(!empty($color_i)){
1756
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1757
+            }
1758
+
1759
+            // add any background color rules
1760
+            if(!empty($background)){
1761
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1762
+            }
1763
+            if(!empty($background_i)){
1764
+                $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1765 1765
 //				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1766
-			}
1766
+            }
1767 1767
 
1768
-			// add any border color rules
1769
-			if(!empty($border)){
1770
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1771
-			}
1772
-			if(!empty($border_i)){
1773
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1774
-			}
1768
+            // add any border color rules
1769
+            if(!empty($border)){
1770
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1771
+            }
1772
+            if(!empty($border_i)){
1773
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1774
+            }
1775 1775
 
1776
-			// add any fill color rules
1777
-			if(!empty($fill)){
1778
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1779
-			}
1780
-			if(!empty($fill_i)){
1781
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1782
-			}
1776
+            // add any fill color rules
1777
+            if(!empty($fill)){
1778
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1779
+            }
1780
+            if(!empty($fill_i)){
1781
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1782
+            }
1783 1783
 
1784 1784
 
1785
-			$prefix = $compatibility ? $compatibility . " " : "";
1785
+            $prefix = $compatibility ? $compatibility . " " : "";
1786 1786
 
1787
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1788
-			// darken
1789
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1790
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1791
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1792
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1787
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1788
+            // darken
1789
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1790
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1791
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1792
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1793 1793
 
1794
-			// lighten
1795
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1794
+            // lighten
1795
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1796 1796
 
1797
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1798
-			$op_25 = $color_code."40"; // 25% opacity
1797
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1798
+            $op_25 = $color_code."40"; // 25% opacity
1799 1799
 
1800 1800
 
1801
-			// button states
1802
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1803
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1801
+            // button states
1802
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1803
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1804 1804
 //			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1805
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1806
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1807
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1805
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1806
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1807
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1808 1808
 
1809
-			if ( $type == 'primary' ) {
1810
-				// dropdown's
1811
-				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1809
+            if ( $type == 'primary' ) {
1810
+                // dropdown's
1811
+                $output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1812 1812
 
1813
-				// input states
1814
-				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1813
+                // input states
1814
+                $output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1815 1815
 
1816
-				// page link
1817
-				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1818
-			}
1816
+                // page link
1817
+                $output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1818
+            }
1819 1819
 
1820 1820
             // alerts
1821
-			if ( $aui_bs5 ) {
1821
+            if ( $aui_bs5 ) {
1822 1822
 //				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1823
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1824
-			}
1825
-
1826
-			return $output;
1827
-		}
1828
-
1829
-		/**
1830
-		 *
1831
-		 * @deprecated 0.1.76 Use css_overwrite()
1832
-		 *
1833
-		 * @param $color_code
1834
-		 * @param $compatibility
1835
-		 * @param $use_variable
1836
-		 *
1837
-		 * @return string
1838
-		 */
1839
-		public static function css_primary($color_code,$compatibility, $use_variable = false){
1840
-
1841
-			if(!$use_variable){
1842
-				$color_code = sanitize_hex_color($color_code);
1843
-				if(!$color_code){return '';}
1844
-			}
1845
-
1846
-			/**
1847
-			 * c = color, b = background color, o = border-color, f = fill
1848
-			 */
1849
-			$selectors = array(
1850
-				'a' => array('c'),
1851
-				'.btn-primary' => array('b','o'),
1852
-				'.btn-primary.disabled' => array('b','o'),
1853
-				'.btn-primary:disabled' => array('b','o'),
1854
-				'.btn-outline-primary' => array('c','o'),
1855
-				'.btn-outline-primary:hover' => array('b','o'),
1856
-				'.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1857
-				'.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1858
-				'.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1859
-				'.btn-link' => array('c'),
1860
-				'.dropdown-item.active' => array('b'),
1861
-				'.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1862
-				'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1823
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1824
+            }
1825
+
1826
+            return $output;
1827
+        }
1828
+
1829
+        /**
1830
+         *
1831
+         * @deprecated 0.1.76 Use css_overwrite()
1832
+         *
1833
+         * @param $color_code
1834
+         * @param $compatibility
1835
+         * @param $use_variable
1836
+         *
1837
+         * @return string
1838
+         */
1839
+        public static function css_primary($color_code,$compatibility, $use_variable = false){
1840
+
1841
+            if(!$use_variable){
1842
+                $color_code = sanitize_hex_color($color_code);
1843
+                if(!$color_code){return '';}
1844
+            }
1845
+
1846
+            /**
1847
+             * c = color, b = background color, o = border-color, f = fill
1848
+             */
1849
+            $selectors = array(
1850
+                'a' => array('c'),
1851
+                '.btn-primary' => array('b','o'),
1852
+                '.btn-primary.disabled' => array('b','o'),
1853
+                '.btn-primary:disabled' => array('b','o'),
1854
+                '.btn-outline-primary' => array('c','o'),
1855
+                '.btn-outline-primary:hover' => array('b','o'),
1856
+                '.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1857
+                '.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1858
+                '.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1859
+                '.btn-link' => array('c'),
1860
+                '.dropdown-item.active' => array('b'),
1861
+                '.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1862
+                '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1863 1863
 //				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1864 1864
 //				'.custom-range::-moz-range-thumb' => array('b'),
1865 1865
 //				'.custom-range::-ms-thumb' => array('b'),
1866
-				'.nav-pills .nav-link.active' => array('b'),
1867
-				'.nav-pills .show>.nav-link' => array('b'),
1868
-				'.page-link' => array('c'),
1869
-				'.page-item.active .page-link' => array('b','o'),
1870
-				'.badge-primary' => array('b'),
1871
-				'.alert-primary' => array('b','o'),
1872
-				'.progress-bar' => array('b'),
1873
-				'.list-group-item.active' => array('b','o'),
1874
-				'.bg-primary' => array('b','f'),
1875
-				'.btn-link.btn-primary' => array('c'),
1876
-				'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1877
-			);
1878
-
1879
-			$important_selectors = array(
1880
-				'.bg-primary' => array('b','f'),
1881
-				'.border-primary' => array('o'),
1882
-				'.text-primary' => array('c'),
1883
-			);
1884
-
1885
-			$color = array();
1886
-			$color_i = array();
1887
-			$background = array();
1888
-			$background_i = array();
1889
-			$border = array();
1890
-			$border_i = array();
1891
-			$fill = array();
1892
-			$fill_i = array();
1893
-
1894
-			$output = '';
1895
-
1896
-			// build rules into each type
1897
-			foreach($selectors as $selector => $types){
1898
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1899
-				$types = array_combine($types,$types);
1900
-				if(isset($types['c'])){$color[] = $selector;}
1901
-				if(isset($types['b'])){$background[] = $selector;}
1902
-				if(isset($types['o'])){$border[] = $selector;}
1903
-				if(isset($types['f'])){$fill[] = $selector;}
1904
-			}
1905
-
1906
-			// build rules into each type
1907
-			foreach($important_selectors as $selector => $types){
1908
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1909
-				$types = array_combine($types,$types);
1910
-				if(isset($types['c'])){$color_i[] = $selector;}
1911
-				if(isset($types['b'])){$background_i[] = $selector;}
1912
-				if(isset($types['o'])){$border_i[] = $selector;}
1913
-				if(isset($types['f'])){$fill_i[] = $selector;}
1914
-			}
1915
-
1916
-			// add any color rules
1917
-			if(!empty($color)){
1918
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1919
-			}
1920
-			if(!empty($color_i)){
1921
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1922
-			}
1923
-
1924
-			// add any background color rules
1925
-			if(!empty($background)){
1926
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1927
-			}
1928
-			if(!empty($background_i)){
1929
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1930
-			}
1931
-
1932
-			// add any border color rules
1933
-			if(!empty($border)){
1934
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1935
-			}
1936
-			if(!empty($border_i)){
1937
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1938
-			}
1939
-
1940
-			// add any fill color rules
1941
-			if(!empty($fill)){
1942
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1943
-			}
1944
-			if(!empty($fill_i)){
1945
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1946
-			}
1947
-
1948
-
1949
-			$prefix = $compatibility ? ".bsui " : "";
1950
-
1951
-			// darken
1952
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1953
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1954
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1955
-
1956
-			// lighten
1957
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1958
-
1959
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1960
-			$op_25 = $color_code."40"; // 25% opacity
1961
-
1962
-
1963
-			// button states
1964
-			$output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1965
-			$output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1966
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1967
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1968
-
1969
-
1970
-			// dropdown's
1971
-			$output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1972
-
1973
-
1974
-			// input states
1975
-			$output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1976
-
1977
-			// page link
1978
-			$output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1979
-
1980
-			return $output;
1981
-		}
1982
-
1983
-		/**
1984
-		 *
1985
-		 * @deprecated 0.1.76 Use css_overwrite()
1986
-		 *
1987
-		 * @param $color_code
1988
-		 * @param $compatibility
1989
-		 *
1990
-		 * @return string
1991
-		 */
1992
-		public static function css_secondary($color_code,$compatibility){;
1993
-			$color_code = sanitize_hex_color($color_code);
1994
-			if(!$color_code){return '';}
1995
-			/**
1996
-			 * c = color, b = background color, o = border-color, f = fill
1997
-			 */
1998
-			$selectors = array(
1999
-				'.btn-secondary' => array('b','o'),
2000
-				'.btn-secondary.disabled' => array('b','o'),
2001
-				'.btn-secondary:disabled' => array('b','o'),
2002
-				'.btn-outline-secondary' => array('c','o'),
2003
-				'.btn-outline-secondary:hover' => array('b','o'),
2004
-				'.btn-outline-secondary.disabled' => array('c'),
2005
-				'.btn-outline-secondary:disabled' => array('c'),
2006
-				'.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2007
-				'.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2008
-				'.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2009
-				'.badge-secondary' => array('b'),
2010
-				'.alert-secondary' => array('b','o'),
2011
-				'.btn-link.btn-secondary' => array('c'),
2012
-			);
2013
-
2014
-			$important_selectors = array(
2015
-				'.bg-secondary' => array('b','f'),
2016
-				'.border-secondary' => array('o'),
2017
-				'.text-secondary' => array('c'),
2018
-			);
2019
-
2020
-			$color = array();
2021
-			$color_i = array();
2022
-			$background = array();
2023
-			$background_i = array();
2024
-			$border = array();
2025
-			$border_i = array();
2026
-			$fill = array();
2027
-			$fill_i = array();
2028
-
2029
-			$output = '';
2030
-
2031
-			// build rules into each type
2032
-			foreach($selectors as $selector => $types){
2033
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2034
-				$types = array_combine($types,$types);
2035
-				if(isset($types['c'])){$color[] = $selector;}
2036
-				if(isset($types['b'])){$background[] = $selector;}
2037
-				if(isset($types['o'])){$border[] = $selector;}
2038
-				if(isset($types['f'])){$fill[] = $selector;}
2039
-			}
2040
-
2041
-			// build rules into each type
2042
-			foreach($important_selectors as $selector => $types){
2043
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2044
-				$types = array_combine($types,$types);
2045
-				if(isset($types['c'])){$color_i[] = $selector;}
2046
-				if(isset($types['b'])){$background_i[] = $selector;}
2047
-				if(isset($types['o'])){$border_i[] = $selector;}
2048
-				if(isset($types['f'])){$fill_i[] = $selector;}
2049
-			}
2050
-
2051
-			// add any color rules
2052
-			if(!empty($color)){
2053
-				$output .= implode(",",$color) . "{color: $color_code;} ";
2054
-			}
2055
-			if(!empty($color_i)){
2056
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2057
-			}
2058
-
2059
-			// add any background color rules
2060
-			if(!empty($background)){
2061
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
2062
-			}
2063
-			if(!empty($background_i)){
2064
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2065
-			}
2066
-
2067
-			// add any border color rules
2068
-			if(!empty($border)){
2069
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
2070
-			}
2071
-			if(!empty($border_i)){
2072
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2073
-			}
2074
-
2075
-			// add any fill color rules
2076
-			if(!empty($fill)){
2077
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
2078
-			}
2079
-			if(!empty($fill_i)){
2080
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2081
-			}
2082
-
2083
-
2084
-			$prefix = $compatibility ? ".bsui " : "";
2085
-
2086
-			// darken
2087
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2088
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2089
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
2090
-
2091
-			// lighten
2092
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2093
-
2094
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
2095
-			$op_25 = $color_code."40"; // 25% opacity
2096
-
2097
-
2098
-			// button states
2099
-			$output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2100
-			$output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2101
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2102
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2103
-
2104
-
2105
-			return $output;
2106
-		}
2107
-
2108
-		/**
2109
-		 * Increases or decreases the brightness of a color by a percentage of the current brightness.
2110
-		 *
2111
-		 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2112
-		 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2113
-		 *
2114
-		 * @return  string
2115
-		 */
2116
-		public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2117
-			$hexCode = ltrim($hexCode, '#');
2118
-
2119
-			if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2120
-				return $hexCode;
2121
-			}
2122
-
2123
-			if (strlen($hexCode) == 3) {
2124
-				$hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2125
-			}
2126
-
2127
-			$hexCode = array_map('hexdec', str_split($hexCode, 2));
2128
-
2129
-			foreach ($hexCode as & $color) {
2130
-				$adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2131
-				$adjustAmount = ceil($adjustableLimit * $adjustPercent);
2132
-
2133
-				$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2134
-			}
2135
-
2136
-			return '#' . implode($hexCode);
2137
-		}
2138
-
2139
-		/**
2140
-		 * Check if we should display examples.
2141
-		 */
2142
-		public function maybe_show_examples(){
2143
-			if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2144
-				echo "<head>";
2145
-				wp_head();
2146
-				echo "</head>";
2147
-				echo "<body>";
2148
-				echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2149
-				echo "</body>";
2150
-				exit;
2151
-			}
2152
-		}
2153
-
2154
-		/**
2155
-		 * Get developer examples.
2156
-		 *
2157
-		 * @return string
2158
-		 */
2159
-		public function get_examples(){
2160
-			$output = '';
2161
-
2162
-
2163
-			// open form
2164
-			$output .= "<form class='p-5 m-5 border rounded'>";
2165
-
2166
-			// input example
2167
-			$output .= aui()->input(array(
2168
-				'type'  =>  'text',
2169
-				'id'    =>  'text-example',
2170
-				'name'    =>  'text-example',
2171
-				'placeholder'   => 'text placeholder',
2172
-				'title'   => 'Text input example',
2173
-				'value' =>  '',
2174
-				'required'  => false,
2175
-				'help_text' => 'help text',
2176
-				'label' => 'Text input example label'
2177
-			));
2178
-
2179
-			// input example
2180
-			$output .= aui()->input(array(
2181
-				'type'  =>  'url',
2182
-				'id'    =>  'text-example2',
2183
-				'name'    =>  'text-example',
2184
-				'placeholder'   => 'url placeholder',
2185
-				'title'   => 'Text input example',
2186
-				'value' =>  '',
2187
-				'required'  => false,
2188
-				'help_text' => 'help text',
2189
-				'label' => 'Text input example label'
2190
-			));
2191
-
2192
-			// checkbox example
2193
-			$output .= aui()->input(array(
2194
-				'type'  =>  'checkbox',
2195
-				'id'    =>  'checkbox-example',
2196
-				'name'    =>  'checkbox-example',
2197
-				'placeholder'   => 'checkbox-example',
2198
-				'title'   => 'Checkbox example',
2199
-				'value' =>  '1',
2200
-				'checked'   => true,
2201
-				'required'  => false,
2202
-				'help_text' => 'help text',
2203
-				'label' => 'Checkbox checked'
2204
-			));
2205
-
2206
-			// checkbox example
2207
-			$output .= aui()->input(array(
2208
-				'type'  =>  'checkbox',
2209
-				'id'    =>  'checkbox-example2',
2210
-				'name'    =>  'checkbox-example2',
2211
-				'placeholder'   => 'checkbox-example',
2212
-				'title'   => 'Checkbox example',
2213
-				'value' =>  '1',
2214
-				'checked'   => false,
2215
-				'required'  => false,
2216
-				'help_text' => 'help text',
2217
-				'label' => 'Checkbox un-checked'
2218
-			));
2219
-
2220
-			// switch example
2221
-			$output .= aui()->input(array(
2222
-				'type'  =>  'checkbox',
2223
-				'id'    =>  'switch-example',
2224
-				'name'    =>  'switch-example',
2225
-				'placeholder'   => 'checkbox-example',
2226
-				'title'   => 'Switch example',
2227
-				'value' =>  '1',
2228
-				'checked'   => true,
2229
-				'switch'    => true,
2230
-				'required'  => false,
2231
-				'help_text' => 'help text',
2232
-				'label' => 'Switch on'
2233
-			));
2234
-
2235
-			// switch example
2236
-			$output .= aui()->input(array(
2237
-				'type'  =>  'checkbox',
2238
-				'id'    =>  'switch-example2',
2239
-				'name'    =>  'switch-example2',
2240
-				'placeholder'   => 'checkbox-example',
2241
-				'title'   => 'Switch example',
2242
-				'value' =>  '1',
2243
-				'checked'   => false,
2244
-				'switch'    => true,
2245
-				'required'  => false,
2246
-				'help_text' => 'help text',
2247
-				'label' => 'Switch off'
2248
-			));
2249
-
2250
-			// close form
2251
-			$output .= "</form>";
2252
-
2253
-			return $output;
2254
-		}
2255
-
2256
-		/**
2257
-		 * Calendar params.
2258
-		 *
2259
-		 * @since 0.1.44
2260
-		 *
2261
-		 * @return array Calendar params.
2262
-		 */
2263
-		public static function calendar_params() {
2264
-			$params = array(
2265
-				'month_long_1' => __( 'January', 'ayecode-connect' ),
2266
-				'month_long_2' => __( 'February', 'ayecode-connect' ),
2267
-				'month_long_3' => __( 'March', 'ayecode-connect' ),
2268
-				'month_long_4' => __( 'April', 'ayecode-connect' ),
2269
-				'month_long_5' => __( 'May', 'ayecode-connect' ),
2270
-				'month_long_6' => __( 'June', 'ayecode-connect' ),
2271
-				'month_long_7' => __( 'July', 'ayecode-connect' ),
2272
-				'month_long_8' => __( 'August', 'ayecode-connect' ),
2273
-				'month_long_9' => __( 'September', 'ayecode-connect' ),
2274
-				'month_long_10' => __( 'October', 'ayecode-connect' ),
2275
-				'month_long_11' => __( 'November', 'ayecode-connect' ),
2276
-				'month_long_12' => __( 'December', 'ayecode-connect' ),
2277
-				'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2278
-				'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2279
-				'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2280
-				'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2281
-				'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2282
-				'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2283
-				'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2284
-				'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2285
-				'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2286
-				'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2287
-				'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2288
-				'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2289
-				'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2290
-				'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2291
-				'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2292
-				'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2293
-				'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2294
-				'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2295
-				'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2296
-				'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2297
-				'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2298
-				'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2299
-				'day_s2_4' => __( 'We', 'ayecode-connect' ),
2300
-				'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2301
-				'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2302
-				'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2303
-				'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2304
-				'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2305
-				'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2306
-				'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2307
-				'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2308
-				'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2309
-				'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2310
-				'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2311
-				'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2312
-				'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2313
-				'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2314
-				'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2315
-				'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2316
-				'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2317
-				'am_lower' => __( 'am', 'ayecode-connect' ),
2318
-				'pm_lower' => __( 'pm', 'ayecode-connect' ),
2319
-				'am_upper' => __( 'AM', 'ayecode-connect' ),
2320
-				'pm_upper' => __( 'PM', 'ayecode-connect' ),
2321
-				'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2322
-				'time_24hr' => false,
2323
-				'year' => __( 'Year', 'ayecode-connect' ),
2324
-				'hour' => __( 'Hour', 'ayecode-connect' ),
2325
-				'minute' => __( 'Minute', 'ayecode-connect' ),
2326
-				'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2327
-				'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2328
-				'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2329
-				'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2330
-			);
2331
-
2332
-			return apply_filters( 'ayecode_ui_calendar_params', $params );
2333
-		}
2334
-
2335
-		/**
2336
-		 * Flatpickr calendar localize.
2337
-		 *
2338
-		 * @since 0.1.44
2339
-		 *
2340
-		 * @return string Calendar locale.
2341
-		 */
2342
-		public static function flatpickr_locale() {
2343
-			$params = self::calendar_params();
2344
-
2345
-			if ( is_string( $params ) ) {
2346
-				$params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2347
-			} else {
2348
-				foreach ( (array) $params as $key => $value ) {
2349
-					if ( ! is_scalar( $value ) ) {
2350
-						continue;
2351
-					}
2352
-
2353
-					$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2354
-				}
2355
-			}
1866
+                '.nav-pills .nav-link.active' => array('b'),
1867
+                '.nav-pills .show>.nav-link' => array('b'),
1868
+                '.page-link' => array('c'),
1869
+                '.page-item.active .page-link' => array('b','o'),
1870
+                '.badge-primary' => array('b'),
1871
+                '.alert-primary' => array('b','o'),
1872
+                '.progress-bar' => array('b'),
1873
+                '.list-group-item.active' => array('b','o'),
1874
+                '.bg-primary' => array('b','f'),
1875
+                '.btn-link.btn-primary' => array('c'),
1876
+                '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1877
+            );
1878
+
1879
+            $important_selectors = array(
1880
+                '.bg-primary' => array('b','f'),
1881
+                '.border-primary' => array('o'),
1882
+                '.text-primary' => array('c'),
1883
+            );
1884
+
1885
+            $color = array();
1886
+            $color_i = array();
1887
+            $background = array();
1888
+            $background_i = array();
1889
+            $border = array();
1890
+            $border_i = array();
1891
+            $fill = array();
1892
+            $fill_i = array();
1893
+
1894
+            $output = '';
1895
+
1896
+            // build rules into each type
1897
+            foreach($selectors as $selector => $types){
1898
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1899
+                $types = array_combine($types,$types);
1900
+                if(isset($types['c'])){$color[] = $selector;}
1901
+                if(isset($types['b'])){$background[] = $selector;}
1902
+                if(isset($types['o'])){$border[] = $selector;}
1903
+                if(isset($types['f'])){$fill[] = $selector;}
1904
+            }
1905
+
1906
+            // build rules into each type
1907
+            foreach($important_selectors as $selector => $types){
1908
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1909
+                $types = array_combine($types,$types);
1910
+                if(isset($types['c'])){$color_i[] = $selector;}
1911
+                if(isset($types['b'])){$background_i[] = $selector;}
1912
+                if(isset($types['o'])){$border_i[] = $selector;}
1913
+                if(isset($types['f'])){$fill_i[] = $selector;}
1914
+            }
1915
+
1916
+            // add any color rules
1917
+            if(!empty($color)){
1918
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1919
+            }
1920
+            if(!empty($color_i)){
1921
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1922
+            }
1923
+
1924
+            // add any background color rules
1925
+            if(!empty($background)){
1926
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1927
+            }
1928
+            if(!empty($background_i)){
1929
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1930
+            }
1931
+
1932
+            // add any border color rules
1933
+            if(!empty($border)){
1934
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1935
+            }
1936
+            if(!empty($border_i)){
1937
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1938
+            }
1939
+
1940
+            // add any fill color rules
1941
+            if(!empty($fill)){
1942
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1943
+            }
1944
+            if(!empty($fill_i)){
1945
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1946
+            }
1947
+
1948
+
1949
+            $prefix = $compatibility ? ".bsui " : "";
1950
+
1951
+            // darken
1952
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1953
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1954
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1955
+
1956
+            // lighten
1957
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1958
+
1959
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1960
+            $op_25 = $color_code."40"; // 25% opacity
1961
+
1962
+
1963
+            // button states
1964
+            $output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1965
+            $output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1966
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1967
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2356 1968
 
2357
-			$day_s3 = array();
2358
-			$day_s5 = array();
2359 1969
 
2360
-			for ( $i = 1; $i <= 7; $i ++ ) {
2361
-				$day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2362
-				$day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2363
-			}
1970
+            // dropdown's
1971
+            $output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
2364 1972
 
2365
-			$month_s = array();
2366
-			$month_long = array();
2367 1973
 
2368
-			for ( $i = 1; $i <= 12; $i ++ ) {
2369
-				$month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2370
-				$month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2371
-			}
1974
+            // input states
1975
+            $output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
2372 1976
 
2373
-			ob_start();
2374
-		if ( 0 ) { ?><script><?php } ?>
1977
+            // page link
1978
+            $output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1979
+
1980
+            return $output;
1981
+        }
1982
+
1983
+        /**
1984
+         *
1985
+         * @deprecated 0.1.76 Use css_overwrite()
1986
+         *
1987
+         * @param $color_code
1988
+         * @param $compatibility
1989
+         *
1990
+         * @return string
1991
+         */
1992
+        public static function css_secondary($color_code,$compatibility){;
1993
+            $color_code = sanitize_hex_color($color_code);
1994
+            if(!$color_code){return '';}
1995
+            /**
1996
+             * c = color, b = background color, o = border-color, f = fill
1997
+             */
1998
+            $selectors = array(
1999
+                '.btn-secondary' => array('b','o'),
2000
+                '.btn-secondary.disabled' => array('b','o'),
2001
+                '.btn-secondary:disabled' => array('b','o'),
2002
+                '.btn-outline-secondary' => array('c','o'),
2003
+                '.btn-outline-secondary:hover' => array('b','o'),
2004
+                '.btn-outline-secondary.disabled' => array('c'),
2005
+                '.btn-outline-secondary:disabled' => array('c'),
2006
+                '.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2007
+                '.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2008
+                '.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2009
+                '.badge-secondary' => array('b'),
2010
+                '.alert-secondary' => array('b','o'),
2011
+                '.btn-link.btn-secondary' => array('c'),
2012
+            );
2013
+
2014
+            $important_selectors = array(
2015
+                '.bg-secondary' => array('b','f'),
2016
+                '.border-secondary' => array('o'),
2017
+                '.text-secondary' => array('c'),
2018
+            );
2019
+
2020
+            $color = array();
2021
+            $color_i = array();
2022
+            $background = array();
2023
+            $background_i = array();
2024
+            $border = array();
2025
+            $border_i = array();
2026
+            $fill = array();
2027
+            $fill_i = array();
2028
+
2029
+            $output = '';
2030
+
2031
+            // build rules into each type
2032
+            foreach($selectors as $selector => $types){
2033
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2034
+                $types = array_combine($types,$types);
2035
+                if(isset($types['c'])){$color[] = $selector;}
2036
+                if(isset($types['b'])){$background[] = $selector;}
2037
+                if(isset($types['o'])){$border[] = $selector;}
2038
+                if(isset($types['f'])){$fill[] = $selector;}
2039
+            }
2040
+
2041
+            // build rules into each type
2042
+            foreach($important_selectors as $selector => $types){
2043
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2044
+                $types = array_combine($types,$types);
2045
+                if(isset($types['c'])){$color_i[] = $selector;}
2046
+                if(isset($types['b'])){$background_i[] = $selector;}
2047
+                if(isset($types['o'])){$border_i[] = $selector;}
2048
+                if(isset($types['f'])){$fill_i[] = $selector;}
2049
+            }
2050
+
2051
+            // add any color rules
2052
+            if(!empty($color)){
2053
+                $output .= implode(",",$color) . "{color: $color_code;} ";
2054
+            }
2055
+            if(!empty($color_i)){
2056
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2057
+            }
2058
+
2059
+            // add any background color rules
2060
+            if(!empty($background)){
2061
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
2062
+            }
2063
+            if(!empty($background_i)){
2064
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2065
+            }
2066
+
2067
+            // add any border color rules
2068
+            if(!empty($border)){
2069
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
2070
+            }
2071
+            if(!empty($border_i)){
2072
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2073
+            }
2074
+
2075
+            // add any fill color rules
2076
+            if(!empty($fill)){
2077
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
2078
+            }
2079
+            if(!empty($fill_i)){
2080
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2081
+            }
2082
+
2083
+
2084
+            $prefix = $compatibility ? ".bsui " : "";
2085
+
2086
+            // darken
2087
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2088
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2089
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
2090
+
2091
+            // lighten
2092
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2093
+
2094
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
2095
+            $op_25 = $color_code."40"; // 25% opacity
2096
+
2097
+
2098
+            // button states
2099
+            $output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2100
+            $output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2101
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2102
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2103
+
2104
+
2105
+            return $output;
2106
+        }
2107
+
2108
+        /**
2109
+         * Increases or decreases the brightness of a color by a percentage of the current brightness.
2110
+         *
2111
+         * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2112
+         * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2113
+         *
2114
+         * @return  string
2115
+         */
2116
+        public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2117
+            $hexCode = ltrim($hexCode, '#');
2118
+
2119
+            if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2120
+                return $hexCode;
2121
+            }
2122
+
2123
+            if (strlen($hexCode) == 3) {
2124
+                $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2125
+            }
2126
+
2127
+            $hexCode = array_map('hexdec', str_split($hexCode, 2));
2128
+
2129
+            foreach ($hexCode as & $color) {
2130
+                $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2131
+                $adjustAmount = ceil($adjustableLimit * $adjustPercent);
2132
+
2133
+                $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2134
+            }
2135
+
2136
+            return '#' . implode($hexCode);
2137
+        }
2138
+
2139
+        /**
2140
+         * Check if we should display examples.
2141
+         */
2142
+        public function maybe_show_examples(){
2143
+            if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2144
+                echo "<head>";
2145
+                wp_head();
2146
+                echo "</head>";
2147
+                echo "<body>";
2148
+                echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2149
+                echo "</body>";
2150
+                exit;
2151
+            }
2152
+        }
2153
+
2154
+        /**
2155
+         * Get developer examples.
2156
+         *
2157
+         * @return string
2158
+         */
2159
+        public function get_examples(){
2160
+            $output = '';
2161
+
2162
+
2163
+            // open form
2164
+            $output .= "<form class='p-5 m-5 border rounded'>";
2165
+
2166
+            // input example
2167
+            $output .= aui()->input(array(
2168
+                'type'  =>  'text',
2169
+                'id'    =>  'text-example',
2170
+                'name'    =>  'text-example',
2171
+                'placeholder'   => 'text placeholder',
2172
+                'title'   => 'Text input example',
2173
+                'value' =>  '',
2174
+                'required'  => false,
2175
+                'help_text' => 'help text',
2176
+                'label' => 'Text input example label'
2177
+            ));
2178
+
2179
+            // input example
2180
+            $output .= aui()->input(array(
2181
+                'type'  =>  'url',
2182
+                'id'    =>  'text-example2',
2183
+                'name'    =>  'text-example',
2184
+                'placeholder'   => 'url placeholder',
2185
+                'title'   => 'Text input example',
2186
+                'value' =>  '',
2187
+                'required'  => false,
2188
+                'help_text' => 'help text',
2189
+                'label' => 'Text input example label'
2190
+            ));
2191
+
2192
+            // checkbox example
2193
+            $output .= aui()->input(array(
2194
+                'type'  =>  'checkbox',
2195
+                'id'    =>  'checkbox-example',
2196
+                'name'    =>  'checkbox-example',
2197
+                'placeholder'   => 'checkbox-example',
2198
+                'title'   => 'Checkbox example',
2199
+                'value' =>  '1',
2200
+                'checked'   => true,
2201
+                'required'  => false,
2202
+                'help_text' => 'help text',
2203
+                'label' => 'Checkbox checked'
2204
+            ));
2205
+
2206
+            // checkbox example
2207
+            $output .= aui()->input(array(
2208
+                'type'  =>  'checkbox',
2209
+                'id'    =>  'checkbox-example2',
2210
+                'name'    =>  'checkbox-example2',
2211
+                'placeholder'   => 'checkbox-example',
2212
+                'title'   => 'Checkbox example',
2213
+                'value' =>  '1',
2214
+                'checked'   => false,
2215
+                'required'  => false,
2216
+                'help_text' => 'help text',
2217
+                'label' => 'Checkbox un-checked'
2218
+            ));
2219
+
2220
+            // switch example
2221
+            $output .= aui()->input(array(
2222
+                'type'  =>  'checkbox',
2223
+                'id'    =>  'switch-example',
2224
+                'name'    =>  'switch-example',
2225
+                'placeholder'   => 'checkbox-example',
2226
+                'title'   => 'Switch example',
2227
+                'value' =>  '1',
2228
+                'checked'   => true,
2229
+                'switch'    => true,
2230
+                'required'  => false,
2231
+                'help_text' => 'help text',
2232
+                'label' => 'Switch on'
2233
+            ));
2234
+
2235
+            // switch example
2236
+            $output .= aui()->input(array(
2237
+                'type'  =>  'checkbox',
2238
+                'id'    =>  'switch-example2',
2239
+                'name'    =>  'switch-example2',
2240
+                'placeholder'   => 'checkbox-example',
2241
+                'title'   => 'Switch example',
2242
+                'value' =>  '1',
2243
+                'checked'   => false,
2244
+                'switch'    => true,
2245
+                'required'  => false,
2246
+                'help_text' => 'help text',
2247
+                'label' => 'Switch off'
2248
+            ));
2249
+
2250
+            // close form
2251
+            $output .= "</form>";
2252
+
2253
+            return $output;
2254
+        }
2255
+
2256
+        /**
2257
+         * Calendar params.
2258
+         *
2259
+         * @since 0.1.44
2260
+         *
2261
+         * @return array Calendar params.
2262
+         */
2263
+        public static function calendar_params() {
2264
+            $params = array(
2265
+                'month_long_1' => __( 'January', 'ayecode-connect' ),
2266
+                'month_long_2' => __( 'February', 'ayecode-connect' ),
2267
+                'month_long_3' => __( 'March', 'ayecode-connect' ),
2268
+                'month_long_4' => __( 'April', 'ayecode-connect' ),
2269
+                'month_long_5' => __( 'May', 'ayecode-connect' ),
2270
+                'month_long_6' => __( 'June', 'ayecode-connect' ),
2271
+                'month_long_7' => __( 'July', 'ayecode-connect' ),
2272
+                'month_long_8' => __( 'August', 'ayecode-connect' ),
2273
+                'month_long_9' => __( 'September', 'ayecode-connect' ),
2274
+                'month_long_10' => __( 'October', 'ayecode-connect' ),
2275
+                'month_long_11' => __( 'November', 'ayecode-connect' ),
2276
+                'month_long_12' => __( 'December', 'ayecode-connect' ),
2277
+                'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2278
+                'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2279
+                'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2280
+                'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2281
+                'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2282
+                'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2283
+                'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2284
+                'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2285
+                'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2286
+                'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2287
+                'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2288
+                'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2289
+                'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2290
+                'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2291
+                'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2292
+                'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2293
+                'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2294
+                'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2295
+                'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2296
+                'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2297
+                'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2298
+                'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2299
+                'day_s2_4' => __( 'We', 'ayecode-connect' ),
2300
+                'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2301
+                'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2302
+                'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2303
+                'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2304
+                'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2305
+                'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2306
+                'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2307
+                'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2308
+                'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2309
+                'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2310
+                'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2311
+                'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2312
+                'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2313
+                'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2314
+                'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2315
+                'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2316
+                'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2317
+                'am_lower' => __( 'am', 'ayecode-connect' ),
2318
+                'pm_lower' => __( 'pm', 'ayecode-connect' ),
2319
+                'am_upper' => __( 'AM', 'ayecode-connect' ),
2320
+                'pm_upper' => __( 'PM', 'ayecode-connect' ),
2321
+                'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2322
+                'time_24hr' => false,
2323
+                'year' => __( 'Year', 'ayecode-connect' ),
2324
+                'hour' => __( 'Hour', 'ayecode-connect' ),
2325
+                'minute' => __( 'Minute', 'ayecode-connect' ),
2326
+                'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2327
+                'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2328
+                'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2329
+                'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2330
+            );
2331
+
2332
+            return apply_filters( 'ayecode_ui_calendar_params', $params );
2333
+        }
2334
+
2335
+        /**
2336
+         * Flatpickr calendar localize.
2337
+         *
2338
+         * @since 0.1.44
2339
+         *
2340
+         * @return string Calendar locale.
2341
+         */
2342
+        public static function flatpickr_locale() {
2343
+            $params = self::calendar_params();
2344
+
2345
+            if ( is_string( $params ) ) {
2346
+                $params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2347
+            } else {
2348
+                foreach ( (array) $params as $key => $value ) {
2349
+                    if ( ! is_scalar( $value ) ) {
2350
+                        continue;
2351
+                    }
2352
+
2353
+                    $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2354
+                }
2355
+            }
2356
+
2357
+            $day_s3 = array();
2358
+            $day_s5 = array();
2359
+
2360
+            for ( $i = 1; $i <= 7; $i ++ ) {
2361
+                $day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2362
+                $day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2363
+            }
2364
+
2365
+            $month_s = array();
2366
+            $month_long = array();
2367
+
2368
+            for ( $i = 1; $i <= 12; $i ++ ) {
2369
+                $month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2370
+                $month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2371
+            }
2372
+
2373
+            ob_start();
2374
+        if ( 0 ) { ?><script><?php } ?>
2375 2375
                 {
2376 2376
                     weekdays: {
2377 2377
                         shorthand: ['<?php echo implode( "','", $day_s3 ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>'],
@@ -2410,189 +2410,189 @@  discard block
 block discarded – undo
2410 2410
                 }
2411 2411
 				<?php if ( 0 ) { ?></script><?php } ?>
2412 2412
 			<?php
2413
-			$locale = ob_get_clean();
2414
-
2415
-			return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2416
-		}
2417
-
2418
-		/**
2419
-		 * Select2 JS params.
2420
-		 *
2421
-		 * @since 0.1.44
2422
-		 *
2423
-		 * @return array Select2 JS params.
2424
-		 */
2425
-		public static function select2_params() {
2426
-			$params = array(
2427
-				'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2428
-				'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2429
-				'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2430
-				'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2431
-				'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2432
-				'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2433
-				'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2434
-				'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2435
-				'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2436
-				'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2437
-				'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2438
-			);
2439
-
2440
-			return apply_filters( 'ayecode_ui_select2_params', $params );
2441
-		}
2442
-
2443
-		/**
2444
-		 * Select2 JS localize.
2445
-		 *
2446
-		 * @since 0.1.44
2447
-		 *
2448
-		 * @return string Select2 JS locale.
2449
-		 */
2450
-		public static function select2_locale() {
2451
-			$params = self::select2_params();
2452
-
2453
-			foreach ( (array) $params as $key => $value ) {
2454
-				if ( ! is_scalar( $value ) ) {
2455
-					continue;
2456
-				}
2413
+            $locale = ob_get_clean();
2457 2414
 
2458
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2459
-			}
2460
-
2461
-			$locale = json_encode( $params );
2462
-
2463
-			return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2464
-		}
2465
-
2466
-		/**
2467
-		 * Time ago JS localize.
2468
-		 *
2469
-		 * @since 0.1.47
2470
-		 *
2471
-		 * @return string Time ago JS locale.
2472
-		 */
2473
-		public static function timeago_locale() {
2474
-			$params = array(
2475
-				'prefix_ago' => '',
2476
-				'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2477
-				'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2478
-				'suffix_after' => '',
2479
-				'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2480
-				'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2481
-				'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2482
-				'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2483
-				'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2484
-				'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2485
-				'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2486
-				'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2487
-				'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2488
-				'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2489
-				'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2490
-			);
2491
-
2492
-			$params = apply_filters( 'ayecode_ui_timeago_params', $params );
2493
-
2494
-			foreach ( (array) $params as $key => $value ) {
2495
-				if ( ! is_scalar( $value ) ) {
2496
-					continue;
2497
-				}
2415
+            return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2416
+        }
2417
+
2418
+        /**
2419
+         * Select2 JS params.
2420
+         *
2421
+         * @since 0.1.44
2422
+         *
2423
+         * @return array Select2 JS params.
2424
+         */
2425
+        public static function select2_params() {
2426
+            $params = array(
2427
+                'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2428
+                'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2429
+                'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2430
+                'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2431
+                'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2432
+                'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2433
+                'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2434
+                'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2435
+                'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2436
+                'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2437
+                'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2438
+            );
2439
+
2440
+            return apply_filters( 'ayecode_ui_select2_params', $params );
2441
+        }
2442
+
2443
+        /**
2444
+         * Select2 JS localize.
2445
+         *
2446
+         * @since 0.1.44
2447
+         *
2448
+         * @return string Select2 JS locale.
2449
+         */
2450
+        public static function select2_locale() {
2451
+            $params = self::select2_params();
2452
+
2453
+            foreach ( (array) $params as $key => $value ) {
2454
+                if ( ! is_scalar( $value ) ) {
2455
+                    continue;
2456
+                }
2457
+
2458
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2459
+            }
2460
+
2461
+            $locale = json_encode( $params );
2462
+
2463
+            return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2464
+        }
2465
+
2466
+        /**
2467
+         * Time ago JS localize.
2468
+         *
2469
+         * @since 0.1.47
2470
+         *
2471
+         * @return string Time ago JS locale.
2472
+         */
2473
+        public static function timeago_locale() {
2474
+            $params = array(
2475
+                'prefix_ago' => '',
2476
+                'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2477
+                'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2478
+                'suffix_after' => '',
2479
+                'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2480
+                'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2481
+                'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2482
+                'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2483
+                'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2484
+                'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2485
+                'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2486
+                'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2487
+                'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2488
+                'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2489
+                'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2490
+            );
2491
+
2492
+            $params = apply_filters( 'ayecode_ui_timeago_params', $params );
2493
+
2494
+            foreach ( (array) $params as $key => $value ) {
2495
+                if ( ! is_scalar( $value ) ) {
2496
+                    continue;
2497
+                }
2498
+
2499
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2500
+            }
2498 2501
 
2499
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2500
-			}
2501
-
2502
-			$locale = json_encode( $params );
2503
-
2504
-			return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2505
-		}
2506
-
2507
-		/**
2508
-		 * JavaScript Minifier
2509
-		 *
2510
-		 * @param $input
2511
-		 *
2512
-		 * @return mixed
2513
-		 */
2514
-		public static function minify_js($input) {
2515
-			if(trim($input) === "") return $input;
2516
-			return preg_replace(
2517
-				array(
2518
-					// Remove comment(s)
2519
-					'#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2520
-					// Remove white-space(s) outside the string and regex
2521
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2522
-					// Remove the last semicolon
2523
-					'#;+\}#',
2524
-					// Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2525
-					'#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2526
-					// --ibid. From `foo['bar']` to `foo.bar`
2527
-					'#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2528
-				),
2529
-				array(
2530
-					'$1',
2531
-					'$1$2',
2532
-					'}',
2533
-					'$1$3',
2534
-					'$1.$3'
2535
-				),
2536
-				$input);
2537
-		}
2538
-
2539
-		/**
2540
-		 * Minify CSS
2541
-		 *
2542
-		 * @param $input
2543
-		 *
2544
-		 * @return mixed
2545
-		 */
2546
-		public static function minify_css($input) {
2547
-			if(trim($input) === "") return $input;
2548
-			return preg_replace(
2549
-				array(
2550
-					// Remove comment(s)
2551
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2552
-					// Remove unused white-space(s)
2553
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2554
-					// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2555
-					'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2556
-					// Replace `:0 0 0 0` with `:0`
2557
-					'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2558
-					// Replace `background-position:0` with `background-position:0 0`
2559
-					'#(background-position):0(?=[;\}])#si',
2560
-					// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2561
-					'#(?<=[\s:,\-])0+\.(\d+)#s',
2562
-					// Minify string value
2563
-					'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2564
-					'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2565
-					// Minify HEX color code
2566
-					'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2567
-					// Replace `(border|outline):none` with `(border|outline):0`
2568
-					'#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2569
-					// Remove empty selector(s)
2570
-					'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2571
-				),
2572
-				array(
2573
-					'$1',
2574
-					'$1$2$3$4$5$6$7',
2575
-					'$1',
2576
-					':0',
2577
-					'$1:0 0',
2578
-					'.$1',
2579
-					'$1$3',
2580
-					'$1$2$4$5',
2581
-					'$1$2$3',
2582
-					'$1:0',
2583
-					'$1$2'
2584
-				),
2585
-				$input);
2586
-		}
2587
-
2588
-		/**
2589
-		 * Get the conditional fields JavaScript.
2590
-		 *
2591
-		 * @return mixed
2592
-		 */
2593
-		public function conditional_fields_js() {
2594
-			ob_start();
2595
-			?>
2502
+            $locale = json_encode( $params );
2503
+
2504
+            return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2505
+        }
2506
+
2507
+        /**
2508
+         * JavaScript Minifier
2509
+         *
2510
+         * @param $input
2511
+         *
2512
+         * @return mixed
2513
+         */
2514
+        public static function minify_js($input) {
2515
+            if(trim($input) === "") return $input;
2516
+            return preg_replace(
2517
+                array(
2518
+                    // Remove comment(s)
2519
+                    '#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2520
+                    // Remove white-space(s) outside the string and regex
2521
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2522
+                    // Remove the last semicolon
2523
+                    '#;+\}#',
2524
+                    // Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2525
+                    '#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2526
+                    // --ibid. From `foo['bar']` to `foo.bar`
2527
+                    '#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2528
+                ),
2529
+                array(
2530
+                    '$1',
2531
+                    '$1$2',
2532
+                    '}',
2533
+                    '$1$3',
2534
+                    '$1.$3'
2535
+                ),
2536
+                $input);
2537
+        }
2538
+
2539
+        /**
2540
+         * Minify CSS
2541
+         *
2542
+         * @param $input
2543
+         *
2544
+         * @return mixed
2545
+         */
2546
+        public static function minify_css($input) {
2547
+            if(trim($input) === "") return $input;
2548
+            return preg_replace(
2549
+                array(
2550
+                    // Remove comment(s)
2551
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2552
+                    // Remove unused white-space(s)
2553
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2554
+                    // Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2555
+                    '#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2556
+                    // Replace `:0 0 0 0` with `:0`
2557
+                    '#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2558
+                    // Replace `background-position:0` with `background-position:0 0`
2559
+                    '#(background-position):0(?=[;\}])#si',
2560
+                    // Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2561
+                    '#(?<=[\s:,\-])0+\.(\d+)#s',
2562
+                    // Minify string value
2563
+                    '#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2564
+                    '#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2565
+                    // Minify HEX color code
2566
+                    '#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2567
+                    // Replace `(border|outline):none` with `(border|outline):0`
2568
+                    '#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2569
+                    // Remove empty selector(s)
2570
+                    '#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2571
+                ),
2572
+                array(
2573
+                    '$1',
2574
+                    '$1$2$3$4$5$6$7',
2575
+                    '$1',
2576
+                    ':0',
2577
+                    '$1:0 0',
2578
+                    '.$1',
2579
+                    '$1$3',
2580
+                    '$1$2$4$5',
2581
+                    '$1$2$3',
2582
+                    '$1:0',
2583
+                    '$1$2'
2584
+                ),
2585
+                $input);
2586
+        }
2587
+
2588
+        /**
2589
+         * Get the conditional fields JavaScript.
2590
+         *
2591
+         * @return mixed
2592
+         */
2593
+        public function conditional_fields_js() {
2594
+            ob_start();
2595
+            ?>
2596 2596
             <script>
2597 2597
                 /**
2598 2598
                  * Conditional Fields
@@ -3124,14 +3124,14 @@  discard block
 block discarded – undo
3124 3124
 				<?php do_action( 'aui_conditional_fields_js', $this ); ?>
3125 3125
             </script>
3126 3126
 			<?php
3127
-			$output = ob_get_clean();
3127
+            $output = ob_get_clean();
3128 3128
 
3129
-			return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3130
-		}
3131
-	}
3129
+            return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3130
+        }
3131
+    }
3132 3132
 
3133
-	/**
3134
-	 * Run the class if found.
3135
-	 */
3136
-	AyeCode_UI_Settings::instance();
3133
+    /**
3134
+     * Run the class if found.
3135
+     */
3136
+    AyeCode_UI_Settings::instance();
3137 3137
 }
3138 3138
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,40 +7,40 @@
 block discarded – undo
7 7
  * Bail if we are not in WP.
8 8
  */
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit;
10
+    exit;
11 11
 }
12 12
 
13 13
 /**
14 14
  * Set the version only if its the current newest while loading.
15 15
  */
16 16
 add_action('after_setup_theme', function () {
17
-	global $ayecode_ui_version,$ayecode_ui_file_key;
18
-	$this_version = "0.2.26";
19
-	if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
-		$ayecode_ui_version = $this_version ;
21
-		$ayecode_ui_file_key = wp_hash( __FILE__ );
22
-	}
17
+    global $ayecode_ui_version,$ayecode_ui_file_key;
18
+    $this_version = "0.2.26";
19
+    if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
+        $ayecode_ui_version = $this_version ;
21
+        $ayecode_ui_file_key = wp_hash( __FILE__ );
22
+    }
23 23
 },0);
24 24
 
25 25
 /**
26 26
  * Load this version of WP Bootstrap Settings only if the file hash is the current one.
27 27
  */
28 28
 add_action('after_setup_theme', function () {
29
-	global $ayecode_ui_file_key;
30
-	if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
-		include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
-		include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
-	}
29
+    global $ayecode_ui_file_key;
30
+    if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
+        include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
+        include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
+    }
34 34
 },1);
35 35
 
36 36
 /**
37 37
  * Add the function that calls the class.
38 38
  */
39 39
 if(!function_exists('aui')){
40
-	function aui(){
41
-		if(!class_exists("AUI",false)){
42
-			return false;
43
-		}
44
-		return AUI::instance();
45
-	}
40
+    function aui(){
41
+        if(!class_exists("AUI",false)){
42
+            return false;
43
+        }
44
+        return AUI::instance();
45
+    }
46 46
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/wp-super-duper.php 1 patch
Indentation   +2887 added lines, -2887 removed lines patch added patch discarded remove patch
@@ -1,300 +1,300 @@  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.9' );
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
-			}
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
-			}
72
-
73
-
74
-			if ( isset( $options['class_name'] ) ) {
75
-				// register widget
76
-				$this->class_name = $options['class_name'];
77
-
78
-				// register shortcode, this needs to be done even for blocks and widgets
79
-				$this->register_shortcode();
80
-
81
-
82
-				// Fusion Builder (avada) support
83
-				if ( function_exists( 'fusion_builder_map' ) ) {
84
-					add_action( 'init', array( $this, 'register_fusion_element' ) );
85
-				}
86
-
87
-				// register block
88
-				if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
89
-					add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
90
-				}
91
-			}
92
-
93
-			// add the CSS and JS we need ONCE
94
-			global $sd_widget_scripts;
95
-
96
-			if ( ! $sd_widget_scripts ) {
97
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
98
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
99
-				wp_add_inline_style( 'widgets', $this->widget_css() );
100
-
101
-				// maybe add elementor editor styles
102
-				add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
103
-
104
-				$sd_widget_scripts = true;
105
-
106
-				// add shortcode insert button once
107
-				add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
108
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
109
-				// generatepress theme sections compatibility
110
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
111
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
112
-				}
113
-				/* Load script on Divi theme builder page */
114
-				if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
115
-					add_thickbox();
116
-					add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
117
-				}
118
-
119
-				if ( $this->is_preview() ) {
120
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
121
-					// this makes the insert button work for elementor
122
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
123
-						$this,
124
-						'shortcode_insert_button_script'
125
-					) ); // for elementor
126
-				}
127
-				// this makes the insert button work for cornerstone
128
-				add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
129
-
130
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
131
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
132
-
133
-				// add generator text to head
134
-				add_action( 'admin_head', array( $this, 'generator' ), 99 );
135
-				add_action( 'wp_head', array( $this, 'generator' ), 99 );
136
-			}
137
-
138
-			do_action( 'wp_super_duper_widget_init', $options, $this );
139
-		}
140
-
141
-		/**
142
-		 * The register widget function
143
-		 * @return void
144
-		 */
145
-		public function _register() {
146
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
147
-				parent::_register();
148
-			}
149
-		}
150
-
151
-		/**
152
-		 * Add our widget CSS to elementor editor.
153
-		 */
154
-		public function elementor_editor_styles() {
155
-			wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
156
-		}
157
-
158
-		public function register_fusion_element() {
159
-
160
-			$options = $this->options;
161
-
162
-			if ( $this->base_id ) {
163
-
164
-				$params = $this->get_fusion_params();
165
-
166
-				$args = array(
167
-					'name'            => $options['name'],
168
-					'shortcode'       => $this->base_id,
169
-					'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
170
-					'allow_generator' => true,
171
-				);
172
-
173
-				if ( ! empty( $params ) ) {
174
-					$args['params'] = $params;
175
-				}
176
-
177
-				fusion_builder_map( $args );
178
-			}
179
-
180
-		}
181
-
182
-		public function get_fusion_params() {
183
-			$params    = array();
184
-			$arguments = $this->get_arguments();
185
-
186
-			if ( ! empty( $arguments ) ) {
187
-				foreach ( $arguments as $key => $val ) {
188
-					$param = array();
189
-					// type
190
-					$param['type'] = str_replace(
191
-						array(
192
-							"text",
193
-							"number",
194
-							"email",
195
-							"color",
196
-							"checkbox"
197
-						),
198
-						array(
199
-							"textfield",
200
-							"textfield",
201
-							"textfield",
202
-							"colorpicker",
203
-							"select",
204
-
205
-						),
206
-						$val['type'] );
207
-
208
-					// multiselect
209
-					if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
210
-						$param['type']     = 'multiple_select';
211
-						$param['multiple'] = true;
212
-					}
213
-
214
-					// heading
215
-					$param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
216
-
217
-					// description
218
-					$param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
219
-
220
-					// param_name
221
-					$param['param_name'] = $key;
222
-
223
-					// Default
224
-					$param['default'] = isset( $val['default'] ) ? $val['default'] : '';
225
-
226
-					// Group
227
-					if ( isset( $val['group'] ) ) {
228
-						$param['group'] = $val['group'];
229
-					}
230
-
231
-					// value
232
-					if ( $val['type'] == 'checkbox' ) {
233
-						if ( isset( $val['default'] ) && $val['default'] == '0' ) {
234
-							unset( $param['default'] );
235
-						}
236
-						$param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
237
-					} elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
238
-						$param['value'] = isset( $val['options'] ) ? $val['options'] : array();
239
-					} else {
240
-						$param['value'] = isset( $val['default'] ) ? $val['default'] : '';
241
-					}
242
-
243
-					// setup the param
244
-					$params[] = $param;
245
-
246
-				}
247
-			}
248
-
249
-
250
-			return $params;
251
-		}
252
-
253
-		/**
254
-		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
255
-		 */
256
-		public static function maybe_cornerstone_builder() {
257
-			if ( did_action( 'cornerstone_before_boot_app' ) ) {
258
-				self::shortcode_insert_button_script();
259
-			}
260
-		}
261
-
262
-		/**
263
-		 * A function to ge the shortcode builder picker html.
264
-		 *
265
-		 * @param string $editor_id
266
-		 *
267
-		 * @return string
268
-		 */
269
-		public static function get_picker( $editor_id = '' ) {
270
-
271
-			ob_start();
272
-			if ( isset( $_POST['editor_id'] ) ) {
273
-				$editor_id = esc_attr( $_POST['editor_id'] );
274
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
275
-				$editor_id = 'main_content_content_vb_tiny_mce';
276
-			}
277
-
278
-			global $sd_widgets;
8
+    define( 'SUPER_DUPER_VER', '1.2.9' );
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
+            }
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
+            }
72
+
73
+
74
+            if ( isset( $options['class_name'] ) ) {
75
+                // register widget
76
+                $this->class_name = $options['class_name'];
77
+
78
+                // register shortcode, this needs to be done even for blocks and widgets
79
+                $this->register_shortcode();
80
+
81
+
82
+                // Fusion Builder (avada) support
83
+                if ( function_exists( 'fusion_builder_map' ) ) {
84
+                    add_action( 'init', array( $this, 'register_fusion_element' ) );
85
+                }
86
+
87
+                // register block
88
+                if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
89
+                    add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
90
+                }
91
+            }
92
+
93
+            // add the CSS and JS we need ONCE
94
+            global $sd_widget_scripts;
95
+
96
+            if ( ! $sd_widget_scripts ) {
97
+                wp_add_inline_script( 'admin-widgets', $this->widget_js() );
98
+                wp_add_inline_script( 'customize-controls', $this->widget_js() );
99
+                wp_add_inline_style( 'widgets', $this->widget_css() );
100
+
101
+                // maybe add elementor editor styles
102
+                add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
103
+
104
+                $sd_widget_scripts = true;
105
+
106
+                // add shortcode insert button once
107
+                add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
108
+                add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
109
+                // generatepress theme sections compatibility
110
+                if ( function_exists( 'generate_sections_sections_metabox' ) ) {
111
+                    add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
112
+                }
113
+                /* Load script on Divi theme builder page */
114
+                if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
115
+                    add_thickbox();
116
+                    add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
117
+                }
118
+
119
+                if ( $this->is_preview() ) {
120
+                    add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
121
+                    // this makes the insert button work for elementor
122
+                    add_action( 'elementor/editor/after_enqueue_scripts', array(
123
+                        $this,
124
+                        'shortcode_insert_button_script'
125
+                    ) ); // for elementor
126
+                }
127
+                // this makes the insert button work for cornerstone
128
+                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
129
+
130
+                add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
131
+                add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
132
+
133
+                // add generator text to head
134
+                add_action( 'admin_head', array( $this, 'generator' ), 99 );
135
+                add_action( 'wp_head', array( $this, 'generator' ), 99 );
136
+            }
137
+
138
+            do_action( 'wp_super_duper_widget_init', $options, $this );
139
+        }
140
+
141
+        /**
142
+         * The register widget function
143
+         * @return void
144
+         */
145
+        public function _register() {
146
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
147
+                parent::_register();
148
+            }
149
+        }
150
+
151
+        /**
152
+         * Add our widget CSS to elementor editor.
153
+         */
154
+        public function elementor_editor_styles() {
155
+            wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
156
+        }
157
+
158
+        public function register_fusion_element() {
159
+
160
+            $options = $this->options;
161
+
162
+            if ( $this->base_id ) {
163
+
164
+                $params = $this->get_fusion_params();
165
+
166
+                $args = array(
167
+                    'name'            => $options['name'],
168
+                    'shortcode'       => $this->base_id,
169
+                    'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
170
+                    'allow_generator' => true,
171
+                );
172
+
173
+                if ( ! empty( $params ) ) {
174
+                    $args['params'] = $params;
175
+                }
176
+
177
+                fusion_builder_map( $args );
178
+            }
179
+
180
+        }
181
+
182
+        public function get_fusion_params() {
183
+            $params    = array();
184
+            $arguments = $this->get_arguments();
185
+
186
+            if ( ! empty( $arguments ) ) {
187
+                foreach ( $arguments as $key => $val ) {
188
+                    $param = array();
189
+                    // type
190
+                    $param['type'] = str_replace(
191
+                        array(
192
+                            "text",
193
+                            "number",
194
+                            "email",
195
+                            "color",
196
+                            "checkbox"
197
+                        ),
198
+                        array(
199
+                            "textfield",
200
+                            "textfield",
201
+                            "textfield",
202
+                            "colorpicker",
203
+                            "select",
204
+
205
+                        ),
206
+                        $val['type'] );
207
+
208
+                    // multiselect
209
+                    if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
210
+                        $param['type']     = 'multiple_select';
211
+                        $param['multiple'] = true;
212
+                    }
213
+
214
+                    // heading
215
+                    $param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
216
+
217
+                    // description
218
+                    $param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
219
+
220
+                    // param_name
221
+                    $param['param_name'] = $key;
222
+
223
+                    // Default
224
+                    $param['default'] = isset( $val['default'] ) ? $val['default'] : '';
225
+
226
+                    // Group
227
+                    if ( isset( $val['group'] ) ) {
228
+                        $param['group'] = $val['group'];
229
+                    }
230
+
231
+                    // value
232
+                    if ( $val['type'] == 'checkbox' ) {
233
+                        if ( isset( $val['default'] ) && $val['default'] == '0' ) {
234
+                            unset( $param['default'] );
235
+                        }
236
+                        $param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
237
+                    } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
238
+                        $param['value'] = isset( $val['options'] ) ? $val['options'] : array();
239
+                    } else {
240
+                        $param['value'] = isset( $val['default'] ) ? $val['default'] : '';
241
+                    }
242
+
243
+                    // setup the param
244
+                    $params[] = $param;
245
+
246
+                }
247
+            }
248
+
249
+
250
+            return $params;
251
+        }
252
+
253
+        /**
254
+         * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
255
+         */
256
+        public static function maybe_cornerstone_builder() {
257
+            if ( did_action( 'cornerstone_before_boot_app' ) ) {
258
+                self::shortcode_insert_button_script();
259
+            }
260
+        }
261
+
262
+        /**
263
+         * A function to ge the shortcode builder picker html.
264
+         *
265
+         * @param string $editor_id
266
+         *
267
+         * @return string
268
+         */
269
+        public static function get_picker( $editor_id = '' ) {
270
+
271
+            ob_start();
272
+            if ( isset( $_POST['editor_id'] ) ) {
273
+                $editor_id = esc_attr( $_POST['editor_id'] );
274
+            } elseif ( isset( $_REQUEST['et_fb'] ) ) {
275
+                $editor_id = 'main_content_content_vb_tiny_mce';
276
+            }
277
+
278
+            global $sd_widgets;
279 279
 
280 280
 //			print_r($sd_widgets);exit;
281
-			?>
281
+            ?>
282 282
 
283 283
 			<div class="sd-shortcode-left-wrap">
284 284
 				<?php
285
-				ksort( $sd_widgets );
286
-				//				print_r($sd_widgets);exit;
287
-				if ( ! empty( $sd_widgets ) ) {
288
-					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
289
-					echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
290
-					foreach ( $sd_widgets as $shortcode => $class ) {
291
-						if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
292
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
293
-					}
294
-					echo "</select>";
295
-
296
-				}
297
-				?>
285
+                ksort( $sd_widgets );
286
+                //				print_r($sd_widgets);exit;
287
+                if ( ! empty( $sd_widgets ) ) {
288
+                    echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
289
+                    echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
290
+                    foreach ( $sd_widgets as $shortcode => $class ) {
291
+                        if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
292
+                        echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
293
+                    }
294
+                    echo "</select>";
295
+
296
+                }
297
+                ?>
298 298
 				<div class="sd-shortcode-settings"></div>
299 299
 
300 300
 			</div>
@@ -305,8 +305,8 @@  discard block
 block discarded – undo
305 305
 					<?php if ( $editor_id != '' ) { ?>
306 306
 						<button class="button sd-insert-shortcode-button"
307 307
 								onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
308
-									echo "'" . $editor_id . "'";
309
-								} ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
308
+                                    echo "'" . $editor_id . "'";
309
+                                } ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
310 310
 					<?php } ?>
311 311
 					<button class="button"
312 312
 							onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
@@ -314,150 +314,150 @@  discard block
 block discarded – undo
314 314
 			</div>
315 315
 			<?php
316 316
 
317
-			$html = ob_get_clean();
318
-
319
-			if ( wp_doing_ajax() ) {
320
-				echo $html;
321
-				$should_die = true;
322
-
323
-				// some builder get the editor via ajax so we should not die on those occasions
324
-				$dont_die = array(
325
-					'parent_tag',// WP Bakery
326
-					'avia_request' // enfold
327
-				);
328
-
329
-				foreach ( $dont_die as $request ) {
330
-					if ( isset( $_REQUEST[ $request ] ) ) {
331
-						$should_die = false;
332
-					}
333
-				}
334
-
335
-				if ( $should_die ) {
336
-					wp_die();
337
-				}
338
-
339
-			} else {
340
-				return $html;
341
-			}
342
-
343
-			return '';
344
-
345
-		}
346
-
347
-		/**
348
-		 * Output the version in the header.
349
-		 */
350
-		public function generator() {
351
-			$file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
352
-			$plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
353
-
354
-			// Find source plugin/theme of SD
355
-			$source = array();
356
-			if ( strpos( $file, $plugins_dir ) !== false ) {
357
-				$source = explode( "/", plugin_basename( $file ) );
358
-			} else if ( function_exists( 'get_theme_root' ) ) {
359
-				$themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
360
-
361
-				if ( strpos( $file, $themes_dir ) !== false ) {
362
-					$source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
363
-				}
364
-			}
365
-
366
-			echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
367
-		}
368
-
369
-		/**
370
-		 * Get widget settings.
371
-		 *
372
-		 * @since 1.0.0
373
-		 */
374
-		public static function get_widget_settings() {
375
-			global $sd_widgets;
376
-
377
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
378
-			if ( ! $shortcode ) {
379
-				wp_die();
380
-			}
381
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
382
-			if ( ! $widget_args ) {
383
-				wp_die();
384
-			}
385
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
386
-			if ( ! $class_name ) {
387
-				wp_die();
388
-			}
389
-
390
-			// invoke an instance method
391
-			$widget = new $class_name;
392
-
393
-			ob_start();
394
-			$widget->form( array() );
395
-			$form = ob_get_clean();
396
-			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
397
-			echo "<style>" . $widget->widget_css() . "</style>";
398
-			echo "<script>" . $widget->widget_js() . "</script>";
399
-			?>
317
+            $html = ob_get_clean();
318
+
319
+            if ( wp_doing_ajax() ) {
320
+                echo $html;
321
+                $should_die = true;
322
+
323
+                // some builder get the editor via ajax so we should not die on those occasions
324
+                $dont_die = array(
325
+                    'parent_tag',// WP Bakery
326
+                    'avia_request' // enfold
327
+                );
328
+
329
+                foreach ( $dont_die as $request ) {
330
+                    if ( isset( $_REQUEST[ $request ] ) ) {
331
+                        $should_die = false;
332
+                    }
333
+                }
334
+
335
+                if ( $should_die ) {
336
+                    wp_die();
337
+                }
338
+
339
+            } else {
340
+                return $html;
341
+            }
342
+
343
+            return '';
344
+
345
+        }
346
+
347
+        /**
348
+         * Output the version in the header.
349
+         */
350
+        public function generator() {
351
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
352
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
353
+
354
+            // Find source plugin/theme of SD
355
+            $source = array();
356
+            if ( strpos( $file, $plugins_dir ) !== false ) {
357
+                $source = explode( "/", plugin_basename( $file ) );
358
+            } else if ( function_exists( 'get_theme_root' ) ) {
359
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
360
+
361
+                if ( strpos( $file, $themes_dir ) !== false ) {
362
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
363
+                }
364
+            }
365
+
366
+            echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
367
+        }
368
+
369
+        /**
370
+         * Get widget settings.
371
+         *
372
+         * @since 1.0.0
373
+         */
374
+        public static function get_widget_settings() {
375
+            global $sd_widgets;
376
+
377
+            $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
378
+            if ( ! $shortcode ) {
379
+                wp_die();
380
+            }
381
+            $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
382
+            if ( ! $widget_args ) {
383
+                wp_die();
384
+            }
385
+            $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
386
+            if ( ! $class_name ) {
387
+                wp_die();
388
+            }
389
+
390
+            // invoke an instance method
391
+            $widget = new $class_name;
392
+
393
+            ob_start();
394
+            $widget->form( array() );
395
+            $form = ob_get_clean();
396
+            echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
397
+            echo "<style>" . $widget->widget_css() . "</style>";
398
+            echo "<script>" . $widget->widget_js() . "</script>";
399
+            ?>
400 400
 			<?php
401
-			wp_die();
402
-		}
403
-
404
-		/**
405
-		 * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
406
-		 *
407
-		 * @param string $editor_id Optional. Shortcode editor id. Default null.
408
-		 * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
409
-		 *
410
-		 *@since 1.0.0
411
-		 *
412
-		 */
413
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
414
-			global $sd_widgets, $shortcode_insert_button_once;
415
-			if ( $shortcode_insert_button_once ) {
416
-				return;
417
-			}
418
-			add_thickbox();
419
-
420
-
421
-			/**
422
-			 * Cornerstone makes us play dirty tricks :/
423
-			 * 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.
424
-			 */
425
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
426
-				echo '<span id="insert-media-button">';
427
-			}
428
-
429
-			echo self::shortcode_button( 'this', 'true' );
430
-
431
-			// see opening note
432
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
433
-				echo '</span>'; // end #insert-media-button
434
-			}
435
-
436
-			// Add separate script for generatepress theme sections
437
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
438
-			} else {
439
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
440
-			}
441
-
442
-			$shortcode_insert_button_once = true;
443
-		}
444
-
445
-		/**
446
-		 * Gets the shortcode insert button html.
447
-		 *
448
-		 * @param string $id
449
-		 * @param string $search_for_id
450
-		 *
451
-		 * @return mixed
452
-		 */
453
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
454
-			ob_start();
455
-			?>
401
+            wp_die();
402
+        }
403
+
404
+        /**
405
+         * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
406
+         *
407
+         * @param string $editor_id Optional. Shortcode editor id. Default null.
408
+         * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
409
+         *
410
+         *@since 1.0.0
411
+         *
412
+         */
413
+        public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
414
+            global $sd_widgets, $shortcode_insert_button_once;
415
+            if ( $shortcode_insert_button_once ) {
416
+                return;
417
+            }
418
+            add_thickbox();
419
+
420
+
421
+            /**
422
+             * Cornerstone makes us play dirty tricks :/
423
+             * 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.
424
+             */
425
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
426
+                echo '<span id="insert-media-button">';
427
+            }
428
+
429
+            echo self::shortcode_button( 'this', 'true' );
430
+
431
+            // see opening note
432
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
433
+                echo '</span>'; // end #insert-media-button
434
+            }
435
+
436
+            // Add separate script for generatepress theme sections
437
+            if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
438
+            } else {
439
+                self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
440
+            }
441
+
442
+            $shortcode_insert_button_once = true;
443
+        }
444
+
445
+        /**
446
+         * Gets the shortcode insert button html.
447
+         *
448
+         * @param string $id
449
+         * @param string $search_for_id
450
+         *
451
+         * @return mixed
452
+         */
453
+        public static function shortcode_button( $id = '', $search_for_id = '' ) {
454
+            ob_start();
455
+            ?>
456 456
 			<span class="sd-lable-shortcode-inserter">
457 457
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
458
-				if ( $search_for_id ) {
459
-					echo "," . $search_for_id;
460
-				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
458
+                if ( $search_for_id ) {
459
+                    echo "," . $search_for_id;
460
+                } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
461 461
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
462 462
 					<span style="vertical-align: middle;line-height: 18px;font-size: 20px;"
463 463
 						  class="dashicons dashicons-screenoptions"></span>
@@ -468,21 +468,21 @@  discard block
 block discarded – undo
468 468
 			</span>
469 469
 
470 470
 			<?php
471
-			$html = ob_get_clean();
472
-
473
-			// remove line breaks so we can use it in js
474
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
475
-		}
476
-
477
-		/**
478
-		 * Makes SD work with the siteOrigin page builder.
479
-		 *
480
-		 * @return mixed
481
-		 *@since 1.0.6
482
-		 */
483
-		public static function siteorigin_js() {
484
-			ob_start();
485
-			?>
471
+            $html = ob_get_clean();
472
+
473
+            // remove line breaks so we can use it in js
474
+            return preg_replace( "/\r|\n/", "", trim( $html ) );
475
+        }
476
+
477
+        /**
478
+         * Makes SD work with the siteOrigin page builder.
479
+         *
480
+         * @return mixed
481
+         *@since 1.0.6
482
+         */
483
+        public static function siteorigin_js() {
484
+            ob_start();
485
+            ?>
486 486
 			<script>
487 487
 				/**
488 488
 				 * Check a form to see what items should be shown or hidden.
@@ -558,29 +558,29 @@  discard block
 block discarded – undo
558 558
 				});
559 559
 			</script>
560 560
 			<?php
561
-			$output = ob_get_clean();
561
+            $output = ob_get_clean();
562 562
 
563
-			/*
563
+            /*
564 564
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
565 565
 			 */
566 566
 
567
-			return str_replace( array(
568
-				'<script>',
569
-				'</script>'
570
-			), '', $output );
571
-		}
572
-
573
-		/**
574
-		 * Output the JS and CSS for the shortcode insert button.
575
-		 *
576
-		 * @param string $editor_id
577
-		 * @param string $insert_shortcode_function
578
-		 *
579
-		 *@since 1.0.6
580
-		 *
581
-		 */
582
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
583
-			?>
567
+            return str_replace( array(
568
+                '<script>',
569
+                '</script>'
570
+            ), '', $output );
571
+        }
572
+
573
+        /**
574
+         * Output the JS and CSS for the shortcode insert button.
575
+         *
576
+         * @param string $editor_id
577
+         * @param string $insert_shortcode_function
578
+         *
579
+         *@since 1.0.6
580
+         *
581
+         */
582
+        public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
583
+            ?>
584 584
 			<style>
585 585
 				.sd-shortcode-left-wrap {
586 586
 					float: left;
@@ -708,35 +708,35 @@  discard block
 block discarded – undo
708 708
 				<?php } ?>
709 709
 			</style>
710 710
 			<?php
711
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
712
-				echo "<script>" . self::siteorigin_js() . "</script>";
713
-			}
714
-			?>
711
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
712
+                echo "<script>" . self::siteorigin_js() . "</script>";
713
+            }
714
+            ?>
715 715
 			<script>
716 716
 				<?php
717
-				if(! empty( $insert_shortcode_function )){
718
-					echo $insert_shortcode_function;
719
-				}else{
720
-
721
-				/**
722
-				 * Function for super duper insert shortcode.
723
-				 *
724
-				 * @since 1.0.0
725
-				 */
726
-				?>
717
+                if(! empty( $insert_shortcode_function )){
718
+                    echo $insert_shortcode_function;
719
+                }else{
720
+
721
+                /**
722
+                 * Function for super duper insert shortcode.
723
+                 *
724
+                 * @since 1.0.0
725
+                 */
726
+                ?>
727 727
 				function sd_insert_shortcode($editor_id) {
728 728
 					$shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val();
729 729
 					if ($shortcode) {
730 730
 						if (!$editor_id) {
731 731
 							<?php
732
-							if ( isset( $_REQUEST['et_fb'] ) ) {
733
-								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
734
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
735
-								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
736
-							} else {
737
-								echo '$editor_id = "#wp-content-editor-container textarea";';
738
-							}
739
-							?>
732
+                            if ( isset( $_REQUEST['et_fb'] ) ) {
733
+                                echo '$editor_id = "#main_content_content_vb_tiny_mce";';
734
+                            } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
735
+                                echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
736
+                            } else {
737
+                                echo '$editor_id = "#wp-content-editor-container textarea";';
738
+                            }
739
+                            ?>
740 740
 						} else {
741 741
 							$editor_id = '#' + $editor_id;
742 742
 						}
@@ -1050,18 +1050,18 @@  discard block
 block discarded – undo
1050 1050
 				}
1051 1051
 			</script>
1052 1052
 			<?php
1053
-		}
1054
-
1055
-		/**
1056
-		 * Gets some CSS for the widgets screen.
1057
-		 *
1058
-		 * @param bool $advanced If we should include advanced CSS.
1059
-		 *
1060
-		 * @return mixed
1061
-		 */
1062
-		public function widget_css( $advanced = true ) {
1063
-			ob_start();
1064
-			?>
1053
+        }
1054
+
1055
+        /**
1056
+         * Gets some CSS for the widgets screen.
1057
+         *
1058
+         * @param bool $advanced If we should include advanced CSS.
1059
+         *
1060
+         * @return mixed
1061
+         */
1062
+        public function widget_css( $advanced = true ) {
1063
+            ob_start();
1064
+            ?>
1065 1065
 			<style>
1066 1066
 				<?php if( $advanced ){ ?>
1067 1067
 				.sd-advanced-setting {
@@ -1101,26 +1101,26 @@  discard block
 block discarded – undo
1101 1101
 				.elementor-control .sd-argument select[multiple] option{padding:3px}
1102 1102
 			</style>
1103 1103
 			<?php
1104
-			$output = ob_get_clean();
1104
+            $output = ob_get_clean();
1105 1105
 
1106
-			/*
1106
+            /*
1107 1107
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1108 1108
 			 */
1109 1109
 
1110
-			return str_replace( array(
1111
-				'<style>',
1112
-				'</style>'
1113
-			), '', $output );
1114
-		}
1115
-
1116
-		/**
1117
-		 * Gets some JS for the widgets screen.
1118
-		 *
1119
-		 * @return mixed
1120
-		 */
1121
-		public function widget_js() {
1122
-			ob_start();
1123
-			?>
1110
+            return str_replace( array(
1111
+                '<style>',
1112
+                '</style>'
1113
+            ), '', $output );
1114
+        }
1115
+
1116
+        /**
1117
+         * Gets some JS for the widgets screen.
1118
+         *
1119
+         * @return mixed
1120
+         */
1121
+        public function widget_js() {
1122
+            ob_start();
1123
+            ?>
1124 1124
 			<script>
1125 1125
 
1126 1126
 				/**
@@ -1271,595 +1271,595 @@  discard block
 block discarded – undo
1271 1271
 				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1272 1272
 			</script>
1273 1273
 			<?php
1274
-			$output = ob_get_clean();
1274
+            $output = ob_get_clean();
1275 1275
 
1276
-			/*
1276
+            /*
1277 1277
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1278 1278
 			 */
1279 1279
 
1280
-			return str_replace( array(
1281
-				'<script>',
1282
-				'</script>'
1283
-			), '', $output );
1284
-		}
1285
-
1286
-
1287
-		/**
1288
-		 * Set the name from the argument key.
1289
-		 *
1290
-		 * @param $options
1291
-		 *
1292
-		 * @return mixed
1293
-		 */
1294
-		private function add_name_from_key( $options, $arguments = false ) {
1295
-			if ( ! empty( $options['arguments'] ) ) {
1296
-				foreach ( $options['arguments'] as $key => $val ) {
1297
-					$options['arguments'][ $key ]['name'] = $key;
1298
-				}
1299
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1300
-				foreach ( $options as $key => $val ) {
1301
-					$options[ $key ]['name'] = $key;
1302
-				}
1303
-			}
1280
+            return str_replace( array(
1281
+                '<script>',
1282
+                '</script>'
1283
+            ), '', $output );
1284
+        }
1285
+
1286
+
1287
+        /**
1288
+         * Set the name from the argument key.
1289
+         *
1290
+         * @param $options
1291
+         *
1292
+         * @return mixed
1293
+         */
1294
+        private function add_name_from_key( $options, $arguments = false ) {
1295
+            if ( ! empty( $options['arguments'] ) ) {
1296
+                foreach ( $options['arguments'] as $key => $val ) {
1297
+                    $options['arguments'][ $key ]['name'] = $key;
1298
+                }
1299
+            } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1300
+                foreach ( $options as $key => $val ) {
1301
+                    $options[ $key ]['name'] = $key;
1302
+                }
1303
+            }
1304
+
1305
+            return $options;
1306
+        }
1307
+
1308
+        /**
1309
+         * Register the parent shortcode.
1310
+         *
1311
+         * @since 1.0.0
1312
+         */
1313
+        public function register_shortcode() {
1314
+            add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1315
+            add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1316
+        }
1317
+
1318
+        /**
1319
+         * Render the shortcode via ajax so we can return it to Gutenberg.
1320
+         *
1321
+         * @since 1.0.0
1322
+         */
1323
+        public function render_shortcode() {
1324
+            check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1325
+            if ( ! current_user_can( 'manage_options' ) ) {
1326
+                wp_die();
1327
+            }
1328
+
1329
+            // we might need the $post value here so lets set it.
1330
+            if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1331
+                $post_obj = get_post( absint( $_POST['post_id'] ) );
1332
+                if ( ! empty( $post_obj ) && empty( $post ) ) {
1333
+                    global $post;
1334
+                    $post = $post_obj;
1335
+                }
1336
+            }
1337
+
1338
+            if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1339
+                $is_preview = $this->is_preview();
1340
+                $shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1341
+                $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1342
+                $attributes       = '';
1343
+                if ( ! empty( $attributes_array ) ) {
1344
+                    foreach ( $attributes_array as $key => $value ) {
1345
+                        if ( is_array( $value ) ) {
1346
+                            $value = implode( ",", $value );
1347
+                        }
1348
+
1349
+                        if ( ! empty( $value ) ) {
1350
+                            $value = wp_unslash( $value );
1351
+
1352
+                            // Encode [ and ].
1353
+                            if ( $is_preview ) {
1354
+                                $value = $this->encode_shortcodes( $value );
1355
+                            }
1356
+                        }
1357
+                        $attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1358
+                    }
1359
+                }
1360
+
1361
+                $shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1362
+
1363
+                $content = do_shortcode( $shortcode );
1364
+
1365
+                // Decode [ and ].
1366
+                if ( ! empty( $content ) && $is_preview ) {
1367
+                    $content = $this->decode_shortcodes( $content );
1368
+                }
1369
+
1370
+                echo $content;
1371
+            }
1372
+            wp_die();
1373
+        }
1374
+
1375
+        /**
1376
+         * Output the shortcode.
1377
+         *
1378
+         * @param array $args
1379
+         * @param string $content
1380
+         *
1381
+         * @return string
1382
+         */
1383
+        public function shortcode_output( $args = array(), $content = '' ) {
1384
+            $_instance = $args;
1385
+
1386
+            $args = $this->argument_values( $args );
1387
+
1388
+            // add extra argument so we know its a output to gutenberg
1389
+            //$args
1390
+            $args = $this->string_to_bool( $args );
1391
+
1392
+            // if we have a enclosed shortcode we add it to the special `html` argument
1393
+            if ( ! empty( $content ) ) {
1394
+                $args['html'] = $content;
1395
+            }
1396
+
1397
+            if ( ! $this->is_preview() ) {
1398
+                /**
1399
+                 * Filters the settings for a particular widget args.
1400
+                 *
1401
+                 * @param array          $args      The current widget instance's settings.
1402
+                 * @param WP_Super_Duper $widget    The current widget settings.
1403
+                 * @param array          $_instance An array of default widget arguments.
1404
+                 *
1405
+                 *@since 1.0.28
1406
+                 *
1407
+                 */
1408
+                $args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1409
+
1410
+                if ( ! is_array( $args ) ) {
1411
+                    return $args;
1412
+                }
1413
+            }
1414
+
1415
+            $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1416
+            $class .= " sdel-".$this->get_instance_hash();
1417
+
1418
+            $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1419
+            $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1420
+
1421
+            $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1422
+            $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1423
+
1424
+            $shortcode_args = array();
1425
+            $output         = '';
1426
+            $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1427
+            if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1428
+                $no_wrap = true;
1429
+            }
1430
+            $main_content = $this->output( $args, $shortcode_args, $content );
1431
+            if ( $main_content && ! $no_wrap ) {
1432
+                // wrap the shortcode in a div with the same class as the widget
1433
+                $output .= '<div class="' . $class . '" ' . $attrs . '>';
1434
+                if ( ! empty( $args['title'] ) ) {
1435
+                    // if its a shortcode and there is a title try to grab the title wrappers
1436
+                    $shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1437
+                    if ( empty( $instance ) ) {
1438
+                        global $wp_registered_sidebars;
1439
+                        if ( ! empty( $wp_registered_sidebars ) ) {
1440
+                            foreach ( $wp_registered_sidebars as $sidebar ) {
1441
+                                if ( ! empty( $sidebar['before_title'] ) ) {
1442
+                                    $shortcode_args['before_title'] = $sidebar['before_title'];
1443
+                                    $shortcode_args['after_title']  = $sidebar['after_title'];
1444
+                                    break;
1445
+                                }
1446
+                            }
1447
+                        }
1448
+                    }
1449
+                    $output .= $this->output_title( $shortcode_args, $args );
1450
+                }
1451
+                $output .= $main_content;
1452
+                $output .= '</div>';
1453
+            } elseif ( $main_content && $no_wrap ) {
1454
+                $output .= $main_content;
1455
+            }
1456
+
1457
+            // if preview show a placeholder if empty
1458
+            if ( $this->is_preview() && $output == '' ) {
1459
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1460
+            }
1461
+
1462
+            return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1463
+        }
1464
+
1465
+        /**
1466
+         * Placeholder text to show if output is empty and we are on a preview/builder page.
1467
+         *
1468
+         * @param string $name
1469
+         *
1470
+         * @return string
1471
+         */
1472
+        public function preview_placeholder_text( $name = '' ) {
1473
+            return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1474
+        }
1475
+
1476
+        /**
1477
+         * Sometimes booleans values can be turned to strings, so we fix that.
1478
+         *
1479
+         * @param $options
1480
+         *
1481
+         * @return mixed
1482
+         */
1483
+        public function string_to_bool( $options ) {
1484
+            // convert bool strings to booleans
1485
+            foreach ( $options as $key => $val ) {
1486
+                if ( $val == 'false' ) {
1487
+                    $options[ $key ] = false;
1488
+                } elseif ( $val == 'true' ) {
1489
+                    $options[ $key ] = true;
1490
+                }
1491
+            }
1492
+
1493
+            return $options;
1494
+        }
1495
+
1496
+        /**
1497
+         * Get the argument values that are also filterable.
1498
+         *
1499
+         * @param $instance
1500
+         *
1501
+         * @return array
1502
+         *@since 1.0.12 Don't set checkbox default value if the value is empty.
1503
+         *
1504
+         */
1505
+        public function argument_values( $instance ) {
1506
+            $argument_values = array();
1507
+
1508
+            // set widget instance
1509
+            $this->instance = $instance;
1510
+
1511
+            if ( empty( $this->arguments ) ) {
1512
+                $this->arguments = $this->get_arguments();
1513
+            }
1514
+
1515
+            if ( ! empty( $this->arguments ) ) {
1516
+                foreach ( $this->arguments as $key => $args ) {
1517
+                    // set the input name from the key
1518
+                    $args['name'] = $key;
1519
+                    //
1520
+                    $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1521
+                    if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1522
+                        // don't set default for an empty checkbox
1523
+                    } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1524
+                        $argument_values[ $key ] = $args['default'];
1525
+                    }
1526
+                }
1527
+            }
1528
+
1529
+            return $argument_values;
1530
+        }
1531
+
1532
+        /**
1533
+         * Set arguments in super duper.
1534
+         *
1535
+         * @return array Set arguments.
1536
+         *@since 1.0.0
1537
+         *
1538
+         */
1539
+        public function set_arguments() {
1540
+            return $this->arguments;
1541
+        }
1542
+
1543
+        /**
1544
+         * Get arguments in super duper.
1545
+         *
1546
+         * @return array Get arguments.
1547
+         *@since 1.0.0
1548
+         *
1549
+         */
1550
+        public function get_arguments() {
1551
+            if ( empty( $this->arguments ) ) {
1552
+                $this->arguments = $this->set_arguments();
1553
+            }
1554
+
1555
+            $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1556
+            $this->arguments = $this->add_name_from_key( $this->arguments, true );
1557
+
1558
+            return $this->arguments;
1559
+        }
1560
+
1561
+        /**
1562
+         * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1563
+         *
1564
+         * @param array $args
1565
+         * @param array $widget_args
1566
+         * @param string $content
1567
+         */
1568
+        public function output( $args = array(), $widget_args = array(), $content = '' ) {
1569
+
1570
+        }
1571
+
1572
+        /**
1573
+         * Add the dynamic block code inline when the wp-block in enqueued.
1574
+         */
1575
+        public function register_block() {
1576
+            wp_add_inline_script( 'wp-blocks', $this->block() );
1577
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
1578
+                wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1579
+            }
1580
+        }
1581
+
1582
+        /**
1583
+         * Check if we need to show advanced options.
1584
+         *
1585
+         * @return bool
1586
+         */
1587
+        public function block_show_advanced() {
1588
+
1589
+            $show      = false;
1590
+            $arguments = $this->get_arguments();
1591
+
1592
+            if ( ! empty( $arguments ) ) {
1593
+                foreach ( $arguments as $argument ) {
1594
+                    if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1595
+                        $show = true;
1596
+                        break; // no need to continue if we know we have it
1597
+                    }
1598
+                }
1599
+            }
1600
+
1601
+            return $show;
1602
+        }
1603
+
1604
+        /**
1605
+         * Get the url path to the current folder.
1606
+         *
1607
+         * @return string
1608
+         */
1609
+        public function get_url() {
1610
+            $url = $this->url;
1611
+
1612
+            if ( ! $url ) {
1613
+                $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1614
+                $content_url = untrailingslashit( WP_CONTENT_URL );
1615
+
1616
+                // Replace http:// to https://.
1617
+                if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1618
+                    $content_url = str_replace( 'http://', 'https://', $content_url );
1619
+                }
1620
+
1621
+                // Check if we are inside a plugin
1622
+                $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1623
+                $url = str_replace( $content_dir, $content_url, $file_dir );
1624
+                $url = trailingslashit( $url );
1625
+                $this->url = $url;
1626
+            }
1627
+
1628
+            return $url;
1629
+        }
1630
+
1631
+        /**
1632
+         * Get the url path to the current folder.
1633
+         *
1634
+         * @return string
1635
+         */
1636
+        public function get_url_old() {
1637
+
1638
+            $url = $this->url;
1639
+
1640
+            if ( ! $url ) {
1641
+                // check if we are inside a plugin
1642
+                $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1643
+
1644
+                $dir_parts = explode( "/wp-content/", $file_dir );
1645
+                $url_parts = explode( "/wp-content/", plugins_url() );
1646
+
1647
+                if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1648
+                    $url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1649
+                    $this->url = $url;
1650
+                }
1651
+            }
1652
+
1653
+
1654
+            return $url;
1655
+        }
1656
+
1657
+        /**
1658
+         * Generate the block icon.
1659
+         *
1660
+         * Enables the use of Font Awesome icons.
1661
+         *
1662
+         * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1663
+         *
1664
+         * @param $icon
1665
+         *
1666
+         * @return string
1667
+         *@since 1.1.0
1668
+         */
1669
+        public function get_block_icon( $icon ) {
1670
+
1671
+            // check if we have a Font Awesome icon
1672
+            $fa_type = '';
1673
+            if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1674
+                $fa_type = 'solid';
1675
+            } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1676
+                $fa_type = 'regular';
1677
+            } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1678
+                $fa_type = 'brands';
1679
+            } else {
1680
+                $icon = "'" . $icon . "'";
1681
+            }
1682
+
1683
+            // set the icon if we found one
1684
+            if ( $fa_type ) {
1685
+                $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1686
+                $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 . "'}))";
1687
+            }
1688
+
1689
+            return $icon;
1690
+        }
1691
+
1692
+        public function group_arguments( $arguments ) {
1693
+            if ( ! empty( $arguments ) ) {
1694
+                $temp_arguments = array();
1695
+                $general        = __( "General", 'ayecode-connect' );
1696
+                $add_sections   = false;
1697
+                foreach ( $arguments as $key => $args ) {
1698
+                    if ( isset( $args['group'] ) ) {
1699
+                        $temp_arguments[ $args['group'] ][ $key ] = $args;
1700
+                        $add_sections                             = true;
1701
+                    } else {
1702
+                        $temp_arguments[ $general ][ $key ] = $args;
1703
+                    }
1704
+                }
1705
+
1706
+                // only add sections if more than one
1707
+                if ( $add_sections ) {
1708
+                    $arguments = $temp_arguments;
1709
+                }
1710
+            }
1711
+
1712
+            return $arguments;
1713
+        }
1714
+
1715
+        /**
1716
+         * Parse used group tabs.
1717
+         *
1718
+         * @since 1.1.17
1719
+         */
1720
+        public function group_block_tabs( $tabs, $arguments ) {
1721
+            if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1722
+                $has_sections = false;
1723
+
1724
+                foreach ( $this->arguments as $key => $args ) {
1725
+                    if ( isset( $args['group'] ) ) {
1726
+                        $has_sections = true;
1727
+                        break;
1728
+                    }
1729
+                }
1730
+
1731
+                if ( ! $has_sections ) {
1732
+                    return $tabs;
1733
+                }
1734
+
1735
+                $new_tabs = array();
1736
+
1737
+                foreach ( $tabs as $tab_key => $tab ) {
1738
+                    $new_groups = array();
1739
+
1740
+                    if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1741
+                        foreach ( $tab['groups'] as $group ) {
1742
+                            if ( isset( $arguments[ $group ] ) ) {
1743
+                                $new_groups[] = $group;
1744
+                            }
1745
+                        }
1746
+                    }
1747
+
1748
+                    if ( ! empty( $new_groups ) ) {
1749
+                        $tab['groups'] = $new_groups;
1750
+
1751
+                        $new_tabs[ $tab_key ] = $tab;
1752
+                    }
1753
+                }
1754
+
1755
+                $tabs = $new_tabs;
1756
+            }
1757
+
1758
+            return $tabs;
1759
+        }
1760
+
1761
+        /**
1762
+         * Output the JS for building the dynamic Guntenberg block.
1763
+         *
1764
+         * @return mixed
1765
+         *@since 1.0.9 Save numbers as numbers and not strings.
1766
+         * @since 1.1.0 Font Awesome classes can be used for icons.
1767
+         * @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.
1768
+         */
1769
+        public function block() {
1770
+            global $sd_is_js_functions_loaded, $aui_bs5;
1771
+
1772
+            $show_advanced = $this->block_show_advanced();
1773
+
1774
+            ob_start();
1775
+            ?>
1776
+			<script>
1777
+			<?php
1778
+            if ( ! $sd_is_js_functions_loaded ) {
1779
+                $sd_is_js_functions_loaded = true;
1780
+            ?>
1781
+function sd_show_view_options($this){
1782
+	if(jQuery($this).html().length){
1783
+		jQuery($this).html('');
1784
+	}else{
1785
+		jQuery($this).html('<div class="position-absolute d-flex flex-column bg-white p-1 rounded border shadow-lg " style="top:-80px;left:-5px;"><div class="dashicons dashicons-desktop mb-1" onclick="sd_set_view_type(\'Desktop\');"></div><div class="dashicons dashicons-tablet mb-1" onclick="sd_set_view_type(\'Tablet\');"></div><div class="dashicons dashicons-smartphone" onclick="sd_set_view_type(\'Mobile\');"></div></div>');
1786
+	}
1787
+}
1304 1788
 
1305
-			return $options;
1306
-		}
1789
+function sd_set_view_type($device){
1790
+	wp.data.dispatch('core/edit-site') ? wp.data.dispatch('core/edit-site').__experimentalSetPreviewDeviceType($device) : wp.data.dispatch('core/edit-post').__experimentalSetPreviewDeviceType($device);
1791
+}
1307 1792
 
1308
-		/**
1309
-		 * Register the parent shortcode.
1310
-		 *
1311
-		 * @since 1.0.0
1312
-		 */
1313
-		public function register_shortcode() {
1314
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1315
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1793
+jQuery(function(){
1794
+	sd_block_visibility_init();
1795
+});
1796
+function sd_block_visibility_init() {
1797
+	jQuery(document).off('change', '.bs-vc-modal-form').on('change', '.bs-vc-modal-form', function() {
1798
+		try {
1799
+			aui_conditional_fields('.bs-vc-modal-form');
1800
+		} catch(err) {
1801
+			console.log(err.message);
1316 1802
 		}
1803
+	});
1317 1804
 
1318
-		/**
1319
-		 * Render the shortcode via ajax so we can return it to Gutenberg.
1320
-		 *
1321
-		 * @since 1.0.0
1322
-		 */
1323
-		public function render_shortcode() {
1324
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1325
-			if ( ! current_user_can( 'manage_options' ) ) {
1326
-				wp_die();
1327
-			}
1328
-
1329
-			// we might need the $post value here so lets set it.
1330
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1331
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1332
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1333
-					global $post;
1334
-					$post = $post_obj;
1335
-				}
1336
-			}
1337
-
1338
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1339
-				$is_preview = $this->is_preview();
1340
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1341
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1342
-				$attributes       = '';
1343
-				if ( ! empty( $attributes_array ) ) {
1344
-					foreach ( $attributes_array as $key => $value ) {
1345
-						if ( is_array( $value ) ) {
1346
-							$value = implode( ",", $value );
1347
-						}
1348
-
1349
-						if ( ! empty( $value ) ) {
1350
-							$value = wp_unslash( $value );
1351
-
1352
-							// Encode [ and ].
1353
-							if ( $is_preview ) {
1354
-								$value = $this->encode_shortcodes( $value );
1355
-							}
1356
-						}
1357
-						$attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1805
+	jQuery(document).off('click', '.bs-vc-save').on('click', '.bs-vc-save', function() {
1806
+		var $bsvcModal = jQuery(this).closest('.bs-vc-modal'), $bsvcForm = $bsvcModal.find('.bs-vc-modal-form'), vOutput = jQuery('#bsvc_output', $bsvcForm).val(), rawValue = '', oVal = {}, oOut = {}, iRule = 0;
1807
+		jQuery(this).addClass('disabled');
1808
+		jQuery('.bs-vc-modal-form .bs-vc-rule-sets .bs-vc-rule').each(function(){
1809
+			vRule = jQuery(this).find('.bsvc_rule').val(), oRule = {};
1810
+			if (vRule == 'logged_in' || vRule == 'logged_out' || vRule == 'post_author') {
1811
+				oRule.type = vRule;
1812
+			} else if (vRule == 'user_roles') {
1813
+				oRule.type = vRule;
1814
+				if (jQuery(this).find('.bsvc_user_roles:checked').length) {
1815
+					var user_roles = jQuery(this).find('.bsvc_user_roles:checked').map(function() {
1816
+						return jQuery(this).val();
1817
+					}).get();
1818
+					if (user_roles && user_roles.length) {
1819
+						oRule.user_roles = user_roles.join(",");
1358 1820
 					}
1359 1821
 				}
1360
-
1361
-				$shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1362
-
1363
-				$content = do_shortcode( $shortcode );
1364
-
1365
-				// Decode [ and ].
1366
-				if ( ! empty( $content ) && $is_preview ) {
1367
-					$content = $this->decode_shortcodes( $content );
1822
+			} else if (vRule == 'gd_field') {
1823
+				if (jQuery(this).find('.bsvc_gd_field ').val() && jQuery(this).find('.bsvc_gd_field_condition').val()) {
1824
+					oRule.type = vRule;
1825
+					oRule.field = jQuery(this).find('.bsvc_gd_field ').val();
1826
+					oRule.condition = jQuery(this).find('.bsvc_gd_field_condition').val();
1827
+					if (oRule.condition != 'is_empty' && oRule.condition != 'is_not_empty') {
1828
+						oRule.search = jQuery(this).find('.bsvc_gd_field_search').val();
1829
+					}
1368 1830
 				}
1369
-
1370
-				echo $content;
1371 1831
 			}
1372
-			wp_die();
1373
-		}
1374
-
1375
-		/**
1376
-		 * Output the shortcode.
1377
-		 *
1378
-		 * @param array $args
1379
-		 * @param string $content
1380
-		 *
1381
-		 * @return string
1382
-		 */
1383
-		public function shortcode_output( $args = array(), $content = '' ) {
1384
-			$_instance = $args;
1385
-
1386
-			$args = $this->argument_values( $args );
1387
-
1388
-			// add extra argument so we know its a output to gutenberg
1389
-			//$args
1390
-			$args = $this->string_to_bool( $args );
1391
-
1392
-			// if we have a enclosed shortcode we add it to the special `html` argument
1393
-			if ( ! empty( $content ) ) {
1394
-				$args['html'] = $content;
1832
+			if (Object.keys(oRule).length > 0) {
1833
+				iRule++;
1834
+				oVal['rule'+iRule] = oRule;
1395 1835
 			}
1396
-
1397
-			if ( ! $this->is_preview() ) {
1398
-				/**
1399
-				 * Filters the settings for a particular widget args.
1400
-				 *
1401
-				 * @param array          $args      The current widget instance's settings.
1402
-				 * @param WP_Super_Duper $widget    The current widget settings.
1403
-				 * @param array          $_instance An array of default widget arguments.
1404
-				 *
1405
-				 *@since 1.0.28
1406
-				 *
1407
-				 */
1408
-				$args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1409
-
1410
-				if ( ! is_array( $args ) ) {
1411
-					return $args;
1836
+		});
1837
+		if (vOutput == 'hide') {
1838
+			oOut.type = vOutput;
1839
+		} else if (vOutput == 'message') {
1840
+			if (jQuery('#bsvc_message', $bsvcForm).val()) {
1841
+				oOut.type = vOutput;
1842
+				oOut.message = jQuery('#bsvc_message', $bsvcForm).val();
1843
+				if (jQuery('#bsvc_message_type', $bsvcForm).val()) {
1844
+					oOut.message_type = jQuery('#bsvc_message_type', $bsvcForm).val();
1412 1845
 				}
1413 1846
 			}
1414
-
1415
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1416
-			$class .= " sdel-".$this->get_instance_hash();
1417
-
1418
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1419
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1420
-
1421
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1422
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1423
-
1424
-			$shortcode_args = array();
1425
-			$output         = '';
1426
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1427
-			if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1428
-				$no_wrap = true;
1429
-			}
1430
-			$main_content = $this->output( $args, $shortcode_args, $content );
1431
-			if ( $main_content && ! $no_wrap ) {
1432
-				// wrap the shortcode in a div with the same class as the widget
1433
-				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1434
-				if ( ! empty( $args['title'] ) ) {
1435
-					// if its a shortcode and there is a title try to grab the title wrappers
1436
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1437
-					if ( empty( $instance ) ) {
1438
-						global $wp_registered_sidebars;
1439
-						if ( ! empty( $wp_registered_sidebars ) ) {
1440
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1441
-								if ( ! empty( $sidebar['before_title'] ) ) {
1442
-									$shortcode_args['before_title'] = $sidebar['before_title'];
1443
-									$shortcode_args['after_title']  = $sidebar['after_title'];
1444
-									break;
1445
-								}
1446
-							}
1447
-						}
1448
-					}
1449
-					$output .= $this->output_title( $shortcode_args, $args );
1450
-				}
1451
-				$output .= $main_content;
1452
-				$output .= '</div>';
1453
-			} elseif ( $main_content && $no_wrap ) {
1454
-				$output .= $main_content;
1847
+		} else if (vOutput == 'page') {
1848
+			if (jQuery('#bsvc_page', $bsvcForm).val()) {
1849
+				oOut.type = vOutput;
1850
+				oOut.page = jQuery('#bsvc_page', $bsvcForm).val();
1455 1851
 			}
1456
-
1457
-			// if preview show a placeholder if empty
1458
-			if ( $this->is_preview() && $output == '' ) {
1459
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1852
+		} else if (vOutput == 'template_part') {
1853
+			if (jQuery('#bsvc_tmpl_part', $bsvcForm).val()) {
1854
+				oOut.type = vOutput;
1855
+				oOut.template_part = jQuery('#bsvc_tmpl_part', $bsvcForm).val();
1460 1856
 			}
1461
-
1462
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1463 1857
 		}
1464
-
1465
-		/**
1466
-		 * Placeholder text to show if output is empty and we are on a preview/builder page.
1467
-		 *
1468
-		 * @param string $name
1469
-		 *
1470
-		 * @return string
1471
-		 */
1472
-		public function preview_placeholder_text( $name = '' ) {
1473
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1858
+		if (Object.keys(oOut).length > 0) {
1859
+			oVal.output = oOut;
1474 1860
 		}
1475
-
1476
-		/**
1477
-		 * Sometimes booleans values can be turned to strings, so we fix that.
1478
-		 *
1479
-		 * @param $options
1480
-		 *
1481
-		 * @return mixed
1482
-		 */
1483
-		public function string_to_bool( $options ) {
1484
-			// convert bool strings to booleans
1485
-			foreach ( $options as $key => $val ) {
1486
-				if ( $val == 'false' ) {
1487
-					$options[ $key ] = false;
1488
-				} elseif ( $val == 'true' ) {
1489
-					$options[ $key ] = true;
1490
-				}
1491
-			}
1492
-
1493
-			return $options;
1494
-		}
1495
-
1496
-		/**
1497
-		 * Get the argument values that are also filterable.
1498
-		 *
1499
-		 * @param $instance
1500
-		 *
1501
-		 * @return array
1502
-		 *@since 1.0.12 Don't set checkbox default value if the value is empty.
1503
-		 *
1504
-		 */
1505
-		public function argument_values( $instance ) {
1506
-			$argument_values = array();
1507
-
1508
-			// set widget instance
1509
-			$this->instance = $instance;
1510
-
1511
-			if ( empty( $this->arguments ) ) {
1512
-				$this->arguments = $this->get_arguments();
1513
-			}
1514
-
1515
-			if ( ! empty( $this->arguments ) ) {
1516
-				foreach ( $this->arguments as $key => $args ) {
1517
-					// set the input name from the key
1518
-					$args['name'] = $key;
1519
-					//
1520
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1521
-					if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1522
-						// don't set default for an empty checkbox
1523
-					} elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1524
-						$argument_values[ $key ] = $args['default'];
1525
-					}
1526
-				}
1527
-			}
1528
-
1529
-			return $argument_values;
1530
-		}
1531
-
1532
-		/**
1533
-		 * Set arguments in super duper.
1534
-		 *
1535
-		 * @return array Set arguments.
1536
-		 *@since 1.0.0
1537
-		 *
1538
-		 */
1539
-		public function set_arguments() {
1540
-			return $this->arguments;
1541
-		}
1542
-
1543
-		/**
1544
-		 * Get arguments in super duper.
1545
-		 *
1546
-		 * @return array Get arguments.
1547
-		 *@since 1.0.0
1548
-		 *
1549
-		 */
1550
-		public function get_arguments() {
1551
-			if ( empty( $this->arguments ) ) {
1552
-				$this->arguments = $this->set_arguments();
1553
-			}
1554
-
1555
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1556
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1557
-
1558
-			return $this->arguments;
1559
-		}
1560
-
1561
-		/**
1562
-		 * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1563
-		 *
1564
-		 * @param array $args
1565
-		 * @param array $widget_args
1566
-		 * @param string $content
1567
-		 */
1568
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1569
-
1570
-		}
1571
-
1572
-		/**
1573
-		 * Add the dynamic block code inline when the wp-block in enqueued.
1574
-		 */
1575
-		public function register_block() {
1576
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1577
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1578
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1579
-			}
1580
-		}
1581
-
1582
-		/**
1583
-		 * Check if we need to show advanced options.
1584
-		 *
1585
-		 * @return bool
1586
-		 */
1587
-		public function block_show_advanced() {
1588
-
1589
-			$show      = false;
1590
-			$arguments = $this->get_arguments();
1591
-
1592
-			if ( ! empty( $arguments ) ) {
1593
-				foreach ( $arguments as $argument ) {
1594
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1595
-						$show = true;
1596
-						break; // no need to continue if we know we have it
1597
-					}
1598
-				}
1599
-			}
1600
-
1601
-			return $show;
1602
-		}
1603
-
1604
-		/**
1605
-		 * Get the url path to the current folder.
1606
-		 *
1607
-		 * @return string
1608
-		 */
1609
-		public function get_url() {
1610
-			$url = $this->url;
1611
-
1612
-			if ( ! $url ) {
1613
-				$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1614
-				$content_url = untrailingslashit( WP_CONTENT_URL );
1615
-
1616
-				// Replace http:// to https://.
1617
-				if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1618
-					$content_url = str_replace( 'http://', 'https://', $content_url );
1619
-				}
1620
-
1621
-				// Check if we are inside a plugin
1622
-				$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1623
-				$url = str_replace( $content_dir, $content_url, $file_dir );
1624
-				$url = trailingslashit( $url );
1625
-				$this->url = $url;
1626
-			}
1627
-
1628
-			return $url;
1629
-		}
1630
-
1631
-		/**
1632
-		 * Get the url path to the current folder.
1633
-		 *
1634
-		 * @return string
1635
-		 */
1636
-		public function get_url_old() {
1637
-
1638
-			$url = $this->url;
1639
-
1640
-			if ( ! $url ) {
1641
-				// check if we are inside a plugin
1642
-				$file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1643
-
1644
-				$dir_parts = explode( "/wp-content/", $file_dir );
1645
-				$url_parts = explode( "/wp-content/", plugins_url() );
1646
-
1647
-				if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1648
-					$url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1649
-					$this->url = $url;
1650
-				}
1651
-			}
1652
-
1653
-
1654
-			return $url;
1655
-		}
1656
-
1657
-		/**
1658
-		 * Generate the block icon.
1659
-		 *
1660
-		 * Enables the use of Font Awesome icons.
1661
-		 *
1662
-		 * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1663
-		 *
1664
-		 * @param $icon
1665
-		 *
1666
-		 * @return string
1667
-		 *@since 1.1.0
1668
-		 */
1669
-		public function get_block_icon( $icon ) {
1670
-
1671
-			// check if we have a Font Awesome icon
1672
-			$fa_type = '';
1673
-			if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1674
-				$fa_type = 'solid';
1675
-			} elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1676
-				$fa_type = 'regular';
1677
-			} elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1678
-				$fa_type = 'brands';
1679
-			} else {
1680
-				$icon = "'" . $icon . "'";
1681
-			}
1682
-
1683
-			// set the icon if we found one
1684
-			if ( $fa_type ) {
1685
-				$fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1686
-				$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 . "'}))";
1687
-			}
1688
-
1689
-			return $icon;
1690
-		}
1691
-
1692
-		public function group_arguments( $arguments ) {
1693
-			if ( ! empty( $arguments ) ) {
1694
-				$temp_arguments = array();
1695
-				$general        = __( "General", 'ayecode-connect' );
1696
-				$add_sections   = false;
1697
-				foreach ( $arguments as $key => $args ) {
1698
-					if ( isset( $args['group'] ) ) {
1699
-						$temp_arguments[ $args['group'] ][ $key ] = $args;
1700
-						$add_sections                             = true;
1701
-					} else {
1702
-						$temp_arguments[ $general ][ $key ] = $args;
1703
-					}
1704
-				}
1705
-
1706
-				// only add sections if more than one
1707
-				if ( $add_sections ) {
1708
-					$arguments = $temp_arguments;
1709
-				}
1710
-			}
1711
-
1712
-			return $arguments;
1713
-		}
1714
-
1715
-		/**
1716
-		 * Parse used group tabs.
1717
-		 *
1718
-		 * @since 1.1.17
1719
-		 */
1720
-		public function group_block_tabs( $tabs, $arguments ) {
1721
-			if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1722
-				$has_sections = false;
1723
-
1724
-				foreach ( $this->arguments as $key => $args ) {
1725
-					if ( isset( $args['group'] ) ) {
1726
-						$has_sections = true;
1727
-						break;
1728
-					}
1729
-				}
1730
-
1731
-				if ( ! $has_sections ) {
1732
-					return $tabs;
1733
-				}
1734
-
1735
-				$new_tabs = array();
1736
-
1737
-				foreach ( $tabs as $tab_key => $tab ) {
1738
-					$new_groups = array();
1739
-
1740
-					if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1741
-						foreach ( $tab['groups'] as $group ) {
1742
-							if ( isset( $arguments[ $group ] ) ) {
1743
-								$new_groups[] = $group;
1744
-							}
1745
-						}
1746
-					}
1747
-
1748
-					if ( ! empty( $new_groups ) ) {
1749
-						$tab['groups'] = $new_groups;
1750
-
1751
-						$new_tabs[ $tab_key ] = $tab;
1752
-					}
1753
-				}
1754
-
1755
-				$tabs = $new_tabs;
1756
-			}
1757
-
1758
-			return $tabs;
1759
-		}
1760
-
1761
-		/**
1762
-		 * Output the JS for building the dynamic Guntenberg block.
1763
-		 *
1764
-		 * @return mixed
1765
-		 *@since 1.0.9 Save numbers as numbers and not strings.
1766
-		 * @since 1.1.0 Font Awesome classes can be used for icons.
1767
-		 * @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.
1768
-		 */
1769
-		public function block() {
1770
-			global $sd_is_js_functions_loaded, $aui_bs5;
1771
-
1772
-			$show_advanced = $this->block_show_advanced();
1773
-
1774
-			ob_start();
1775
-			?>
1776
-			<script>
1777
-			<?php
1778
-			if ( ! $sd_is_js_functions_loaded ) {
1779
-				$sd_is_js_functions_loaded = true;
1780
-			?>
1781
-function sd_show_view_options($this){
1782
-	if(jQuery($this).html().length){
1783
-		jQuery($this).html('');
1784
-	}else{
1785
-		jQuery($this).html('<div class="position-absolute d-flex flex-column bg-white p-1 rounded border shadow-lg " style="top:-80px;left:-5px;"><div class="dashicons dashicons-desktop mb-1" onclick="sd_set_view_type(\'Desktop\');"></div><div class="dashicons dashicons-tablet mb-1" onclick="sd_set_view_type(\'Tablet\');"></div><div class="dashicons dashicons-smartphone" onclick="sd_set_view_type(\'Mobile\');"></div></div>');
1786
-	}
1787
-}
1788
-
1789
-function sd_set_view_type($device){
1790
-	wp.data.dispatch('core/edit-site') ? wp.data.dispatch('core/edit-site').__experimentalSetPreviewDeviceType($device) : wp.data.dispatch('core/edit-post').__experimentalSetPreviewDeviceType($device);
1791
-}
1792
-
1793
-jQuery(function(){
1794
-	sd_block_visibility_init();
1795
-});
1796
-function sd_block_visibility_init() {
1797
-	jQuery(document).off('change', '.bs-vc-modal-form').on('change', '.bs-vc-modal-form', function() {
1798
-		try {
1799
-			aui_conditional_fields('.bs-vc-modal-form');
1800
-		} catch(err) {
1801
-			console.log(err.message);
1802
-		}
1803
-	});
1804
-
1805
-	jQuery(document).off('click', '.bs-vc-save').on('click', '.bs-vc-save', function() {
1806
-		var $bsvcModal = jQuery(this).closest('.bs-vc-modal'), $bsvcForm = $bsvcModal.find('.bs-vc-modal-form'), vOutput = jQuery('#bsvc_output', $bsvcForm).val(), rawValue = '', oVal = {}, oOut = {}, iRule = 0;
1807
-		jQuery(this).addClass('disabled');
1808
-		jQuery('.bs-vc-modal-form .bs-vc-rule-sets .bs-vc-rule').each(function(){
1809
-			vRule = jQuery(this).find('.bsvc_rule').val(), oRule = {};
1810
-			if (vRule == 'logged_in' || vRule == 'logged_out' || vRule == 'post_author') {
1811
-				oRule.type = vRule;
1812
-			} else if (vRule == 'user_roles') {
1813
-				oRule.type = vRule;
1814
-				if (jQuery(this).find('.bsvc_user_roles:checked').length) {
1815
-					var user_roles = jQuery(this).find('.bsvc_user_roles:checked').map(function() {
1816
-						return jQuery(this).val();
1817
-					}).get();
1818
-					if (user_roles && user_roles.length) {
1819
-						oRule.user_roles = user_roles.join(",");
1820
-					}
1821
-				}
1822
-			} else if (vRule == 'gd_field') {
1823
-				if (jQuery(this).find('.bsvc_gd_field ').val() && jQuery(this).find('.bsvc_gd_field_condition').val()) {
1824
-					oRule.type = vRule;
1825
-					oRule.field = jQuery(this).find('.bsvc_gd_field ').val();
1826
-					oRule.condition = jQuery(this).find('.bsvc_gd_field_condition').val();
1827
-					if (oRule.condition != 'is_empty' && oRule.condition != 'is_not_empty') {
1828
-						oRule.search = jQuery(this).find('.bsvc_gd_field_search').val();
1829
-					}
1830
-				}
1831
-			}
1832
-			if (Object.keys(oRule).length > 0) {
1833
-				iRule++;
1834
-				oVal['rule'+iRule] = oRule;
1835
-			}
1836
-		});
1837
-		if (vOutput == 'hide') {
1838
-			oOut.type = vOutput;
1839
-		} else if (vOutput == 'message') {
1840
-			if (jQuery('#bsvc_message', $bsvcForm).val()) {
1841
-				oOut.type = vOutput;
1842
-				oOut.message = jQuery('#bsvc_message', $bsvcForm).val();
1843
-				if (jQuery('#bsvc_message_type', $bsvcForm).val()) {
1844
-					oOut.message_type = jQuery('#bsvc_message_type', $bsvcForm).val();
1845
-				}
1846
-			}
1847
-		} else if (vOutput == 'page') {
1848
-			if (jQuery('#bsvc_page', $bsvcForm).val()) {
1849
-				oOut.type = vOutput;
1850
-				oOut.page = jQuery('#bsvc_page', $bsvcForm).val();
1851
-			}
1852
-		} else if (vOutput == 'template_part') {
1853
-			if (jQuery('#bsvc_tmpl_part', $bsvcForm).val()) {
1854
-				oOut.type = vOutput;
1855
-				oOut.template_part = jQuery('#bsvc_tmpl_part', $bsvcForm).val();
1856
-			}
1857
-		}
1858
-		if (Object.keys(oOut).length > 0) {
1859
-			oVal.output = oOut;
1860
-		}
1861
-		if (Object.keys(oVal).length > 0) {
1862
-			rawValue = JSON.stringify(oVal);
1861
+		if (Object.keys(oVal).length > 0) {
1862
+			rawValue = JSON.stringify(oVal);
1863 1863
 		}
1864 1864
 		$bsvcModal.find('[name="bsvc_raw_value"]').val(rawValue).trigger('change');
1865 1865
 		$bsvcModal.find('.bs-vc-close').trigger('click');
@@ -2223,8 +2223,8 @@  discard block
 block discarded – undo
2223 2223
 				$classes = [];
2224 2224
 
2225 2225
 				<?php
2226
-				if($aui_bs5){
2227
-					?>
2226
+                if($aui_bs5){
2227
+                    ?>
2228 2228
 				$aui_bs5 = true;
2229 2229
 				$p_ml = 'ms-';
2230 2230
 				$p_mr = 'me-';
@@ -2232,8 +2232,8 @@  discard block
 block discarded – undo
2232 2232
 				$p_pl = 'ps-';
2233 2233
 				$p_pr = 'pe-';
2234 2234
 					<?php
2235
-				}else{
2236
-						?>
2235
+                }else{
2236
+                        ?>
2237 2237
 				$aui_bs5 = false;
2238 2238
 				$p_ml = 'ml-';
2239 2239
 				$p_mr = 'mr-';
@@ -2241,8 +2241,8 @@  discard block
 block discarded – undo
2241 2241
 				$p_pl = 'pl-';
2242 2242
 				$p_pr = 'pr-';
2243 2243
 					<?php
2244
-				}
2245
-				?>
2244
+                }
2245
+                ?>
2246 2246
 
2247 2247
 				// margins
2248 2248
 				if ( $args['mt'] !== undefined && $args['mt'] !== '' ) { $classes.push( "mt-" + $args['mt'] );  $mt = $args['mt']; }else{$mt = null;}
@@ -2426,12 +2426,12 @@  discard block
 block discarded – undo
2426 2426
 			<?php
2427 2427
 
2428 2428
 
2429
-			}
2429
+            }
2430 2430
 
2431
-			if(method_exists($this,'block_global_js')){
2432
-					echo $this->block_global_js();
2433
-			}
2434
-			?>
2431
+            if(method_exists($this,'block_global_js')){
2432
+                    echo $this->block_global_js();
2433
+            }
2434
+            ?>
2435 2435
 
2436 2436
 jQuery(function() {
2437 2437
 
@@ -2484,13 +2484,13 @@  discard block
 block discarded – undo
2484 2484
 						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/.
2485 2485
 						supports: {
2486 2486
 							<?php
2487
-							if(!isset($this->options['block-supports']['renaming'])){
2488
-								$this->options['block-supports']['renaming'] = false;
2489
-							}
2490
-							if ( isset( $this->options['block-supports'] ) ) {
2491
-								echo $this->array_to_attributes( $this->options['block-supports'] );
2492
-							}
2493
-							?>
2487
+                            if(!isset($this->options['block-supports']['renaming'])){
2488
+                                $this->options['block-supports']['renaming'] = false;
2489
+                            }
2490
+                            if ( isset( $this->options['block-supports'] ) ) {
2491
+                                echo $this->array_to_attributes( $this->options['block-supports'] );
2492
+                            }
2493
+                            ?>
2494 2494
 						},
2495 2495
 						__experimentalLabel( attributes, { context } ) {
2496 2496
 							var visibility_html = attributes && attributes.visibility_conditions ? ' &#128065;' : '';
@@ -2500,174 +2500,174 @@  discard block
 block discarded – undo
2500 2500
 						},
2501 2501
 						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.
2502 2502
 						<?php if ( isset( $this->options['block-keywords'] ) ) {
2503
-						echo "keywords : " . $this->options['block-keywords'] . ",";
2504
-						}
2505
-
2506
-
2507
-						// block hover preview.
2508
-						$example_args = array();
2509
-						if(!empty($this->arguments)){
2510
-							foreach($this->arguments as $key => $a_args){
2511
-								if(isset($a_args['example'])){
2512
-									$example_args[$key] = $a_args['example'];
2513
-								}
2514
-							}
2515
-						}
2516
-						$viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2517
-						$example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2518
-						if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2519
-							// no preview if set to false
2520
-						}elseif( !empty( $example_args ) ){
2521
-							echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2522
-						}elseif( !empty( $this->options['example'] ) ){
2523
-							unset($this->options['example']['viewportWidth']);
2524
-							unset($this->options['example']['innerBlocks']);
2525
-							$example_atts = $this->array_to_attributes( $this->options['example'] );
2526
-							$example_parts = array();
2527
-							if($example_atts){
2528
-								$example_parts[] = rtrim($example_atts,",");
2529
-							}
2530
-							if($viewport_width){
2531
-								$example_parts[] = $viewport_width;
2532
-							}
2533
-							if($example_inner_blocks){
2534
-								$example_parts[] = $example_inner_blocks;
2535
-							}
2536
-							if(!empty($example_parts)){
2537
-								echo "example : {".implode(',', $example_parts)."},";
2538
-							}
2539
-						}else{
2540
-							echo 'example : {viewportWidth: 500},';
2541
-						}
2542
-
2543
-
2544
-
2545
-						// limit to parent
2546
-						if( !empty( $this->options['parent'] ) ){
2547
-							echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2548
-						}
2549
-
2550
-						// limit allowed blocks
2551
-						if( !empty( $this->options['allowed-blocks'] ) ){
2552
-							echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2553
-						}
2554
-
2555
-						// maybe set no_wrap
2556
-						$no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2557
-						if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2558
-							$no_wrap = true;
2559
-						}
2560
-						if ( $no_wrap ) {
2561
-							$this->options['block-wrap'] = '';
2562
-						}
2563
-
2564
-						// maybe load the drag/drop functions.
2565
-						$img_drag_drop = false;
2566
-
2567
-						$show_alignment = false;
2568
-						// align feature
2569
-						/*echo "supports: {";
2503
+                        echo "keywords : " . $this->options['block-keywords'] . ",";
2504
+                        }
2505
+
2506
+
2507
+                        // block hover preview.
2508
+                        $example_args = array();
2509
+                        if(!empty($this->arguments)){
2510
+                            foreach($this->arguments as $key => $a_args){
2511
+                                if(isset($a_args['example'])){
2512
+                                    $example_args[$key] = $a_args['example'];
2513
+                                }
2514
+                            }
2515
+                        }
2516
+                        $viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2517
+                        $example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2518
+                        if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2519
+                            // no preview if set to false
2520
+                        }elseif( !empty( $example_args ) ){
2521
+                            echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2522
+                        }elseif( !empty( $this->options['example'] ) ){
2523
+                            unset($this->options['example']['viewportWidth']);
2524
+                            unset($this->options['example']['innerBlocks']);
2525
+                            $example_atts = $this->array_to_attributes( $this->options['example'] );
2526
+                            $example_parts = array();
2527
+                            if($example_atts){
2528
+                                $example_parts[] = rtrim($example_atts,",");
2529
+                            }
2530
+                            if($viewport_width){
2531
+                                $example_parts[] = $viewport_width;
2532
+                            }
2533
+                            if($example_inner_blocks){
2534
+                                $example_parts[] = $example_inner_blocks;
2535
+                            }
2536
+                            if(!empty($example_parts)){
2537
+                                echo "example : {".implode(',', $example_parts)."},";
2538
+                            }
2539
+                        }else{
2540
+                            echo 'example : {viewportWidth: 500},';
2541
+                        }
2542
+
2543
+
2544
+
2545
+                        // limit to parent
2546
+                        if( !empty( $this->options['parent'] ) ){
2547
+                            echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2548
+                        }
2549
+
2550
+                        // limit allowed blocks
2551
+                        if( !empty( $this->options['allowed-blocks'] ) ){
2552
+                            echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2553
+                        }
2554
+
2555
+                        // maybe set no_wrap
2556
+                        $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2557
+                        if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2558
+                            $no_wrap = true;
2559
+                        }
2560
+                        if ( $no_wrap ) {
2561
+                            $this->options['block-wrap'] = '';
2562
+                        }
2563
+
2564
+                        // maybe load the drag/drop functions.
2565
+                        $img_drag_drop = false;
2566
+
2567
+                        $show_alignment = false;
2568
+                        // align feature
2569
+                        /*echo "supports: {";
2570 2570
 						echo "	align: true,";
2571 2571
 						echo "  html: false";
2572 2572
 						echo "},";*/
2573 2573
 
2574 2574
 
2575
-							echo "attributes : {";
2576
-
2577
-							if ( $show_advanced ) {
2578
-								echo "show_advanced: {";
2579
-								echo "	type: 'boolean',";
2580
-								echo "  default: false,";
2581
-								echo "},";
2582
-							}
2583
-
2584
-							// block wrap element
2585
-							if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2586
-								echo "block_wrap: {";
2587
-								echo "	type: 'string',";
2588
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2589
-								echo "},";
2590
-							}
2591
-
2592
-
2593
-							if ( ! empty( $this->arguments ) ) {
2594
-
2595
-								foreach ( $this->arguments as $key => $args ) {
2596
-
2597
-									if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2598
-										$img_drag_drop = true;
2599
-									}
2600
-
2601
-									// set if we should show alignment
2602
-									if ( $key == 'alignment' ) {
2603
-										$show_alignment = true;
2604
-									}
2605
-
2606
-									$extra = '';
2607
-
2608
-									if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2609
-										continue;
2610
-									}
2611
-									elseif ( $args['type'] == 'checkbox' ) {
2612
-										$type    = 'boolean';
2613
-										$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2614
-									} elseif ( $args['type'] == 'number' ) {
2615
-										$type    = 'number';
2616
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2617
-									} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2618
-										$type = 'array';
2619
-										if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2620
-											$default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2621
-										} else {
2622
-											$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2623
-										}
2624
-									} elseif ( $args['type'] == 'tagselect' ) {
2625
-										$type    = 'array';
2626
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2627
-									} elseif ( $args['type'] == 'multiselect' ) {
2628
-										$type    = 'array';
2629
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2630
-									} elseif ( $args['type'] == 'image_xy' ) {
2631
-										$type    = 'object';
2632
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2633
-									} elseif ( $args['type'] == 'image' ) {
2634
-										$type    = 'string';
2635
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2636
-
2637
-										// add a field for ID
2638
-	//                                    echo $key . "_id : {";
2639
-	//                                    echo "type : 'number',";
2640
-	//                                    echo "},";
2641
-	//                                    echo $key . "_xy : {";
2642
-	//                                    echo "type : 'object',";
2643
-	//                                    echo "},";
2644
-
2645
-									} else {
2646
-										$type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2647
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2648
-
2649
-									}
2650
-									echo $key . " : {";
2651
-									echo "type : '$type',";
2652
-									echo "default : $default,";
2653
-									echo "},";
2654
-								}
2655
-							}
2656
-
2657
-							echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2658
-							echo "sd_shortcode : {type : 'string',default: ''},";
2659
-
2660
-							if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2661
-								echo "sd_shortcode_close : {type : 'string',default: ''},";
2662
-							}
2663
-
2664
-							echo "className: { type: 'string', default: '' },";
2665
-
2666
-							echo "},";
2667
-
2668
-
2669
-
2670
-						?>
2575
+                            echo "attributes : {";
2576
+
2577
+                            if ( $show_advanced ) {
2578
+                                echo "show_advanced: {";
2579
+                                echo "	type: 'boolean',";
2580
+                                echo "  default: false,";
2581
+                                echo "},";
2582
+                            }
2583
+
2584
+                            // block wrap element
2585
+                            if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2586
+                                echo "block_wrap: {";
2587
+                                echo "	type: 'string',";
2588
+                                echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2589
+                                echo "},";
2590
+                            }
2591
+
2592
+
2593
+                            if ( ! empty( $this->arguments ) ) {
2594
+
2595
+                                foreach ( $this->arguments as $key => $args ) {
2596
+
2597
+                                    if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2598
+                                        $img_drag_drop = true;
2599
+                                    }
2600
+
2601
+                                    // set if we should show alignment
2602
+                                    if ( $key == 'alignment' ) {
2603
+                                        $show_alignment = true;
2604
+                                    }
2605
+
2606
+                                    $extra = '';
2607
+
2608
+                                    if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2609
+                                        continue;
2610
+                                    }
2611
+                                    elseif ( $args['type'] == 'checkbox' ) {
2612
+                                        $type    = 'boolean';
2613
+                                        $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2614
+                                    } elseif ( $args['type'] == 'number' ) {
2615
+                                        $type    = 'number';
2616
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2617
+                                    } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2618
+                                        $type = 'array';
2619
+                                        if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2620
+                                            $default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2621
+                                        } else {
2622
+                                            $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2623
+                                        }
2624
+                                    } elseif ( $args['type'] == 'tagselect' ) {
2625
+                                        $type    = 'array';
2626
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2627
+                                    } elseif ( $args['type'] == 'multiselect' ) {
2628
+                                        $type    = 'array';
2629
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2630
+                                    } elseif ( $args['type'] == 'image_xy' ) {
2631
+                                        $type    = 'object';
2632
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2633
+                                    } elseif ( $args['type'] == 'image' ) {
2634
+                                        $type    = 'string';
2635
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2636
+
2637
+                                        // add a field for ID
2638
+    //                                    echo $key . "_id : {";
2639
+    //                                    echo "type : 'number',";
2640
+    //                                    echo "},";
2641
+    //                                    echo $key . "_xy : {";
2642
+    //                                    echo "type : 'object',";
2643
+    //                                    echo "},";
2644
+
2645
+                                    } else {
2646
+                                        $type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2647
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2648
+
2649
+                                    }
2650
+                                    echo $key . " : {";
2651
+                                    echo "type : '$type',";
2652
+                                    echo "default : $default,";
2653
+                                    echo "},";
2654
+                                }
2655
+                            }
2656
+
2657
+                            echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2658
+                            echo "sd_shortcode : {type : 'string',default: ''},";
2659
+
2660
+                            if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2661
+                                echo "sd_shortcode_close : {type : 'string',default: ''},";
2662
+                            }
2663
+
2664
+                            echo "className: { type: 'string', default: '' },";
2665
+
2666
+                            echo "},";
2667
+
2668
+
2669
+
2670
+                        ?>
2671 2671
 
2672 2672
 						// The "edit" property must be a valid function.
2673 2673
 						edit: function (props) {
@@ -2741,10 +2741,10 @@  discard block
 block discarded – undo
2741 2741
 							}
2742 2742
 
2743 2743
 							<?php
2744
-							if(!empty($this->options['block-edit-raw'])) {
2745
-								echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2746
-							}else{
2747
-							?>
2744
+                            if(!empty($this->options['block-edit-raw'])) {
2745
+                                echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2746
+                            }else{
2747
+                            ?>
2748 2748
 
2749 2749
 function hasSelectedInnerBlock(props) {
2750 2750
 	const select = wp.data.select('core/editor');
@@ -2766,9 +2766,9 @@  discard block
 block discarded – undo
2766 2766
 
2767 2767
 	var $value = '';
2768 2768
 	<?php
2769
-	// if we have a post_type and a category then link them
2770
-	if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2771
-	?>
2769
+    // if we have a post_type and a category then link them
2770
+    if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2771
+    ?>
2772 2772
 	if(typeof(prev_attributes[props.clientId]) != 'undefined'){
2773 2773
 		$pt = props.attributes.post_type;
2774 2774
 		if(post_type_rest_slugs.length){
@@ -2781,11 +2781,11 @@  discard block
 block discarded – undo
2781 2781
 			term_query_type = $pt;
2782 2782
 		}
2783 2783
 <?php
2784
-	$cat_path = '';
2785
-	if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2786
-		$cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2787
-		$cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2788
-	}
2784
+    $cat_path = '';
2785
+    if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2786
+        $cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2787
+        $cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2788
+    }
2789 2789
 ?>
2790 2790
 		/* taxonomies */
2791 2791
 		if($value && 'post_type' in prev_attributes[props.clientId] && 'category' in prev_attributes[props.clientId] && run){
@@ -2877,7 +2877,7 @@  discard block
 block discarded – undo
2877 2877
 <?php
2878 2878
 $current_screen = function_exists('get_current_screen') ? get_current_screen() : '';
2879 2879
 if(!empty($current_screen->base) && $current_screen->base==='widgets'){
2880
-	echo 'const { deviceType } = "";';
2880
+    echo 'const { deviceType } = "";';
2881 2881
 }else{
2882 2882
 ?>
2883 2883
 /** Get device type const. */
@@ -2912,8 +2912,8 @@  discard block
 block discarded – undo
2912 2912
 										'attributes': props.attributes,
2913 2913
 										'block_parent_name': parentBlocks.length ? parentBlocks[parentBlocks.length - 1].name : '',
2914 2914
 										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
2915
-										echo $post->ID;
2916
-									}else{echo '0';}?>,
2915
+                                        echo $post->ID;
2916
+                                    }else{echo '0';}?>,
2917 2917
 										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
2918 2918
 									};
2919 2919
 
@@ -2927,20 +2927,20 @@  discard block
 block discarded – undo
2927 2927
 										}
2928 2928
 
2929 2929
 										 <?php
2930
-										if(!empty($this->options['nested-block'])){
2931
-											?>
2930
+                                        if(!empty($this->options['nested-block'])){
2931
+                                            ?>
2932 2932
 											// props.setAttributes({content: env});
2933 2933
 										is_fetching = false;
2934 2934
 										prev_attributes[props.clientId] = props.attributes;
2935 2935
 											 <?php
2936
-										}else{
2937
-										?>
2936
+                                        }else{
2937
+                                        ?>
2938 2938
 										props.setAttributes({content: env});
2939 2939
 										is_fetching = false;
2940 2940
 										prev_attributes[props.clientId] = props.attributes;
2941 2941
 										<?php
2942
-										}
2943
-										?>
2942
+                                        }
2943
+                                        ?>
2944 2944
 
2945 2945
 
2946 2946
 										// if AUI is active call the js init function
@@ -2959,31 +2959,31 @@  discard block
 block discarded – undo
2959 2959
 							}
2960 2960
 
2961 2961
 							<?php
2962
-							if(!empty($this->options['block-edit-js'])) {
2963
-								echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
2964
-							}
2962
+                            if(!empty($this->options['block-edit-js'])) {
2963
+                                echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
2964
+                            }
2965 2965
 
2966 2966
 
2967 2967
 
2968 2968
 
2969
-							if(empty($this->options['block-save-return'])){
2970
-							?>
2969
+                            if(empty($this->options['block-save-return'])){
2970
+                            ?>
2971 2971
 								///////////////////////////////////////////////////////////////////////
2972 2972
 
2973 2973
 									 // build the shortcode.
2974 2974
 								shortcode = "[<?php echo $this->options['base_id'];?>";
2975 2975
 								<?php
2976 2976
 
2977
-								if(! empty( $this->arguments )){
2977
+                                if(! empty( $this->arguments )){
2978 2978
 
2979
-								foreach($this->arguments as $key => $args){
2980
-								   // if($args['type']=='tabs'){continue;}
2979
+                                foreach($this->arguments as $key => $args){
2980
+                                    // if($args['type']=='tabs'){continue;}
2981 2981
 
2982
-								   // don't add metadata arguments
2983
-								   if (substr($key, 0, 9 ) === 'metadata_') {
2984
-									   continue;
2985
-								   }
2986
-								?>
2982
+                                    // don't add metadata arguments
2983
+                                    if (substr($key, 0, 9 ) === 'metadata_') {
2984
+                                        continue;
2985
+                                    }
2986
+                                ?>
2987 2987
 								if (props.attributes.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
2988 2988
 									if ('<?php echo esc_attr( $key );?>' == 'html') {
2989 2989
 									} else if ('<?php echo esc_attr( $args['type'] );?>' == 'image_xy') {
@@ -2994,10 +2994,10 @@  discard block
 block discarded – undo
2994 2994
 									}
2995 2995
 								}
2996 2996
 								<?php
2997
-								}
2998
-								}
2997
+                                }
2998
+                                }
2999 2999
 
3000
-								?>
3000
+                                ?>
3001 3001
 								shortcode += "]";
3002 3002
 
3003 3003
 								if(shortcode){
@@ -3005,17 +3005,17 @@  discard block
 block discarded – undo
3005 3005
 									props.setAttributes({sd_shortcode: shortcode});
3006 3006
 
3007 3007
 									<?php
3008
-									if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3009
-										echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3010
-									}
3011
-									?>
3008
+                                    if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3009
+                                        echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3010
+                                    }
3011
+                                    ?>
3012 3012
 								}
3013 3013
 
3014 3014
 
3015 3015
 							///////////////////////////////////////////////////////////////////////
3016 3016
 							<?php
3017
-							} // end nested block check
3018
-							?>
3017
+                            } // end nested block check
3018
+                            ?>
3019 3019
 
3020 3020
 							return [
3021 3021
 
@@ -3039,10 +3039,10 @@  discard block
 block discarded – undo
3039 3039
 
3040 3040
 									<?php
3041 3041
 
3042
-									if(! empty( $this->arguments )){
3042
+                                    if(! empty( $this->arguments )){
3043 3043
 
3044
-									if ( $show_advanced ) {
3045
-									?>
3044
+                                    if ( $show_advanced ) {
3045
+                                    ?>
3046 3046
 									el('div', {
3047 3047
 											style: {'padding-left': '16px','padding-right': '16px'}
3048 3048
 										},
@@ -3059,119 +3059,119 @@  discard block
 block discarded – undo
3059 3059
 									)
3060 3060
 									,
3061 3061
 									<?php
3062
-									}
3063
-
3064
-									$arguments = $this->group_arguments( $this->arguments );
3065
-									$block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3066
-
3067
-									// Do we have sections?
3068
-									$has_sections = $arguments == $this->arguments ? false : true;
3069
-
3070
-									if($has_sections){
3071
-									$panel_count = 0;
3072
-									$open_tab = '';
3073
-
3074
-									$open_tab_groups = array();
3075
-									$used_tabs = array();
3076
-
3077
-									foreach ( $arguments as $key => $args ) {
3078
-										$close_tab = false;
3079
-										$close_tabs = false;
3080
-
3081
-										 if ( ! empty( $block_group_tabs ) ) {
3082
-											foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3083
-												if ( in_array( $key, $tab_args['groups'] ) ) {
3084
-													$open_tab_groups[] = $key;
3085
-
3086
-													if ( $open_tab != $tab_name ) {
3087
-														$tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3088
-														$tab_args['tab']['open'] = true;
3089
-
3090
-														$this->block_tab_start( '', $tab_args );
3091
-														$open_tab = $tab_name;
3092
-														$used_tabs[] = $tab_name;
3093
-													}
3094
-
3095
-													if ( $open_tab_groups == $tab_args['groups'] ) {
3096
-														$close_tab = true;
3097
-														$open_tab_groups = array();
3098
-
3099
-														if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3100
-															$close_tabs = true;
3101
-														}
3102
-													}
3103
-												}
3104
-											}
3105
-										}
3106
-										?>
3062
+                                    }
3063
+
3064
+                                    $arguments = $this->group_arguments( $this->arguments );
3065
+                                    $block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3066
+
3067
+                                    // Do we have sections?
3068
+                                    $has_sections = $arguments == $this->arguments ? false : true;
3069
+
3070
+                                    if($has_sections){
3071
+                                    $panel_count = 0;
3072
+                                    $open_tab = '';
3073
+
3074
+                                    $open_tab_groups = array();
3075
+                                    $used_tabs = array();
3076
+
3077
+                                    foreach ( $arguments as $key => $args ) {
3078
+                                        $close_tab = false;
3079
+                                        $close_tabs = false;
3080
+
3081
+                                            if ( ! empty( $block_group_tabs ) ) {
3082
+                                            foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3083
+                                                if ( in_array( $key, $tab_args['groups'] ) ) {
3084
+                                                    $open_tab_groups[] = $key;
3085
+
3086
+                                                    if ( $open_tab != $tab_name ) {
3087
+                                                        $tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3088
+                                                        $tab_args['tab']['open'] = true;
3089
+
3090
+                                                        $this->block_tab_start( '', $tab_args );
3091
+                                                        $open_tab = $tab_name;
3092
+                                                        $used_tabs[] = $tab_name;
3093
+                                                    }
3094
+
3095
+                                                    if ( $open_tab_groups == $tab_args['groups'] ) {
3096
+                                                        $close_tab = true;
3097
+                                                        $open_tab_groups = array();
3098
+
3099
+                                                        if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3100
+                                                            $close_tabs = true;
3101
+                                                        }
3102
+                                                    }
3103
+                                                }
3104
+                                            }
3105
+                                        }
3106
+                                        ?>
3107 3107
 										el(wp.components.PanelBody, {
3108 3108
 												title: '<?php esc_attr_e( $key ); ?>',
3109 3109
 												initialOpen: <?php if ( $panel_count ) {
3110
-												echo "false";
3111
-											} else {
3112
-												echo "true";
3113
-											}?>
3110
+                                                echo "false";
3111
+                                            } else {
3112
+                                                echo "true";
3113
+                                            }?>
3114 3114
 											},
3115 3115
 											<?php
3116
-											foreach ( $args as $k => $a ) {
3117
-												$this->block_tab_start( $k, $a );
3118
-												$this->block_row_start( $k, $a );
3119
-												$this->build_block_arguments( $k, $a );
3120
-												$this->block_row_end( $k, $a );
3121
-												$this->block_tab_end( $k, $a );
3122
-											}
3123
-											?>
3116
+                                            foreach ( $args as $k => $a ) {
3117
+                                                $this->block_tab_start( $k, $a );
3118
+                                                $this->block_row_start( $k, $a );
3119
+                                                $this->build_block_arguments( $k, $a );
3120
+                                                $this->block_row_end( $k, $a );
3121
+                                                $this->block_tab_end( $k, $a );
3122
+                                            }
3123
+                                            ?>
3124 3124
 										),
3125 3125
 										<?php
3126
-										$panel_count ++;
3126
+                                        $panel_count ++;
3127 3127
 
3128
-										if($close_tab || $close_tabs){
3129
-											$tab_args = array(
3130
-												'tab'	=> array(
3131
-													'tabs_close' => $close_tabs,
3132
-												'close' => true,
3133
-												)
3128
+                                        if($close_tab || $close_tabs){
3129
+                                            $tab_args = array(
3130
+                                                'tab'	=> array(
3131
+                                                    'tabs_close' => $close_tabs,
3132
+                                                'close' => true,
3133
+                                                )
3134 3134
 
3135
-											);
3136
-											$this->block_tab_end( '', $tab_args );
3135
+                                            );
3136
+                                            $this->block_tab_end( '', $tab_args );
3137 3137
 //											echo '###close'; print_r($tab_args);
3138
-											$panel_count = 0;
3139
-										}
3138
+                                            $panel_count = 0;
3139
+                                        }
3140 3140
 //
3141 3141
 
3142
-									}
3143
-									}else {
3144
-									?>
3142
+                                    }
3143
+                                    }else {
3144
+                                    ?>
3145 3145
 									el(wp.components.PanelBody, {
3146 3146
 											title: '<?php esc_attr_e( "Settings", 'ayecode-connect' ); ?>',
3147 3147
 											initialOpen: true
3148 3148
 										},
3149 3149
 										<?php
3150
-										foreach ( $this->arguments as $key => $args ) {
3151
-											$this->block_row_start( $key, $args );
3152
-											$this->build_block_arguments( $key, $args );
3153
-											$this->block_row_end( $key, $args );
3154
-										}
3155
-										?>
3150
+                                        foreach ( $this->arguments as $key => $args ) {
3151
+                                            $this->block_row_start( $key, $args );
3152
+                                            $this->build_block_arguments( $key, $args );
3153
+                                            $this->block_row_end( $key, $args );
3154
+                                        }
3155
+                                        ?>
3156 3156
 									),
3157 3157
 									<?php
3158
-									}
3158
+                                    }
3159 3159
 
3160
-									}
3161
-									?>
3160
+                                    }
3161
+                                    ?>
3162 3162
 
3163 3163
 								),
3164 3164
 
3165 3165
 								<?php
3166
-								// If the user sets block-output array then build it
3167
-								if ( ! empty( $this->options['block-output'] ) ) {
3168
-								$this->block_element( $this->options['block-output'] );
3169
-							}elseif(!empty($this->options['block-edit-return'])){
3170
-								   echo $this->options['block-edit-return'];
3171
-							}else{
3172
-								// if no block-output is set then we try and get the shortcode html output via ajax.
3173
-								$block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3174
-								?>
3166
+                                // If the user sets block-output array then build it
3167
+                                if ( ! empty( $this->options['block-output'] ) ) {
3168
+                                $this->block_element( $this->options['block-output'] );
3169
+                            }elseif(!empty($this->options['block-edit-return'])){
3170
+                                    echo $this->options['block-edit-return'];
3171
+                            }else{
3172
+                                // if no block-output is set then we try and get the shortcode html output via ajax.
3173
+                                $block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3174
+                                ?>
3175 3175
 								el('<?php echo esc_attr($block_edit_wrap_tag); ?>', wp.blockEditor.useBlockProps({
3176 3176
 									dangerouslySetInnerHTML: {__html: onChangeContent()},
3177 3177
 									className: props.className,
@@ -3179,13 +3179,13 @@  discard block
 block discarded – undo
3179 3179
 									style: {'minHeight': '30px'}
3180 3180
 								}))
3181 3181
 								<?php
3182
-								}
3183
-								?>
3182
+                                }
3183
+                                ?>
3184 3184
 							]; // end return
3185 3185
 
3186 3186
 							<?php
3187
-							} // end block-edit-raw else
3188
-							?>
3187
+                            } // end block-edit-raw else
3188
+                            ?>
3189 3189
 						},
3190 3190
 
3191 3191
 						// The "save" property must be specified and must be a valid function.
@@ -3199,16 +3199,16 @@  discard block
 block discarded – undo
3199 3199
 							$html = '';
3200 3200
 							<?php
3201 3201
 
3202
-							if(! empty( $this->arguments )){
3202
+                            if(! empty( $this->arguments )){
3203 3203
 
3204
-							foreach($this->arguments as $key => $args){
3205
-							   // if($args['type']=='tabs'){continue;}
3204
+                            foreach($this->arguments as $key => $args){
3205
+                                // if($args['type']=='tabs'){continue;}
3206 3206
 
3207
-							   // don't add metadata arguments
3208
-							   if (substr($key, 0, 9 ) === 'metadata_') {
3209
-								   continue;
3210
-							   }
3211
-							?>
3207
+                                // don't add metadata arguments
3208
+                                if (substr($key, 0, 9 ) === 'metadata_') {
3209
+                                    continue;
3210
+                                }
3211
+                            ?>
3212 3212
 							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3213 3213
 								if ('<?php echo esc_attr( $key );?>' == 'html') {
3214 3214
 									$html = attr.<?php echo esc_attr( $key );?>;
@@ -3219,10 +3219,10 @@  discard block
 block discarded – undo
3219 3219
 								}
3220 3220
 							}
3221 3221
 							<?php
3222
-							}
3223
-							}
3222
+                            }
3223
+                            }
3224 3224
 
3225
-							?>
3225
+                            ?>
3226 3226
 							content += "]";
3227 3227
 							 content = '';
3228 3228
 
@@ -3232,7 +3232,7 @@  discard block
 block discarded – undo
3232 3232
 //                                $html = 'el( InnerBlocks.Content )';
3233 3233
 //                                <?php
3234 3234
 //                            }
3235
-							?>
3235
+                            ?>
3236 3236
 							// if has html element
3237 3237
 							if ($html) {
3238 3238
 								//content += $html + "[/<?php echo $this->options['base_id'];?>]";
@@ -3265,12 +3265,12 @@  discard block
 block discarded – undo
3265 3265
 //                                <x?php
3266 3266
 //							}else
3267 3267
 
3268
-							if(!empty($this->options['block-output'])){
3268
+                            if(!empty($this->options['block-output'])){
3269 3269
 //                               echo "return";
3270 3270
 //                               $this->block_element( $this->options['block-output'], true );
3271 3271
 //                               echo ";";
3272 3272
 
3273
-							   ?>
3273
+                                ?>
3274 3274
 							  return el(
3275 3275
 								   '',
3276 3276
 								   {},
@@ -3280,10 +3280,10 @@  discard block
 block discarded – undo
3280 3280
 							   );
3281 3281
 								<?php
3282 3282
 
3283
-							}elseif(!empty($this->options['block-save-return'])){
3284
-								   echo 'return ' . $this->options['block-save-return'];
3285
-							}elseif(!empty($this->options['nested-block'])){
3286
-								?>
3283
+                            }elseif(!empty($this->options['block-save-return'])){
3284
+                                    echo 'return ' . $this->options['block-save-return'];
3285
+                            }elseif(!empty($this->options['nested-block'])){
3286
+                                ?>
3287 3287
 							  return el(
3288 3288
 								   '',
3289 3289
 								   {},
@@ -3292,22 +3292,22 @@  discard block
 block discarded – undo
3292 3292
 								 //  el('', {dangerouslySetInnerHTML: {__html: "[/<?php echo $this->options['base_id'];?>]"}})
3293 3293
 							   );
3294 3294
 								<?php
3295
-							}elseif(!empty( $this->options['block-save-return'] ) ){
3296
-								echo "return ". $this->options['block-edit-return'].";";
3297
-							}elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3298
-							?>
3295
+                            }elseif(!empty( $this->options['block-save-return'] ) ){
3296
+                                echo "return ". $this->options['block-edit-return'].";";
3297
+                            }elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3298
+                            ?>
3299 3299
 							return content;
3300 3300
 							<?php
3301
-							}else{
3302
-							?>
3301
+                            }else{
3302
+                            ?>
3303 3303
 							var block_wrap = 'div';
3304 3304
 							if (attr.hasOwnProperty("block_wrap")) {
3305 3305
 								block_wrap = attr.block_wrap;
3306 3306
 							}
3307 3307
 							return el(block_wrap, wp.blockEditor.useBlockProps.save( {dangerouslySetInnerHTML: {__html: content}, className: align} ));
3308 3308
 							<?php
3309
-							}
3310
-							?>
3309
+                            }
3310
+                            ?>
3311 3311
 
3312 3312
 
3313 3313
 						}
@@ -3321,43 +3321,43 @@  discard block
 block discarded – undo
3321 3321
 				});
3322 3322
 			</script>
3323 3323
 			<?php
3324
-			$output = ob_get_clean();
3324
+            $output = ob_get_clean();
3325 3325
 
3326
-			/*
3326
+            /*
3327 3327
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
3328 3328
 			 */
3329 3329
 
3330
-			return str_replace( array(
3331
-				'<script>',
3332
-				'</script>'
3333
-			), '', $output );
3334
-		}
3330
+            return str_replace( array(
3331
+                '<script>',
3332
+                '</script>'
3333
+            ), '', $output );
3334
+        }
3335 3335
 
3336 3336
 
3337 3337
 
3338
-		public function block_row_start($key, $args){
3338
+        public function block_row_start($key, $args){
3339 3339
 
3340
-			// check for row
3341
-			if(!empty($args['row'])){
3340
+            // check for row
3341
+            if(!empty($args['row'])){
3342 3342
 
3343
-				if(!empty($args['row']['open'])){
3343
+                if(!empty($args['row']['open'])){
3344 3344
 
3345
-				// element require
3346
-				$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3347
-				$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3348
-				$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3349
-				$device_type_icon = '';
3350
-				if($device_type=='Desktop'){
3351
-					$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3352
-				}elseif($device_type=='Tablet'){
3353
-					$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3354
-				}elseif($device_type=='Mobile'){
3355
-					$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3356
-				}
3357
-				echo $element_require;
3358
-				echo $device_type_require;
3345
+                // element require
3346
+                $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3347
+                $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3348
+                $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3349
+                $device_type_icon = '';
3350
+                if($device_type=='Desktop'){
3351
+                    $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3352
+                }elseif($device_type=='Tablet'){
3353
+                    $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3354
+                }elseif($device_type=='Mobile'){
3355
+                    $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3356
+                }
3357
+                echo $element_require;
3358
+                echo $device_type_require;
3359 3359
 
3360
-					if(false){?><script><?php }?>
3360
+                    if(false){?><script><?php }?>
3361 3361
 						el('div', {
3362 3362
 								className: 'bsui components-base-control',
3363 3363
 							},
@@ -3370,8 +3370,8 @@  discard block
 block discarded – undo
3370 3370
 								<?php if($device_type_icon){ ?>
3371 3371
 									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)"}})
3372 3372
 								<?php
3373
-								}
3374
-								?>
3373
+                                }
3374
+                                ?>
3375 3375
 
3376 3376
 
3377 3377
 							),
@@ -3395,51 +3395,51 @@  discard block
 block discarded – undo
3395 3395
 									},
3396 3396
 
3397 3397
 					<?php
3398
-					if(false){?></script><?php }
3399
-				}elseif(!empty($args['row']['close'])){
3400
-					if(false){?><script><?php }?>
3398
+                    if(false){?></script><?php }
3399
+                }elseif(!empty($args['row']['close'])){
3400
+                    if(false){?><script><?php }?>
3401 3401
 						el(
3402 3402
 							'div',
3403 3403
 							{
3404 3404
 								className: 'col pl-0 ps-0',
3405 3405
 							},
3406 3406
 					<?php
3407
-					if(false){?></script><?php }
3408
-				}else{
3409
-					if(false){?><script><?php }?>
3407
+                    if(false){?></script><?php }
3408
+                }else{
3409
+                    if(false){?><script><?php }?>
3410 3410
 						el(
3411 3411
 							'div',
3412 3412
 							{
3413 3413
 								className: 'col pl-0 ps-0 pr-2 pe-2',
3414 3414
 							},
3415 3415
 					<?php
3416
-					if(false){?></script><?php }
3417
-				}
3416
+                    if(false){?></script><?php }
3417
+                }
3418 3418
 
3419
-			}
3419
+            }
3420 3420
 
3421
-		}
3421
+        }
3422 3422
 
3423
-		public function block_row_end($key, $args){
3423
+        public function block_row_end($key, $args){
3424 3424
 
3425
-			if(!empty($args['row'])){
3426
-				// maybe close
3427
-				if(!empty($args['row']['close'])){
3428
-					echo "))";
3429
-				}
3425
+            if(!empty($args['row'])){
3426
+                // maybe close
3427
+                if(!empty($args['row']['close'])){
3428
+                    echo "))";
3429
+                }
3430 3430
 
3431
-				echo "),";
3432
-			}
3433
-		}
3431
+                echo "),";
3432
+            }
3433
+        }
3434 3434
 
3435
-		public function block_tab_start($key, $args){
3435
+        public function block_tab_start($key, $args){
3436 3436
 
3437
-			// check for row
3438
-			if(!empty($args['tab'])){
3437
+            // check for row
3438
+            if(!empty($args['tab'])){
3439 3439
 
3440
-				if(!empty($args['tab']['tabs_open'])){
3440
+                if(!empty($args['tab']['tabs_open'])){
3441 3441
 
3442
-					if(false){?><script><?php }?>
3442
+                    if(false){?><script><?php }?>
3443 3443
 
3444 3444
 el('div',{className: 'bsui'},
3445 3445
 
@@ -3452,12 +3452,12 @@  discard block
 block discarded – undo
3452 3452
 										tabs: [
3453 3453
 
3454 3454
 					<?php
3455
-					if(false){?></script><?php }
3456
-				}
3455
+                    if(false){?></script><?php }
3456
+                }
3457 3457
 
3458
-				if(!empty($args['tab']['open'])){
3458
+                if(!empty($args['tab']['open'])){
3459 3459
 
3460
-					if(false){?><script><?php }?>
3460
+                    if(false){?><script><?php }?>
3461 3461
 							{
3462 3462
 												name: '<?php echo addslashes( esc_attr( $args['tab']['key']) ); ?>',
3463 3463
 												title: el('div', {dangerouslySetInnerHTML: {__html: '<?php echo addslashes( esc_attr( $args['tab']['title']) ); ?>'}}),
@@ -3466,93 +3466,93 @@  discard block
 block discarded – undo
3466 3466
 									className: 'components-base-control__help mb-0',
3467 3467
 									dangerouslySetInnerHTML: {__html:'<?php echo addslashes( $args['tab']['desc'] ); ?>'}
3468 3468
 								}),<?php }
3469
-					if(false){?></script><?php }
3470
-				}
3469
+                    if(false){?></script><?php }
3470
+                }
3471 3471
 
3472
-			}
3472
+            }
3473 3473
 
3474
-		}
3474
+        }
3475 3475
 
3476
-		public function block_tab_end($key, $args){
3476
+        public function block_tab_end($key, $args){
3477 3477
 
3478
-			if(!empty($args['tab'])){
3479
-				// maybe close
3480
-				if(!empty($args['tab']['close'])){
3481
-					echo ")}, /* tab close */";
3482
-				}
3478
+            if(!empty($args['tab'])){
3479
+                // maybe close
3480
+                if(!empty($args['tab']['close'])){
3481
+                    echo ")}, /* tab close */";
3482
+                }
3483 3483
 
3484
-				if(!empty($args['tab']['tabs_close'])){
3485
-					if(false){?><script><?php }?>
3484
+                if(!empty($args['tab']['tabs_close'])){
3485
+                    if(false){?><script><?php }?>
3486 3486
 						]}, ( tab ) => {
3487 3487
 								return tab.content;
3488 3488
 							}
3489 3489
 						)), /* tabs close */
3490 3490
 					<?php if(false){ ?></script><?php }
3491
-				}
3492
-			}
3493
-		}
3494
-
3495
-		public function build_block_arguments( $key, $args ) {
3496
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3497
-			$options           = '';
3498
-			$extra             = '';
3499
-			$require           = '';
3500
-			$inside_elements   = '';
3501
-			$after_elements	   = '';
3502
-
3503
-			// `content` is a protected and special argument
3504
-			if ( $key == 'content' ) {
3505
-				return;
3506
-			}
3507
-
3508
-			$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3509
-			$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3510
-			$device_type_icon = '';
3511
-			if($device_type=='Desktop'){
3512
-				$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3513
-			}elseif($device_type=='Tablet'){
3514
-				$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3515
-			}elseif($device_type=='Mobile'){
3516
-				$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3517
-			}
3518
-
3519
-			// icon
3520
-			$icon = '';
3521
-			if( !empty( $args['icon'] ) ){
3522
-				$icon .= "el('div', {";
3523
-									$icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3524
-									$icon .= "className: 'text-center',";
3525
-									$icon .= "title: '".addslashes( $args['title'] )."',";
3526
-								$icon .= "}),";
3527
-
3528
-				// blank title as its added to the icon.
3529
-				$args['title'] = '';
3530
-			}
3531
-
3532
-			// require advanced
3533
-			$require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3534
-
3535
-			// element require
3536
-			$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3537
-
3538
-
3539
-			$onchange  = "props.setAttributes({ $key: $key } )";
3540
-			$onchangecomplete  = "";
3541
-			$value     = "props.attributes.$key";
3542
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3543
-			if ( in_array( $args['type'], $text_type ) ) {
3544
-				$type = 'TextControl';
3545
-				// Save numbers as numbers and not strings
3546
-				if ( $args['type'] == 'number' ) {
3547
-					$onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3548
-				}
3549
-
3550
-				if (substr($key, 0, 9 ) === 'metadata_') {
3551
-					$real_key = str_replace('metadata_','', $key );
3552
-					$onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3553
-					$value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3554
-				}
3555
-			}
3491
+                }
3492
+            }
3493
+        }
3494
+
3495
+        public function build_block_arguments( $key, $args ) {
3496
+            $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3497
+            $options           = '';
3498
+            $extra             = '';
3499
+            $require           = '';
3500
+            $inside_elements   = '';
3501
+            $after_elements	   = '';
3502
+
3503
+            // `content` is a protected and special argument
3504
+            if ( $key == 'content' ) {
3505
+                return;
3506
+            }
3507
+
3508
+            $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3509
+            $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3510
+            $device_type_icon = '';
3511
+            if($device_type=='Desktop'){
3512
+                $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3513
+            }elseif($device_type=='Tablet'){
3514
+                $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3515
+            }elseif($device_type=='Mobile'){
3516
+                $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3517
+            }
3518
+
3519
+            // icon
3520
+            $icon = '';
3521
+            if( !empty( $args['icon'] ) ){
3522
+                $icon .= "el('div', {";
3523
+                                    $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3524
+                                    $icon .= "className: 'text-center',";
3525
+                                    $icon .= "title: '".addslashes( $args['title'] )."',";
3526
+                                $icon .= "}),";
3527
+
3528
+                // blank title as its added to the icon.
3529
+                $args['title'] = '';
3530
+            }
3531
+
3532
+            // require advanced
3533
+            $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3534
+
3535
+            // element require
3536
+            $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3537
+
3538
+
3539
+            $onchange  = "props.setAttributes({ $key: $key } )";
3540
+            $onchangecomplete  = "";
3541
+            $value     = "props.attributes.$key";
3542
+            $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3543
+            if ( in_array( $args['type'], $text_type ) ) {
3544
+                $type = 'TextControl';
3545
+                // Save numbers as numbers and not strings
3546
+                if ( $args['type'] == 'number' ) {
3547
+                    $onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3548
+                }
3549
+
3550
+                if (substr($key, 0, 9 ) === 'metadata_') {
3551
+                    $real_key = str_replace('metadata_','', $key );
3552
+                    $onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3553
+                    $value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3554
+                }
3555
+            }
3556 3556
 //			else if ( $args['type'] == 'popup' ) {
3557 3557
 //				$type = 'TextControl';
3558 3558
 //				$args['type'] == 'text';
@@ -3570,21 +3570,21 @@  discard block
 block discarded – undo
3570 3570
 //
3571 3571
 //				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3572 3572
 //			}
3573
-			else if ( $args['type'] == 'styleid' ) {
3574
-				$type = 'TextControl';
3575
-				$args['type'] == 'text';
3576
-				// Save numbers as numbers and not strings
3577
-				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3578
-			}else if ( $args['type'] == 'notice' ) {
3579
-
3580
-				$notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3581
-				$notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3582
-
3583
-				$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'}}))),";
3584
-				echo $notice_message ? $element_require . $notice : '';
3585
-				return;
3586
-			}
3587
-			/*
3573
+            else if ( $args['type'] == 'styleid' ) {
3574
+                $type = 'TextControl';
3575
+                $args['type'] == 'text';
3576
+                // Save numbers as numbers and not strings
3577
+                $value     = "props.attributes.$key ? props.attributes.$key : ''";
3578
+            }else if ( $args['type'] == 'notice' ) {
3579
+
3580
+                $notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3581
+                $notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3582
+
3583
+                $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'}}))),";
3584
+                echo $notice_message ? $element_require . $notice : '';
3585
+                return;
3586
+            }
3587
+            /*
3588 3588
 			 * https://www.wptricks.com/question/set-current-tab-on-a-gutenberg-tabpanel-component-from-outside-that-component/ es5 layout
3589 3589
 						elseif($args['type']=='tabs'){
3590 3590
 							?>
@@ -3637,22 +3637,22 @@  discard block
 block discarded – undo
3637 3637
 							return;
3638 3638
 						}
3639 3639
 */
3640
-			elseif ( $args['type'] == 'color' ) {
3641
-				$type = 'ColorPicker';
3642
-				$onchange = "";
3643
-				$extra = "color: $value,";
3644
-				if(!empty($args['disable_alpha'])){
3645
-					$extra .= "disableAlpha: true,";
3646
-				}
3647
-				$onchangecomplete = "onChangeComplete: function($key) {
3640
+            elseif ( $args['type'] == 'color' ) {
3641
+                $type = 'ColorPicker';
3642
+                $onchange = "";
3643
+                $extra = "color: $value,";
3644
+                if(!empty($args['disable_alpha'])){
3645
+                    $extra .= "disableAlpha: true,";
3646
+                }
3647
+                $onchangecomplete = "onChangeComplete: function($key) {
3648 3648
 				value =  $key.rgb.a && $key.rgb.a < 1 ? \"rgba(\"+$key.rgb.r+\",\"+$key.rgb.g+\",\"+$key.rgb.b+\",\"+$key.rgb.a+\")\" : $key.hex;
3649 3649
 						props.setAttributes({
3650 3650
 							$key: value
3651 3651
 						});
3652 3652
 					},";
3653
-			}elseif ( $args['type'] == 'gradient' ) {
3654
-				$type = 'GradientPicker';
3655
-				$extra .= "gradients: [{
3653
+            }elseif ( $args['type'] == 'gradient' ) {
3654
+                $type = 'GradientPicker';
3655
+                $extra .= "gradients: [{
3656 3656
 			name: 'Vivid cyan blue to vivid purple',
3657 3657
 			gradient:
3658 3658
 				'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
@@ -3689,10 +3689,10 @@  discard block
 block discarded – undo
3689 3689
 			slug: 'cool-to-warm-spectrum',
3690 3690
 		}],";
3691 3691
 
3692
-			}elseif ( $args['type'] == 'image' ) {
3692
+            }elseif ( $args['type'] == 'image' ) {
3693 3693
 //                print_r($args);
3694 3694
 
3695
-				$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,{
3695
+                $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,{
3696 3696
 							url:  props.attributes.{$key}_use_featured === true ? 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxzdmcgYmFzZVByb2ZpbGU9InRpbnkiIGhlaWdodD0iNDAwIiB2ZXJzaW9uPSIxLjIiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzIC8+PHJlY3QgZmlsbD0iI2QzZDNkMyIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiIHg9IjAiIHk9IjAiIC8+PGxpbmUgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgeDE9IjAiIHgyPSI0MDAiIHkxPSIwIiB5Mj0iNDAwIiAvPjxsaW5lIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHgxPSIwIiB4Mj0iNDAwIiB5MT0iNDAwIiB5Mj0iMCIgLz48cmVjdCBmaWxsPSIjZDNkM2QzIiBoZWlnaHQ9IjUwIiB3aWR0aD0iMjE4LjAiIHg9IjkxLjAiIHk9IjE3NS4wIiAvPjx0ZXh0IGZpbGw9IndoaXRlIiBmb250LXNpemU9IjMwIiBmb250LXdlaWdodD0iYm9sZCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjAwLjAiIHk9IjIwNy41Ij5QTEFDRUhPTERFUjwvdGV4dD48L3N2Zz4='  : props.attributes.$key,
3697 3697
 							value: props.attributes.{$key}_xy.x !== undefined && props.attributes.{$key}_xy.x >= 0 ? props.attributes.{$key}_xy  : {x: 0.5,y: 0.5,},
3698 3698
 //                            value: props.attributes.{$key}_xy,
@@ -3713,16 +3713,16 @@  discard block
 block discarded – undo
3713 3713
 						}), ";
3714 3714
 
3715 3715
 
3716
-				$value = '""';
3717
-				$type = 'MediaUpload';
3718
-				$extra .= "onSelect: function(media){
3716
+                $value = '""';
3717
+                $type = 'MediaUpload';
3718
+                $extra .= "onSelect: function(media){
3719 3719
 					  return props.setAttributes({
3720 3720
 						  $key: media.url,
3721 3721
 						  {$key}_id: media.id
3722 3722
 						});
3723 3723
 					  },";
3724
-				   $extra .= "type: 'image',";
3725
-				   $extra .= "render: function (obj) {
3724
+                    $extra .= "type: 'image',";
3725
+                    $extra .= "render: function (obj) {
3726 3726
 						return el( 'div',{},
3727 3727
 						( !props.attributes.$key && !props.attributes.{$key}_use_featured ) && el( wp.components.Button, {
3728 3728
 						  className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
@@ -3748,11 +3748,11 @@  discard block
 block discarded – undo
3748 3748
 
3749 3749
 
3750 3750
 					  }";
3751
-				$onchange = "";
3751
+                $onchange = "";
3752 3752
 
3753
-				//$inside_elements = ",el('div',{},'file upload')";
3754
-			} else if ( $args['type'] == 'images' ) {
3755
-				$img_preview = "props.attributes.$key && (function() {
3753
+                //$inside_elements = ",el('div',{},'file upload')";
3754
+            } else if ( $args['type'] == 'images' ) {
3755
+                $img_preview = "props.attributes.$key && (function() {
3756 3756
 	let uploads = JSON.parse('['+props.attributes.$key+']');
3757 3757
 	let images = [];
3758 3758
 	uploads.map((upload, index) => (
@@ -3779,9 +3779,9 @@  discard block
 block discarded – undo
3779 3779
 })(),";
3780 3780
 
3781 3781
 
3782
-				$value = '""';
3783
-				$type = 'MediaUpload';
3784
-				$extra .= "onSelect: function(media){
3782
+                $value = '""';
3783
+                $type = 'MediaUpload';
3784
+                $extra .= "onSelect: function(media){
3785 3785
 	let slim_images = props.attributes.$key ? JSON.parse('['+props.attributes.$key+']') : [];
3786 3786
 	if(media.length){
3787 3787
 		for (var i=0; i < media.length; i++) {
@@ -3794,9 +3794,9 @@  discard block
 block discarded – undo
3794 3794
 	}
3795 3795
 	return props.setAttributes({ $key: slimImagesV});
3796 3796
 },";
3797
-				$extra .= "type: 'image',";
3798
-				$extra .= "multiple: true,";
3799
-				$extra .= "render: function (obj) {
3797
+                $extra .= "type: 'image',";
3798
+                $extra .= "multiple: true,";
3799
+                $extra .= "render: function (obj) {
3800 3800
 	/* Init the sort */
3801 3801
 	enableDragSort('sd-sortable');
3802 3802
 	return el( 'div',{},
@@ -3823,40 +3823,40 @@  discard block
 block discarded – undo
3823 3823
 		)
3824 3824
 	)
3825 3825
 }";
3826
-				$onchange = "";
3827
-
3828
-				//$inside_elements = ",el('div',{},'file upload')";
3829
-			}
3830
-			elseif ( $args['type'] == 'checkbox' ) {
3831
-				$type = 'CheckboxControl';
3832
-				$extra .= "checked: props.attributes.$key,";
3833
-				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3834
-			} elseif ( $args['type'] == 'textarea' ) {
3835
-				$type = 'TextareaControl';
3836
-
3837
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3838
-				$type = 'SelectControl';
3839
-
3840
-				if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3841
-					$options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3842
-				}elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3843
-					$options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3844
-				}else {
3845
-
3846
-					if ( ! empty( $args['options'] ) ) {
3847
-						$options .= "options: [";
3848
-						foreach ( $args['options'] as $option_val => $option_label ) {
3849
-							$options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3850
-						}
3851
-						$options .= "],";
3852
-					}
3853
-				}
3854
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3855
-					$extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3856
-				}
3857
-
3858
-				if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3859
-					$after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3826
+                $onchange = "";
3827
+
3828
+                //$inside_elements = ",el('div',{},'file upload')";
3829
+            }
3830
+            elseif ( $args['type'] == 'checkbox' ) {
3831
+                $type = 'CheckboxControl';
3832
+                $extra .= "checked: props.attributes.$key,";
3833
+                $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3834
+            } elseif ( $args['type'] == 'textarea' ) {
3835
+                $type = 'TextareaControl';
3836
+
3837
+            } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3838
+                $type = 'SelectControl';
3839
+
3840
+                if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3841
+                    $options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3842
+                }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3843
+                    $options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3844
+                }else {
3845
+
3846
+                    if ( ! empty( $args['options'] ) ) {
3847
+                        $options .= "options: [";
3848
+                        foreach ( $args['options'] as $option_val => $option_label ) {
3849
+                            $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3850
+                        }
3851
+                        $options .= "],";
3852
+                    }
3853
+                }
3854
+                if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3855
+                    $extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3856
+                }
3857
+
3858
+                if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3859
+                    $after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3860 3860
 									  className: 'components-button components-circular-option-picker__clear is-secondary is-small',
3861 3861
 									  style: {margin:'-8px 0 8px 0',display: 'block'},
3862 3862
 									  onClick: function(){
@@ -3867,8 +3867,8 @@  discard block
 block discarded – undo
3867 3867
 									},
3868 3868
 									'Clear'
3869 3869
 							),";
3870
-				}
3871
-			} elseif ( $args['type'] == 'tagselect' ) {
3870
+                }
3871
+            } elseif ( $args['type'] == 'tagselect' ) {
3872 3872
 //				$type = 'FormTokenField';
3873 3873
 //
3874 3874
 //				if ( ! empty( $args['options'] ) ) {
@@ -3903,20 +3903,20 @@  discard block
 block discarded – undo
3903 3903
 //				$value     = "[]";
3904 3904
 //				$extra .= ' __experimentalExpandOnFocus: true,';
3905 3905
 
3906
-			} else if ( $args['type'] == 'alignment' ) {
3907
-				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
3908
-			} else if ( $args['type'] == 'margins' ) {
3909
-
3910
-			} else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
3911
-				$type = 'TextControl';
3912
-				$value = "(props.attributes.$key ? props.attributes.$key : '')";
3913
-				$args['type'] = 'text';
3914
-				$options .= 'disabled:true,';
3915
-				$bsvc_title = esc_attr( addslashes( $args['title'] ) );
3916
-				$bsvc_body = $this->block_visibility_fields( $args );
3917
-				// @TODO reset button
3918
-				$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>';
3919
-				$after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
3906
+            } else if ( $args['type'] == 'alignment' ) {
3907
+                $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
3908
+            } else if ( $args['type'] == 'margins' ) {
3909
+
3910
+            } else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
3911
+                $type = 'TextControl';
3912
+                $value = "(props.attributes.$key ? props.attributes.$key : '')";
3913
+                $args['type'] = 'text';
3914
+                $options .= 'disabled:true,';
3915
+                $bsvc_title = esc_attr( addslashes( $args['title'] ) );
3916
+                $bsvc_body = $this->block_visibility_fields( $args );
3917
+                // @TODO reset button
3918
+                $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>';
3919
+                $after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
3920 3920
 						className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
3921 3921
 						onClick: function() {
3922 3922
 							var sValue = props.attributes." . $key . ";
@@ -3942,39 +3942,39 @@  discard block
 block discarded – undo
3942 3942
 					},
3943 3943
 					'" . addslashes( ! empty( $args['button_title'] ) ? $args['button_title'] : $args['title'] ) . "'
3944 3944
 				) ),";
3945
-			} else {
3946
-				return;// if we have not implemented the control then don't break the JS.
3947
-			}
3948
-
3949
-			// color input does not show the labels so we add them
3950
-			if($args['type']=='color'){
3951
-				// add show only if advanced
3952
-				echo $require_advanced;
3953
-				// add setting require if defined
3954
-				echo $element_require;
3955
-				echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
3956
-			}
3957
-
3958
-			// add show only if advanced
3959
-			echo $require_advanced;
3960
-			// add setting require if defined
3961
-			echo $element_require;
3962
-			echo $device_type_require;
3963
-
3964
-			// icon
3965
-			echo $icon;
3966
-			?>
3945
+            } else {
3946
+                return;// if we have not implemented the control then don't break the JS.
3947
+            }
3948
+
3949
+            // color input does not show the labels so we add them
3950
+            if($args['type']=='color'){
3951
+                // add show only if advanced
3952
+                echo $require_advanced;
3953
+                // add setting require if defined
3954
+                echo $element_require;
3955
+                echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
3956
+            }
3957
+
3958
+            // add show only if advanced
3959
+            echo $require_advanced;
3960
+            // add setting require if defined
3961
+            echo $element_require;
3962
+            echo $device_type_require;
3963
+
3964
+            // icon
3965
+            echo $icon;
3966
+            ?>
3967 3967
 			el( <?php echo $args['type'] == 'image' || $args['type'] == 'images' ? $type  : "wp.components.".$type; ?>, {
3968 3968
 			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
3969
-			} else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
3969
+            } else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
3970 3970
 			help: <?php echo ( isset( $args['desc'] ) ? "el('span', {dangerouslySetInnerHTML: {__html: '" . trim( wp_kses_post( addslashes( $args['desc'] ) ) ) . "'}})" : "''" ); ?>,
3971 3971
 			value: <?php echo $value; ?>,
3972 3972
 			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
3973
-				echo "type: '" . addslashes( $args['type'] ) . "',";
3974
-			} ?>
3973
+                echo "type: '" . addslashes( $args['type'] ) . "',";
3974
+            } ?>
3975 3975
 			<?php if ( ! empty( $args['placeholder'] ) ) {
3976
-				echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
3977
-			} ?>
3976
+                echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
3977
+            } ?>
3978 3978
 			<?php echo $options; ?>
3979 3979
 			<?php echo $extra; ?>
3980 3980
 			<?php echo $custom_attributes; ?>
@@ -3986,1264 +3986,1264 @@  discard block
 block discarded – undo
3986 3986
 			<?php } ?>
3987 3987
 		} <?php echo $inside_elements; ?> ),
3988 3988
 			<?php
3989
-			echo $after_elements;
3990
-		}
3991
-
3992
-		/**
3993
-		 * Convert an array of attributes to block string.
3994
-		 *
3995
-		 * @param $custom_attributes
3996
-		 *
3997
-		 * @return string
3998
-		 *@todo there is prob a faster way to do this, also we could add some validation here.
3999
-		 *
4000
-		 */
4001
-		public function array_to_attributes( $custom_attributes, $html = false ) {
4002
-			$attributes = '';
4003
-			if ( ! empty( $custom_attributes ) ) {
4004
-
4005
-				foreach ( $custom_attributes as $key => $val ) {
4006
-					if(is_array($val)){
4007
-						$attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4008
-					}else{
4009
-						$attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4010
-					}
4011
-				}
4012
-
4013
-			}
4014
-
4015
-			return $attributes;
4016
-		}
4017
-
4018
-
4019
-
4020
-		/**
4021
-		 * A self looping function to create the output for JS block elements.
4022
-		 *
4023
-		 * This is what is output in the WP Editor visual view.
4024
-		 *
4025
-		 * @param $args
4026
-		 */
4027
-		public function block_element( $args, $save = false ) {
3989
+            echo $after_elements;
3990
+        }
3991
+
3992
+        /**
3993
+         * Convert an array of attributes to block string.
3994
+         *
3995
+         * @param $custom_attributes
3996
+         *
3997
+         * @return string
3998
+         *@todo there is prob a faster way to do this, also we could add some validation here.
3999
+         *
4000
+         */
4001
+        public function array_to_attributes( $custom_attributes, $html = false ) {
4002
+            $attributes = '';
4003
+            if ( ! empty( $custom_attributes ) ) {
4004
+
4005
+                foreach ( $custom_attributes as $key => $val ) {
4006
+                    if(is_array($val)){
4007
+                        $attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4008
+                    }else{
4009
+                        $attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4010
+                    }
4011
+                }
4012
+
4013
+            }
4014
+
4015
+            return $attributes;
4016
+        }
4017
+
4018
+
4019
+
4020
+        /**
4021
+         * A self looping function to create the output for JS block elements.
4022
+         *
4023
+         * This is what is output in the WP Editor visual view.
4024
+         *
4025
+         * @param $args
4026
+         */
4027
+        public function block_element( $args, $save = false ) {
4028 4028
 
4029 4029
 //            print_r($args);echo '###';exit;
4030 4030
 
4031
-			if ( ! empty( $args ) ) {
4032
-				foreach ( $args as $element => $new_args ) {
4031
+            if ( ! empty( $args ) ) {
4032
+                foreach ( $args as $element => $new_args ) {
4033 4033
 
4034
-					if ( is_array( $new_args ) ) { // its an element
4034
+                    if ( is_array( $new_args ) ) { // its an element
4035 4035
 
4036 4036
 
4037
-						if ( isset( $new_args['element'] ) ) {
4037
+                        if ( isset( $new_args['element'] ) ) {
4038 4038
 
4039
-							if ( isset( $new_args['element_require'] ) ) {
4040
-								echo str_replace( array(
4041
-										"'+",
4042
-										"+'"
4043
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4044
-								unset( $new_args['element_require'] );
4045
-							}
4039
+                            if ( isset( $new_args['element_require'] ) ) {
4040
+                                echo str_replace( array(
4041
+                                        "'+",
4042
+                                        "+'"
4043
+                                    ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4044
+                                unset( $new_args['element_require'] );
4045
+                            }
4046 4046
 
4047
-							if($new_args['element']=='InnerBlocks'){
4048
-								echo "\n el( InnerBlocks, {";
4049
-							}elseif($new_args['element']=='innerBlocksProps'){
4050
-								$element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4051
-							  //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4047
+                            if($new_args['element']=='InnerBlocks'){
4048
+                                echo "\n el( InnerBlocks, {";
4049
+                            }elseif($new_args['element']=='innerBlocksProps'){
4050
+                                $element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4051
+                                //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4052 4052
 //                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4053
-								echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4054
-								echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4055
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4056
-
4057
-								echo "} ), {";
4058
-								echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4059
-							//    echo '###';
4060
-
4061
-							  //  echo '###';
4062
-							}elseif($new_args['element']=='BlocksProps'){
4063
-
4064
-								if ( isset($new_args['if_inner_element']) ) {
4065
-									$element = $new_args['if_inner_element'];
4066
-								}else {
4067
-									$element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4068
-								}
4069
-
4070
-								unset($new_args['inner_element']);
4071
-								echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4072
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4073
-
4074
-
4075
-							   // echo "} ),";
4076
-
4077
-							}else{
4078
-								echo "\n el( '" . $new_args['element'] . "', {";
4079
-							}
4080
-
4081
-
4082
-							// get the attributes
4083
-							foreach ( $new_args as $new_key => $new_value ) {
4084
-
4085
-
4086
-								if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4087
-									// do nothing
4088
-								} else {
4089
-									echo $this->block_element( array( $new_key => $new_value ),$save );
4090
-								}
4091
-							}
4092
-
4093
-							echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4094
-
4095
-							// get the content
4096
-							$first_item = 0;
4097
-							foreach ( $new_args as $new_key => $new_value ) {
4098
-								if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4099
-
4100
-									if ( $new_key === 'content' ) {
4101
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4102
-									}else if ( $new_key === 'if_content' ) {
4103
-										echo  $this->block_props_replace(  $new_value  );
4104
-									}
4105
-
4106
-									if ( is_array( $new_value ) ) {
4107
-
4108
-										if ( isset( $new_value['element_require'] ) ) {
4109
-											echo str_replace( array(
4110
-													"'+",
4111
-													"+'"
4112
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4113
-											unset( $new_value['element_require'] );
4114
-										}
4115
-
4116
-										if ( isset( $new_value['element_repeat'] ) ) {
4117
-											$x = 1;
4118
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
4119
-												$this->block_element( array( '' => $new_value ),$save );
4120
-												$x ++;
4121
-											}
4122
-										} else {
4123
-											$this->block_element( array( '' => $new_value ),$save );
4124
-										}
4125
-									}
4126
-									$first_item ++;
4127
-								}
4128
-							}
4129
-
4130
-							if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4131
-								echo "))";// end content
4132
-							}else{
4133
-								echo ")";// end content
4134
-							}
4135
-
4136
-
4137
-							echo ", \n";
4138
-
4139
-						}
4140
-					} else {
4141
-
4142
-						if ( substr( $element, 0, 3 ) === "if_" ) {
4143
-							$extra = '';
4144
-							if( strpos($new_args, '[%WrapClass%]') !== false ){
4145
-								$new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4146
-								$new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4147
-							}
4148
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4149
-						} elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4150
-							$new_args = str_replace('[%WrapStyle%]','',$new_args);
4151
-							echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4053
+                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4054
+                                echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4055
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4056
+
4057
+                                echo "} ), {";
4058
+                                echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4059
+                            //    echo '###';
4060
+
4061
+                                //  echo '###';
4062
+                            }elseif($new_args['element']=='BlocksProps'){
4063
+
4064
+                                if ( isset($new_args['if_inner_element']) ) {
4065
+                                    $element = $new_args['if_inner_element'];
4066
+                                }else {
4067
+                                    $element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4068
+                                }
4069
+
4070
+                                unset($new_args['inner_element']);
4071
+                                echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4072
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4073
+
4074
+
4075
+                                // echo "} ),";
4076
+
4077
+                            }else{
4078
+                                echo "\n el( '" . $new_args['element'] . "', {";
4079
+                            }
4080
+
4081
+
4082
+                            // get the attributes
4083
+                            foreach ( $new_args as $new_key => $new_value ) {
4084
+
4085
+
4086
+                                if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4087
+                                    // do nothing
4088
+                                } else {
4089
+                                    echo $this->block_element( array( $new_key => $new_value ),$save );
4090
+                                }
4091
+                            }
4092
+
4093
+                            echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4094
+
4095
+                            // get the content
4096
+                            $first_item = 0;
4097
+                            foreach ( $new_args as $new_key => $new_value ) {
4098
+                                if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4099
+
4100
+                                    if ( $new_key === 'content' ) {
4101
+                                        echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4102
+                                    }else if ( $new_key === 'if_content' ) {
4103
+                                        echo  $this->block_props_replace(  $new_value  );
4104
+                                    }
4105
+
4106
+                                    if ( is_array( $new_value ) ) {
4107
+
4108
+                                        if ( isset( $new_value['element_require'] ) ) {
4109
+                                            echo str_replace( array(
4110
+                                                    "'+",
4111
+                                                    "+'"
4112
+                                                ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4113
+                                            unset( $new_value['element_require'] );
4114
+                                        }
4115
+
4116
+                                        if ( isset( $new_value['element_repeat'] ) ) {
4117
+                                            $x = 1;
4118
+                                            while ( $x <= absint( $new_value['element_repeat'] ) ) {
4119
+                                                $this->block_element( array( '' => $new_value ),$save );
4120
+                                                $x ++;
4121
+                                            }
4122
+                                        } else {
4123
+                                            $this->block_element( array( '' => $new_value ),$save );
4124
+                                        }
4125
+                                    }
4126
+                                    $first_item ++;
4127
+                                }
4128
+                            }
4129
+
4130
+                            if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4131
+                                echo "))";// end content
4132
+                            }else{
4133
+                                echo ")";// end content
4134
+                            }
4135
+
4136
+
4137
+                            echo ", \n";
4138
+
4139
+                        }
4140
+                    } else {
4141
+
4142
+                        if ( substr( $element, 0, 3 ) === "if_" ) {
4143
+                            $extra = '';
4144
+                            if( strpos($new_args, '[%WrapClass%]') !== false ){
4145
+                                $new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4146
+                                $new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4147
+                            }
4148
+                            echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4149
+                        } elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4150
+                            $new_args = str_replace('[%WrapStyle%]','',$new_args);
4151
+                            echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4152 4152
 //                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4153
-						} elseif ( $element == 'style' ) {
4154
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4155
-						} elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4156
-							$new_args = str_replace('[%WrapClass%]','',$new_args);
4157
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4158
-						} elseif ( $element == 'template' && $new_args ) {
4159
-							echo $element . ": $new_args,";
4160
-						} else {
4161
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4162
-						}
4163
-
4164
-					}
4165
-				}
4166
-			}
4167
-		}
4168
-
4169
-		/**
4170
-		 * Replace block attributes placeholders with the proper naming.
4171
-		 *
4172
-		 * @param $string
4173
-		 *
4174
-		 * @return mixed
4175
-		 */
4176
-		public function block_props_replace( $string, $no_wrap = false ) {
4177
-			if ( $no_wrap ) {
4178
-				$string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4179
-			} else {
4180
-				$string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4181
-			}
4182
-
4183
-			return $string;
4184
-		}
4185
-
4186
-		/**
4187
-		 * Outputs the content of the widget
4188
-		 *
4189
-		 * @param array $args
4190
-		 * @param array $instance
4191
-		 */
4192
-		public function widget( $args, $instance ) {
4193
-			if ( ! is_array( $args ) ) {
4194
-				$args = array();
4195
-			}
4196
-
4197
-			// Get the filtered values
4198
-			$argument_values = $this->argument_values( $instance );
4199
-			$argument_values = $this->string_to_bool( $argument_values );
4200
-			$output          = $this->output( $argument_values, $args );
4201
-
4202
-			$no_wrap = false;
4203
-			if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4204
-				$no_wrap = true;
4205
-			}
4206
-
4207
-			ob_start();
4208
-			if ( $output && ! $no_wrap ) {
4209
-
4210
-				$class_original = $this->options['widget_ops']['classname'];
4211
-				$class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4212
-
4213
-				// Before widget
4214
-				$before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4215
-				$before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4216
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4217
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4218
-
4219
-				// After widget
4220
-				$after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4221
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4222
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4223
-
4224
-				echo $before_widget;
4225
-				// elementor strips the widget wrapping div so we check for and add it back if needed
4226
-				if ( $this->is_elementor_widget_output() ) {
4227
-					// Filter class & attrs for elementor widget output.
4228
-					$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4229
-					$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4230
-
4231
-					$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4232
-					$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4233
-
4234
-					echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4235
-				}
4236
-				echo $this->output_title( $args, $instance );
4237
-				echo $output;
4238
-				if ( $this->is_elementor_widget_output() ) {
4239
-					echo "</span>";
4240
-				}
4241
-				echo $after_widget;
4242
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4243
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4244
-				echo $output;
4245
-			} elseif ( $output && $no_wrap ) {
4246
-				echo $output;
4247
-			}
4248
-			$output = ob_get_clean();
4249
-
4250
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4251
-
4252
-			echo $output;
4253
-		}
4254
-
4255
-		/**
4256
-		 * Tests if the current output is inside a elementor container.
4257
-		 *
4258
-		 * @return bool
4259
-		 *@since 1.0.4
4260
-		 */
4261
-		public function is_elementor_widget_output() {
4262
-			$result = false;
4263
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4264
-				$result = true;
4265
-			}
4266
-
4267
-			return $result;
4268
-		}
4269
-
4270
-		/**
4271
-		 * Tests if the current output is inside a elementor preview.
4272
-		 *
4273
-		 * @return bool
4274
-		 *@since 1.0.4
4275
-		 */
4276
-		public function is_elementor_preview() {
4277
-			$result = false;
4278
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4279
-				$result = true;
4280
-			}
4281
-
4282
-			return $result;
4283
-		}
4284
-
4285
-		/**
4286
-		 * Tests if the current output is inside a Divi preview.
4287
-		 *
4288
-		 * @return bool
4289
-		 *@since 1.0.6
4290
-		 */
4291
-		public function is_divi_preview() {
4292
-			$result = false;
4293
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4294
-				$result = true;
4295
-			}
4296
-
4297
-			return $result;
4298
-		}
4299
-
4300
-		/**
4301
-		 * Tests if the current output is inside a Beaver builder preview.
4302
-		 *
4303
-		 * @return bool
4304
-		 *@since 1.0.6
4305
-		 */
4306
-		public function is_beaver_preview() {
4307
-			$result = false;
4308
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
4309
-				$result = true;
4310
-			}
4311
-
4312
-			return $result;
4313
-		}
4314
-
4315
-		/**
4316
-		 * Tests if the current output is inside a siteorigin builder preview.
4317
-		 *
4318
-		 * @return bool
4319
-		 *@since 1.0.6
4320
-		 */
4321
-		public function is_siteorigin_preview() {
4322
-			$result = false;
4323
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4324
-				$result = true;
4325
-			}
4326
-
4327
-			return $result;
4328
-		}
4329
-
4330
-		/**
4331
-		 * Tests if the current output is inside a cornerstone builder preview.
4332
-		 *
4333
-		 * @return bool
4334
-		 *@since 1.0.8
4335
-		 */
4336
-		public function is_cornerstone_preview() {
4337
-			$result = false;
4338
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4339
-				$result = true;
4340
-			}
4341
-
4342
-			return $result;
4343
-		}
4344
-
4345
-		/**
4346
-		 * Tests if the current output is inside a fusion builder preview.
4347
-		 *
4348
-		 * @return bool
4349
-		 *@since 1.1.0
4350
-		 */
4351
-		public function is_fusion_preview() {
4352
-			$result = false;
4353
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4354
-				$result = true;
4355
-			}
4356
-
4357
-			return $result;
4358
-		}
4359
-
4360
-		/**
4361
-		 * Tests if the current output is inside a Oxygen builder preview.
4362
-		 *
4363
-		 * @return bool
4364
-		 *@since 1.0.18
4365
-		 */
4366
-		public function is_oxygen_preview() {
4367
-			$result = false;
4368
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4369
-				$result = true;
4370
-			}
4371
-
4372
-			return $result;
4373
-		}
4374
-
4375
-		/**
4376
-		 * Check for Kallyas theme Zion builder preview.
4377
-		 *
4378
-		 * @since 1.1.22
4379
-		 *
4380
-		 * @return bool True when preview page otherwise false.
4381
-		 */
4382
-		public function is_kallyas_zion_preview() {
4383
-			$result = false;
4384
-
4385
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4386
-				$result = true;
4387
-			}
4388
-
4389
-			return $result;
4390
-		}
4391
-
4392
-		/**
4393
-		 * Check for Bricks theme builder preview.
4394
-		 *
4395
-		 * @since 1.1.31
4396
-		 *
4397
-		 * @return bool True when preview page otherwise false.
4398
-		 */
4399
-		public function is_bricks_preview() {
4400
-			$result = false;
4401
-
4402
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4403
-				$result = true;
4404
-			}
4405
-
4406
-			return $result;
4407
-		}
4408
-
4409
-		/**
4410
-		 * General function to check if we are in a preview situation.
4411
-		 *
4412
-		 * @return bool
4413
-		 *@since 1.0.6
4414
-		 */
4415
-		public function is_preview() {
4416
-			$preview = false;
4417
-			if ( $this->is_divi_preview() ) {
4418
-				$preview = true;
4419
-			} elseif ( $this->is_elementor_preview() ) {
4420
-				$preview = true;
4421
-			} elseif ( $this->is_beaver_preview() ) {
4422
-				$preview = true;
4423
-			} elseif ( $this->is_siteorigin_preview() ) {
4424
-				$preview = true;
4425
-			} elseif ( $this->is_cornerstone_preview() ) {
4426
-				$preview = true;
4427
-			} elseif ( $this->is_fusion_preview() ) {
4428
-				$preview = true;
4429
-			} elseif ( $this->is_oxygen_preview() ) {
4430
-				$preview = true;
4431
-			} elseif( $this->is_kallyas_zion_preview() ) {
4432
-				$preview = true;
4433
-			} elseif( $this->is_block_content_call() ) {
4434
-				$preview = true;
4435
-			} elseif( $this->is_bricks_preview() ) {
4436
-				$preview = true;
4437
-			}
4438
-
4439
-			return $preview;
4440
-		}
4441
-
4442
-		/**
4443
-		 * Output the super title.
4444
-		 *
4445
-		 * @param $args
4446
-		 * @param array $instance
4447
-		 *
4448
-		 * @return string
4449
-		 */
4450
-		public function output_title( $args, $instance = array() ) {
4451
-			$output = '';
4452
-			if ( ! empty( $instance['title'] ) ) {
4453
-				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4454
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4455
-
4456
-				if ( empty( $instance['widget_title_tag'] ) ) {
4457
-					if ( ! isset( $args['before_title'] ) ) {
4458
-						$args['before_title'] = '';
4459
-					}
4460
-
4461
-					if ( ! isset( $args['after_title'] ) ) {
4462
-						$args['after_title'] = '';
4463
-					}
4464
-
4465
-					$output = $args['before_title'] . $title . $args['after_title'];
4466
-				} else {
4467
-					$title_tag = esc_attr( $instance['widget_title_tag'] );
4468
-
4469
-					// classes
4470
-					$title_classes = array();
4471
-					$title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4472
-					$title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4473
-					$title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4474
-					$title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4475
-					$title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4476
-					$title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4477
-					$title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4478
-					$title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4479
-					$title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4480
-					$title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4481
-					$title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4482
-					$title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4483
-					$title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4484
-
4485
-					$class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4486
-					$output = "<$title_tag class='$class' >$title</$title_tag>";
4487
-				}
4488
-
4489
-			}
4490
-
4491
-			return $output;
4492
-		}
4493
-
4494
-		/**
4495
-		 * Outputs the options form inputs for the widget.
4496
-		 *
4497
-		 * @param array $instance The widget options.
4498
-		 */
4499
-		public function form( $instance ) {
4500
-
4501
-			// set widget instance
4502
-			$this->instance = $instance;
4503
-
4504
-			// set it as a SD widget
4505
-			echo $this->widget_advanced_toggle();
4506
-
4507
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4508
-			$arguments_raw = $this->get_arguments();
4509
-
4510
-			if ( is_array( $arguments_raw ) ) {
4511
-
4512
-				$arguments = $this->group_arguments( $arguments_raw );
4513
-
4514
-				// Do we have sections?
4515
-				$has_sections = $arguments == $arguments_raw ? false : true;
4516
-
4517
-
4518
-				if ( $has_sections ) {
4519
-					$panel_count = 0;
4520
-					foreach ( $arguments as $key => $args ) {
4521
-
4522
-						?>
4153
+                        } elseif ( $element == 'style' ) {
4154
+                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4155
+                        } elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4156
+                            $new_args = str_replace('[%WrapClass%]','',$new_args);
4157
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4158
+                        } elseif ( $element == 'template' && $new_args ) {
4159
+                            echo $element . ": $new_args,";
4160
+                        } else {
4161
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4162
+                        }
4163
+
4164
+                    }
4165
+                }
4166
+            }
4167
+        }
4168
+
4169
+        /**
4170
+         * Replace block attributes placeholders with the proper naming.
4171
+         *
4172
+         * @param $string
4173
+         *
4174
+         * @return mixed
4175
+         */
4176
+        public function block_props_replace( $string, $no_wrap = false ) {
4177
+            if ( $no_wrap ) {
4178
+                $string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4179
+            } else {
4180
+                $string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4181
+            }
4182
+
4183
+            return $string;
4184
+        }
4185
+
4186
+        /**
4187
+         * Outputs the content of the widget
4188
+         *
4189
+         * @param array $args
4190
+         * @param array $instance
4191
+         */
4192
+        public function widget( $args, $instance ) {
4193
+            if ( ! is_array( $args ) ) {
4194
+                $args = array();
4195
+            }
4196
+
4197
+            // Get the filtered values
4198
+            $argument_values = $this->argument_values( $instance );
4199
+            $argument_values = $this->string_to_bool( $argument_values );
4200
+            $output          = $this->output( $argument_values, $args );
4201
+
4202
+            $no_wrap = false;
4203
+            if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4204
+                $no_wrap = true;
4205
+            }
4206
+
4207
+            ob_start();
4208
+            if ( $output && ! $no_wrap ) {
4209
+
4210
+                $class_original = $this->options['widget_ops']['classname'];
4211
+                $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4212
+
4213
+                // Before widget
4214
+                $before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4215
+                $before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4216
+                $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4217
+                $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4218
+
4219
+                // After widget
4220
+                $after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4221
+                $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4222
+                $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4223
+
4224
+                echo $before_widget;
4225
+                // elementor strips the widget wrapping div so we check for and add it back if needed
4226
+                if ( $this->is_elementor_widget_output() ) {
4227
+                    // Filter class & attrs for elementor widget output.
4228
+                    $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4229
+                    $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4230
+
4231
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4232
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4233
+
4234
+                    echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4235
+                }
4236
+                echo $this->output_title( $args, $instance );
4237
+                echo $output;
4238
+                if ( $this->is_elementor_widget_output() ) {
4239
+                    echo "</span>";
4240
+                }
4241
+                echo $after_widget;
4242
+            } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4243
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4244
+                echo $output;
4245
+            } elseif ( $output && $no_wrap ) {
4246
+                echo $output;
4247
+            }
4248
+            $output = ob_get_clean();
4249
+
4250
+            $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4251
+
4252
+            echo $output;
4253
+        }
4254
+
4255
+        /**
4256
+         * Tests if the current output is inside a elementor container.
4257
+         *
4258
+         * @return bool
4259
+         *@since 1.0.4
4260
+         */
4261
+        public function is_elementor_widget_output() {
4262
+            $result = false;
4263
+            if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4264
+                $result = true;
4265
+            }
4266
+
4267
+            return $result;
4268
+        }
4269
+
4270
+        /**
4271
+         * Tests if the current output is inside a elementor preview.
4272
+         *
4273
+         * @return bool
4274
+         *@since 1.0.4
4275
+         */
4276
+        public function is_elementor_preview() {
4277
+            $result = false;
4278
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4279
+                $result = true;
4280
+            }
4281
+
4282
+            return $result;
4283
+        }
4284
+
4285
+        /**
4286
+         * Tests if the current output is inside a Divi preview.
4287
+         *
4288
+         * @return bool
4289
+         *@since 1.0.6
4290
+         */
4291
+        public function is_divi_preview() {
4292
+            $result = false;
4293
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4294
+                $result = true;
4295
+            }
4296
+
4297
+            return $result;
4298
+        }
4299
+
4300
+        /**
4301
+         * Tests if the current output is inside a Beaver builder preview.
4302
+         *
4303
+         * @return bool
4304
+         *@since 1.0.6
4305
+         */
4306
+        public function is_beaver_preview() {
4307
+            $result = false;
4308
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
4309
+                $result = true;
4310
+            }
4311
+
4312
+            return $result;
4313
+        }
4314
+
4315
+        /**
4316
+         * Tests if the current output is inside a siteorigin builder preview.
4317
+         *
4318
+         * @return bool
4319
+         *@since 1.0.6
4320
+         */
4321
+        public function is_siteorigin_preview() {
4322
+            $result = false;
4323
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4324
+                $result = true;
4325
+            }
4326
+
4327
+            return $result;
4328
+        }
4329
+
4330
+        /**
4331
+         * Tests if the current output is inside a cornerstone builder preview.
4332
+         *
4333
+         * @return bool
4334
+         *@since 1.0.8
4335
+         */
4336
+        public function is_cornerstone_preview() {
4337
+            $result = false;
4338
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4339
+                $result = true;
4340
+            }
4341
+
4342
+            return $result;
4343
+        }
4344
+
4345
+        /**
4346
+         * Tests if the current output is inside a fusion builder preview.
4347
+         *
4348
+         * @return bool
4349
+         *@since 1.1.0
4350
+         */
4351
+        public function is_fusion_preview() {
4352
+            $result = false;
4353
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4354
+                $result = true;
4355
+            }
4356
+
4357
+            return $result;
4358
+        }
4359
+
4360
+        /**
4361
+         * Tests if the current output is inside a Oxygen builder preview.
4362
+         *
4363
+         * @return bool
4364
+         *@since 1.0.18
4365
+         */
4366
+        public function is_oxygen_preview() {
4367
+            $result = false;
4368
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4369
+                $result = true;
4370
+            }
4371
+
4372
+            return $result;
4373
+        }
4374
+
4375
+        /**
4376
+         * Check for Kallyas theme Zion builder preview.
4377
+         *
4378
+         * @since 1.1.22
4379
+         *
4380
+         * @return bool True when preview page otherwise false.
4381
+         */
4382
+        public function is_kallyas_zion_preview() {
4383
+            $result = false;
4384
+
4385
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4386
+                $result = true;
4387
+            }
4388
+
4389
+            return $result;
4390
+        }
4391
+
4392
+        /**
4393
+         * Check for Bricks theme builder preview.
4394
+         *
4395
+         * @since 1.1.31
4396
+         *
4397
+         * @return bool True when preview page otherwise false.
4398
+         */
4399
+        public function is_bricks_preview() {
4400
+            $result = false;
4401
+
4402
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4403
+                $result = true;
4404
+            }
4405
+
4406
+            return $result;
4407
+        }
4408
+
4409
+        /**
4410
+         * General function to check if we are in a preview situation.
4411
+         *
4412
+         * @return bool
4413
+         *@since 1.0.6
4414
+         */
4415
+        public function is_preview() {
4416
+            $preview = false;
4417
+            if ( $this->is_divi_preview() ) {
4418
+                $preview = true;
4419
+            } elseif ( $this->is_elementor_preview() ) {
4420
+                $preview = true;
4421
+            } elseif ( $this->is_beaver_preview() ) {
4422
+                $preview = true;
4423
+            } elseif ( $this->is_siteorigin_preview() ) {
4424
+                $preview = true;
4425
+            } elseif ( $this->is_cornerstone_preview() ) {
4426
+                $preview = true;
4427
+            } elseif ( $this->is_fusion_preview() ) {
4428
+                $preview = true;
4429
+            } elseif ( $this->is_oxygen_preview() ) {
4430
+                $preview = true;
4431
+            } elseif( $this->is_kallyas_zion_preview() ) {
4432
+                $preview = true;
4433
+            } elseif( $this->is_block_content_call() ) {
4434
+                $preview = true;
4435
+            } elseif( $this->is_bricks_preview() ) {
4436
+                $preview = true;
4437
+            }
4438
+
4439
+            return $preview;
4440
+        }
4441
+
4442
+        /**
4443
+         * Output the super title.
4444
+         *
4445
+         * @param $args
4446
+         * @param array $instance
4447
+         *
4448
+         * @return string
4449
+         */
4450
+        public function output_title( $args, $instance = array() ) {
4451
+            $output = '';
4452
+            if ( ! empty( $instance['title'] ) ) {
4453
+                /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4454
+                $title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4455
+
4456
+                if ( empty( $instance['widget_title_tag'] ) ) {
4457
+                    if ( ! isset( $args['before_title'] ) ) {
4458
+                        $args['before_title'] = '';
4459
+                    }
4460
+
4461
+                    if ( ! isset( $args['after_title'] ) ) {
4462
+                        $args['after_title'] = '';
4463
+                    }
4464
+
4465
+                    $output = $args['before_title'] . $title . $args['after_title'];
4466
+                } else {
4467
+                    $title_tag = esc_attr( $instance['widget_title_tag'] );
4468
+
4469
+                    // classes
4470
+                    $title_classes = array();
4471
+                    $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4472
+                    $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4473
+                    $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4474
+                    $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4475
+                    $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4476
+                    $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4477
+                    $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4478
+                    $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4479
+                    $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4480
+                    $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4481
+                    $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4482
+                    $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4483
+                    $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4484
+
4485
+                    $class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4486
+                    $output = "<$title_tag class='$class' >$title</$title_tag>";
4487
+                }
4488
+
4489
+            }
4490
+
4491
+            return $output;
4492
+        }
4493
+
4494
+        /**
4495
+         * Outputs the options form inputs for the widget.
4496
+         *
4497
+         * @param array $instance The widget options.
4498
+         */
4499
+        public function form( $instance ) {
4500
+
4501
+            // set widget instance
4502
+            $this->instance = $instance;
4503
+
4504
+            // set it as a SD widget
4505
+            echo $this->widget_advanced_toggle();
4506
+
4507
+            echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4508
+            $arguments_raw = $this->get_arguments();
4509
+
4510
+            if ( is_array( $arguments_raw ) ) {
4511
+
4512
+                $arguments = $this->group_arguments( $arguments_raw );
4513
+
4514
+                // Do we have sections?
4515
+                $has_sections = $arguments == $arguments_raw ? false : true;
4516
+
4517
+
4518
+                if ( $has_sections ) {
4519
+                    $panel_count = 0;
4520
+                    foreach ( $arguments as $key => $args ) {
4521
+
4522
+                        ?>
4523 4523
 						<script>
4524 4524
 							//							jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle();
4525 4525
 						</script>
4526 4526
 						<?php
4527 4527
 
4528
-						$hide       = $panel_count ? ' style="display:none;" ' : '';
4529
-						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4530
-						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>";
4531
-						echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4528
+                        $hide       = $panel_count ? ' style="display:none;" ' : '';
4529
+                        $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4530
+                        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>";
4531
+                        echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4532 4532
 
4533
-						foreach ( $args as $k => $a ) {
4533
+                        foreach ( $args as $k => $a ) {
4534 4534
 
4535
-							$this->widget_inputs_row_start($k, $a);
4536
-							$this->widget_inputs( $a, $instance );
4537
-							$this->widget_inputs_row_end($k, $a);
4535
+                            $this->widget_inputs_row_start($k, $a);
4536
+                            $this->widget_inputs( $a, $instance );
4537
+                            $this->widget_inputs_row_end($k, $a);
4538 4538
 
4539
-						}
4539
+                        }
4540 4540
 
4541
-						echo "</div>";
4541
+                        echo "</div>";
4542 4542
 
4543
-						$panel_count ++;
4543
+                        $panel_count ++;
4544 4544
 
4545
-					}
4546
-				} else {
4547
-					foreach ( $arguments as $key => $args ) {
4548
-						$this->widget_inputs_row_start($key, $args);
4549
-						$this->widget_inputs( $args, $instance );
4550
-						$this->widget_inputs_row_end($key, $args);
4551
-					}
4552
-				}
4545
+                    }
4546
+                } else {
4547
+                    foreach ( $arguments as $key => $args ) {
4548
+                        $this->widget_inputs_row_start($key, $args);
4549
+                        $this->widget_inputs( $args, $instance );
4550
+                        $this->widget_inputs_row_end($key, $args);
4551
+                    }
4552
+                }
4553 4553
 
4554
-			}
4555
-		}
4554
+            }
4555
+        }
4556 4556
 
4557
-		public function widget_inputs_row_start( $key, $args ) {
4558
-			if ( ! empty( $args['row'] ) ) {
4559
-				// Maybe open
4560
-				if ( ! empty( $args['row']['open'] ) ) {
4561
-					?>
4557
+        public function widget_inputs_row_start( $key, $args ) {
4558
+            if ( ! empty( $args['row'] ) ) {
4559
+                // Maybe open
4560
+                if ( ! empty( $args['row']['open'] ) ) {
4561
+                    ?>
4562 4562
 					<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'] ) : '' ); ?>'>
4563 4563
 					<?php if ( ! empty( $args['row']['title'] ) ) { ?>
4564 4564
 					<?php
4565
-						if ( isset( $args['row']['icon'] ) ) {
4566
-							$args['row']['icon'] = '';
4567
-						}
4568
-
4569
-						if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4570
-							$args['row']['device_type'] = $args['device_type'];
4571
-						}
4572
-					?>
4565
+                        if ( isset( $args['row']['icon'] ) ) {
4566
+                            $args['row']['icon'] = '';
4567
+                        }
4568
+
4569
+                        if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4570
+                            $args['row']['device_type'] = $args['device_type'];
4571
+                        }
4572
+                    ?>
4573 4573
 					<label class="mb-0"><?php echo $this->widget_field_title( $args['row'] ); ?><?php echo $this->widget_field_desc( $args['row'] ); ?></label>
4574 4574
 					<?php } ?>
4575 4575
 					<div class='row<?php echo ( ! empty( $args['row']['class'] ) ? ' ' . esc_attr( $args['row']['class'] ) : '' ); ?>'>
4576 4576
 					<div class='col pr-2'>
4577 4577
 					<?php
4578
-				} else if ( ! empty( $args['row']['close'] ) ) {
4579
-					echo "<div class='col pl-0 ps-0'>";
4580
-				} else {
4581
-					echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4582
-				}
4583
-			}
4584
-		}
4585
-
4586
-		public function widget_inputs_row_end( $key, $args ) {
4587
-			if ( ! empty( $args['row'] ) ) {
4588
-				// Maybe close
4589
-				if ( ! empty( $args['row']['close'] ) ) {
4590
-					echo "</div></div>";
4591
-				}
4592
-				echo "</div>";
4593
-			}
4594
-		}
4595
-
4596
-		/**
4597
-		 * Get the hidden input that when added makes the advanced button show on widget settings.
4598
-		 *
4599
-		 * @return string
4600
-		 */
4601
-		public function widget_advanced_toggle() {
4602
-
4603
-			$output = '';
4604
-			if ( $this->block_show_advanced() ) {
4605
-				$val = 1;
4606
-			} else {
4607
-				$val = 0;
4608
-			}
4609
-
4610
-			$output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4611
-
4612
-			return $output;
4613
-		}
4614
-
4615
-		/**
4616
-		 * Convert require element.
4617
-		 *
4618
-		 * @param string $input Input element.
4619
-		 *
4620
-		 * @return string $output
4621
-		 *@since 1.0.0
4622
-		 *
4623
-		 */
4624
-		public function convert_element_require( $input ) {
4625
-			$input = str_replace( "'", '"', $input );// we only want double quotes
4626
-
4627
-			$output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4628
-				"jQuery(form).find('[data-argument=\"",
4629
-				"\"]').find('input,select,textarea').val()",
4630
-				"\"]').find('input:checked').val()"
4631
-			), $input ) );
4632
-
4633
-			return $output;
4634
-		}
4635
-
4636
-		/**
4637
-		 * Builds the inputs for the widget options.
4638
-		 *
4639
-		 * @param $args
4640
-		 * @param $instance
4641
-		 */
4642
-		public function widget_inputs( $args, $instance ) {
4643
-
4644
-			$class             = "";
4645
-			$element_require   = "";
4646
-			$custom_attributes = "";
4647
-
4648
-			// get value
4649
-			if ( isset( $instance[ $args['name'] ] ) ) {
4650
-				$value = $instance[ $args['name'] ];
4651
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4652
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4653
-			} else {
4654
-				$value = '';
4655
-			}
4656
-
4657
-			// get placeholder
4658
-			if ( ! empty( $args['placeholder'] ) ) {
4659
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4660
-			} else {
4661
-				$placeholder = '';
4662
-			}
4663
-
4664
-			// get if advanced
4665
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4666
-				$class .= " sd-advanced-setting ";
4667
-			}
4668
-
4669
-			// element_require
4670
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4671
-				$element_require = $args['element_require'];
4672
-			}
4673
-
4674
-			// custom_attributes
4675
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4676
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4677
-			}
4678
-
4679
-			// before wrapper
4680
-			?>
4578
+                } else if ( ! empty( $args['row']['close'] ) ) {
4579
+                    echo "<div class='col pl-0 ps-0'>";
4580
+                } else {
4581
+                    echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4582
+                }
4583
+            }
4584
+        }
4585
+
4586
+        public function widget_inputs_row_end( $key, $args ) {
4587
+            if ( ! empty( $args['row'] ) ) {
4588
+                // Maybe close
4589
+                if ( ! empty( $args['row']['close'] ) ) {
4590
+                    echo "</div></div>";
4591
+                }
4592
+                echo "</div>";
4593
+            }
4594
+        }
4595
+
4596
+        /**
4597
+         * Get the hidden input that when added makes the advanced button show on widget settings.
4598
+         *
4599
+         * @return string
4600
+         */
4601
+        public function widget_advanced_toggle() {
4602
+
4603
+            $output = '';
4604
+            if ( $this->block_show_advanced() ) {
4605
+                $val = 1;
4606
+            } else {
4607
+                $val = 0;
4608
+            }
4609
+
4610
+            $output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4611
+
4612
+            return $output;
4613
+        }
4614
+
4615
+        /**
4616
+         * Convert require element.
4617
+         *
4618
+         * @param string $input Input element.
4619
+         *
4620
+         * @return string $output
4621
+         *@since 1.0.0
4622
+         *
4623
+         */
4624
+        public function convert_element_require( $input ) {
4625
+            $input = str_replace( "'", '"', $input );// we only want double quotes
4626
+
4627
+            $output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4628
+                "jQuery(form).find('[data-argument=\"",
4629
+                "\"]').find('input,select,textarea').val()",
4630
+                "\"]').find('input:checked').val()"
4631
+            ), $input ) );
4632
+
4633
+            return $output;
4634
+        }
4635
+
4636
+        /**
4637
+         * Builds the inputs for the widget options.
4638
+         *
4639
+         * @param $args
4640
+         * @param $instance
4641
+         */
4642
+        public function widget_inputs( $args, $instance ) {
4643
+
4644
+            $class             = "";
4645
+            $element_require   = "";
4646
+            $custom_attributes = "";
4647
+
4648
+            // get value
4649
+            if ( isset( $instance[ $args['name'] ] ) ) {
4650
+                $value = $instance[ $args['name'] ];
4651
+            } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4652
+                $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4653
+            } else {
4654
+                $value = '';
4655
+            }
4656
+
4657
+            // get placeholder
4658
+            if ( ! empty( $args['placeholder'] ) ) {
4659
+                $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4660
+            } else {
4661
+                $placeholder = '';
4662
+            }
4663
+
4664
+            // get if advanced
4665
+            if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4666
+                $class .= " sd-advanced-setting ";
4667
+            }
4668
+
4669
+            // element_require
4670
+            if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4671
+                $element_require = $args['element_require'];
4672
+            }
4673
+
4674
+            // custom_attributes
4675
+            if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4676
+                $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4677
+            }
4678
+
4679
+            // before wrapper
4680
+            ?>
4681 4681
 			<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 );} ?>'>
4682 4682
 			<?php
4683
-			switch ( $args['type'] ) {
4684
-				//array('text','password','number','email','tel','url','color')
4685
-				case "text":
4686
-				case "password":
4687
-				case "number":
4688
-				case "email":
4689
-				case "tel":
4690
-				case "url":
4691
-				case "color":
4692
-					?>
4683
+            switch ( $args['type'] ) {
4684
+                //array('text','password','number','email','tel','url','color')
4685
+                case "text":
4686
+                case "password":
4687
+                case "number":
4688
+                case "email":
4689
+                case "tel":
4690
+                case "url":
4691
+                case "color":
4692
+                    ?>
4693 4693
 					<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>
4694 4694
 					<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 ); ?>">
4695 4695
 					<?php
4696 4696
 
4697
-					break;
4698
-				case "select":
4699
-					$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4700
-					if ( $multiple ) {
4701
-						if ( empty( $value ) ) {
4702
-							$value = array();
4703
-						}
4704
-					}
4705
-					?>
4697
+                    break;
4698
+                case "select":
4699
+                    $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4700
+                    if ( $multiple ) {
4701
+                        if ( empty( $value ) ) {
4702
+                            $value = array();
4703
+                        }
4704
+                    }
4705
+                    ?>
4706 4706
 					<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>
4707 4707
 					<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 "[]"; } ?>"
4708 4708
 						<?php if ( $multiple ) {
4709
-							echo "multiple";
4710
-						} //@todo not implemented yet due to gutenberg not supporting it
4711
-						?>>
4709
+                            echo "multiple";
4710
+                        } //@todo not implemented yet due to gutenberg not supporting it
4711
+                        ?>>
4712 4712
 						<?php
4713 4713
 
4714
-						if ( ! empty( $args['options'] ) ) {
4715
-							foreach ( $args['options'] as $val => $label ) {
4716
-								if ( $multiple ) {
4717
-									$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4718
-								} else {
4719
-									$selected = selected( $value, $val, false );
4720
-								}
4721
-								echo "<option value='$val' " . $selected . ">$label</option>";
4722
-							}
4723
-						}
4724
-						?>
4714
+                        if ( ! empty( $args['options'] ) ) {
4715
+                            foreach ( $args['options'] as $val => $label ) {
4716
+                                if ( $multiple ) {
4717
+                                    $selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4718
+                                } else {
4719
+                                    $selected = selected( $value, $val, false );
4720
+                                }
4721
+                                echo "<option value='$val' " . $selected . ">$label</option>";
4722
+                            }
4723
+                        }
4724
+                        ?>
4725 4725
 					</select>
4726 4726
 					<?php
4727
-					break;
4728
-				case "checkbox":
4729
-					?>
4727
+                    break;
4728
+                case "checkbox":
4729
+                    ?>
4730 4730
 					<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">
4731 4731
 					<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>
4732 4732
 					<?php
4733
-					break;
4734
-				case "textarea":
4735
-					?>
4733
+                    break;
4734
+                case "textarea":
4735
+                    ?>
4736 4736
 					<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>
4737 4737
 					<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>
4738 4738
 					<?php
4739 4739
 
4740
-					break;
4741
-				case "hidden":
4742
-					?>
4740
+                    break;
4741
+                case "hidden":
4742
+                    ?>
4743 4743
 					<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 ); ?>">
4744 4744
 					<?php
4745
-					break;
4746
-				default:
4747
-					echo "No input type found!"; // @todo we need to add more input types.
4748
-			}
4749
-			// after wrapper
4750
-			?></p><?php
4751
-		}
4752
-
4753
-		public function get_widget_icon($icon = 'box-top', $title = ''){
4754
-			if($icon=='box-top'){
4755
-				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>';
4756
-			}elseif($icon=='box-right'){
4757
-				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>';
4758
-			}elseif($icon=='box-bottom'){
4759
-				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>';
4760
-			}elseif($icon=='box-left'){
4761
-				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>';
4762
-			}
4763
-		}
4764
-
4765
-		/**
4766
-		 * Get the widget input description html.
4767
-		 *
4768
-		 * @param $args
4769
-		 *
4770
-		 * @return string
4771
-		 * @todo, need to make its own tooltip script
4772
-		 */
4773
-		public function widget_field_desc( $args ) {
4774
-
4775
-			$description = '';
4776
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
4777
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4778
-					$description = $this->desc_tip( $args['desc'] );
4779
-				} else {
4780
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4781
-				}
4782
-			}
4783
-
4784
-			return $description;
4785
-		}
4786
-
4787
-		/**
4788
-		 * Get the widget input title html.
4789
-		 *
4790
-		 * @param $args
4791
-		 *
4792
-		 * @return string
4793
-		 */
4794
-		public function widget_field_title( $args ) {
4795
-			$title = '';
4796
-
4797
-			if ( isset( $args['title'] ) && $args['title'] ) {
4798
-				if ( ! empty( $args['device_type'] ) ) {
4799
-					$args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4800
-				}
4801
-
4802
-				if ( isset( $args['icon'] ) && $args['icon'] ) {
4803
-					$title = self::get_widget_icon( $args['icon'], $args['title']  );
4804
-				} else {
4805
-					$title = esc_attr( $args['title'] );
4806
-				}
4807
-			}
4808
-
4809
-			return $title;
4810
-		}
4811
-
4812
-		/**
4813
-		 * Get the tool tip html.
4814
-		 *
4815
-		 * @param $tip
4816
-		 * @param bool $allow_html
4817
-		 *
4818
-		 * @return string
4819
-		 */
4820
-		function desc_tip( $tip, $allow_html = false ) {
4821
-			if ( $allow_html ) {
4822
-				$tip = $this->sanitize_tooltip( $tip );
4823
-			} else {
4824
-				$tip = esc_attr( $tip );
4825
-			}
4826
-
4827
-			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4828
-		}
4829
-
4830
-		/**
4831
-		 * Sanitize a string destined to be a tooltip.
4832
-		 *
4833
-		 * @param string $var
4834
-		 *
4835
-		 * @return string
4836
-		 */
4837
-		public function sanitize_tooltip( $var ) {
4838
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4839
-				'br'     => array(),
4840
-				'em'     => array(),
4841
-				'strong' => array(),
4842
-				'small'  => array(),
4843
-				'span'   => array(),
4844
-				'ul'     => array(),
4845
-				'li'     => array(),
4846
-				'ol'     => array(),
4847
-				'p'      => array(),
4848
-			) ) );
4849
-		}
4850
-
4851
-		/**
4852
-		 * Processing widget options on save
4853
-		 *
4854
-		 * @param array $new_instance The new options
4855
-		 * @param array $old_instance The previous options
4856
-		 *
4857
-		 * @return array
4858
-		 * @todo we should add some sanitation here.
4859
-		 */
4860
-		public function update( $new_instance, $old_instance ) {
4861
-
4862
-			//save the widget
4863
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
4864
-
4865
-			// set widget instance
4866
-			$this->instance = $instance;
4867
-
4868
-			if ( empty( $this->arguments ) ) {
4869
-				$this->get_arguments();
4870
-			}
4871
-
4872
-			// check for checkboxes
4873
-			if ( ! empty( $this->arguments ) ) {
4874
-				foreach ( $this->arguments as $argument ) {
4875
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4876
-						$instance[ $argument['name'] ] = '0';
4877
-					}
4878
-				}
4879
-			}
4880
-
4881
-			return $instance;
4882
-		}
4883
-
4884
-		/**
4885
-		 * Checks if the current call is a ajax call to get the block content.
4886
-		 *
4887
-		 * This can be used in your widget to return different content as the block content.
4888
-		 *
4889
-		 * @return bool
4890
-		 *@since 1.0.3
4891
-		 */
4892
-		public function is_block_content_call() {
4893
-			$result = false;
4894
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4895
-				$result = true;
4896
-			}
4897
-
4898
-			return $result;
4899
-		}
4900
-
4901
-		/**
4902
-		 * Get an instance hash that will be unique to the type and settings.
4903
-		 *
4904
-		 * @return string
4905
-		 *@since 1.0.20
4906
-		 */
4907
-		public function get_instance_hash(){
4908
-			$instance_string = $this->base_id.serialize($this->instance);
4909
-			return hash('crc32b',$instance_string);
4910
-		}
4911
-
4912
-		/**
4913
-		 * Generate and return inline styles from CSS rules that will match the unique class of the instance.
4914
-		 *
4915
-		 * @param array $rules
4916
-		 *
4917
-		 * @return string
4918
-		 *@since 1.0.20
4919
-		 */
4920
-		public function get_instance_style($rules = array()){
4921
-			$css = '';
4922
-
4923
-			if(!empty($rules)){
4924
-				$rules = array_unique($rules);
4925
-				$instance_hash = $this->get_instance_hash();
4926
-				$css .= "<style>";
4927
-				foreach($rules as $rule){
4928
-					$css .= ".sdel-$instance_hash $rule";
4929
-				}
4930
-				$css .= "</style>";
4931
-			}
4932
-
4933
-			return $css;
4934
-		}
4935
-
4936
-		/**
4937
-		 * Encode shortcodes tags.
4938
-		 *
4939
-		 * @param string $content Content to search for shortcode tags.
4940
-		 *
4745
+                    break;
4746
+                default:
4747
+                    echo "No input type found!"; // @todo we need to add more input types.
4748
+            }
4749
+            // after wrapper
4750
+            ?></p><?php
4751
+        }
4752
+
4753
+        public function get_widget_icon($icon = 'box-top', $title = ''){
4754
+            if($icon=='box-top'){
4755
+                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>';
4756
+            }elseif($icon=='box-right'){
4757
+                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>';
4758
+            }elseif($icon=='box-bottom'){
4759
+                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>';
4760
+            }elseif($icon=='box-left'){
4761
+                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>';
4762
+            }
4763
+        }
4764
+
4765
+        /**
4766
+         * Get the widget input description html.
4767
+         *
4768
+         * @param $args
4769
+         *
4770
+         * @return string
4771
+         * @todo, need to make its own tooltip script
4772
+         */
4773
+        public function widget_field_desc( $args ) {
4774
+
4775
+            $description = '';
4776
+            if ( isset( $args['desc'] ) && $args['desc'] ) {
4777
+                if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4778
+                    $description = $this->desc_tip( $args['desc'] );
4779
+                } else {
4780
+                    $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4781
+                }
4782
+            }
4783
+
4784
+            return $description;
4785
+        }
4786
+
4787
+        /**
4788
+         * Get the widget input title html.
4789
+         *
4790
+         * @param $args
4791
+         *
4792
+         * @return string
4793
+         */
4794
+        public function widget_field_title( $args ) {
4795
+            $title = '';
4796
+
4797
+            if ( isset( $args['title'] ) && $args['title'] ) {
4798
+                if ( ! empty( $args['device_type'] ) ) {
4799
+                    $args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4800
+                }
4801
+
4802
+                if ( isset( $args['icon'] ) && $args['icon'] ) {
4803
+                    $title = self::get_widget_icon( $args['icon'], $args['title']  );
4804
+                } else {
4805
+                    $title = esc_attr( $args['title'] );
4806
+                }
4807
+            }
4808
+
4809
+            return $title;
4810
+        }
4811
+
4812
+        /**
4813
+         * Get the tool tip html.
4814
+         *
4815
+         * @param $tip
4816
+         * @param bool $allow_html
4817
+         *
4818
+         * @return string
4819
+         */
4820
+        function desc_tip( $tip, $allow_html = false ) {
4821
+            if ( $allow_html ) {
4822
+                $tip = $this->sanitize_tooltip( $tip );
4823
+            } else {
4824
+                $tip = esc_attr( $tip );
4825
+            }
4826
+
4827
+            return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4828
+        }
4829
+
4830
+        /**
4831
+         * Sanitize a string destined to be a tooltip.
4832
+         *
4833
+         * @param string $var
4834
+         *
4835
+         * @return string
4836
+         */
4837
+        public function sanitize_tooltip( $var ) {
4838
+            return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4839
+                'br'     => array(),
4840
+                'em'     => array(),
4841
+                'strong' => array(),
4842
+                'small'  => array(),
4843
+                'span'   => array(),
4844
+                'ul'     => array(),
4845
+                'li'     => array(),
4846
+                'ol'     => array(),
4847
+                'p'      => array(),
4848
+            ) ) );
4849
+        }
4850
+
4851
+        /**
4852
+         * Processing widget options on save
4853
+         *
4854
+         * @param array $new_instance The new options
4855
+         * @param array $old_instance The previous options
4856
+         *
4857
+         * @return array
4858
+         * @todo we should add some sanitation here.
4859
+         */
4860
+        public function update( $new_instance, $old_instance ) {
4861
+
4862
+            //save the widget
4863
+            $instance = array_merge( (array) $old_instance, (array) $new_instance );
4864
+
4865
+            // set widget instance
4866
+            $this->instance = $instance;
4867
+
4868
+            if ( empty( $this->arguments ) ) {
4869
+                $this->get_arguments();
4870
+            }
4871
+
4872
+            // check for checkboxes
4873
+            if ( ! empty( $this->arguments ) ) {
4874
+                foreach ( $this->arguments as $argument ) {
4875
+                    if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4876
+                        $instance[ $argument['name'] ] = '0';
4877
+                    }
4878
+                }
4879
+            }
4880
+
4881
+            return $instance;
4882
+        }
4883
+
4884
+        /**
4885
+         * Checks if the current call is a ajax call to get the block content.
4886
+         *
4887
+         * This can be used in your widget to return different content as the block content.
4888
+         *
4889
+         * @return bool
4890
+         *@since 1.0.3
4891
+         */
4892
+        public function is_block_content_call() {
4893
+            $result = false;
4894
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4895
+                $result = true;
4896
+            }
4897
+
4898
+            return $result;
4899
+        }
4900
+
4901
+        /**
4902
+         * Get an instance hash that will be unique to the type and settings.
4903
+         *
4904
+         * @return string
4905
+         *@since 1.0.20
4906
+         */
4907
+        public function get_instance_hash(){
4908
+            $instance_string = $this->base_id.serialize($this->instance);
4909
+            return hash('crc32b',$instance_string);
4910
+        }
4911
+
4912
+        /**
4913
+         * Generate and return inline styles from CSS rules that will match the unique class of the instance.
4914
+         *
4915
+         * @param array $rules
4916
+         *
4917
+         * @return string
4918
+         *@since 1.0.20
4919
+         */
4920
+        public function get_instance_style($rules = array()){
4921
+            $css = '';
4922
+
4923
+            if(!empty($rules)){
4924
+                $rules = array_unique($rules);
4925
+                $instance_hash = $this->get_instance_hash();
4926
+                $css .= "<style>";
4927
+                foreach($rules as $rule){
4928
+                    $css .= ".sdel-$instance_hash $rule";
4929
+                }
4930
+                $css .= "</style>";
4931
+            }
4932
+
4933
+            return $css;
4934
+        }
4935
+
4936
+        /**
4937
+         * Encode shortcodes tags.
4938
+         *
4939
+         * @param string $content Content to search for shortcode tags.
4940
+         *
4941 4941
 *@return string Content with shortcode tags removed.
4942
-		 *@since 1.0.28
4943
-		 *
4944
-		 */
4945
-		public function encode_shortcodes( $content ) {
4946
-			// Avoids existing encoded tags.
4947
-			$trans   = array(
4948
-				'&#91;' => '&#091;',
4949
-				'&#93;' => '&#093;',
4950
-				'&amp;#91;' => '&#091;',
4951
-				'&amp;#93;' => '&#093;',
4952
-				'&lt;' => '&0lt;',
4953
-				'&gt;' => '&0gt;',
4954
-				'&amp;lt;' => '&0lt;',
4955
-				'&amp;gt;' => '&0gt;',
4956
-			);
4957
-
4958
-			$content = strtr( $content, $trans );
4959
-
4960
-			$trans   = array(
4961
-				'[' => '&#91;',
4962
-				']' => '&#93;',
4963
-				'<' => '&lt;',
4964
-				'>' => '&gt;',
4965
-				'"' => '&quot;',
4966
-				"'" => '&#39;',
4967
-			);
4968
-
4969
-			$content = strtr( $content, $trans );
4970
-
4971
-			return $content;
4972
-		}
4973
-
4974
-		/**
4975
-		 * Remove encoded shortcod tags.
4976
-		 *
4977
-		 * @param string $content Content to search for shortcode tags.
4978
-		 *
4942
+         *@since 1.0.28
4943
+         *
4944
+         */
4945
+        public function encode_shortcodes( $content ) {
4946
+            // Avoids existing encoded tags.
4947
+            $trans   = array(
4948
+                '&#91;' => '&#091;',
4949
+                '&#93;' => '&#093;',
4950
+                '&amp;#91;' => '&#091;',
4951
+                '&amp;#93;' => '&#093;',
4952
+                '&lt;' => '&0lt;',
4953
+                '&gt;' => '&0gt;',
4954
+                '&amp;lt;' => '&0lt;',
4955
+                '&amp;gt;' => '&0gt;',
4956
+            );
4957
+
4958
+            $content = strtr( $content, $trans );
4959
+
4960
+            $trans   = array(
4961
+                '[' => '&#91;',
4962
+                ']' => '&#93;',
4963
+                '<' => '&lt;',
4964
+                '>' => '&gt;',
4965
+                '"' => '&quot;',
4966
+                "'" => '&#39;',
4967
+            );
4968
+
4969
+            $content = strtr( $content, $trans );
4970
+
4971
+            return $content;
4972
+        }
4973
+
4974
+        /**
4975
+         * Remove encoded shortcod tags.
4976
+         *
4977
+         * @param string $content Content to search for shortcode tags.
4978
+         *
4979 4979
 *@return string Content with decoded shortcode tags.
4980
-		 *@since 1.0.28
4981
-		 *
4982
-		 */
4983
-		public function decode_shortcodes( $content ) {
4984
-			$trans   = array(
4985
-				'&#91;' => '[',
4986
-				'&#93;' => ']',
4987
-				'&amp;#91;' => '[',
4988
-				'&amp;#93;' => ']',
4989
-				'&lt;' => '<',
4990
-				'&gt;' => '>',
4991
-				'&amp;lt;' => '<',
4992
-				'&amp;gt;' => '>',
4993
-				'&quot;' => '"',
4994
-				'&apos;' => "'",
4995
-			);
4996
-
4997
-			$content = strtr( $content, $trans );
4998
-
4999
-			$trans   = array(
5000
-				'&#091;' => '&#91;',
5001
-				'&#093;' => '&#93;',
5002
-				'&amp;#091;' => '&#91;',
5003
-				'&amp;#093;' => '&#93;',
5004
-				'&0lt;' => '&lt;',
5005
-				'&0gt;' => '&gt;',
5006
-				'&amp;0lt;' => '&lt;',
5007
-				'&amp;0gt;' => '&gt;',
5008
-			);
5009
-
5010
-			$content = strtr( $content, $trans );
5011
-
5012
-			return $content;
5013
-		}
5014
-
5015
-		public function block_visibility_fields( $args ) {
5016
-			$value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5017
-			$content = '<div class="bs-vc-rule-template d-none">';
5018
-				$content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5019
-					$content .= '<div class="row">';
5020
-						$content .= '<div class="col-sm-12">';
5021
-							$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>';
5022
-							$content .= aui()->select(
5023
-								array(
5024
-									'id'          => 'bsvc_rule_BSVCINDEX',
5025
-									'name'        => 'bsvc_rule_BSVCINDEX',
5026
-									'label'       => __( 'Rule', 'ayecode-connect' ),
5027
-									'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5028
-									'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5029
-									'options'     => sd_visibility_rules_options(),
5030
-									'default'     => '',
5031
-									'value'       => '',
5032
-									'label_type'  => '',
5033
-									'select2'     => false,
5034
-									'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5035
-									'extra_attributes' => array(
5036
-										'data-minimum-results-for-search' => '-1'
5037
-									)
5038
-								)
5039
-							);
5040
-
5041
-						$content .= '</div>';
5042
-
5043
-						if ( class_exists( 'GeoDirectory' ) ) {
5044
-							$content .= '<div class="col-md-7 col-sm-12">';
5045
-
5046
-								$content .= aui()->select(
5047
-									array(
5048
-										'id'          => 'bsvc_gd_field_BSVCINDEX',
5049
-										'name'        => 'bsvc_gd_field_BSVCINDEX',
5050
-										'label'       => __( 'FIELD', 'ayecode-connect' ),
5051
-										'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5052
-										'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5053
-										'options'     => sd_visibility_gd_field_options(),
5054
-										'default'     => '',
5055
-										'value'       => '',
5056
-										'label_type'  => '',
5057
-										'select2'     => false,
5058
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5059
-										'extra_attributes' => array(
5060
-											'data-minimum-results-for-search' => '-1'
5061
-										)
5062
-									)
5063
-								);
5064
-
5065
-							$content .= '</div>';
5066
-							$content .= '<div class="col-md-5 col-sm-12">';
5067
-
5068
-								$content .= aui()->select(
5069
-									array(
5070
-										'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5071
-										'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5072
-										'label'       => __( 'CONDITION', 'ayecode-connect' ),
5073
-										'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5074
-										'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5075
-										'options'     => sd_visibility_field_condition_options(),
5076
-										'default'     => '',
5077
-										'value'       => '',
5078
-										'label_type'  => '',
5079
-										'select2'     => false,
5080
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5081
-										'extra_attributes' => array(
5082
-											'data-minimum-results-for-search' => '-1'
5083
-										)
5084
-									)
5085
-								);
5086
-
5087
-							$content .= '</div>';
5088
-							$content .= '<div class="col-sm-12">';
5089
-
5090
-								$content .= aui()->input(
5091
-									array(
5092
-										'type'            => 'text',
5093
-										'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5094
-										'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5095
-										'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5096
-										'class'           => 'bsvc_gd_field_search form-control-sm',
5097
-										'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5098
-										'label_type'      => '',
5099
-										'value'           => '',
5100
-										'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")'
5101
-									)
5102
-								);
5103
-
5104
-							$content .= '</div>';
5105
-						}
5106
-
5107
-					$content .= '</div>';
5108
-
5109
-					$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>';
5110
-						$role_options = sd_user_roles_options();
5111
-
5112
-						$role_option_i = 0;
5113
-						foreach ( $role_options as $role_option_key => $role_option_name ) {
5114
-							$role_option_i++;
5115
-
5116
-							$content .= '<div class="col-sm-6">';
5117
-							$content .= aui()->input(
5118
-								array(
5119
-									'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5120
-									'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5121
-									'type'             => 'checkbox',
5122
-									'label'            => $role_option_name,
5123
-									'label_type'       => 'hidden',
5124
-									'class'            => 'bsvc_user_roles',
5125
-									'value'            => $role_option_key,
5126
-									'switch'           => 'md',
5127
-									'no_wrap'          => true
5128
-								)
5129
-							);
5130
-							$content .= '</div>';
5131
-						}
5132
-					$content .= '</div>';
5133
-				$content .= '</div>';
5134
-			$content .= '</div>';
5135
-			$content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5136
-			$content .= '<div class="bs-vc-rule-sets"></div>';
5137
-			$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>';
5138
-			$content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5139
-			$content .= aui()->select(
5140
-				array(
5141
-					'id'          => 'bsvc_output',
5142
-					'name'        => 'bsvc_output',
5143
-					'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5144
-					'placeholder' => __( 'Default Output', 'ayecode-connect' ),
5145
-					'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5146
-					'options'     => sd_visibility_output_options(),
5147
-					'default'     => '',
5148
-					'value'       => '',
5149
-					'label_type'  => 'top',
5150
-					'select2'     => false,
5151
-					'extra_attributes' => array(
5152
-						'data-minimum-results-for-search' => '-1'
5153
-					)
5154
-				)
5155
-			);
5156
-
5157
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5158
-
5159
-			$content .= aui()->select(
5160
-				array(
5161
-					'id'              => 'bsvc_page',
5162
-					'name'            => 'bsvc_page',
5163
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5164
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5165
-					'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5166
-					'options'         => sd_template_page_options(),
5167
-					'default'         => '',
5168
-					'value'           => '',
5169
-					'label_type'      => 'top',
5170
-					'select2'         => false,
5171
-					'element_require' => '[%bsvc_output%]=="page"'
5172
-				)
5173
-			);
5174
-
5175
-			$content .= aui()->select(
5176
-				array(
5177
-					'id'          => 'bsvc_tmpl_part',
5178
-					'name'        => 'bsvc_tmpl_part',
5179
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5180
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5181
-					'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5182
-					'options'     => sd_template_part_options(),
5183
-					'default'     => '',
5184
-					'value'       => '',
5185
-					'label_type'  => 'top',
5186
-					'select2'     => false,
5187
-					'element_require'  => '[%bsvc_output%]=="template_part"',
5188
-					'extra_attributes' => array(
5189
-						'data-minimum-results-for-search' => '-1'
5190
-					)
5191
-				)
5192
-			);
5193
-
5194
-			$content .= aui()->select(
5195
-				array(
5196
-					'id'               => 'bsvc_message_type',
5197
-					'name'             => 'bsvc_message_type',
5198
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5199
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5200
-					'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5201
-					'options'          => sd_aui_colors(),
5202
-					'default'          => '',
5203
-					'value'            => '',
5204
-					'label_type'       => 'top',
5205
-					'select2'          => false,
5206
-					'element_require'  => '[%bsvc_output%]=="message"',
5207
-					'extra_attributes' => array(
5208
-						'data-minimum-results-for-search' => '-1'
5209
-					)
5210
-				)
5211
-			);
5212
-
5213
-			$content .= '</div><div class="col-sm-12">';
5214
-
5215
-			$content .= aui()->input(
5216
-				array(
5217
-					'type'            => 'text',
5218
-					'id'              => 'bsvc_message',
5219
-					'name'            => 'bsvc_message',
5220
-					'label'           => '',
5221
-					'class'           => 'bsvc_message form-control-sm',
5222
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5223
-					'label_type'      => '',
5224
-					'value'           => '',
5225
-					'form_group_class' => ' ',
5226
-					'element_require' => '[%bsvc_output%]=="message"',
5227
-				)
5228
-			);
5229
-
5230
-			$content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5231
-
5232
-			return $content;
5233
-		}
5234
-
5235
-		/**
5236
-		 * Handle media_buttons hook.
5237
-		 *
5238
-		 * @since 1.2.7
5239
-		 */
5240
-		public function wp_media_buttons() {
5241
-			global $shortcode_insert_button_once;
5242
-
5243
-			// Fix conflicts with UpSolution Core in header template edit element.
5244
-			if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5245
-				$shortcode_insert_button_once = true;
5246
-			}
5247
-		}
5248
-	}
4980
+         *@since 1.0.28
4981
+         *
4982
+         */
4983
+        public function decode_shortcodes( $content ) {
4984
+            $trans   = array(
4985
+                '&#91;' => '[',
4986
+                '&#93;' => ']',
4987
+                '&amp;#91;' => '[',
4988
+                '&amp;#93;' => ']',
4989
+                '&lt;' => '<',
4990
+                '&gt;' => '>',
4991
+                '&amp;lt;' => '<',
4992
+                '&amp;gt;' => '>',
4993
+                '&quot;' => '"',
4994
+                '&apos;' => "'",
4995
+            );
4996
+
4997
+            $content = strtr( $content, $trans );
4998
+
4999
+            $trans   = array(
5000
+                '&#091;' => '&#91;',
5001
+                '&#093;' => '&#93;',
5002
+                '&amp;#091;' => '&#91;',
5003
+                '&amp;#093;' => '&#93;',
5004
+                '&0lt;' => '&lt;',
5005
+                '&0gt;' => '&gt;',
5006
+                '&amp;0lt;' => '&lt;',
5007
+                '&amp;0gt;' => '&gt;',
5008
+            );
5009
+
5010
+            $content = strtr( $content, $trans );
5011
+
5012
+            return $content;
5013
+        }
5014
+
5015
+        public function block_visibility_fields( $args ) {
5016
+            $value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5017
+            $content = '<div class="bs-vc-rule-template d-none">';
5018
+                $content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5019
+                    $content .= '<div class="row">';
5020
+                        $content .= '<div class="col-sm-12">';
5021
+                            $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>';
5022
+                            $content .= aui()->select(
5023
+                                array(
5024
+                                    'id'          => 'bsvc_rule_BSVCINDEX',
5025
+                                    'name'        => 'bsvc_rule_BSVCINDEX',
5026
+                                    'label'       => __( 'Rule', 'ayecode-connect' ),
5027
+                                    'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5028
+                                    'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5029
+                                    'options'     => sd_visibility_rules_options(),
5030
+                                    'default'     => '',
5031
+                                    'value'       => '',
5032
+                                    'label_type'  => '',
5033
+                                    'select2'     => false,
5034
+                                    'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5035
+                                    'extra_attributes' => array(
5036
+                                        'data-minimum-results-for-search' => '-1'
5037
+                                    )
5038
+                                )
5039
+                            );
5040
+
5041
+                        $content .= '</div>';
5042
+
5043
+                        if ( class_exists( 'GeoDirectory' ) ) {
5044
+                            $content .= '<div class="col-md-7 col-sm-12">';
5045
+
5046
+                                $content .= aui()->select(
5047
+                                    array(
5048
+                                        'id'          => 'bsvc_gd_field_BSVCINDEX',
5049
+                                        'name'        => 'bsvc_gd_field_BSVCINDEX',
5050
+                                        'label'       => __( 'FIELD', 'ayecode-connect' ),
5051
+                                        'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5052
+                                        'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5053
+                                        'options'     => sd_visibility_gd_field_options(),
5054
+                                        'default'     => '',
5055
+                                        'value'       => '',
5056
+                                        'label_type'  => '',
5057
+                                        'select2'     => false,
5058
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5059
+                                        'extra_attributes' => array(
5060
+                                            'data-minimum-results-for-search' => '-1'
5061
+                                        )
5062
+                                    )
5063
+                                );
5064
+
5065
+                            $content .= '</div>';
5066
+                            $content .= '<div class="col-md-5 col-sm-12">';
5067
+
5068
+                                $content .= aui()->select(
5069
+                                    array(
5070
+                                        'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5071
+                                        'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5072
+                                        'label'       => __( 'CONDITION', 'ayecode-connect' ),
5073
+                                        'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5074
+                                        'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5075
+                                        'options'     => sd_visibility_field_condition_options(),
5076
+                                        'default'     => '',
5077
+                                        'value'       => '',
5078
+                                        'label_type'  => '',
5079
+                                        'select2'     => false,
5080
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5081
+                                        'extra_attributes' => array(
5082
+                                            'data-minimum-results-for-search' => '-1'
5083
+                                        )
5084
+                                    )
5085
+                                );
5086
+
5087
+                            $content .= '</div>';
5088
+                            $content .= '<div class="col-sm-12">';
5089
+
5090
+                                $content .= aui()->input(
5091
+                                    array(
5092
+                                        'type'            => 'text',
5093
+                                        'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5094
+                                        'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5095
+                                        'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5096
+                                        'class'           => 'bsvc_gd_field_search form-control-sm',
5097
+                                        'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5098
+                                        'label_type'      => '',
5099
+                                        'value'           => '',
5100
+                                        '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")'
5101
+                                    )
5102
+                                );
5103
+
5104
+                            $content .= '</div>';
5105
+                        }
5106
+
5107
+                    $content .= '</div>';
5108
+
5109
+                    $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>';
5110
+                        $role_options = sd_user_roles_options();
5111
+
5112
+                        $role_option_i = 0;
5113
+                        foreach ( $role_options as $role_option_key => $role_option_name ) {
5114
+                            $role_option_i++;
5115
+
5116
+                            $content .= '<div class="col-sm-6">';
5117
+                            $content .= aui()->input(
5118
+                                array(
5119
+                                    'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5120
+                                    'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5121
+                                    'type'             => 'checkbox',
5122
+                                    'label'            => $role_option_name,
5123
+                                    'label_type'       => 'hidden',
5124
+                                    'class'            => 'bsvc_user_roles',
5125
+                                    'value'            => $role_option_key,
5126
+                                    'switch'           => 'md',
5127
+                                    'no_wrap'          => true
5128
+                                )
5129
+                            );
5130
+                            $content .= '</div>';
5131
+                        }
5132
+                    $content .= '</div>';
5133
+                $content .= '</div>';
5134
+            $content .= '</div>';
5135
+            $content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5136
+            $content .= '<div class="bs-vc-rule-sets"></div>';
5137
+            $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>';
5138
+            $content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5139
+            $content .= aui()->select(
5140
+                array(
5141
+                    'id'          => 'bsvc_output',
5142
+                    'name'        => 'bsvc_output',
5143
+                    'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5144
+                    'placeholder' => __( 'Default Output', 'ayecode-connect' ),
5145
+                    'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5146
+                    'options'     => sd_visibility_output_options(),
5147
+                    'default'     => '',
5148
+                    'value'       => '',
5149
+                    'label_type'  => 'top',
5150
+                    'select2'     => false,
5151
+                    'extra_attributes' => array(
5152
+                        'data-minimum-results-for-search' => '-1'
5153
+                    )
5154
+                )
5155
+            );
5156
+
5157
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5158
+
5159
+            $content .= aui()->select(
5160
+                array(
5161
+                    'id'              => 'bsvc_page',
5162
+                    'name'            => 'bsvc_page',
5163
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5164
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5165
+                    'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5166
+                    'options'         => sd_template_page_options(),
5167
+                    'default'         => '',
5168
+                    'value'           => '',
5169
+                    'label_type'      => 'top',
5170
+                    'select2'         => false,
5171
+                    'element_require' => '[%bsvc_output%]=="page"'
5172
+                )
5173
+            );
5174
+
5175
+            $content .= aui()->select(
5176
+                array(
5177
+                    'id'          => 'bsvc_tmpl_part',
5178
+                    'name'        => 'bsvc_tmpl_part',
5179
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5180
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5181
+                    'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5182
+                    'options'     => sd_template_part_options(),
5183
+                    'default'     => '',
5184
+                    'value'       => '',
5185
+                    'label_type'  => 'top',
5186
+                    'select2'     => false,
5187
+                    'element_require'  => '[%bsvc_output%]=="template_part"',
5188
+                    'extra_attributes' => array(
5189
+                        'data-minimum-results-for-search' => '-1'
5190
+                    )
5191
+                )
5192
+            );
5193
+
5194
+            $content .= aui()->select(
5195
+                array(
5196
+                    'id'               => 'bsvc_message_type',
5197
+                    'name'             => 'bsvc_message_type',
5198
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5199
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5200
+                    'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5201
+                    'options'          => sd_aui_colors(),
5202
+                    'default'          => '',
5203
+                    'value'            => '',
5204
+                    'label_type'       => 'top',
5205
+                    'select2'          => false,
5206
+                    'element_require'  => '[%bsvc_output%]=="message"',
5207
+                    'extra_attributes' => array(
5208
+                        'data-minimum-results-for-search' => '-1'
5209
+                    )
5210
+                )
5211
+            );
5212
+
5213
+            $content .= '</div><div class="col-sm-12">';
5214
+
5215
+            $content .= aui()->input(
5216
+                array(
5217
+                    'type'            => 'text',
5218
+                    'id'              => 'bsvc_message',
5219
+                    'name'            => 'bsvc_message',
5220
+                    'label'           => '',
5221
+                    'class'           => 'bsvc_message form-control-sm',
5222
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5223
+                    'label_type'      => '',
5224
+                    'value'           => '',
5225
+                    'form_group_class' => ' ',
5226
+                    'element_require' => '[%bsvc_output%]=="message"',
5227
+                )
5228
+            );
5229
+
5230
+            $content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5231
+
5232
+            return $content;
5233
+        }
5234
+
5235
+        /**
5236
+         * Handle media_buttons hook.
5237
+         *
5238
+         * @since 1.2.7
5239
+         */
5240
+        public function wp_media_buttons() {
5241
+            global $shortcode_insert_button_once;
5242
+
5243
+            // Fix conflicts with UpSolution Core in header template edit element.
5244
+            if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5245
+                $shortcode_insert_button_once = true;
5246
+            }
5247
+        }
5248
+    }
5249 5249
 }
Please login to merge, or discard this patch.