Passed
Push — master ( b8256f...a40007 )
by Brian
04:17
created
vendor/ayecode/wp-ayecode-ui/includes/ayecode-ui-settings.php 1 patch
Indentation   +1220 added lines, -1220 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,273 +21,273 @@  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.1.71';
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 = "4.5.3";
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
-		 * Main AyeCode_UI_Settings Instance.
93
-		 *
94
-		 * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
95
-		 *
96
-		 * @since 1.0.0
97
-		 * @static
98
-		 * @return AyeCode_UI_Settings - Main instance.
99
-		 */
100
-		public static function instance() {
101
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
102
-
103
-				self::$instance = new AyeCode_UI_Settings;
104
-
105
-				add_action( 'init', array( self::$instance, 'init' ) ); // set settings
106
-
107
-				if ( is_admin() ) {
108
-					add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
109
-					add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
110
-
111
-					// Maybe show example page
112
-					add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
113
-				}
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.1.71';
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 = "4.5.3";
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
+         * Main AyeCode_UI_Settings Instance.
93
+         *
94
+         * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
95
+         *
96
+         * @since 1.0.0
97
+         * @static
98
+         * @return AyeCode_UI_Settings - Main instance.
99
+         */
100
+        public static function instance() {
101
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
102
+
103
+                self::$instance = new AyeCode_UI_Settings;
104
+
105
+                add_action( 'init', array( self::$instance, 'init' ) ); // set settings
106
+
107
+                if ( is_admin() ) {
108
+                    add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
109
+                    add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
110
+
111
+                    // Maybe show example page
112
+                    add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
113
+                }
114 114
 
115
-				add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
115
+                add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
116 116
 
117
-				do_action( 'ayecode_ui_settings_loaded' );
118
-			}
117
+                do_action( 'ayecode_ui_settings_loaded' );
118
+            }
119 119
 
120
-			return self::$instance;
121
-		}
120
+            return self::$instance;
121
+        }
122 122
 
123
-		/**
124
-		 * Setup some constants.
125
-		 */
126
-		public function constants(){
127
-			define('AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be");
128
-			define('AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d');
129
-			if (!defined('AUI_PRIMARY_COLOR')) define('AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL);
130
-			if (!defined('AUI_SECONDARY_COLOR')) define('AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL);
131
-		}
123
+        /**
124
+         * Setup some constants.
125
+         */
126
+        public function constants(){
127
+            define('AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be");
128
+            define('AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d');
129
+            if (!defined('AUI_PRIMARY_COLOR')) define('AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL);
130
+            if (!defined('AUI_SECONDARY_COLOR')) define('AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL);
131
+        }
132 132
 
133
-		/**
134
-		 * Initiate the settings and add the required action hooks.
135
-		 */
136
-		public function init() {
137
-
138
-			// Maybe fix settings
139
-			if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
140
-				$db_settings = get_option( 'ayecode-ui-settings' );
141
-				if ( ! empty( $db_settings ) ) {
142
-					$db_settings['css_backend'] = 'compatibility';
143
-					$db_settings['js_backend'] = 'core-popper';
144
-					update_option( 'ayecode-ui-settings', $db_settings );
145
-					wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
146
-				}
147
-			}
133
+        /**
134
+         * Initiate the settings and add the required action hooks.
135
+         */
136
+        public function init() {
137
+
138
+            // Maybe fix settings
139
+            if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
140
+                $db_settings = get_option( 'ayecode-ui-settings' );
141
+                if ( ! empty( $db_settings ) ) {
142
+                    $db_settings['css_backend'] = 'compatibility';
143
+                    $db_settings['js_backend'] = 'core-popper';
144
+                    update_option( 'ayecode-ui-settings', $db_settings );
145
+                    wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
146
+                }
147
+            }
148 148
 
149
-			$this->constants();
150
-			$this->settings = $this->get_settings();
151
-			$this->url = $this->get_url();
149
+            $this->constants();
150
+            $this->settings = $this->get_settings();
151
+            $this->url = $this->get_url();
152
+
153
+            /**
154
+             * Maybe load CSS
155
+             *
156
+             * We load super early in case there is a theme version that might change the colors
157
+             */
158
+            if ( $this->settings['css'] ) {
159
+                $priority = $this->is_bs3_compat() ? 100 : 1;
160
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
161
+            }
162
+            if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
163
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
164
+            }
152 165
 
153
-			/**
154
-			 * Maybe load CSS
155
-			 *
156
-			 * We load super early in case there is a theme version that might change the colors
157
-			 */
158
-			if ( $this->settings['css'] ) {
159
-				$priority = $this->is_bs3_compat() ? 100 : 1;
160
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
161
-			}
162
-			if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
163
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
164
-			}
165
-
166
-			// maybe load JS
167
-			if ( $this->settings['js'] ) {
168
-				$priority = $this->is_bs3_compat() ? 100 : 1;
169
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
170
-			}
171
-			if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
172
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
173
-			}
174
-
175
-			// Maybe set the HTML font size
176
-			if ( $this->settings['html_font_size'] ) {
177
-				add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
178
-			}
179
-
180
-			// Maybe show backend style error
181
-			if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
182
-				add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
183
-			}
166
+            // maybe load JS
167
+            if ( $this->settings['js'] ) {
168
+                $priority = $this->is_bs3_compat() ? 100 : 1;
169
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
170
+            }
171
+            if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
172
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
173
+            }
184 174
 
185
-		}
175
+            // Maybe set the HTML font size
176
+            if ( $this->settings['html_font_size'] ) {
177
+                add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
178
+            }
186 179
 
187
-		/**
188
-		 * Show admin notice if backend scripts not loaded.
189
-		 */
190
-		public function show_admin_style_notice(){
191
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
192
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
193
-			$message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
194
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'.$message.'</p></div>';
195
-		}
180
+            // Maybe show backend style error
181
+            if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
182
+                add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
183
+            }
196 184
 
197
-		/**
198
-		 * Check if we should load the admin scripts or not.
199
-		 *
200
-		 * @return bool
201
-		 */
202
-		public function load_admin_scripts(){
203
-			$result = true;
204
-
205
-			// check if specifically disabled
206
-			if(!empty($this->settings['disable_admin'])){
207
-				$url_parts = explode("\n",$this->settings['disable_admin']);
208
-				foreach($url_parts as $part){
209
-					if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
210
-						return false; // return early, no point checking further
211
-					}
212
-				}
213
-			}
185
+        }
214 186
 
215
-			return $result;
216
-		}
187
+        /**
188
+         * Show admin notice if backend scripts not loaded.
189
+         */
190
+        public function show_admin_style_notice(){
191
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
192
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
193
+            $message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
194
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'.$message.'</p></div>';
195
+        }
217 196
 
218
-		/**
219
-		 * Add a html font size to the footer.
220
-		 */
221
-		public function html_font_size(){
222
-			$this->settings = $this->get_settings();
223
-			echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
224
-		}
197
+        /**
198
+         * Check if we should load the admin scripts or not.
199
+         *
200
+         * @return bool
201
+         */
202
+        public function load_admin_scripts(){
203
+            $result = true;
204
+
205
+            // check if specifically disabled
206
+            if(!empty($this->settings['disable_admin'])){
207
+                $url_parts = explode("\n",$this->settings['disable_admin']);
208
+                foreach($url_parts as $part){
209
+                    if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
210
+                        return false; // return early, no point checking further
211
+                    }
212
+                }
213
+            }
214
+
215
+            return $result;
216
+        }
217
+
218
+        /**
219
+         * Add a html font size to the footer.
220
+         */
221
+        public function html_font_size(){
222
+            $this->settings = $this->get_settings();
223
+            echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
224
+        }
225 225
 
226
-		/**
227
-		 * Check if the current admin screen should load scripts.
228
-		 * 
229
-		 * @return bool
230
-		 */
231
-		public function is_aui_screen(){
226
+        /**
227
+         * Check if the current admin screen should load scripts.
228
+         * 
229
+         * @return bool
230
+         */
231
+        public function is_aui_screen(){
232 232
 //			echo '###';exit;
233
-			$load = false;
234
-			// check if we should load or not
235
-			if ( is_admin() ) {
236
-				// Only enable on set pages
237
-				$aui_screens = array(
238
-					'page',
239
-					'post',
240
-					'settings_page_ayecode-ui-settings',
241
-					'appearance_page_gutenberg-widgets',
242
-					'widgets',
243
-					'ayecode-ui-settings',
244
-					'site-editor'
245
-				);
246
-				$screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
247
-
248
-				$screen = get_current_screen();
233
+            $load = false;
234
+            // check if we should load or not
235
+            if ( is_admin() ) {
236
+                // Only enable on set pages
237
+                $aui_screens = array(
238
+                    'page',
239
+                    'post',
240
+                    'settings_page_ayecode-ui-settings',
241
+                    'appearance_page_gutenberg-widgets',
242
+                    'widgets',
243
+                    'ayecode-ui-settings',
244
+                    'site-editor'
245
+                );
246
+                $screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
247
+
248
+                $screen = get_current_screen();
249 249
 
250 250
 //				echo '###'.$screen->id;
251 251
 
252
-				// check if we are on a AUI screen
253
-				if ( $screen && in_array( $screen->id, $screen_ids ) ) {
254
-					$load = true;
255
-				}
252
+                // check if we are on a AUI screen
253
+                if ( $screen && in_array( $screen->id, $screen_ids ) ) {
254
+                    $load = true;
255
+                }
256 256
 
257
-				//load for widget previews in WP 5.8
258
-				if( !empty($_REQUEST['legacy-widget-preview'])){
259
-					$load = true;
260
-				}
261
-			}
257
+                //load for widget previews in WP 5.8
258
+                if( !empty($_REQUEST['legacy-widget-preview'])){
259
+                    $load = true;
260
+                }
261
+            }
262 262
 
263
-			return apply_filters( 'aui_load_on_admin' , $load );
264
-		}
263
+            return apply_filters( 'aui_load_on_admin' , $load );
264
+        }
265 265
 
266
-		/**
267
-		 * Adds the styles.
268
-		 */
269
-		public function enqueue_style() {
266
+        /**
267
+         * Adds the styles.
268
+         */
269
+        public function enqueue_style() {
270 270
 
271 271
 
272
-			if( is_admin() && !$this->is_aui_screen()){
273
-				// don't add wp-admin scripts if not requested to
274
-			}else{
275
-				$css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
272
+            if( is_admin() && !$this->is_aui_screen()){
273
+                // don't add wp-admin scripts if not requested to
274
+            }else{
275
+                $css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
276 276
 
277
-				$rtl = is_rtl() ? '-rtl' : '';
277
+                $rtl = is_rtl() ? '-rtl' : '';
278 278
 
279
-				if($this->settings[$css_setting]){
280
-					$compatibility = $this->settings[$css_setting]=='core' ? false : true;
281
-					$url = $this->settings[$css_setting]=='core' ? $this->url.'assets/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets/css/ayecode-ui-compatibility'.$rtl.'.css';
282
-					wp_register_style( 'ayecode-ui', $url, array(), $this->version );
283
-					wp_enqueue_style( 'ayecode-ui' );
279
+                if($this->settings[$css_setting]){
280
+                    $compatibility = $this->settings[$css_setting]=='core' ? false : true;
281
+                    $url = $this->settings[$css_setting]=='core' ? $this->url.'assets/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets/css/ayecode-ui-compatibility'.$rtl.'.css';
282
+                    wp_register_style( 'ayecode-ui', $url, array(), $this->version );
283
+                    wp_enqueue_style( 'ayecode-ui' );
284 284
 
285
-					// flatpickr
286
-					wp_register_style( 'flatpickr', $this->url.'assets/css/flatpickr.min.css', array(), $this->version );
285
+                    // flatpickr
286
+                    wp_register_style( 'flatpickr', $this->url.'assets/css/flatpickr.min.css', array(), $this->version );
287 287
 
288
-					// fix some wp-admin issues
289
-					if(is_admin()){
290
-						$custom_css = "
288
+                    // fix some wp-admin issues
289
+                    if(is_admin()){
290
+                        $custom_css = "
291 291
                 body{
292 292
                     background-color: #f1f1f1;
293 293
                     font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
@@ -333,35 +333,35 @@  discard block
 block discarded – undo
333 333
 				}
334 334
                 ";
335 335
 
336
-						// @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
337
-						$custom_css .= "
336
+                        // @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
337
+                        $custom_css .= "
338 338
 						.edit-post-sidebar input[type=color].components-text-control__input{
339 339
 						    padding: 0;
340 340
 						}
341 341
 					";
342
-						wp_add_inline_style( 'ayecode-ui', $custom_css );
343
-					}
342
+                        wp_add_inline_style( 'ayecode-ui', $custom_css );
343
+                    }
344 344
 
345
-					// custom changes
346
-					wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
345
+                    // custom changes
346
+                    wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
347 347
 
348
-				}
349
-			}
348
+                }
349
+            }
350 350
 
351 351
 
352
-		}
352
+        }
353 353
 
354
-		/**
355
-		 * Get inline script used if bootstrap enqueued
356
-		 *
357
-		 * If this remains small then its best to use this than to add another JS file.
358
-		 */
359
-		public function inline_script() {
360
-			// Flatpickr calendar locale
361
-			$flatpickr_locale = self::flatpickr_locale();
362
-
363
-			ob_start();
364
-			?>
354
+        /**
355
+         * Get inline script used if bootstrap enqueued
356
+         *
357
+         * If this remains small then its best to use this than to add another JS file.
358
+         */
359
+        public function inline_script() {
360
+            // Flatpickr calendar locale
361
+            $flatpickr_locale = self::flatpickr_locale();
362
+
363
+            ob_start();
364
+            ?>
365 365
 			<script>
366 366
 				/**
367 367
 				 * An AUI bootstrap adaptation of GreedyNav.js ( by Luke Jackson ).
@@ -1199,29 +1199,29 @@  discard block
 block discarded – undo
1199 1199
 				}
1200 1200
 			</script>
1201 1201
 			<?php
1202
-			$output = ob_get_clean();
1202
+            $output = ob_get_clean();
1203 1203
 
1204 1204
 
1205 1205
 
1206
-			/*
1206
+            /*
1207 1207
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1208 1208
 			 */
1209
-			return str_replace( array(
1210
-				'<script>',
1211
-				'</script>'
1212
-			), '', self::minify_js($output) );
1213
-		}
1209
+            return str_replace( array(
1210
+                '<script>',
1211
+                '</script>'
1212
+            ), '', self::minify_js($output) );
1213
+        }
1214 1214
 
1215 1215
 
1216
-		/**
1217
-		 * JS to help with conflict issues with other plugins and themes using bootstrap v3.
1218
-		 *
1219
-		 * @TODO we may need this when other conflicts arrise.
1220
-		 * @return mixed
1221
-		 */
1222
-		public static function bs3_compat_js() {
1223
-			ob_start();
1224
-			?>
1216
+        /**
1217
+         * JS to help with conflict issues with other plugins and themes using bootstrap v3.
1218
+         *
1219
+         * @TODO we may need this when other conflicts arrise.
1220
+         * @return mixed
1221
+         */
1222
+        public static function bs3_compat_js() {
1223
+            ob_start();
1224
+            ?>
1225 1225
 			<script>
1226 1226
 				<?php if( defined( 'FUSION_BUILDER_VERSION' ) ){ ?>
1227 1227
 				/* With Avada builder */
@@ -1229,20 +1229,20 @@  discard block
 block discarded – undo
1229 1229
 				<?php } ?>
1230 1230
 			</script>
1231 1231
 			<?php
1232
-			return str_replace( array(
1233
-				'<script>',
1234
-				'</script>'
1235
-			), '', ob_get_clean());
1236
-		}
1232
+            return str_replace( array(
1233
+                '<script>',
1234
+                '</script>'
1235
+            ), '', ob_get_clean());
1236
+        }
1237 1237
 
1238
-		/**
1239
-		 * Get inline script used if bootstrap file browser enqueued.
1240
-		 *
1241
-		 * If this remains small then its best to use this than to add another JS file.
1242
-		 */
1243
-		public function inline_script_file_browser(){
1244
-			ob_start();
1245
-			?>
1238
+        /**
1239
+         * Get inline script used if bootstrap file browser enqueued.
1240
+         *
1241
+         * If this remains small then its best to use this than to add another JS file.
1242
+         */
1243
+        public function inline_script_file_browser(){
1244
+            ob_start();
1245
+            ?>
1246 1246
 			<script>
1247 1247
 				// run on doc ready
1248 1248
 				jQuery(document).ready(function () {
@@ -1250,203 +1250,203 @@  discard block
 block discarded – undo
1250 1250
 				});
1251 1251
 			</script>
1252 1252
 			<?php
1253
-			$output = ob_get_clean();
1253
+            $output = ob_get_clean();
1254 1254
 
1255
-			/*
1255
+            /*
1256 1256
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1257 1257
 			 */
1258
-			return str_replace( array(
1259
-				'<script>',
1260
-				'</script>'
1261
-			), '', $output );
1262
-		}
1258
+            return str_replace( array(
1259
+                '<script>',
1260
+                '</script>'
1261
+            ), '', $output );
1262
+        }
1263 1263
 
1264
-		/**
1265
-		 * Adds the Font Awesome JS.
1266
-		 */
1267
-		public function enqueue_scripts() {
1264
+        /**
1265
+         * Adds the Font Awesome JS.
1266
+         */
1267
+        public function enqueue_scripts() {
1268 1268
 
1269
-			if( is_admin() && !$this->is_aui_screen()){
1270
-				// don't add wp-admin scripts if not requested to
1271
-			}else {
1269
+            if( is_admin() && !$this->is_aui_screen()){
1270
+                // don't add wp-admin scripts if not requested to
1271
+            }else {
1272 1272
 
1273
-				$js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
1273
+                $js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
1274 1274
 
1275
-				// select2
1276
-				wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
1275
+                // select2
1276
+                wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
1277 1277
 
1278
-				// flatpickr
1279
-				wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
1278
+                // flatpickr
1279
+                wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
1280 1280
 
1281
-				// flatpickr
1282
-				wp_register_script( 'iconpicker', $this->url . 'assets/js/fontawesome-iconpicker.min.js', array(), $this->version );
1281
+                // flatpickr
1282
+                wp_register_script( 'iconpicker', $this->url . 'assets/js/fontawesome-iconpicker.min.js', array(), $this->version );
1283 1283
 				
1284
-				// Bootstrap file browser
1285
-				wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
1286
-				wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
1287
-
1288
-				$load_inline = false;
1289
-
1290
-				if ( $this->settings[ $js_setting ] == 'core-popper' ) {
1291
-					// Bootstrap bundle
1292
-					$url = $this->url . 'assets/js/bootstrap.bundle.min.js';
1293
-					wp_register_script( 'bootstrap-js-bundle', $url, array(
1294
-						'select2',
1295
-						'jquery'
1296
-					), $this->version, $this->is_bs3_compat() );
1297
-					// if in admin then add to footer for compatibility.
1298
-					is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
1299
-					$script = $this->inline_script();
1300
-					wp_add_inline_script( 'bootstrap-js-bundle', $script );
1301
-				} elseif ( $this->settings[ $js_setting ] == 'popper' ) {
1302
-					$url = $this->url . 'assets/js/popper.min.js';
1303
-					wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
1304
-					wp_enqueue_script( 'bootstrap-js-popper' );
1305
-					$load_inline = true;
1306
-				} else {
1307
-					$load_inline = true;
1308
-				}
1284
+                // Bootstrap file browser
1285
+                wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
1286
+                wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
1287
+
1288
+                $load_inline = false;
1289
+
1290
+                if ( $this->settings[ $js_setting ] == 'core-popper' ) {
1291
+                    // Bootstrap bundle
1292
+                    $url = $this->url . 'assets/js/bootstrap.bundle.min.js';
1293
+                    wp_register_script( 'bootstrap-js-bundle', $url, array(
1294
+                        'select2',
1295
+                        'jquery'
1296
+                    ), $this->version, $this->is_bs3_compat() );
1297
+                    // if in admin then add to footer for compatibility.
1298
+                    is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
1299
+                    $script = $this->inline_script();
1300
+                    wp_add_inline_script( 'bootstrap-js-bundle', $script );
1301
+                } elseif ( $this->settings[ $js_setting ] == 'popper' ) {
1302
+                    $url = $this->url . 'assets/js/popper.min.js';
1303
+                    wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
1304
+                    wp_enqueue_script( 'bootstrap-js-popper' );
1305
+                    $load_inline = true;
1306
+                } else {
1307
+                    $load_inline = true;
1308
+                }
1309 1309
 
1310
-				// Load needed inline scripts by faking the loading of a script if the main script is not being loaded
1311
-				if ( $load_inline ) {
1312
-					wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
1313
-					wp_enqueue_script( 'bootstrap-dummy' );
1314
-					$script = $this->inline_script();
1315
-					wp_add_inline_script( 'bootstrap-dummy', $script );
1316
-				}
1317
-			}
1310
+                // Load needed inline scripts by faking the loading of a script if the main script is not being loaded
1311
+                if ( $load_inline ) {
1312
+                    wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
1313
+                    wp_enqueue_script( 'bootstrap-dummy' );
1314
+                    $script = $this->inline_script();
1315
+                    wp_add_inline_script( 'bootstrap-dummy', $script );
1316
+                }
1317
+            }
1318 1318
 
1319
-		}
1319
+        }
1320 1320
 
1321
-		/**
1322
-		 * Enqueue flatpickr if called.
1323
-		 */
1324
-		public function enqueue_flatpickr(){
1325
-			wp_enqueue_style( 'flatpickr' );
1326
-			wp_enqueue_script( 'flatpickr' );
1327
-		}
1321
+        /**
1322
+         * Enqueue flatpickr if called.
1323
+         */
1324
+        public function enqueue_flatpickr(){
1325
+            wp_enqueue_style( 'flatpickr' );
1326
+            wp_enqueue_script( 'flatpickr' );
1327
+        }
1328 1328
 
1329
-		/**
1330
-		 * Enqueue iconpicker if called.
1331
-		 */
1332
-		public function enqueue_iconpicker(){
1333
-			wp_enqueue_style( 'iconpicker' );
1334
-			wp_enqueue_script( 'iconpicker' );
1335
-		}
1329
+        /**
1330
+         * Enqueue iconpicker if called.
1331
+         */
1332
+        public function enqueue_iconpicker(){
1333
+            wp_enqueue_style( 'iconpicker' );
1334
+            wp_enqueue_script( 'iconpicker' );
1335
+        }
1336 1336
 
1337
-		/**
1338
-		 * Get the url path to the current folder.
1339
-		 *
1340
-		 * @return string
1341
-		 */
1342
-		public function get_url() {
1337
+        /**
1338
+         * Get the url path to the current folder.
1339
+         *
1340
+         * @return string
1341
+         */
1342
+        public function get_url() {
1343 1343
 
1344
-			$url = '';
1345
-			// check if we are inside a plugin
1346
-			$file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
1344
+            $url = '';
1345
+            // check if we are inside a plugin
1346
+            $file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
1347 1347
 
1348
-			// add check in-case user has changed wp-content dir name.
1349
-			$wp_content_folder_name = basename(WP_CONTENT_DIR);
1350
-			$dir_parts = explode("/$wp_content_folder_name/",$file_dir);
1351
-			$url_parts = explode("/$wp_content_folder_name/",plugins_url());
1348
+            // add check in-case user has changed wp-content dir name.
1349
+            $wp_content_folder_name = basename(WP_CONTENT_DIR);
1350
+            $dir_parts = explode("/$wp_content_folder_name/",$file_dir);
1351
+            $url_parts = explode("/$wp_content_folder_name/",plugins_url());
1352 1352
 
1353
-			if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1354
-				$url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
1355
-			}
1353
+            if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1354
+                $url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
1355
+            }
1356 1356
 
1357
-			return $url;
1358
-		}
1357
+            return $url;
1358
+        }
1359 1359
 
1360
-		/**
1361
-		 * Register the database settings with WordPress.
1362
-		 */
1363
-		public function register_settings() {
1364
-			register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
1365
-		}
1360
+        /**
1361
+         * Register the database settings with WordPress.
1362
+         */
1363
+        public function register_settings() {
1364
+            register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
1365
+        }
1366 1366
 
1367
-		/**
1368
-		 * Add the WordPress settings menu item.
1369
-		 * @since 1.0.10 Calling function name direct will fail theme check so we don't.
1370
-		 */
1371
-		public function menu_item() {
1372
-			$menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
1373
-			call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
1374
-				$this,
1375
-				'settings_page'
1376
-			) );
1377
-		}
1367
+        /**
1368
+         * Add the WordPress settings menu item.
1369
+         * @since 1.0.10 Calling function name direct will fail theme check so we don't.
1370
+         */
1371
+        public function menu_item() {
1372
+            $menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
1373
+            call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
1374
+                $this,
1375
+                'settings_page'
1376
+            ) );
1377
+        }
1378 1378
 
1379
-		/**
1380
-		 * Get a list of themes and their default JS settings.
1381
-		 *
1382
-		 * @return array
1383
-		 */
1384
-		public function theme_js_settings(){
1385
-			return array(
1386
-				'ayetheme' => 'popper',
1387
-				'listimia' => 'required',
1388
-				'listimia_backend' => 'core-popper',
1389
-				//'avada'    => 'required', // removed as we now add compatibility
1390
-			);
1391
-		}
1379
+        /**
1380
+         * Get a list of themes and their default JS settings.
1381
+         *
1382
+         * @return array
1383
+         */
1384
+        public function theme_js_settings(){
1385
+            return array(
1386
+                'ayetheme' => 'popper',
1387
+                'listimia' => 'required',
1388
+                'listimia_backend' => 'core-popper',
1389
+                //'avada'    => 'required', // removed as we now add compatibility
1390
+            );
1391
+        }
1392 1392
 
1393
-		/**
1394
-		 * Get the current Font Awesome output settings.
1395
-		 *
1396
-		 * @return array The array of settings.
1397
-		 */
1398
-		public function get_settings() {
1399
-
1400
-			$db_settings = get_option( 'ayecode-ui-settings' );
1401
-			$js_default = 'core-popper';
1402
-			$js_default_backend = $js_default;
1403
-
1404
-			// maybe set defaults (if no settings set)
1405
-			if(empty($db_settings)){
1406
-				$active_theme = strtolower( get_template() ); // active parent theme.
1407
-				$theme_js_settings = self::theme_js_settings();
1408
-				if(isset($theme_js_settings[$active_theme])){
1409
-					$js_default = $theme_js_settings[$active_theme];
1410
-					$js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
1411
-				}
1412
-			}
1413
-
1414
-			$defaults = array(
1415
-				'css'       => 'compatibility', // core, compatibility
1416
-				'js'        => $js_default, // js to load, core-popper, popper
1417
-				'html_font_size'        => '16', // js to load, core-popper, popper
1418
-				'css_backend'       => 'compatibility', // core, compatibility
1419
-				'js_backend'        => $js_default_backend, // js to load, core-popper, popper
1420
-				'disable_admin'     =>  '', // URL snippets to disable loading on admin
1421
-			);
1422
-
1423
-			$settings = wp_parse_args( $db_settings, $defaults );
1424
-
1425
-			/**
1426
-			 * Filter the Bootstrap settings.
1427
-			 *
1428
-			 * @todo if we add this filer people might use it and then it defeates the purpose of this class :/
1429
-			 */
1430
-			return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
1431
-		}
1393
+        /**
1394
+         * Get the current Font Awesome output settings.
1395
+         *
1396
+         * @return array The array of settings.
1397
+         */
1398
+        public function get_settings() {
1399
+
1400
+            $db_settings = get_option( 'ayecode-ui-settings' );
1401
+            $js_default = 'core-popper';
1402
+            $js_default_backend = $js_default;
1403
+
1404
+            // maybe set defaults (if no settings set)
1405
+            if(empty($db_settings)){
1406
+                $active_theme = strtolower( get_template() ); // active parent theme.
1407
+                $theme_js_settings = self::theme_js_settings();
1408
+                if(isset($theme_js_settings[$active_theme])){
1409
+                    $js_default = $theme_js_settings[$active_theme];
1410
+                    $js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
1411
+                }
1412
+            }
1413
+
1414
+            $defaults = array(
1415
+                'css'       => 'compatibility', // core, compatibility
1416
+                'js'        => $js_default, // js to load, core-popper, popper
1417
+                'html_font_size'        => '16', // js to load, core-popper, popper
1418
+                'css_backend'       => 'compatibility', // core, compatibility
1419
+                'js_backend'        => $js_default_backend, // js to load, core-popper, popper
1420
+                'disable_admin'     =>  '', // URL snippets to disable loading on admin
1421
+            );
1422
+
1423
+            $settings = wp_parse_args( $db_settings, $defaults );
1424
+
1425
+            /**
1426
+             * Filter the Bootstrap settings.
1427
+             *
1428
+             * @todo if we add this filer people might use it and then it defeates the purpose of this class :/
1429
+             */
1430
+            return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
1431
+        }
1432 1432
 
1433 1433
 
1434
-		/**
1435
-		 * The settings page html output.
1436
-		 */
1437
-		public function settings_page() {
1438
-			if ( ! current_user_can( 'manage_options' ) ) {
1439
-				wp_die( __( 'You do not have sufficient permissions to access this page.', 'aui' ) );
1440
-			}
1441
-			?>
1434
+        /**
1435
+         * The settings page html output.
1436
+         */
1437
+        public function settings_page() {
1438
+            if ( ! current_user_can( 'manage_options' ) ) {
1439
+                wp_die( __( 'You do not have sufficient permissions to access this page.', 'aui' ) );
1440
+            }
1441
+            ?>
1442 1442
 			<div class="wrap">
1443 1443
 				<h1><?php echo $this->name; ?></h1>
1444 1444
 				<p><?php _e("Here you can adjust settings if you are having compatibility issues.",'aui');?></p>
1445 1445
 				<form method="post" action="options.php">
1446 1446
 					<?php
1447
-					settings_fields( 'ayecode-ui-settings' );
1448
-					do_settings_sections( 'ayecode-ui-settings' );
1449
-					?>
1447
+                    settings_fields( 'ayecode-ui-settings' );
1448
+                    do_settings_sections( 'ayecode-ui-settings' );
1449
+                    ?>
1450 1450
 
1451 1451
 					<h2><?php _e( 'Frontend', 'aui' ); ?></h2>
1452 1452
 					<table class="form-table wpbs-table-settings">
@@ -1526,60 +1526,60 @@  discard block
 block discarded – undo
1526 1526
 					</table>
1527 1527
 
1528 1528
 					<?php
1529
-					submit_button();
1530
-					?>
1529
+                    submit_button();
1530
+                    ?>
1531 1531
 				</form>
1532 1532
 
1533 1533
 				<div id="wpbs-version"><?php echo $this->version; ?></div>
1534 1534
 			</div>
1535 1535
 
1536 1536
 			<?php
1537
-		}
1537
+        }
1538 1538
 
1539
-		public function customizer_settings($wp_customize){
1540
-			$wp_customize->add_section('aui_settings', array(
1541
-				'title'    => __('AyeCode UI','aui'),
1542
-				'priority' => 120,
1543
-			));
1544
-
1545
-			//  =============================
1546
-			//  = Color Picker              =
1547
-			//  =============================
1548
-			$wp_customize->add_setting('aui_options[color_primary]', array(
1549
-				'default'           => AUI_PRIMARY_COLOR,
1550
-				'sanitize_callback' => 'sanitize_hex_color',
1551
-				'capability'        => 'edit_theme_options',
1552
-				'type'              => 'option',
1553
-				'transport'         => 'refresh',
1554
-			));
1555
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1556
-				'label'    => __('Primary Color','aui'),
1557
-				'section'  => 'aui_settings',
1558
-				'settings' => 'aui_options[color_primary]',
1559
-			)));
1560
-
1561
-			$wp_customize->add_setting('aui_options[color_secondary]', array(
1562
-				'default'           => '#6c757d',
1563
-				'sanitize_callback' => 'sanitize_hex_color',
1564
-				'capability'        => 'edit_theme_options',
1565
-				'type'              => 'option',
1566
-				'transport'         => 'refresh',
1567
-			));
1568
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1569
-				'label'    => __('Secondary Color','aui'),
1570
-				'section'  => 'aui_settings',
1571
-				'settings' => 'aui_options[color_secondary]',
1572
-			)));
1573
-		}
1539
+        public function customizer_settings($wp_customize){
1540
+            $wp_customize->add_section('aui_settings', array(
1541
+                'title'    => __('AyeCode UI','aui'),
1542
+                'priority' => 120,
1543
+            ));
1544
+
1545
+            //  =============================
1546
+            //  = Color Picker              =
1547
+            //  =============================
1548
+            $wp_customize->add_setting('aui_options[color_primary]', array(
1549
+                'default'           => AUI_PRIMARY_COLOR,
1550
+                'sanitize_callback' => 'sanitize_hex_color',
1551
+                'capability'        => 'edit_theme_options',
1552
+                'type'              => 'option',
1553
+                'transport'         => 'refresh',
1554
+            ));
1555
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1556
+                'label'    => __('Primary Color','aui'),
1557
+                'section'  => 'aui_settings',
1558
+                'settings' => 'aui_options[color_primary]',
1559
+            )));
1560
+
1561
+            $wp_customize->add_setting('aui_options[color_secondary]', array(
1562
+                'default'           => '#6c757d',
1563
+                'sanitize_callback' => 'sanitize_hex_color',
1564
+                'capability'        => 'edit_theme_options',
1565
+                'type'              => 'option',
1566
+                'transport'         => 'refresh',
1567
+            ));
1568
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1569
+                'label'    => __('Secondary Color','aui'),
1570
+                'section'  => 'aui_settings',
1571
+                'settings' => 'aui_options[color_secondary]',
1572
+            )));
1573
+        }
1574 1574
 
1575
-		/**
1576
-		 * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1577
-		 *
1578
-		 * @return mixed
1579
-		 */
1580
-		public static function bs3_compat_css() {
1581
-			ob_start();
1582
-			?>
1575
+        /**
1576
+         * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1577
+         *
1578
+         * @return mixed
1579
+         */
1580
+        public static function bs3_compat_css() {
1581
+            ob_start();
1582
+            ?>
1583 1583
 			<style>
1584 1584
 			/* Bootstrap 3 compatibility */
1585 1585
 			body.modal-open .modal-backdrop.show:not(.in) {opacity:0.5;}
@@ -1608,583 +1608,583 @@  discard block
 block discarded – undo
1608 1608
 			<?php } ?>
1609 1609
 			</style>
1610 1610
 			<?php
1611
-			return str_replace( array(
1612
-				'<style>',
1613
-				'</style>'
1614
-			), '', self::minify_css( ob_get_clean() ) );
1615
-		}
1611
+            return str_replace( array(
1612
+                '<style>',
1613
+                '</style>'
1614
+            ), '', self::minify_css( ob_get_clean() ) );
1615
+        }
1616 1616
 
1617 1617
 
1618
-		public static function custom_css($compatibility = true) {
1619
-			$settings = get_option('aui_options');
1618
+        public static function custom_css($compatibility = true) {
1619
+            $settings = get_option('aui_options');
1620 1620
 
1621
-			ob_start();
1621
+            ob_start();
1622 1622
 
1623
-			$primary_color = !empty($settings['color_primary']) ? $settings['color_primary'] : AUI_PRIMARY_COLOR;
1624
-			$secondary_color = !empty($settings['color_secondary']) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR;
1625
-				//AUI_PRIMARY_COLOR_ORIGINAL
1626
-			?>
1623
+            $primary_color = !empty($settings['color_primary']) ? $settings['color_primary'] : AUI_PRIMARY_COLOR;
1624
+            $secondary_color = !empty($settings['color_secondary']) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR;
1625
+                //AUI_PRIMARY_COLOR_ORIGINAL
1626
+            ?>
1627 1627
 			<style>
1628 1628
 				<?php
1629 1629
 
1630
-					// BS v3 compat
1631
-					if( self::is_bs3_compat() ){
1632
-					    echo self::bs3_compat_css();
1633
-					}
1630
+                    // BS v3 compat
1631
+                    if( self::is_bs3_compat() ){
1632
+                        echo self::bs3_compat_css();
1633
+                    }
1634 1634
 
1635
-					if(!is_admin() && $primary_color != AUI_PRIMARY_COLOR_ORIGINAL){
1636
-						echo self::css_primary($primary_color,$compatibility);
1637
-					}
1635
+                    if(!is_admin() && $primary_color != AUI_PRIMARY_COLOR_ORIGINAL){
1636
+                        echo self::css_primary($primary_color,$compatibility);
1637
+                    }
1638 1638
 
1639
-					if(!is_admin() && $secondary_color != AUI_SECONDARY_COLOR_ORIGINAL){
1640
-						echo self::css_secondary($settings['color_secondary'],$compatibility);
1641
-					}
1639
+                    if(!is_admin() && $secondary_color != AUI_SECONDARY_COLOR_ORIGINAL){
1640
+                        echo self::css_secondary($settings['color_secondary'],$compatibility);
1641
+                    }
1642 1642
 
1643
-					// Set admin bar z-index lower when modal is open.
1644
-					echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1643
+                    // Set admin bar z-index lower when modal is open.
1644
+                    echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1645 1645
 
1646
-					if(is_admin()){
1647
-						echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1648
-					}
1646
+                    if(is_admin()){
1647
+                        echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1648
+                    }
1649 1649
                 ?>
1650 1650
 			</style>
1651 1651
 			<?php
1652 1652
 
1653 1653
 
1654
-			/*
1654
+            /*
1655 1655
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1656 1656
 			 */
1657
-			return str_replace( array(
1658
-				'<style>',
1659
-				'</style>'
1660
-			), '', self::minify_css( ob_get_clean() ) );
1661
-		}
1657
+            return str_replace( array(
1658
+                '<style>',
1659
+                '</style>'
1660
+            ), '', self::minify_css( ob_get_clean() ) );
1661
+        }
1662 1662
 
1663
-		/**
1664
-		 * Check if we should add booststrap 3 compatibility changes.
1665
-		 *
1666
-		 * @return bool
1667
-		 */
1668
-		public static function is_bs3_compat(){
1669
-			return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1670
-		}
1663
+        /**
1664
+         * Check if we should add booststrap 3 compatibility changes.
1665
+         *
1666
+         * @return bool
1667
+         */
1668
+        public static function is_bs3_compat(){
1669
+            return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1670
+        }
1671 1671
 
1672
-		public static function css_primary($color_code,$compatibility){;
1673
-			$color_code = sanitize_hex_color($color_code);
1674
-			if(!$color_code){return '';}
1675
-			/**
1676
-			 * c = color, b = background color, o = border-color, f = fill
1677
-			 */
1678
-			$selectors = array(
1679
-				'a' => array('c'),
1680
-				'.btn-primary' => array('b','o'),
1681
-				'.btn-primary.disabled' => array('b','o'),
1682
-				'.btn-primary:disabled' => array('b','o'),
1683
-				'.btn-outline-primary' => array('c','o'),
1684
-				'.btn-outline-primary:hover' => array('b','o'),
1685
-				'.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1686
-				'.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1687
-				'.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1688
-				'.btn-link' => array('c'),
1689
-				'.dropdown-item.active' => array('b'),
1690
-				'.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1691
-				'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1672
+        public static function css_primary($color_code,$compatibility){;
1673
+            $color_code = sanitize_hex_color($color_code);
1674
+            if(!$color_code){return '';}
1675
+            /**
1676
+             * c = color, b = background color, o = border-color, f = fill
1677
+             */
1678
+            $selectors = array(
1679
+                'a' => array('c'),
1680
+                '.btn-primary' => array('b','o'),
1681
+                '.btn-primary.disabled' => array('b','o'),
1682
+                '.btn-primary:disabled' => array('b','o'),
1683
+                '.btn-outline-primary' => array('c','o'),
1684
+                '.btn-outline-primary:hover' => array('b','o'),
1685
+                '.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1686
+                '.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1687
+                '.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1688
+                '.btn-link' => array('c'),
1689
+                '.dropdown-item.active' => array('b'),
1690
+                '.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1691
+                '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1692 1692
 //				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1693 1693
 //				'.custom-range::-moz-range-thumb' => array('b'),
1694 1694
 //				'.custom-range::-ms-thumb' => array('b'),
1695
-				'.nav-pills .nav-link.active' => array('b'),
1696
-				'.nav-pills .show>.nav-link' => array('b'),
1697
-				'.page-link' => array('c'),
1698
-				'.page-item.active .page-link' => array('b','o'),
1699
-				'.badge-primary' => array('b'),
1700
-				'.alert-primary' => array('b','o'),
1701
-				'.progress-bar' => array('b'),
1702
-				'.list-group-item.active' => array('b','o'),
1703
-				'.bg-primary' => array('b','f'),
1704
-				'.btn-link.btn-primary' => array('c'),
1705
-				'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1706
-			);
1707
-
1708
-			$important_selectors = array(
1709
-				'.bg-primary' => array('b','f'),
1710
-				'.border-primary' => array('o'),
1711
-				'.text-primary' => array('c'),
1712
-			);
1713
-
1714
-			$color = array();
1715
-			$color_i = array();
1716
-			$background = array();
1717
-			$background_i = array();
1718
-			$border = array();
1719
-			$border_i = array();
1720
-			$fill = array();
1721
-			$fill_i = array();
1722
-
1723
-			$output = '';
1724
-
1725
-			// build rules into each type
1726
-			foreach($selectors as $selector => $types){
1727
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1728
-				$types = array_combine($types,$types);
1729
-				if(isset($types['c'])){$color[] = $selector;}
1730
-				if(isset($types['b'])){$background[] = $selector;}
1731
-				if(isset($types['o'])){$border[] = $selector;}
1732
-				if(isset($types['f'])){$fill[] = $selector;}
1733
-			}
1734
-
1735
-			// build rules into each type
1736
-			foreach($important_selectors as $selector => $types){
1737
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1738
-				$types = array_combine($types,$types);
1739
-				if(isset($types['c'])){$color_i[] = $selector;}
1740
-				if(isset($types['b'])){$background_i[] = $selector;}
1741
-				if(isset($types['o'])){$border_i[] = $selector;}
1742
-				if(isset($types['f'])){$fill_i[] = $selector;}
1743
-			}
1744
-
1745
-			// add any color rules
1746
-			if(!empty($color)){
1747
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1748
-			}
1749
-			if(!empty($color_i)){
1750
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1751
-			}
1752
-
1753
-			// add any background color rules
1754
-			if(!empty($background)){
1755
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1756
-			}
1757
-			if(!empty($background_i)){
1758
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1759
-			}
1760
-
1761
-			// add any border color rules
1762
-			if(!empty($border)){
1763
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1764
-			}
1765
-			if(!empty($border_i)){
1766
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1767
-			}
1768
-
1769
-			// add any fill color rules
1770
-			if(!empty($fill)){
1771
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1772
-			}
1773
-			if(!empty($fill_i)){
1774
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1775
-			}
1776
-
1777
-
1778
-			$prefix = $compatibility ? ".bsui " : "";
1779
-
1780
-			// darken
1781
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1782
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1783
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1784
-
1785
-			// lighten
1786
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1787
-
1788
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1789
-			$op_25 = $color_code."40"; // 25% opacity
1790
-
1791
-
1792
-			// button states
1793
-			$output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1794
-			$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;} ";
1795
-			$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.";} ";
1796
-			$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;} ";
1797
-
1798
-
1799
-			// dropdown's
1800
-			$output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1801
-
1802
-
1803
-			// input states
1804
-			$output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1805
-
1806
-			// page link
1807
-			$output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1808
-
1809
-			return $output;
1810
-		}
1695
+                '.nav-pills .nav-link.active' => array('b'),
1696
+                '.nav-pills .show>.nav-link' => array('b'),
1697
+                '.page-link' => array('c'),
1698
+                '.page-item.active .page-link' => array('b','o'),
1699
+                '.badge-primary' => array('b'),
1700
+                '.alert-primary' => array('b','o'),
1701
+                '.progress-bar' => array('b'),
1702
+                '.list-group-item.active' => array('b','o'),
1703
+                '.bg-primary' => array('b','f'),
1704
+                '.btn-link.btn-primary' => array('c'),
1705
+                '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1706
+            );
1707
+
1708
+            $important_selectors = array(
1709
+                '.bg-primary' => array('b','f'),
1710
+                '.border-primary' => array('o'),
1711
+                '.text-primary' => array('c'),
1712
+            );
1713
+
1714
+            $color = array();
1715
+            $color_i = array();
1716
+            $background = array();
1717
+            $background_i = array();
1718
+            $border = array();
1719
+            $border_i = array();
1720
+            $fill = array();
1721
+            $fill_i = array();
1722
+
1723
+            $output = '';
1724
+
1725
+            // build rules into each type
1726
+            foreach($selectors as $selector => $types){
1727
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1728
+                $types = array_combine($types,$types);
1729
+                if(isset($types['c'])){$color[] = $selector;}
1730
+                if(isset($types['b'])){$background[] = $selector;}
1731
+                if(isset($types['o'])){$border[] = $selector;}
1732
+                if(isset($types['f'])){$fill[] = $selector;}
1733
+            }
1811 1734
 
1812
-		public static function css_secondary($color_code,$compatibility){;
1813
-			$color_code = sanitize_hex_color($color_code);
1814
-			if(!$color_code){return '';}
1815
-			/**
1816
-			 * c = color, b = background color, o = border-color, f = fill
1817
-			 */
1818
-			$selectors = array(
1819
-				'.btn-secondary' => array('b','o'),
1820
-				'.btn-secondary.disabled' => array('b','o'),
1821
-				'.btn-secondary:disabled' => array('b','o'),
1822
-				'.btn-outline-secondary' => array('c','o'),
1823
-				'.btn-outline-secondary:hover' => array('b','o'),
1824
-				'.btn-outline-secondary.disabled' => array('c'),
1825
-				'.btn-outline-secondary:disabled' => array('c'),
1826
-				'.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
1827
-				'.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
1828
-				'.btn-outline-secondary.dropdown-toggle' => array('b','o'),
1829
-				'.badge-secondary' => array('b'),
1830
-				'.alert-secondary' => array('b','o'),
1831
-				'.btn-link.btn-secondary' => array('c'),
1832
-			);
1833
-
1834
-			$important_selectors = array(
1835
-				'.bg-secondary' => array('b','f'),
1836
-				'.border-secondary' => array('o'),
1837
-				'.text-secondary' => array('c'),
1838
-			);
1839
-
1840
-			$color = array();
1841
-			$color_i = array();
1842
-			$background = array();
1843
-			$background_i = array();
1844
-			$border = array();
1845
-			$border_i = array();
1846
-			$fill = array();
1847
-			$fill_i = array();
1848
-
1849
-			$output = '';
1850
-
1851
-			// build rules into each type
1852
-			foreach($selectors as $selector => $types){
1853
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1854
-				$types = array_combine($types,$types);
1855
-				if(isset($types['c'])){$color[] = $selector;}
1856
-				if(isset($types['b'])){$background[] = $selector;}
1857
-				if(isset($types['o'])){$border[] = $selector;}
1858
-				if(isset($types['f'])){$fill[] = $selector;}
1859
-			}
1860
-
1861
-			// build rules into each type
1862
-			foreach($important_selectors as $selector => $types){
1863
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1864
-				$types = array_combine($types,$types);
1865
-				if(isset($types['c'])){$color_i[] = $selector;}
1866
-				if(isset($types['b'])){$background_i[] = $selector;}
1867
-				if(isset($types['o'])){$border_i[] = $selector;}
1868
-				if(isset($types['f'])){$fill_i[] = $selector;}
1869
-			}
1870
-
1871
-			// add any color rules
1872
-			if(!empty($color)){
1873
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1874
-			}
1875
-			if(!empty($color_i)){
1876
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1877
-			}
1878
-
1879
-			// add any background color rules
1880
-			if(!empty($background)){
1881
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1882
-			}
1883
-			if(!empty($background_i)){
1884
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1885
-			}
1886
-
1887
-			// add any border color rules
1888
-			if(!empty($border)){
1889
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1890
-			}
1891
-			if(!empty($border_i)){
1892
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1893
-			}
1894
-
1895
-			// add any fill color rules
1896
-			if(!empty($fill)){
1897
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1898
-			}
1899
-			if(!empty($fill_i)){
1900
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1901
-			}
1902
-
1903
-
1904
-			$prefix = $compatibility ? ".bsui " : "";
1905
-
1906
-			// darken
1907
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1908
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1909
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1910
-
1911
-			// lighten
1912
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1913
-
1914
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1915
-			$op_25 = $color_code."40"; // 25% opacity
1916
-
1917
-
1918
-			// button states
1919
-			$output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1920
-			$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;} ";
1921
-			$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.";} ";
1922
-			$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;} ";
1923
-
1924
-
1925
-			return $output;
1926
-		}
1735
+            // build rules into each type
1736
+            foreach($important_selectors as $selector => $types){
1737
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1738
+                $types = array_combine($types,$types);
1739
+                if(isset($types['c'])){$color_i[] = $selector;}
1740
+                if(isset($types['b'])){$background_i[] = $selector;}
1741
+                if(isset($types['o'])){$border_i[] = $selector;}
1742
+                if(isset($types['f'])){$fill_i[] = $selector;}
1743
+            }
1927 1744
 
1928
-		/**
1929
-		 * Increases or decreases the brightness of a color by a percentage of the current brightness.
1930
-		 *
1931
-		 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
1932
-		 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
1933
-		 *
1934
-		 * @return  string
1935
-		 */
1936
-		public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
1937
-			$hexCode = ltrim($hexCode, '#');
1745
+            // add any color rules
1746
+            if(!empty($color)){
1747
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1748
+            }
1749
+            if(!empty($color_i)){
1750
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1751
+            }
1938 1752
 
1939
-			if (strlen($hexCode) == 3) {
1940
-				$hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
1941
-			}
1753
+            // add any background color rules
1754
+            if(!empty($background)){
1755
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1756
+            }
1757
+            if(!empty($background_i)){
1758
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1759
+            }
1942 1760
 
1943
-			$hexCode = array_map('hexdec', str_split($hexCode, 2));
1761
+            // add any border color rules
1762
+            if(!empty($border)){
1763
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1764
+            }
1765
+            if(!empty($border_i)){
1766
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1767
+            }
1944 1768
 
1945
-			foreach ($hexCode as & $color) {
1946
-				$adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
1947
-				$adjustAmount = ceil($adjustableLimit * $adjustPercent);
1769
+            // add any fill color rules
1770
+            if(!empty($fill)){
1771
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1772
+            }
1773
+            if(!empty($fill_i)){
1774
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1775
+            }
1948 1776
 
1949
-				$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
1950
-			}
1951 1777
 
1952
-			return '#' . implode($hexCode);
1953
-		}
1778
+            $prefix = $compatibility ? ".bsui " : "";
1954 1779
 
1955
-		/**
1956
-		 * Check if we should display examples.
1957
-		 */
1958
-		public function maybe_show_examples(){
1959
-			if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
1960
-				echo "<head>";
1961
-				wp_head();
1962
-				echo "</head>";
1963
-				echo "<body>";
1964
-				echo $this->get_examples();
1965
-				echo "</body>";
1966
-				exit;
1967
-			}
1968
-		}
1780
+            // darken
1781
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1782
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1783
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1969 1784
 
1970
-		/**
1971
-		 * Get developer examples.
1972
-		 *
1973
-		 * @return string
1974
-		 */
1975
-		public function get_examples(){
1976
-			$output = '';
1977
-
1978
-
1979
-			// open form
1980
-			$output .= "<form class='p-5 m-5 border rounded'>";
1981
-
1982
-			// input example
1983
-			$output .= aui()->input(array(
1984
-				'type'  =>  'text',
1985
-				'id'    =>  'text-example',
1986
-				'name'    =>  'text-example',
1987
-				'placeholder'   => 'text placeholder',
1988
-				'title'   => 'Text input example',
1989
-				'value' =>  '',
1990
-				'required'  => false,
1991
-				'help_text' => 'help text',
1992
-				'label' => 'Text input example label'
1993
-			));
1994
-
1995
-			// input example
1996
-			$output .= aui()->input(array(
1997
-				'type'  =>  'url',
1998
-				'id'    =>  'text-example2',
1999
-				'name'    =>  'text-example',
2000
-				'placeholder'   => 'url placeholder',
2001
-				'title'   => 'Text input example',
2002
-				'value' =>  '',
2003
-				'required'  => false,
2004
-				'help_text' => 'help text',
2005
-				'label' => 'Text input example label'
2006
-			));
2007
-
2008
-			// checkbox example
2009
-			$output .= aui()->input(array(
2010
-				'type'  =>  'checkbox',
2011
-				'id'    =>  'checkbox-example',
2012
-				'name'    =>  'checkbox-example',
2013
-				'placeholder'   => 'checkbox-example',
2014
-				'title'   => 'Checkbox example',
2015
-				'value' =>  '1',
2016
-				'checked'   => true,
2017
-				'required'  => false,
2018
-				'help_text' => 'help text',
2019
-				'label' => 'Checkbox checked'
2020
-			));
2021
-
2022
-			// checkbox example
2023
-			$output .= aui()->input(array(
2024
-				'type'  =>  'checkbox',
2025
-				'id'    =>  'checkbox-example2',
2026
-				'name'    =>  'checkbox-example2',
2027
-				'placeholder'   => 'checkbox-example',
2028
-				'title'   => 'Checkbox example',
2029
-				'value' =>  '1',
2030
-				'checked'   => false,
2031
-				'required'  => false,
2032
-				'help_text' => 'help text',
2033
-				'label' => 'Checkbox un-checked'
2034
-			));
2035
-
2036
-			// switch example
2037
-			$output .= aui()->input(array(
2038
-				'type'  =>  'checkbox',
2039
-				'id'    =>  'switch-example',
2040
-				'name'    =>  'switch-example',
2041
-				'placeholder'   => 'checkbox-example',
2042
-				'title'   => 'Switch example',
2043
-				'value' =>  '1',
2044
-				'checked'   => true,
2045
-				'switch'    => true,
2046
-				'required'  => false,
2047
-				'help_text' => 'help text',
2048
-				'label' => 'Switch on'
2049
-			));
2050
-
2051
-			// switch example
2052
-			$output .= aui()->input(array(
2053
-				'type'  =>  'checkbox',
2054
-				'id'    =>  'switch-example2',
2055
-				'name'    =>  'switch-example2',
2056
-				'placeholder'   => 'checkbox-example',
2057
-				'title'   => 'Switch example',
2058
-				'value' =>  '1',
2059
-				'checked'   => false,
2060
-				'switch'    => true,
2061
-				'required'  => false,
2062
-				'help_text' => 'help text',
2063
-				'label' => 'Switch off'
2064
-			));
2065
-
2066
-			// close form
2067
-			$output .= "</form>";
2068
-
2069
-			return $output;
2070
-		}
1785
+            // lighten
1786
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2071 1787
 
2072
-		/**
2073
-		 * Calendar params.
2074
-		 *
2075
-		 * @since 0.1.44
2076
-		 *
2077
-		 * @return array Calendar params.
2078
-		 */
2079
-		public static function calendar_params() {
2080
-			$params = array(
2081
-				'month_long_1' => __( 'January', 'aui' ),
2082
-				'month_long_2' => __( 'February', 'aui' ),
2083
-				'month_long_3' => __( 'March', 'aui' ),
2084
-				'month_long_4' => __( 'April', 'aui' ),
2085
-				'month_long_5' => __( 'May', 'aui' ),
2086
-				'month_long_6' => __( 'June', 'aui' ),
2087
-				'month_long_7' => __( 'July', 'aui' ),
2088
-				'month_long_8' => __( 'August', 'aui' ),
2089
-				'month_long_9' => __( 'September', 'aui' ),
2090
-				'month_long_10' => __( 'October', 'aui' ),
2091
-				'month_long_11' => __( 'November', 'aui' ),
2092
-				'month_long_12' => __( 'December', 'aui' ),
2093
-				'month_s_1' => _x( 'Jan', 'January abbreviation', 'aui' ),
2094
-				'month_s_2' => _x( 'Feb', 'February abbreviation', 'aui' ),
2095
-				'month_s_3' => _x( 'Mar', 'March abbreviation', 'aui' ),
2096
-				'month_s_4' => _x( 'Apr', 'April abbreviation', 'aui' ),
2097
-				'month_s_5' => _x( 'May', 'May abbreviation', 'aui' ),
2098
-				'month_s_6' => _x( 'Jun', 'June abbreviation', 'aui' ),
2099
-				'month_s_7' => _x( 'Jul', 'July abbreviation', 'aui' ),
2100
-				'month_s_8' => _x( 'Aug', 'August abbreviation', 'aui' ),
2101
-				'month_s_9' => _x( 'Sep', 'September abbreviation', 'aui' ),
2102
-				'month_s_10' => _x( 'Oct', 'October abbreviation', 'aui' ),
2103
-				'month_s_11' => _x( 'Nov', 'November abbreviation', 'aui' ),
2104
-				'month_s_12' => _x( 'Dec', 'December abbreviation', 'aui' ),
2105
-				'day_s1_1' => _x( 'S', 'Sunday initial', 'aui' ),
2106
-				'day_s1_2' => _x( 'M', 'Monday initial', 'aui' ),
2107
-				'day_s1_3' => _x( 'T', 'Tuesday initial', 'aui' ),
2108
-				'day_s1_4' => _x( 'W', 'Wednesday initial', 'aui' ),
2109
-				'day_s1_5' => _x( 'T', 'Friday initial', 'aui' ),
2110
-				'day_s1_6' => _x( 'F', 'Thursday initial', 'aui' ),
2111
-				'day_s1_7' => _x( 'S', 'Saturday initial', 'aui' ),
2112
-				'day_s2_1' => __( 'Su', 'aui' ),
2113
-				'day_s2_2' => __( 'Mo', 'aui' ),
2114
-				'day_s2_3' => __( 'Tu', 'aui' ),
2115
-				'day_s2_4' => __( 'We', 'aui' ),
2116
-				'day_s2_5' => __( 'Th', 'aui' ),
2117
-				'day_s2_6' => __( 'Fr', 'aui' ),
2118
-				'day_s2_7' => __( 'Sa', 'aui' ),
2119
-				'day_s3_1' => __( 'Sun', 'aui' ),
2120
-				'day_s3_2' => __( 'Mon', 'aui' ),
2121
-				'day_s3_3' => __( 'Tue', 'aui' ),
2122
-				'day_s3_4' => __( 'Wed', 'aui' ),
2123
-				'day_s3_5' => __( 'Thu', 'aui' ),
2124
-				'day_s3_6' => __( 'Fri', 'aui' ),
2125
-				'day_s3_7' => __( 'Sat', 'aui' ),
2126
-				'day_s5_1' => __( 'Sunday', 'aui' ),
2127
-				'day_s5_2' => __( 'Monday', 'aui' ),
2128
-				'day_s5_3' => __( 'Tuesday', 'aui' ),
2129
-				'day_s5_4' => __( 'Wednesday', 'aui' ),
2130
-				'day_s5_5' => __( 'Thursday', 'aui' ),
2131
-				'day_s5_6' => __( 'Friday', 'aui' ),
2132
-				'day_s5_7' => __( 'Saturday', 'aui' ),
2133
-				'am_lower' => __( 'am', 'aui' ),
2134
-				'pm_lower' => __( 'pm', 'aui' ),
2135
-				'am_upper' => __( 'AM', 'aui' ),
2136
-				'pm_upper' => __( 'PM', 'aui' ),
2137
-				'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2138
-				'time_24hr' => false,
2139
-				'year' => __( 'Year', 'aui' ),
2140
-				'hour' => __( 'Hour', 'aui' ),
2141
-				'minute' => __( 'Minute', 'aui' ),
2142
-				'weekAbbreviation' => __( 'Wk', 'aui' ),
2143
-				'rangeSeparator' => __( ' to ', 'aui' ),
2144
-				'scrollTitle' => __( 'Scroll to increment', 'aui' ),
2145
-				'toggleTitle' => __( 'Click to toggle', 'aui' )
2146
-			);
2147
-
2148
-			return apply_filters( 'ayecode_ui_calendar_params', $params );
2149
-		}
1788
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1789
+            $op_25 = $color_code."40"; // 25% opacity
2150 1790
 
2151
-		/**
2152
-		 * Flatpickr calendar localize.
2153
-		 *
2154
-		 * @since 0.1.44
2155
-		 *
2156
-		 * @return string Calendar locale.
2157
-		 */
2158
-		public static function flatpickr_locale() {
2159
-			$params = self::calendar_params();
2160
-
2161
-			if ( is_string( $params ) ) {
2162
-				$params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2163
-			} else {
2164
-				foreach ( (array) $params as $key => $value ) {
2165
-					if ( ! is_scalar( $value ) ) {
2166
-						continue;
2167
-					}
2168 1791
 
2169
-					$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2170
-				}
2171
-			}
1792
+            // button states
1793
+            $output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1794
+            $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;} ";
1795
+            $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.";} ";
1796
+            $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;} ";
1797
+
1798
+
1799
+            // dropdown's
1800
+            $output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1801
+
1802
+
1803
+            // input states
1804
+            $output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1805
+
1806
+            // page link
1807
+            $output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1808
+
1809
+            return $output;
1810
+        }
1811
+
1812
+        public static function css_secondary($color_code,$compatibility){;
1813
+            $color_code = sanitize_hex_color($color_code);
1814
+            if(!$color_code){return '';}
1815
+            /**
1816
+             * c = color, b = background color, o = border-color, f = fill
1817
+             */
1818
+            $selectors = array(
1819
+                '.btn-secondary' => array('b','o'),
1820
+                '.btn-secondary.disabled' => array('b','o'),
1821
+                '.btn-secondary:disabled' => array('b','o'),
1822
+                '.btn-outline-secondary' => array('c','o'),
1823
+                '.btn-outline-secondary:hover' => array('b','o'),
1824
+                '.btn-outline-secondary.disabled' => array('c'),
1825
+                '.btn-outline-secondary:disabled' => array('c'),
1826
+                '.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
1827
+                '.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
1828
+                '.btn-outline-secondary.dropdown-toggle' => array('b','o'),
1829
+                '.badge-secondary' => array('b'),
1830
+                '.alert-secondary' => array('b','o'),
1831
+                '.btn-link.btn-secondary' => array('c'),
1832
+            );
1833
+
1834
+            $important_selectors = array(
1835
+                '.bg-secondary' => array('b','f'),
1836
+                '.border-secondary' => array('o'),
1837
+                '.text-secondary' => array('c'),
1838
+            );
1839
+
1840
+            $color = array();
1841
+            $color_i = array();
1842
+            $background = array();
1843
+            $background_i = array();
1844
+            $border = array();
1845
+            $border_i = array();
1846
+            $fill = array();
1847
+            $fill_i = array();
1848
+
1849
+            $output = '';
1850
+
1851
+            // build rules into each type
1852
+            foreach($selectors as $selector => $types){
1853
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1854
+                $types = array_combine($types,$types);
1855
+                if(isset($types['c'])){$color[] = $selector;}
1856
+                if(isset($types['b'])){$background[] = $selector;}
1857
+                if(isset($types['o'])){$border[] = $selector;}
1858
+                if(isset($types['f'])){$fill[] = $selector;}
1859
+            }
1860
+
1861
+            // build rules into each type
1862
+            foreach($important_selectors as $selector => $types){
1863
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1864
+                $types = array_combine($types,$types);
1865
+                if(isset($types['c'])){$color_i[] = $selector;}
1866
+                if(isset($types['b'])){$background_i[] = $selector;}
1867
+                if(isset($types['o'])){$border_i[] = $selector;}
1868
+                if(isset($types['f'])){$fill_i[] = $selector;}
1869
+            }
1870
+
1871
+            // add any color rules
1872
+            if(!empty($color)){
1873
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1874
+            }
1875
+            if(!empty($color_i)){
1876
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1877
+            }
1878
+
1879
+            // add any background color rules
1880
+            if(!empty($background)){
1881
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1882
+            }
1883
+            if(!empty($background_i)){
1884
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1885
+            }
1886
+
1887
+            // add any border color rules
1888
+            if(!empty($border)){
1889
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1890
+            }
1891
+            if(!empty($border_i)){
1892
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1893
+            }
1894
+
1895
+            // add any fill color rules
1896
+            if(!empty($fill)){
1897
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1898
+            }
1899
+            if(!empty($fill_i)){
1900
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1901
+            }
1902
+
1903
+
1904
+            $prefix = $compatibility ? ".bsui " : "";
1905
+
1906
+            // darken
1907
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1908
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1909
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1910
+
1911
+            // lighten
1912
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1913
+
1914
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1915
+            $op_25 = $color_code."40"; // 25% opacity
2172 1916
 
2173
-			$day_s3 = array();
2174
-			$day_s5 = array();
2175 1917
 
2176
-			for ( $i = 1; $i <= 7; $i ++ ) {
2177
-				$day_s3[] = addslashes( $params[ 'day_s3_' . $i ] );
2178
-				$day_s5[] = addslashes( $params[ 'day_s3_' . $i ] );
2179
-			}
1918
+            // button states
1919
+            $output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1920
+            $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;} ";
1921
+            $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.";} ";
1922
+            $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;} ";
2180 1923
 
2181
-			$month_s = array();
2182
-			$month_long = array();
2183 1924
 
2184
-			for ( $i = 1; $i <= 12; $i ++ ) {
2185
-				$month_s[] = addslashes( $params[ 'month_s_' . $i ] );
2186
-				$month_long[] = addslashes( $params[ 'month_long_' . $i ] );
2187
-			}
1925
+            return $output;
1926
+        }
1927
+
1928
+        /**
1929
+         * Increases or decreases the brightness of a color by a percentage of the current brightness.
1930
+         *
1931
+         * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
1932
+         * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
1933
+         *
1934
+         * @return  string
1935
+         */
1936
+        public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
1937
+            $hexCode = ltrim($hexCode, '#');
1938
+
1939
+            if (strlen($hexCode) == 3) {
1940
+                $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
1941
+            }
1942
+
1943
+            $hexCode = array_map('hexdec', str_split($hexCode, 2));
1944
+
1945
+            foreach ($hexCode as & $color) {
1946
+                $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
1947
+                $adjustAmount = ceil($adjustableLimit * $adjustPercent);
1948
+
1949
+                $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
1950
+            }
1951
+
1952
+            return '#' . implode($hexCode);
1953
+        }
1954
+
1955
+        /**
1956
+         * Check if we should display examples.
1957
+         */
1958
+        public function maybe_show_examples(){
1959
+            if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
1960
+                echo "<head>";
1961
+                wp_head();
1962
+                echo "</head>";
1963
+                echo "<body>";
1964
+                echo $this->get_examples();
1965
+                echo "</body>";
1966
+                exit;
1967
+            }
1968
+        }
1969
+
1970
+        /**
1971
+         * Get developer examples.
1972
+         *
1973
+         * @return string
1974
+         */
1975
+        public function get_examples(){
1976
+            $output = '';
1977
+
1978
+
1979
+            // open form
1980
+            $output .= "<form class='p-5 m-5 border rounded'>";
1981
+
1982
+            // input example
1983
+            $output .= aui()->input(array(
1984
+                'type'  =>  'text',
1985
+                'id'    =>  'text-example',
1986
+                'name'    =>  'text-example',
1987
+                'placeholder'   => 'text placeholder',
1988
+                'title'   => 'Text input example',
1989
+                'value' =>  '',
1990
+                'required'  => false,
1991
+                'help_text' => 'help text',
1992
+                'label' => 'Text input example label'
1993
+            ));
1994
+
1995
+            // input example
1996
+            $output .= aui()->input(array(
1997
+                'type'  =>  'url',
1998
+                'id'    =>  'text-example2',
1999
+                'name'    =>  'text-example',
2000
+                'placeholder'   => 'url placeholder',
2001
+                'title'   => 'Text input example',
2002
+                'value' =>  '',
2003
+                'required'  => false,
2004
+                'help_text' => 'help text',
2005
+                'label' => 'Text input example label'
2006
+            ));
2007
+
2008
+            // checkbox example
2009
+            $output .= aui()->input(array(
2010
+                'type'  =>  'checkbox',
2011
+                'id'    =>  'checkbox-example',
2012
+                'name'    =>  'checkbox-example',
2013
+                'placeholder'   => 'checkbox-example',
2014
+                'title'   => 'Checkbox example',
2015
+                'value' =>  '1',
2016
+                'checked'   => true,
2017
+                'required'  => false,
2018
+                'help_text' => 'help text',
2019
+                'label' => 'Checkbox checked'
2020
+            ));
2021
+
2022
+            // checkbox example
2023
+            $output .= aui()->input(array(
2024
+                'type'  =>  'checkbox',
2025
+                'id'    =>  'checkbox-example2',
2026
+                'name'    =>  'checkbox-example2',
2027
+                'placeholder'   => 'checkbox-example',
2028
+                'title'   => 'Checkbox example',
2029
+                'value' =>  '1',
2030
+                'checked'   => false,
2031
+                'required'  => false,
2032
+                'help_text' => 'help text',
2033
+                'label' => 'Checkbox un-checked'
2034
+            ));
2035
+
2036
+            // switch example
2037
+            $output .= aui()->input(array(
2038
+                'type'  =>  'checkbox',
2039
+                'id'    =>  'switch-example',
2040
+                'name'    =>  'switch-example',
2041
+                'placeholder'   => 'checkbox-example',
2042
+                'title'   => 'Switch example',
2043
+                'value' =>  '1',
2044
+                'checked'   => true,
2045
+                'switch'    => true,
2046
+                'required'  => false,
2047
+                'help_text' => 'help text',
2048
+                'label' => 'Switch on'
2049
+            ));
2050
+
2051
+            // switch example
2052
+            $output .= aui()->input(array(
2053
+                'type'  =>  'checkbox',
2054
+                'id'    =>  'switch-example2',
2055
+                'name'    =>  'switch-example2',
2056
+                'placeholder'   => 'checkbox-example',
2057
+                'title'   => 'Switch example',
2058
+                'value' =>  '1',
2059
+                'checked'   => false,
2060
+                'switch'    => true,
2061
+                'required'  => false,
2062
+                'help_text' => 'help text',
2063
+                'label' => 'Switch off'
2064
+            ));
2065
+
2066
+            // close form
2067
+            $output .= "</form>";
2068
+
2069
+            return $output;
2070
+        }
2071
+
2072
+        /**
2073
+         * Calendar params.
2074
+         *
2075
+         * @since 0.1.44
2076
+         *
2077
+         * @return array Calendar params.
2078
+         */
2079
+        public static function calendar_params() {
2080
+            $params = array(
2081
+                'month_long_1' => __( 'January', 'aui' ),
2082
+                'month_long_2' => __( 'February', 'aui' ),
2083
+                'month_long_3' => __( 'March', 'aui' ),
2084
+                'month_long_4' => __( 'April', 'aui' ),
2085
+                'month_long_5' => __( 'May', 'aui' ),
2086
+                'month_long_6' => __( 'June', 'aui' ),
2087
+                'month_long_7' => __( 'July', 'aui' ),
2088
+                'month_long_8' => __( 'August', 'aui' ),
2089
+                'month_long_9' => __( 'September', 'aui' ),
2090
+                'month_long_10' => __( 'October', 'aui' ),
2091
+                'month_long_11' => __( 'November', 'aui' ),
2092
+                'month_long_12' => __( 'December', 'aui' ),
2093
+                'month_s_1' => _x( 'Jan', 'January abbreviation', 'aui' ),
2094
+                'month_s_2' => _x( 'Feb', 'February abbreviation', 'aui' ),
2095
+                'month_s_3' => _x( 'Mar', 'March abbreviation', 'aui' ),
2096
+                'month_s_4' => _x( 'Apr', 'April abbreviation', 'aui' ),
2097
+                'month_s_5' => _x( 'May', 'May abbreviation', 'aui' ),
2098
+                'month_s_6' => _x( 'Jun', 'June abbreviation', 'aui' ),
2099
+                'month_s_7' => _x( 'Jul', 'July abbreviation', 'aui' ),
2100
+                'month_s_8' => _x( 'Aug', 'August abbreviation', 'aui' ),
2101
+                'month_s_9' => _x( 'Sep', 'September abbreviation', 'aui' ),
2102
+                'month_s_10' => _x( 'Oct', 'October abbreviation', 'aui' ),
2103
+                'month_s_11' => _x( 'Nov', 'November abbreviation', 'aui' ),
2104
+                'month_s_12' => _x( 'Dec', 'December abbreviation', 'aui' ),
2105
+                'day_s1_1' => _x( 'S', 'Sunday initial', 'aui' ),
2106
+                'day_s1_2' => _x( 'M', 'Monday initial', 'aui' ),
2107
+                'day_s1_3' => _x( 'T', 'Tuesday initial', 'aui' ),
2108
+                'day_s1_4' => _x( 'W', 'Wednesday initial', 'aui' ),
2109
+                'day_s1_5' => _x( 'T', 'Friday initial', 'aui' ),
2110
+                'day_s1_6' => _x( 'F', 'Thursday initial', 'aui' ),
2111
+                'day_s1_7' => _x( 'S', 'Saturday initial', 'aui' ),
2112
+                'day_s2_1' => __( 'Su', 'aui' ),
2113
+                'day_s2_2' => __( 'Mo', 'aui' ),
2114
+                'day_s2_3' => __( 'Tu', 'aui' ),
2115
+                'day_s2_4' => __( 'We', 'aui' ),
2116
+                'day_s2_5' => __( 'Th', 'aui' ),
2117
+                'day_s2_6' => __( 'Fr', 'aui' ),
2118
+                'day_s2_7' => __( 'Sa', 'aui' ),
2119
+                'day_s3_1' => __( 'Sun', 'aui' ),
2120
+                'day_s3_2' => __( 'Mon', 'aui' ),
2121
+                'day_s3_3' => __( 'Tue', 'aui' ),
2122
+                'day_s3_4' => __( 'Wed', 'aui' ),
2123
+                'day_s3_5' => __( 'Thu', 'aui' ),
2124
+                'day_s3_6' => __( 'Fri', 'aui' ),
2125
+                'day_s3_7' => __( 'Sat', 'aui' ),
2126
+                'day_s5_1' => __( 'Sunday', 'aui' ),
2127
+                'day_s5_2' => __( 'Monday', 'aui' ),
2128
+                'day_s5_3' => __( 'Tuesday', 'aui' ),
2129
+                'day_s5_4' => __( 'Wednesday', 'aui' ),
2130
+                'day_s5_5' => __( 'Thursday', 'aui' ),
2131
+                'day_s5_6' => __( 'Friday', 'aui' ),
2132
+                'day_s5_7' => __( 'Saturday', 'aui' ),
2133
+                'am_lower' => __( 'am', 'aui' ),
2134
+                'pm_lower' => __( 'pm', 'aui' ),
2135
+                'am_upper' => __( 'AM', 'aui' ),
2136
+                'pm_upper' => __( 'PM', 'aui' ),
2137
+                'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2138
+                'time_24hr' => false,
2139
+                'year' => __( 'Year', 'aui' ),
2140
+                'hour' => __( 'Hour', 'aui' ),
2141
+                'minute' => __( 'Minute', 'aui' ),
2142
+                'weekAbbreviation' => __( 'Wk', 'aui' ),
2143
+                'rangeSeparator' => __( ' to ', 'aui' ),
2144
+                'scrollTitle' => __( 'Scroll to increment', 'aui' ),
2145
+                'toggleTitle' => __( 'Click to toggle', 'aui' )
2146
+            );
2147
+
2148
+            return apply_filters( 'ayecode_ui_calendar_params', $params );
2149
+        }
2150
+
2151
+        /**
2152
+         * Flatpickr calendar localize.
2153
+         *
2154
+         * @since 0.1.44
2155
+         *
2156
+         * @return string Calendar locale.
2157
+         */
2158
+        public static function flatpickr_locale() {
2159
+            $params = self::calendar_params();
2160
+
2161
+            if ( is_string( $params ) ) {
2162
+                $params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2163
+            } else {
2164
+                foreach ( (array) $params as $key => $value ) {
2165
+                    if ( ! is_scalar( $value ) ) {
2166
+                        continue;
2167
+                    }
2168
+
2169
+                    $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2170
+                }
2171
+            }
2172
+
2173
+            $day_s3 = array();
2174
+            $day_s5 = array();
2175
+
2176
+            for ( $i = 1; $i <= 7; $i ++ ) {
2177
+                $day_s3[] = addslashes( $params[ 'day_s3_' . $i ] );
2178
+                $day_s5[] = addslashes( $params[ 'day_s3_' . $i ] );
2179
+            }
2180
+
2181
+            $month_s = array();
2182
+            $month_long = array();
2183
+
2184
+            for ( $i = 1; $i <= 12; $i ++ ) {
2185
+                $month_s[] = addslashes( $params[ 'month_s_' . $i ] );
2186
+                $month_long[] = addslashes( $params[ 'month_long_' . $i ] );
2187
+            }
2188 2188
 
2189 2189
 ob_start();
2190 2190
 if ( 0 ) { ?><script><?php } ?>
@@ -2226,189 +2226,189 @@  discard block
 block discarded – undo
2226 2226
 }
2227 2227
 <?php if ( 0 ) { ?></script><?php } ?>
2228 2228
 <?php
2229
-			$locale = ob_get_clean();
2229
+            $locale = ob_get_clean();
2230 2230
 
2231
-			return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2232
-		}
2231
+            return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2232
+        }
2233 2233
 
2234
-		/**
2235
-		 * Select2 JS params.
2236
-		 *
2237
-		 * @since 0.1.44
2238
-		 *
2239
-		 * @return array Select2 JS params.
2240
-		 */
2241
-		public static function select2_params() {
2242
-			$params = array(
2243
-				'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'aui' ),
2244
-				'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'aui' ),
2245
-				'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'aui' ),
2246
-				'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'aui' ),
2247
-				'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'aui' ),
2248
-				'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'aui' ),
2249
-				'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'aui' ),
2250
-				'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'aui' ),
2251
-				'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'aui' ),
2252
-				'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'aui' ),
2253
-				'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'aui' )
2254
-			);
2255
-
2256
-			return apply_filters( 'ayecode_ui_select2_params', $params );
2257
-		}
2234
+        /**
2235
+         * Select2 JS params.
2236
+         *
2237
+         * @since 0.1.44
2238
+         *
2239
+         * @return array Select2 JS params.
2240
+         */
2241
+        public static function select2_params() {
2242
+            $params = array(
2243
+                'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'aui' ),
2244
+                'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'aui' ),
2245
+                'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'aui' ),
2246
+                'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'aui' ),
2247
+                'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'aui' ),
2248
+                'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'aui' ),
2249
+                'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'aui' ),
2250
+                'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'aui' ),
2251
+                'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'aui' ),
2252
+                'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'aui' ),
2253
+                'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'aui' )
2254
+            );
2255
+
2256
+            return apply_filters( 'ayecode_ui_select2_params', $params );
2257
+        }
2258 2258
 
2259
-		/**
2260
-		 * Select2 JS localize.
2261
-		 *
2262
-		 * @since 0.1.44
2263
-		 *
2264
-		 * @return string Select2 JS locale.
2265
-		 */
2266
-		public static function select2_locale() {
2267
-			$params = self::select2_params();
2268
-
2269
-			foreach ( (array) $params as $key => $value ) {
2270
-				if ( ! is_scalar( $value ) ) {
2271
-					continue;
2272
-				}
2259
+        /**
2260
+         * Select2 JS localize.
2261
+         *
2262
+         * @since 0.1.44
2263
+         *
2264
+         * @return string Select2 JS locale.
2265
+         */
2266
+        public static function select2_locale() {
2267
+            $params = self::select2_params();
2268
+
2269
+            foreach ( (array) $params as $key => $value ) {
2270
+                if ( ! is_scalar( $value ) ) {
2271
+                    continue;
2272
+                }
2273 2273
 
2274
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2275
-			}
2274
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2275
+            }
2276 2276
 
2277
-			$locale = json_encode( $params );
2277
+            $locale = json_encode( $params );
2278 2278
 
2279
-			return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2280
-		}
2279
+            return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2280
+        }
2281 2281
 
2282
-		/**
2283
-		 * Time ago JS localize.
2284
-		 *
2285
-		 * @since 0.1.47
2286
-		 *
2287
-		 * @return string Time ago JS locale.
2288
-		 */
2289
-		public static function timeago_locale() {
2290
-			$params = array(
2291
-				'prefix_ago' => '',
2292
-				'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'aui' ),
2293
-				'prefix_after' => _x( 'after', 'time ago', 'aui' ) . ' ',
2294
-				'suffix_after' => '',
2295
-				'seconds' => _x( 'less than a minute', 'time ago', 'aui' ),
2296
-				'minute' => _x( 'about a minute', 'time ago', 'aui' ),
2297
-				'minutes' => _x( '%d minutes', 'time ago', 'aui' ),
2298
-				'hour' => _x( 'about an hour', 'time ago', 'aui' ),
2299
-				'hours' => _x( 'about %d hours', 'time ago', 'aui' ),
2300
-				'day' => _x( 'a day', 'time ago', 'aui' ),
2301
-				'days' => _x( '%d days', 'time ago', 'aui' ),
2302
-				'month' => _x( 'about a month', 'time ago', 'aui' ),
2303
-				'months' => _x( '%d months', 'time ago', 'aui' ),
2304
-				'year' => _x( 'about a year', 'time ago', 'aui' ),
2305
-				'years' => _x( '%d years', 'time ago', 'aui' ),
2306
-			);
2307
-
2308
-			$params = apply_filters( 'ayecode_ui_timeago_params', $params );
2309
-
2310
-			foreach ( (array) $params as $key => $value ) {
2311
-				if ( ! is_scalar( $value ) ) {
2312
-					continue;
2313
-				}
2282
+        /**
2283
+         * Time ago JS localize.
2284
+         *
2285
+         * @since 0.1.47
2286
+         *
2287
+         * @return string Time ago JS locale.
2288
+         */
2289
+        public static function timeago_locale() {
2290
+            $params = array(
2291
+                'prefix_ago' => '',
2292
+                'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'aui' ),
2293
+                'prefix_after' => _x( 'after', 'time ago', 'aui' ) . ' ',
2294
+                'suffix_after' => '',
2295
+                'seconds' => _x( 'less than a minute', 'time ago', 'aui' ),
2296
+                'minute' => _x( 'about a minute', 'time ago', 'aui' ),
2297
+                'minutes' => _x( '%d minutes', 'time ago', 'aui' ),
2298
+                'hour' => _x( 'about an hour', 'time ago', 'aui' ),
2299
+                'hours' => _x( 'about %d hours', 'time ago', 'aui' ),
2300
+                'day' => _x( 'a day', 'time ago', 'aui' ),
2301
+                'days' => _x( '%d days', 'time ago', 'aui' ),
2302
+                'month' => _x( 'about a month', 'time ago', 'aui' ),
2303
+                'months' => _x( '%d months', 'time ago', 'aui' ),
2304
+                'year' => _x( 'about a year', 'time ago', 'aui' ),
2305
+                'years' => _x( '%d years', 'time ago', 'aui' ),
2306
+            );
2307
+
2308
+            $params = apply_filters( 'ayecode_ui_timeago_params', $params );
2309
+
2310
+            foreach ( (array) $params as $key => $value ) {
2311
+                if ( ! is_scalar( $value ) ) {
2312
+                    continue;
2313
+                }
2314 2314
 
2315
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2316
-			}
2315
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2316
+            }
2317 2317
 
2318
-			$locale = json_encode( $params );
2318
+            $locale = json_encode( $params );
2319 2319
 
2320
-			return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2321
-		}
2320
+            return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2321
+        }
2322 2322
 
2323
-		/**
2324
-		 * JavaScript Minifier
2325
-		 *
2326
-		 * @param $input
2327
-		 *
2328
-		 * @return mixed
2329
-		 */
2330
-		public static function minify_js($input) {
2331
-			if(trim($input) === "") return $input;
2332
-			return preg_replace(
2333
-				array(
2334
-					// Remove comment(s)
2335
-					'#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2336
-					// Remove white-space(s) outside the string and regex
2337
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2338
-					// Remove the last semicolon
2339
-					'#;+\}#',
2340
-					// Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2341
-					'#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2342
-					// --ibid. From `foo['bar']` to `foo.bar`
2343
-					'#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2344
-				),
2345
-				array(
2346
-					'$1',
2347
-					'$1$2',
2348
-					'}',
2349
-					'$1$3',
2350
-					'$1.$3'
2351
-				),
2352
-				$input);
2353
-		}
2323
+        /**
2324
+         * JavaScript Minifier
2325
+         *
2326
+         * @param $input
2327
+         *
2328
+         * @return mixed
2329
+         */
2330
+        public static function minify_js($input) {
2331
+            if(trim($input) === "") return $input;
2332
+            return preg_replace(
2333
+                array(
2334
+                    // Remove comment(s)
2335
+                    '#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2336
+                    // Remove white-space(s) outside the string and regex
2337
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2338
+                    // Remove the last semicolon
2339
+                    '#;+\}#',
2340
+                    // Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2341
+                    '#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2342
+                    // --ibid. From `foo['bar']` to `foo.bar`
2343
+                    '#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2344
+                ),
2345
+                array(
2346
+                    '$1',
2347
+                    '$1$2',
2348
+                    '}',
2349
+                    '$1$3',
2350
+                    '$1.$3'
2351
+                ),
2352
+                $input);
2353
+        }
2354 2354
 
2355
-		/**
2356
-		 * Minify CSS
2357
-		 *
2358
-		 * @param $input
2359
-		 *
2360
-		 * @return mixed
2361
-		 */
2362
-		public static function minify_css($input) {
2363
-			if(trim($input) === "") return $input;
2364
-			return preg_replace(
2365
-				array(
2366
-					// Remove comment(s)
2367
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2368
-					// Remove unused white-space(s)
2369
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2370
-					// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2371
-					'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2372
-					// Replace `:0 0 0 0` with `:0`
2373
-					'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2374
-					// Replace `background-position:0` with `background-position:0 0`
2375
-					'#(background-position):0(?=[;\}])#si',
2376
-					// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2377
-					'#(?<=[\s:,\-])0+\.(\d+)#s',
2378
-					// Minify string value
2379
-					'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2380
-					'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2381
-					// Minify HEX color code
2382
-					'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2383
-					// Replace `(border|outline):none` with `(border|outline):0`
2384
-					'#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2385
-					// Remove empty selector(s)
2386
-					'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2387
-				),
2388
-				array(
2389
-					'$1',
2390
-					'$1$2$3$4$5$6$7',
2391
-					'$1',
2392
-					':0',
2393
-					'$1:0 0',
2394
-					'.$1',
2395
-					'$1$3',
2396
-					'$1$2$4$5',
2397
-					'$1$2$3',
2398
-					'$1:0',
2399
-					'$1$2'
2400
-				),
2401
-				$input);
2402
-		}
2355
+        /**
2356
+         * Minify CSS
2357
+         *
2358
+         * @param $input
2359
+         *
2360
+         * @return mixed
2361
+         */
2362
+        public static function minify_css($input) {
2363
+            if(trim($input) === "") return $input;
2364
+            return preg_replace(
2365
+                array(
2366
+                    // Remove comment(s)
2367
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2368
+                    // Remove unused white-space(s)
2369
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2370
+                    // Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2371
+                    '#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2372
+                    // Replace `:0 0 0 0` with `:0`
2373
+                    '#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2374
+                    // Replace `background-position:0` with `background-position:0 0`
2375
+                    '#(background-position):0(?=[;\}])#si',
2376
+                    // Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2377
+                    '#(?<=[\s:,\-])0+\.(\d+)#s',
2378
+                    // Minify string value
2379
+                    '#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2380
+                    '#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2381
+                    // Minify HEX color code
2382
+                    '#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2383
+                    // Replace `(border|outline):none` with `(border|outline):0`
2384
+                    '#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2385
+                    // Remove empty selector(s)
2386
+                    '#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2387
+                ),
2388
+                array(
2389
+                    '$1',
2390
+                    '$1$2$3$4$5$6$7',
2391
+                    '$1',
2392
+                    ':0',
2393
+                    '$1:0 0',
2394
+                    '.$1',
2395
+                    '$1$3',
2396
+                    '$1$2$4$5',
2397
+                    '$1$2$3',
2398
+                    '$1:0',
2399
+                    '$1$2'
2400
+                ),
2401
+                $input);
2402
+        }
2403 2403
 
2404
-		/**
2405
-		 * Get the conditional fields JavaScript.
2406
-		 *
2407
-		 * @return mixed
2408
-		 */
2409
-		public function conditional_fields_js() {
2410
-			ob_start();
2411
-			?>
2404
+        /**
2405
+         * Get the conditional fields JavaScript.
2406
+         *
2407
+         * @return mixed
2408
+         */
2409
+        public function conditional_fields_js() {
2410
+            ob_start();
2411
+            ?>
2412 2412
 <script>
2413 2413
 /**
2414 2414
  * Conditional Fields
@@ -2912,14 +2912,14 @@  discard block
 block discarded – undo
2912 2912
 <?php do_action( 'aui_conditional_fields_js', $this ); ?>
2913 2913
 </script>
2914 2914
 			<?php
2915
-			$output = ob_get_clean();
2915
+            $output = ob_get_clean();
2916 2916
 
2917
-			return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
2918
-		}
2919
-	}
2917
+            return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
2918
+        }
2919
+    }
2920 2920
 
2921
-	/**
2922
-	 * Run the class if found.
2923
-	 */
2924
-	AyeCode_UI_Settings::instance();
2921
+    /**
2922
+     * Run the class if found.
2923
+     */
2924
+    AyeCode_UI_Settings::instance();
2925 2925
 }
2926 2926
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/class-aui.php 1 patch
Indentation   +295 added lines, -295 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit; // Exit if accessed directly
4
+    exit; // Exit if accessed directly
5 5
 }
6 6
 
7 7
 /**
@@ -11,299 +11,299 @@  discard block
 block discarded – undo
11 11
  */
12 12
 class AUI {
13 13
 
14
-	/**
15
-	 * Holds the class instance.
16
-	 *
17
-	 * @since 1.0.0
18
-	 * @var null
19
-	 */
20
-	private static $instance = null;
21
-
22
-	/**
23
-	 * Holds the current AUI version number.
24
-	 *
25
-	 * @var string $ver The current version number.
26
-	 */
27
-	public static $ver = '0.1.71';
28
-
29
-	public static $options = null;
30
-
31
-	/**
32
-	 * There can be only one.
33
-	 *
34
-	 * @since 1.0.0
35
-	 * @return AUI|null
36
-	 */
37
-	public static function instance() {
38
-		if ( self::$instance == null ) {
39
-			self::$instance = new AUI();
40
-		}
41
-
42
-		return self::$instance;
43
-	}
44
-
45
-	/**
46
-	 * AUI constructor.
47
-	 *
48
-	 * @since 1.0.0
49
-	 */
50
-	private function __construct() {
51
-		if ( function_exists( "__autoload" ) ) {
52
-			spl_autoload_register( "__autoload" );
53
-		}
54
-		spl_autoload_register( array( $this, 'autoload' ) );
55
-
56
-		// load options
57
-		self::$options = get_option('aui_options');
58
-	}
59
-
60
-	/**
61
-	 * Autoload any components on the fly.
62
-	 *
63
-	 * @since 1.0.0
64
-	 *
65
-	 * @param $classname
66
-	 */
67
-	private function autoload( $classname ) {
68
-		$class     = str_replace( '_', '-', strtolower( $classname ) );
69
-		$file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
-		if ( $file_path && is_readable( $file_path ) ) {
71
-			include_once( $file_path );
72
-		}
73
-	}
74
-
75
-	/**
76
-	 * Get the AUI options.
77
-	 *
78
-	 * @param $option
79
-	 *
80
-	 * @return string|void
81
-	 */
82
-	public function get_option( $option ){
83
-		$result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
-
85
-		if ( ! $result && $option) {
86
-			if( $option == 'color_primary' ){
87
-				$result = AUI_PRIMARY_COLOR;
88
-			}elseif( $option == 'color_secondary' ){
89
-				$result = AUI_SECONDARY_COLOR;
90
-			}
91
-		}
92
-		return $result;
93
-	}
94
-
95
-	public function render( $items = array(), $echo = false ) {
96
-		$output = '';
97
-
98
-		if ( ! empty( $items ) ) {
99
-			foreach ( $items as $args ) {
100
-				$render = isset( $args['render'] ) ? $args['render'] : '';
101
-				if ( $render && method_exists( __CLASS__, $render ) ) {
102
-					$output .= $this->$render( $args );
103
-				}
104
-			}
105
-		}
106
-
107
-		if ( $echo ) {
108
-			echo $output;
109
-		}else{
110
-			return $output;
111
-		}
112
-
113
-	}
114
-
115
-	/**
116
-	 * Render and return a bootstrap alert component.
117
-	 *
118
-	 * @since 1.0.0
119
-	 *
120
-	 * @param array $args The function arguments.
121
-	 * @param bool  $echo If we should return or echo.
122
-	 *
123
-	 * @return string The rendered component.
124
-	 */
125
-	public function alert( $args = array(), $echo = false ) {
126
-		$output = AUI_Component_Alert::get( $args );
127
-
128
-		if ( $echo ) {
129
-			echo $output;
130
-		}else{
131
-			return $output;
132
-		}
133
-	}
134
-
135
-	/**
136
-	 * Render and return a bootstrap input component.
137
-	 *
138
-	 * @since 1.0.0
139
-	 *
140
-	 * @param array $args The function arguments.
141
-	 * @param bool  $echo If we should return or echo.
142
-	 *
143
-	 * @return string The rendered component.
144
-	 */
145
-	public function input( $args = array(), $echo = false ) {
146
-		$output = AUI_Component_Input::input( $args );
147
-
148
-		if ( $echo ) {
149
-			echo $output;
150
-		}else{
151
-			return $output;
152
-		}
153
-	}
154
-
155
-	/**
156
-	 * Render and return a bootstrap textarea component.
157
-	 *
158
-	 * @since 1.0.0
159
-	 *
160
-	 * @param array $args The function arguments.
161
-	 * @param bool  $echo If we should return or echo.
162
-	 *
163
-	 * @return string The rendered component.
164
-	 */
165
-	public function textarea( $args = array(), $echo = false ) {
166
-		$output = AUI_Component_Input::textarea( $args );
167
-
168
-		if ( $echo ) {
169
-			echo $output;
170
-		}else{
171
-			return $output;
172
-		}
173
-	}
174
-
175
-	/**
176
-	 * Render and return a bootstrap button component.
177
-	 *
178
-	 * @since 1.0.0
179
-	 *
180
-	 * @param array $args The function arguments.
181
-	 * @param bool  $echo If we should return or echo.
182
-	 *
183
-	 * @return string The rendered component.
184
-	 */
185
-	public function button( $args = array(), $echo = false ) {
186
-		$output = AUI_Component_Button::get( $args );
187
-
188
-		if ( $echo ) {
189
-			echo $output;
190
-		}else{
191
-			return $output;
192
-		}
193
-	}
194
-
195
-	/**
196
-	 * Render and return a bootstrap button component.
197
-	 *
198
-	 * @since 1.0.0
199
-	 *
200
-	 * @param array $args The function arguments.
201
-	 * @param bool  $echo If we should return or echo.
202
-	 *
203
-	 * @return string The rendered component.
204
-	 */
205
-	public function badge( $args = array(), $echo = false ) {
206
-		$defaults = array(
207
-			'class' => 'badge badge-primary align-middle',
208
-		);
209
-
210
-		// maybe set type.
211
-		if ( empty( $args['href'] ) ) {
212
-			$defaults['type'] = 'badge';
213
-		}
214
-
215
-		/**
216
-		 * Parse incoming $args into an array and merge it with $defaults
217
-		 */
218
-		$args = wp_parse_args( $args, $defaults );
219
-
220
-		$output = AUI_Component_Button::get( $args );
221
-
222
-		if ( $echo ) {
223
-			echo $output;
224
-		}else{
225
-			return $output;
226
-		}
227
-	}
228
-
229
-	/**
230
-	 * Render and return a bootstrap dropdown component.
231
-	 *
232
-	 * @since 1.0.0
233
-	 *
234
-	 * @param array $args The function arguments.
235
-	 * @param bool  $echo If we should return or echo.
236
-	 *
237
-	 * @return string The rendered component.
238
-	 */
239
-	public function dropdown( $args = array(), $echo = false ) {
240
-		$output = AUI_Component_Dropdown::get( $args );
241
-
242
-		if ( $echo ) {
243
-			echo $output;
244
-		}else{
245
-			return $output;
246
-		}
247
-	}
248
-
249
-	/**
250
-	 * Render and return a bootstrap select component.
251
-	 *
252
-	 * @since 1.0.0
253
-	 *
254
-	 * @param array $args The function arguments.
255
-	 * @param bool  $echo If we should return or echo.
256
-	 *
257
-	 * @return string The rendered component.
258
-	 */
259
-	public function select( $args = array(), $echo = false ) {
260
-		$output = AUI_Component_Input::select( $args );
261
-
262
-		if ( $echo ) {
263
-			echo $output;
264
-		}else{
265
-			return $output;
266
-		}
267
-	}
268
-
269
-	/**
270
-	 * Render and return a bootstrap radio component.
271
-	 *
272
-	 * @since 1.0.0
273
-	 *
274
-	 * @param array $args The function arguments.
275
-	 * @param bool  $echo If we should return or echo.
276
-	 *
277
-	 * @return string The rendered component.
278
-	 */
279
-	public function radio( $args = array(), $echo = false ) {
280
-		$output = AUI_Component_Input::radio( $args );
281
-
282
-		if ( $echo ) {
283
-			echo $output;
284
-		}else{
285
-			return $output;
286
-		}
287
-	}
288
-
289
-	/**
290
-	 * Render and return a bootstrap pagination component.
291
-	 *
292
-	 * @since 1.0.0
293
-	 *
294
-	 * @param array $args The function arguments.
295
-	 * @param bool  $echo If we should return or echo.
296
-	 *
297
-	 * @return string The rendered component.
298
-	 */
299
-	public function pagination( $args = array(), $echo = false ) {
300
-		$output = AUI_Component_Pagination::get( $args );
301
-
302
-		if ( $echo ) {
303
-			echo $output;
304
-		}else{
305
-			return $output;
306
-		}
307
-	}
14
+    /**
15
+     * Holds the class instance.
16
+     *
17
+     * @since 1.0.0
18
+     * @var null
19
+     */
20
+    private static $instance = null;
21
+
22
+    /**
23
+     * Holds the current AUI version number.
24
+     *
25
+     * @var string $ver The current version number.
26
+     */
27
+    public static $ver = '0.1.71';
28
+
29
+    public static $options = null;
30
+
31
+    /**
32
+     * There can be only one.
33
+     *
34
+     * @since 1.0.0
35
+     * @return AUI|null
36
+     */
37
+    public static function instance() {
38
+        if ( self::$instance == null ) {
39
+            self::$instance = new AUI();
40
+        }
41
+
42
+        return self::$instance;
43
+    }
44
+
45
+    /**
46
+     * AUI constructor.
47
+     *
48
+     * @since 1.0.0
49
+     */
50
+    private function __construct() {
51
+        if ( function_exists( "__autoload" ) ) {
52
+            spl_autoload_register( "__autoload" );
53
+        }
54
+        spl_autoload_register( array( $this, 'autoload' ) );
55
+
56
+        // load options
57
+        self::$options = get_option('aui_options');
58
+    }
59
+
60
+    /**
61
+     * Autoload any components on the fly.
62
+     *
63
+     * @since 1.0.0
64
+     *
65
+     * @param $classname
66
+     */
67
+    private function autoload( $classname ) {
68
+        $class     = str_replace( '_', '-', strtolower( $classname ) );
69
+        $file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
+        if ( $file_path && is_readable( $file_path ) ) {
71
+            include_once( $file_path );
72
+        }
73
+    }
74
+
75
+    /**
76
+     * Get the AUI options.
77
+     *
78
+     * @param $option
79
+     *
80
+     * @return string|void
81
+     */
82
+    public function get_option( $option ){
83
+        $result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
+
85
+        if ( ! $result && $option) {
86
+            if( $option == 'color_primary' ){
87
+                $result = AUI_PRIMARY_COLOR;
88
+            }elseif( $option == 'color_secondary' ){
89
+                $result = AUI_SECONDARY_COLOR;
90
+            }
91
+        }
92
+        return $result;
93
+    }
94
+
95
+    public function render( $items = array(), $echo = false ) {
96
+        $output = '';
97
+
98
+        if ( ! empty( $items ) ) {
99
+            foreach ( $items as $args ) {
100
+                $render = isset( $args['render'] ) ? $args['render'] : '';
101
+                if ( $render && method_exists( __CLASS__, $render ) ) {
102
+                    $output .= $this->$render( $args );
103
+                }
104
+            }
105
+        }
106
+
107
+        if ( $echo ) {
108
+            echo $output;
109
+        }else{
110
+            return $output;
111
+        }
112
+
113
+    }
114
+
115
+    /**
116
+     * Render and return a bootstrap alert component.
117
+     *
118
+     * @since 1.0.0
119
+     *
120
+     * @param array $args The function arguments.
121
+     * @param bool  $echo If we should return or echo.
122
+     *
123
+     * @return string The rendered component.
124
+     */
125
+    public function alert( $args = array(), $echo = false ) {
126
+        $output = AUI_Component_Alert::get( $args );
127
+
128
+        if ( $echo ) {
129
+            echo $output;
130
+        }else{
131
+            return $output;
132
+        }
133
+    }
134
+
135
+    /**
136
+     * Render and return a bootstrap input component.
137
+     *
138
+     * @since 1.0.0
139
+     *
140
+     * @param array $args The function arguments.
141
+     * @param bool  $echo If we should return or echo.
142
+     *
143
+     * @return string The rendered component.
144
+     */
145
+    public function input( $args = array(), $echo = false ) {
146
+        $output = AUI_Component_Input::input( $args );
147
+
148
+        if ( $echo ) {
149
+            echo $output;
150
+        }else{
151
+            return $output;
152
+        }
153
+    }
154
+
155
+    /**
156
+     * Render and return a bootstrap textarea component.
157
+     *
158
+     * @since 1.0.0
159
+     *
160
+     * @param array $args The function arguments.
161
+     * @param bool  $echo If we should return or echo.
162
+     *
163
+     * @return string The rendered component.
164
+     */
165
+    public function textarea( $args = array(), $echo = false ) {
166
+        $output = AUI_Component_Input::textarea( $args );
167
+
168
+        if ( $echo ) {
169
+            echo $output;
170
+        }else{
171
+            return $output;
172
+        }
173
+    }
174
+
175
+    /**
176
+     * Render and return a bootstrap button component.
177
+     *
178
+     * @since 1.0.0
179
+     *
180
+     * @param array $args The function arguments.
181
+     * @param bool  $echo If we should return or echo.
182
+     *
183
+     * @return string The rendered component.
184
+     */
185
+    public function button( $args = array(), $echo = false ) {
186
+        $output = AUI_Component_Button::get( $args );
187
+
188
+        if ( $echo ) {
189
+            echo $output;
190
+        }else{
191
+            return $output;
192
+        }
193
+    }
194
+
195
+    /**
196
+     * Render and return a bootstrap button component.
197
+     *
198
+     * @since 1.0.0
199
+     *
200
+     * @param array $args The function arguments.
201
+     * @param bool  $echo If we should return or echo.
202
+     *
203
+     * @return string The rendered component.
204
+     */
205
+    public function badge( $args = array(), $echo = false ) {
206
+        $defaults = array(
207
+            'class' => 'badge badge-primary align-middle',
208
+        );
209
+
210
+        // maybe set type.
211
+        if ( empty( $args['href'] ) ) {
212
+            $defaults['type'] = 'badge';
213
+        }
214
+
215
+        /**
216
+         * Parse incoming $args into an array and merge it with $defaults
217
+         */
218
+        $args = wp_parse_args( $args, $defaults );
219
+
220
+        $output = AUI_Component_Button::get( $args );
221
+
222
+        if ( $echo ) {
223
+            echo $output;
224
+        }else{
225
+            return $output;
226
+        }
227
+    }
228
+
229
+    /**
230
+     * Render and return a bootstrap dropdown component.
231
+     *
232
+     * @since 1.0.0
233
+     *
234
+     * @param array $args The function arguments.
235
+     * @param bool  $echo If we should return or echo.
236
+     *
237
+     * @return string The rendered component.
238
+     */
239
+    public function dropdown( $args = array(), $echo = false ) {
240
+        $output = AUI_Component_Dropdown::get( $args );
241
+
242
+        if ( $echo ) {
243
+            echo $output;
244
+        }else{
245
+            return $output;
246
+        }
247
+    }
248
+
249
+    /**
250
+     * Render and return a bootstrap select component.
251
+     *
252
+     * @since 1.0.0
253
+     *
254
+     * @param array $args The function arguments.
255
+     * @param bool  $echo If we should return or echo.
256
+     *
257
+     * @return string The rendered component.
258
+     */
259
+    public function select( $args = array(), $echo = false ) {
260
+        $output = AUI_Component_Input::select( $args );
261
+
262
+        if ( $echo ) {
263
+            echo $output;
264
+        }else{
265
+            return $output;
266
+        }
267
+    }
268
+
269
+    /**
270
+     * Render and return a bootstrap radio component.
271
+     *
272
+     * @since 1.0.0
273
+     *
274
+     * @param array $args The function arguments.
275
+     * @param bool  $echo If we should return or echo.
276
+     *
277
+     * @return string The rendered component.
278
+     */
279
+    public function radio( $args = array(), $echo = false ) {
280
+        $output = AUI_Component_Input::radio( $args );
281
+
282
+        if ( $echo ) {
283
+            echo $output;
284
+        }else{
285
+            return $output;
286
+        }
287
+    }
288
+
289
+    /**
290
+     * Render and return a bootstrap pagination component.
291
+     *
292
+     * @since 1.0.0
293
+     *
294
+     * @param array $args The function arguments.
295
+     * @param bool  $echo If we should return or echo.
296
+     *
297
+     * @return string The rendered component.
298
+     */
299
+    public function pagination( $args = array(), $echo = false ) {
300
+        $output = AUI_Component_Pagination::get( $args );
301
+
302
+        if ( $echo ) {
303
+            echo $output;
304
+        }else{
305
+            return $output;
306
+        }
307
+    }
308 308
 
309 309
 }
310 310
\ No newline at end of file
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +222 added lines, -222 removed lines patch added patch discarded remove patch
@@ -13,30 +13,30 @@  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( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
34
-	public $order = 8;
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34
+    public $order = 8;
35 35
 
36 36
     /**
37
-	 * Class constructor.
38
-	 */
39
-	public function __construct() {
37
+     * Class constructor.
38
+     */
39
+    public function __construct() {
40 40
         parent::__construct();
41 41
 
42 42
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -44,24 +44,24 @@  discard block
 block discarded – undo
44 44
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
45 45
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
46 46
 
47
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
47
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
53 53
 
54 54
     }
55 55
 
56 56
     /**
57
-	 * Process Payment.
58
-	 *
59
-	 * @param WPInv_Invoice $invoice Invoice.
60
-	 * @param array $submission_data Posted checkout fields.
61
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
-	 * @return array
63
-	 */
64
-	public function process_payment( $invoice, $submission_data, $submission ) {
57
+     * Process Payment.
58
+     *
59
+     * @param WPInv_Invoice $invoice Invoice.
60
+     * @param array $submission_data Posted checkout fields.
61
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
+     * @return array
63
+     */
64
+    public function process_payment( $invoice, $submission_data, $submission ) {
65 65
 
66 66
         // Add a transaction id.
67 67
         $invoice->set_transaction_id( $invoice->generate_key( 'bt_' ) );
@@ -82,66 +82,66 @@  discard block
 block discarded – undo
82 82
     }
83 83
 
84 84
     /**
85
-	 * Output for the order received page.
86
-	 *
87
-	 * @param WPInv_Invoice $invoice Invoice.
88
-	 */
89
-	public function thankyou_page( $invoice ) {
85
+     * Output for the order received page.
86
+     *
87
+     * @param WPInv_Invoice $invoice Invoice.
88
+     */
89
+    public function thankyou_page( $invoice ) {
90 90
 
91 91
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
92 92
 
93
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
93
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
94 94
 
95 95
             if ( ! empty( $this->instructions ) ) {
96 96
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
97
-			}
97
+            }
98 98
 
99
-			$this->bank_details( $invoice );
99
+            $this->bank_details( $invoice );
100 100
 
101
-			echo '</div>';
101
+            echo '</div>';
102 102
 
103 103
         }
104 104
 
105
-	}
105
+    }
106 106
 
107 107
     /**
108
-	 * Add content to the WPI emails.
109
-	 *
110
-	 * @param WPInv_Invoice $invoice Invoice.
111
-	 * @param string     $email_type Email format: plain text or HTML.
112
-	 * @param bool     $sent_to_admin Sent to admin.
113
-	 */
114
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
108
+     * Add content to the WPI emails.
109
+     *
110
+     * @param WPInv_Invoice $invoice Invoice.
111
+     * @param string     $email_type Email format: plain text or HTML.
112
+     * @param bool     $sent_to_admin Sent to admin.
113
+     */
114
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
115 115
 
116
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
116
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
117 117
 
118
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
118
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
119 119
 
120
-			if ( $this->instructions ) {
121
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
120
+            if ( $this->instructions ) {
121
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
122 122
             }
123 123
 
124
-			$this->bank_details( $invoice );
124
+            $this->bank_details( $invoice );
125 125
 
126
-			echo '</div>';
126
+            echo '</div>';
127 127
 
128
-		}
128
+        }
129 129
 
130 130
     }
131 131
 
132 132
     /**
133
-	 * Get bank details and place into a list format.
134
-	 *
135
-	 * @param WPInv_Invoice $invoice Invoice.
136
-	 */
137
-	protected function bank_details( $invoice ) {
133
+     * Get bank details and place into a list format.
134
+     *
135
+     * @param WPInv_Invoice $invoice Invoice.
136
+     */
137
+    protected function bank_details( $invoice ) {
138 138
 
139
-		// Get the invoice country and country $locale.
140
-		$country = $invoice->get_country();
141
-		$locale  = $this->get_country_locale();
139
+        // Get the invoice country and country $locale.
140
+        $country = $invoice->get_country();
141
+        $locale  = $this->get_country_locale();
142 142
 
143
-		// Get sortcode label in the $locale array and use appropriate one.
144
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
143
+        // Get sortcode label in the $locale array and use appropriate one.
144
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
145 145
 
146 146
         $bank_fields = array(
147 147
             'ac_name'   => __( 'Account Name', 'invoicing' ),
@@ -160,11 +160,11 @@  discard block
 block discarded – undo
160 160
 
161 161
             if ( ! empty( $value ) ) {
162 162
                 $bank_info[ $field ] = array(
163
-					'label' => $label,
164
-					'value' => $value,
165
-				);
163
+                    'label' => $label,
164
+                    'value' => $value,
165
+                );
166 166
             }
167
-		}
167
+        }
168 168
 
169 169
         $bank_info = apply_filters( 'wpinv_bank_info', $bank_info, $invoice );
170 170
 
@@ -172,139 +172,139 @@  discard block
 block discarded – undo
172 172
             return;
173 173
         }
174 174
 
175
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
175
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
176
+
177
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
178
+
179
+        foreach ( $bank_info as $key => $data ) {
180
+            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;
181
+        }
182
+
183
+        echo '</table>';
176 184
 
177
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
185
+    }
178 186
 
179
-		foreach ( $bank_info as $key => $data ) {
180
-			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;
181
-		}
187
+    /**
188
+     * Get country locale if localized.
189
+     *
190
+     * @return array
191
+     */
192
+    public function get_country_locale() {
193
+
194
+        if ( empty( $this->locale ) ) {
195
+
196
+            // Locale information to be used - only those that are not 'Sort Code'.
197
+            $this->locale = apply_filters(
198
+                'getpaid_get_bank_transfer_locale',
199
+                array(
200
+                    'AU' => array(
201
+                        'sortcode' => array(
202
+                            'label' => __( 'BSB', 'invoicing' ),
203
+                        ),
204
+                    ),
205
+                    'CA' => array(
206
+                        'sortcode' => array(
207
+                            'label' => __( 'Bank transit number', 'invoicing' ),
208
+                        ),
209
+                    ),
210
+                    'IN' => array(
211
+                        'sortcode' => array(
212
+                            'label' => __( 'IFSC', 'invoicing' ),
213
+                        ),
214
+                    ),
215
+                    'IT' => array(
216
+                        'sortcode' => array(
217
+                            'label' => __( 'Branch sort', 'invoicing' ),
218
+                        ),
219
+                    ),
220
+                    'NZ' => array(
221
+                        'sortcode' => array(
222
+                            'label' => __( 'Bank code', 'invoicing' ),
223
+                        ),
224
+                    ),
225
+                    'SE' => array(
226
+                        'sortcode' => array(
227
+                            'label' => __( 'Bank code', 'invoicing' ),
228
+                        ),
229
+                    ),
230
+                    'US' => array(
231
+                        'sortcode' => array(
232
+                            'label' => __( 'Routing number', 'invoicing' ),
233
+                        ),
234
+                    ),
235
+                    'ZA' => array(
236
+                        'sortcode' => array(
237
+                            'label' => __( 'Branch code', 'invoicing' ),
238
+                        ),
239
+                    ),
240
+                )
241
+            );
182 242
 
183
-		echo '</table>';
243
+        }
244
+
245
+        return $this->locale;
184 246
 
185 247
     }
186 248
 
187 249
     /**
188
-	 * Get country locale if localized.
189
-	 *
190
-	 * @return array
191
-	 */
192
-	public function get_country_locale() {
193
-
194
-		if ( empty( $this->locale ) ) {
195
-
196
-			// Locale information to be used - only those that are not 'Sort Code'.
197
-			$this->locale = apply_filters(
198
-				'getpaid_get_bank_transfer_locale',
199
-				array(
200
-					'AU' => array(
201
-						'sortcode' => array(
202
-							'label' => __( 'BSB', 'invoicing' ),
203
-						),
204
-					),
205
-					'CA' => array(
206
-						'sortcode' => array(
207
-							'label' => __( 'Bank transit number', 'invoicing' ),
208
-						),
209
-					),
210
-					'IN' => array(
211
-						'sortcode' => array(
212
-							'label' => __( 'IFSC', 'invoicing' ),
213
-						),
214
-					),
215
-					'IT' => array(
216
-						'sortcode' => array(
217
-							'label' => __( 'Branch sort', 'invoicing' ),
218
-						),
219
-					),
220
-					'NZ' => array(
221
-						'sortcode' => array(
222
-							'label' => __( 'Bank code', 'invoicing' ),
223
-						),
224
-					),
225
-					'SE' => array(
226
-						'sortcode' => array(
227
-							'label' => __( 'Bank code', 'invoicing' ),
228
-						),
229
-					),
230
-					'US' => array(
231
-						'sortcode' => array(
232
-							'label' => __( 'Routing number', 'invoicing' ),
233
-						),
234
-					),
235
-					'ZA' => array(
236
-						'sortcode' => array(
237
-							'label' => __( 'Branch code', 'invoicing' ),
238
-						),
239
-					),
240
-				)
241
-			);
242
-
243
-		}
244
-
245
-		return $this->locale;
246
-
247
-	}
248
-
249
-	/**
250
-	 * Filters the gateway settings.
251
-	 *
252
-	 * @param array $admin_settings
253
-	 */
254
-	public function admin_settings( $admin_settings ) {
250
+     * Filters the gateway settings.
251
+     *
252
+     * @param array $admin_settings
253
+     */
254
+    public function admin_settings( $admin_settings ) {
255 255
 
256 256
         $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' );
257
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
257
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
258 258
 
259
-		$locale  = $this->get_country_locale();
259
+        $locale  = $this->get_country_locale();
260 260
 
261
-		// Get sortcode label in the $locale array and use appropriate one.
262
-		$country  = wpinv_default_billing_country();
263
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
261
+        // Get sortcode label in the $locale array and use appropriate one.
262
+        $country  = wpinv_default_billing_country();
263
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
264 264
 
265
-		$admin_settings['bank_transfer_ac_name'] = array(
265
+        $admin_settings['bank_transfer_ac_name'] = array(
266 266
             'type' => 'text',
267 267
             'id'   => 'bank_transfer_ac_name',
268 268
             'name' => __( 'Account Name', 'invoicing' ),
269
-		);
269
+        );
270 270
 
271
-		$admin_settings['bank_transfer_ac_no'] = array(
271
+        $admin_settings['bank_transfer_ac_no'] = array(
272 272
             'type' => 'text',
273 273
             'id'   => 'bank_transfer_ac_no',
274 274
             'name' => __( 'Account Number', 'invoicing' ),
275
-		);
275
+        );
276 276
 
277
-		$admin_settings['bank_transfer_bank_name'] = array(
277
+        $admin_settings['bank_transfer_bank_name'] = array(
278 278
             'type' => 'text',
279 279
             'id'   => 'bank_transfer_bank_name',
280 280
             'name' => __( 'Bank Name', 'invoicing' ),
281
-		);
281
+        );
282 282
 
283
-		$admin_settings['bank_transfer_ifsc'] = array(
283
+        $admin_settings['bank_transfer_ifsc'] = array(
284 284
             'type' => 'text',
285 285
             'id'   => 'bank_transfer_ifsc',
286 286
             'name' => __( 'IFSC Code', 'invoicing' ),
287
-		);
287
+        );
288 288
 
289
-		$admin_settings['bank_transfer_iban'] = array(
289
+        $admin_settings['bank_transfer_iban'] = array(
290 290
             'type' => 'text',
291 291
             'id'   => 'bank_transfer_iban',
292 292
             'name' => __( 'IBAN', 'invoicing' ),
293
-		);
293
+        );
294 294
 
295
-		$admin_settings['bank_transfer_bic'] = array(
295
+        $admin_settings['bank_transfer_bic'] = array(
296 296
             'type' => 'text',
297 297
             'id'   => 'bank_transfer_bic',
298 298
             'name' => __( 'BIC/Swift Code', 'invoicing' ),
299
-		);
299
+        );
300 300
 
301
-		$admin_settings['bank_transfer_sort_code'] = array(
302
-			'type' => 'text',
303
-			'id'   => 'bank_transfer_sort_code',
304
-			'name' => $sortcode,
305
-		);
301
+        $admin_settings['bank_transfer_sort_code'] = array(
302
+            'type' => 'text',
303
+            'id'   => 'bank_transfer_sort_code',
304
+            'name' => $sortcode,
305
+        );
306 306
 
307
-		$admin_settings['bank_transfer_info'] = array(
307
+        $admin_settings['bank_transfer_info'] = array(
308 308
             'id'   => 'bank_transfer_info',
309 309
             'name' => __( 'Instructions', 'invoicing' ),
310 310
             'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
@@ -314,17 +314,17 @@  discard block
 block discarded – undo
314 314
             'rows' => 5,
315 315
         );
316 316
 
317
-		return $admin_settings;
318
-	}
317
+        return $admin_settings;
318
+    }
319 319
 
320
-	/**
321
-	 * Processes invoice addons.
322
-	 *
323
-	 * @param WPInv_Invoice $invoice
324
-	 * @param GetPaid_Form_Item[] $items
325
-	 * @return WPInv_Invoice
326
-	 */
327
-	public function process_addons( $invoice, $items ) {
320
+    /**
321
+     * Processes invoice addons.
322
+     *
323
+     * @param WPInv_Invoice $invoice
324
+     * @param GetPaid_Form_Item[] $items
325
+     * @return WPInv_Invoice
326
+     */
327
+    public function process_addons( $invoice, $items ) {
328 328
 
329 329
         foreach ( $items as $item ) {
330 330
             $invoice->add_item( $item );
@@ -332,66 +332,66 @@  discard block
 block discarded – undo
332 332
 
333 333
         $invoice->recalculate_total();
334 334
         $invoice->save();
335
-	}
335
+    }
336 336
 
337
-	/**
338
-	 * (Maybe) renews a bank transfer subscription profile.
339
-	 *
340
-	 *
337
+    /**
338
+     * (Maybe) renews a bank transfer subscription profile.
339
+     *
340
+     *
341 341
      * @param WPInv_Subscription $subscription
342
-	 */
343
-	public function maybe_renew_subscription( $subscription ) {
342
+     */
343
+    public function maybe_renew_subscription( $subscription ) {
344 344
 
345 345
         // Ensure its our subscription && it's active.
346 346
         if ( $this->id === $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
347
-			$subscription->create_payment();
347
+            $subscription->create_payment();
348 348
         }
349 349
 
350 350
     }
351 351
 
352
-	/**
353
-	 * Process a bank transfer payment.
354
-	 *
355
-	 *
352
+    /**
353
+     * Process a bank transfer payment.
354
+     *
355
+     *
356 356
      * @param WPInv_Invoice $invoice
357
-	 */
358
-	public function invoice_paid( $invoice ) {
359
-
360
-		// Abort if not paid by bank transfer.
361
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
362
-			return;
363
-		}
364
-
365
-		// Is it a parent payment?
366
-		if ( 0 == $invoice->get_parent_id() ) {
367
-
368
-			// (Maybe) activate subscriptions.
369
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
370
-
371
-			if ( ! empty( $subscriptions ) ) {
372
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
373
-
374
-				foreach ( $subscriptions as $subscription ) {
375
-					if ( $subscription->exists() ) {
376
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
377
-						$expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
378
-
379
-						$subscription->set_next_renewal_date( $expiry );
380
-						$subscription->set_date_created( current_time( 'mysql' ) );
381
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
382
-						$subscription->activate();
383
-					}
384
-				}
357
+     */
358
+    public function invoice_paid( $invoice ) {
359
+
360
+        // Abort if not paid by bank transfer.
361
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
362
+            return;
363
+        }
364
+
365
+        // Is it a parent payment?
366
+        if ( 0 == $invoice->get_parent_id() ) {
367
+
368
+            // (Maybe) activate subscriptions.
369
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
370
+
371
+            if ( ! empty( $subscriptions ) ) {
372
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
373
+
374
+                foreach ( $subscriptions as $subscription ) {
375
+                    if ( $subscription->exists() ) {
376
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
377
+                        $expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
378
+
379
+                        $subscription->set_next_renewal_date( $expiry );
380
+                        $subscription->set_date_created( current_time( 'mysql' ) );
381
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
382
+                        $subscription->activate();
383
+                    }
384
+                }
385 385
 }
386 386
 } else {
387 387
 
388
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
388
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
389 389
 
390
-			// Renew the subscription.
391
-			if ( $subscription && $subscription->exists() ) {
392
-				$subscription->add_payment( array(), $invoice );
393
-				$subscription->renew();
394
-					}
390
+            // Renew the subscription.
391
+            if ( $subscription && $subscription->exists() ) {
392
+                $subscription->add_payment( array(), $invoice );
393
+                $subscription->renew();
394
+                    }
395 395
 }
396 396
 
397 397
     }
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'             => _n( 'Item', 'Items', $items_count, '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'             => _n( 'Item', 'Items', $items_count, '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.
includes/class-getpaid-invoice-notification-emails.php 1 patch
Indentation   +454 added lines, -454 removed lines patch added patch discarded remove patch
@@ -12,489 +12,489 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Notification_Emails {
14 14
 
15
-	/**
16
-	 * The array of invoice email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $invoice_actions;
21
-
22
-	/**
23
-	 * Class constructor
24
-	 *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->invoice_actions = apply_filters(
29
-			'getpaid_notification_email_invoice_triggers',
30
-			array(
31
-				'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
-				'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
-				'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
-				'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
-				'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
-				'getpaid_invoice_status_publish'        => 'completed_invoice',
37
-				'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
-				'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
-				'getpaid_new_customer_note'             => 'user_note',
40
-				'getpaid_daily_maintenance'             => 'overdue',
41
-			)
42
-		);
43
-
44
-		$this->init_hooks();
45
-
46
-	}
47
-
48
-	/**
49
-	 * Registers email hooks.
50
-	 */
51
-	public function init_hooks() {
52
-
53
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
-		add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
-
56
-		foreach ( $this->invoice_actions as $hook => $email_type ) {
57
-			$this->init_email_type_hook( $hook, $email_type );
58
-		}
59
-	}
60
-
61
-	/**
62
-	 * Registers an email hook for an invoice action.
63
-	 *
64
-	 * @param string $hook
65
-	 * @param string|array $email_type
66
-	 */
67
-	public function init_email_type_hook( $hook, $email_type ) {
68
-
69
-		$email_type = wpinv_parse_list( $email_type );
70
-
71
-		foreach ( $email_type as $type ) {
72
-
73
-			$email = new GetPaid_Notification_Email( $type );
74
-
75
-			// Abort if it is not active.
76
-			if ( ! $email->is_active() ) {
77
-				continue;
78
-			}
79
-
80
-			if ( method_exists( $this, $type ) ) {
81
-				add_action( $hook, array( $this, $type ), 100, 2 );
82
-				continue;
83
-			}
84
-
85
-			do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
-		}
87
-
88
-	}
89
-
90
-	/**
91
-	 * Filters invoice merge tags.
92
-	 *
93
-	 * @param array $merge_tags
94
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
-	 */
96
-	public function invoice_merge_tags( $merge_tags, $object ) {
97
-
98
-		if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
-			return array_merge(
100
-				$merge_tags,
101
-				$this->get_invoice_merge_tags( $object )
102
-			);
103
-		}
104
-
105
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
-			return array_merge(
107
-				$merge_tags,
108
-				$this->get_invoice_merge_tags( $object->get_parent_payment() )
109
-			);
110
-		}
111
-
112
-		return $merge_tags;
113
-
114
-	}
115
-
116
-	/**
117
-	 * Generates invoice merge tags.
118
-	 *
119
-	 * @param WPInv_Invoice $invoice
120
-	 * @return array
121
-	 */
122
-	public function get_invoice_merge_tags( $invoice ) {
123
-
124
-		// Abort if it does not exist.
125
-		if ( ! $invoice->get_id() ) {
126
-			return array();
127
-		}
128
-
129
-		$merge_tags = array(
130
-			'{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
131
-			'{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
132
-			'{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
133
-			'{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
134
-			'{email}'                => sanitize_email( $invoice->get_email() ),
135
-			'{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
136
-			'{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
137
-			'{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
-			'{invoice_link}'         => esc_url( $invoice->get_view_url() ),
139
-			'{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
140
-			'{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
141
-			'{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
142
-			'{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
-			'{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
-			'{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
-			'{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
146
-			'{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
147
-			'{is_was}'               => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
-		);
149
-
150
-		$payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
-
152
-		if ( is_array( $payment_form_data ) ) {
153
-
154
-			foreach ( $payment_form_data as $label => $value ) {
155
-
156
-				$label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
-				$value = is_array( $value ) ? implode( ', ', $value ) : $value;
158
-
159
-				if ( is_scalar( $value ) ) {
160
-					$merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
-				}
162
-			}
163
-		}
164
-
165
-		return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
-	}
167
-
168
-	/**
169
-	 * Helper function to send an email.
170
-	 *
171
-	 * @param WPInv_Invoice $invoice
172
-	 * @param GetPaid_Notification_Email $email
173
-	 * @param string $type
174
-	 * @param string|array $recipients
175
-	 * @param array $extra_args Extra template args.
176
-	 */
177
-	public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
178
-
179
-		do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
-
181
-		$skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
-		if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
-			return;
184
-		}
185
-
186
-		$mailer     = new GetPaid_Notification_Email_Sender();
187
-		$merge_tags = $email->get_merge_tags();
188
-
189
-		$result = $mailer->send(
190
-			apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
-			$email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
-			$email->get_content( $merge_tags, $extra_args ),
193
-			$email->get_attachments()
194
-		);
195
-
196
-		// Maybe send a copy to the admin.
197
-		if ( $email->include_admin_bcc() ) {
198
-			$mailer->send(
199
-				wpinv_get_admin_email(),
200
-				$email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
-				$email->get_content( $merge_tags ),
202
-				$email->get_attachments()
203
-			);
204
-		}
205
-
206
-		if ( $result ) {
207
-			$invoice->add_system_note(
208
-				sprintf(
209
-					// translators: %1 is the email type, %2 is the invoice recipient.
210
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
211
-					sanitize_key( $type ),
212
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
213
-				)
214
-			);
215
-		} else {
216
-			$invoice->add_system_note(
217
-				sprintf(
218
-					// translators: %1 is the email type, %2 is the invoice recipient.
219
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
220
-					sanitize_key( $type ),
221
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
222
-				)
223
-			);
224
-		}
225
-
226
-		do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
227
-
228
-		return $result;
229
-	}
230
-
231
-	/**
232
-	 * Also send emails to any cc users.
233
-	 *
234
-	 * @param array $recipients
235
-	 * @param GetPaid_Notification_Email $email
236
-	 */
237
-	public function filter_email_recipients( $recipients, $email ) {
238
-
239
-		if ( ! $email->is_admin_email() ) {
240
-			$cc   = $email->object->get_email_cc();
241
-			$cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
242
-
243
-			if ( ! empty( $cc ) ) {
244
-				$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
245
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
246
-			}
247
-
248
-			if ( ! empty( $cc_2 ) ) {
249
-				$cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
250
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
251
-			}
252
-		}
253
-
254
-		return $recipients;
255
-
256
-	}
257
-
258
-	/**
259
-	 * Sends a new invoice notification.
260
-	 *
261
-	 * @param WPInv_Invoice $invoice
262
-	 */
263
-	public function new_invoice( $invoice ) {
264
-
265
-		// Only send this email for invoices created via the admin page.
266
-		if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
267
-			return;
268
-		}
269
-
270
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
271
-		$recipient = wpinv_get_admin_email();
272
-
273
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
274
-
275
-	}
276
-
277
-	/**
278
-	 * Sends a cancelled invoice notification.
279
-	 *
280
-	 * @param WPInv_Invoice $invoice
281
-	 */
282
-	public function cancelled_invoice( $invoice ) {
283
-
284
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
285
-		$recipient = $invoice->get_email();
286
-
287
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
288
-	}
289
-
290
-	/**
291
-	 * Sends a failed invoice notification.
292
-	 *
293
-	 * @param WPInv_Invoice $invoice
294
-	 */
295
-	public function failed_invoice( $invoice ) {
296
-
297
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
298
-		$recipient = wpinv_get_admin_email();
299
-
300
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
301
-
302
-	}
303
-
304
-	/**
305
-	 * Sends a notification whenever an invoice is put on hold.
306
-	 *
307
-	 * @param WPInv_Invoice $invoice
308
-	 */
309
-	public function onhold_invoice( $invoice ) {
310
-
311
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
312
-		$recipient = $invoice->get_email();
313
-
314
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
315
-
316
-	}
317
-
318
-	/**
319
-	 * Sends a notification whenever an invoice is marked as processing payment.
320
-	 *
321
-	 * @param WPInv_Invoice $invoice
322
-	 */
323
-	public function processing_invoice( $invoice ) {
15
+    /**
16
+     * The array of invoice email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $invoice_actions;
21
+
22
+    /**
23
+     * Class constructor
24
+     *
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->invoice_actions = apply_filters(
29
+            'getpaid_notification_email_invoice_triggers',
30
+            array(
31
+                'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
+                'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
+                'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
+                'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
+                'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
+                'getpaid_invoice_status_publish'        => 'completed_invoice',
37
+                'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
+                'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
+                'getpaid_new_customer_note'             => 'user_note',
40
+                'getpaid_daily_maintenance'             => 'overdue',
41
+            )
42
+        );
43
+
44
+        $this->init_hooks();
45
+
46
+    }
47
+
48
+    /**
49
+     * Registers email hooks.
50
+     */
51
+    public function init_hooks() {
52
+
53
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
+        add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
+
56
+        foreach ( $this->invoice_actions as $hook => $email_type ) {
57
+            $this->init_email_type_hook( $hook, $email_type );
58
+        }
59
+    }
60
+
61
+    /**
62
+     * Registers an email hook for an invoice action.
63
+     *
64
+     * @param string $hook
65
+     * @param string|array $email_type
66
+     */
67
+    public function init_email_type_hook( $hook, $email_type ) {
68
+
69
+        $email_type = wpinv_parse_list( $email_type );
70
+
71
+        foreach ( $email_type as $type ) {
72
+
73
+            $email = new GetPaid_Notification_Email( $type );
74
+
75
+            // Abort if it is not active.
76
+            if ( ! $email->is_active() ) {
77
+                continue;
78
+            }
79
+
80
+            if ( method_exists( $this, $type ) ) {
81
+                add_action( $hook, array( $this, $type ), 100, 2 );
82
+                continue;
83
+            }
84
+
85
+            do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
+        }
87
+
88
+    }
89
+
90
+    /**
91
+     * Filters invoice merge tags.
92
+     *
93
+     * @param array $merge_tags
94
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
+     */
96
+    public function invoice_merge_tags( $merge_tags, $object ) {
97
+
98
+        if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
+            return array_merge(
100
+                $merge_tags,
101
+                $this->get_invoice_merge_tags( $object )
102
+            );
103
+        }
104
+
105
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
+            return array_merge(
107
+                $merge_tags,
108
+                $this->get_invoice_merge_tags( $object->get_parent_payment() )
109
+            );
110
+        }
111
+
112
+        return $merge_tags;
113
+
114
+    }
115
+
116
+    /**
117
+     * Generates invoice merge tags.
118
+     *
119
+     * @param WPInv_Invoice $invoice
120
+     * @return array
121
+     */
122
+    public function get_invoice_merge_tags( $invoice ) {
123
+
124
+        // Abort if it does not exist.
125
+        if ( ! $invoice->get_id() ) {
126
+            return array();
127
+        }
128
+
129
+        $merge_tags = array(
130
+            '{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
131
+            '{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
132
+            '{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
133
+            '{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
134
+            '{email}'                => sanitize_email( $invoice->get_email() ),
135
+            '{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
136
+            '{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
137
+            '{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
+            '{invoice_link}'         => esc_url( $invoice->get_view_url() ),
139
+            '{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
140
+            '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
141
+            '{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
142
+            '{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
+            '{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
+            '{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
+            '{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
146
+            '{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
147
+            '{is_was}'               => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
+        );
149
+
150
+        $payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
+
152
+        if ( is_array( $payment_form_data ) ) {
324 153
 
325
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
326
-		$recipient = $invoice->get_email();
327
-
328
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
329
-
330
-	}
331
-
332
-	/**
333
-	 * Sends a notification whenever an invoice is paid.
334
-	 *
335
-	 * @param WPInv_Invoice $invoice
336
-	 */
337
-	public function completed_invoice( $invoice ) {
154
+            foreach ( $payment_form_data as $label => $value ) {
338 155
 
339
-		// (Maybe) abort if it is a renewal invoice.
340
-		if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
341
-			return;
342
-		}
343
-
344
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
345
-		$recipient = $invoice->get_email();
156
+                $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
+                $value = is_array( $value ) ? implode( ', ', $value ) : $value;
346 158
 
347
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
159
+                if ( is_scalar( $value ) ) {
160
+                    $merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
+                }
162
+            }
163
+        }
348 164
 
349
-	}
165
+        return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
+    }
350 167
 
351
-	/**
352
-	 * Sends a notification whenever an invoice is refunded.
353
-	 *
354
-	 * @param WPInv_Invoice $invoice
355
-	 */
356
-	public function refunded_invoice( $invoice ) {
168
+    /**
169
+     * Helper function to send an email.
170
+     *
171
+     * @param WPInv_Invoice $invoice
172
+     * @param GetPaid_Notification_Email $email
173
+     * @param string $type
174
+     * @param string|array $recipients
175
+     * @param array $extra_args Extra template args.
176
+     */
177
+    public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
357 178
 
358
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
359
-		$recipient = $invoice->get_email();
360
-
361
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
179
+        do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
+
181
+        $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
+        if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
+            return;
184
+        }
185
+
186
+        $mailer     = new GetPaid_Notification_Email_Sender();
187
+        $merge_tags = $email->get_merge_tags();
188
+
189
+        $result = $mailer->send(
190
+            apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
+            $email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
+            $email->get_content( $merge_tags, $extra_args ),
193
+            $email->get_attachments()
194
+        );
362 195
 
363
-	}
196
+        // Maybe send a copy to the admin.
197
+        if ( $email->include_admin_bcc() ) {
198
+            $mailer->send(
199
+                wpinv_get_admin_email(),
200
+                $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
+                $email->get_content( $merge_tags ),
202
+                $email->get_attachments()
203
+            );
204
+        }
205
+
206
+        if ( $result ) {
207
+            $invoice->add_system_note(
208
+                sprintf(
209
+                    // translators: %1 is the email type, %2 is the invoice recipient.
210
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
211
+                    sanitize_key( $type ),
212
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
213
+                )
214
+            );
215
+        } else {
216
+            $invoice->add_system_note(
217
+                sprintf(
218
+                    // translators: %1 is the email type, %2 is the invoice recipient.
219
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
220
+                    sanitize_key( $type ),
221
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
222
+                )
223
+            );
224
+        }
225
+
226
+        do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
227
+
228
+        return $result;
229
+    }
230
+
231
+    /**
232
+     * Also send emails to any cc users.
233
+     *
234
+     * @param array $recipients
235
+     * @param GetPaid_Notification_Email $email
236
+     */
237
+    public function filter_email_recipients( $recipients, $email ) {
238
+
239
+        if ( ! $email->is_admin_email() ) {
240
+            $cc   = $email->object->get_email_cc();
241
+            $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
242
+
243
+            if ( ! empty( $cc ) ) {
244
+                $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
245
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
246
+            }
247
+
248
+            if ( ! empty( $cc_2 ) ) {
249
+                $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
250
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
251
+            }
252
+        }
253
+
254
+        return $recipients;
255
+
256
+    }
257
+
258
+    /**
259
+     * Sends a new invoice notification.
260
+     *
261
+     * @param WPInv_Invoice $invoice
262
+     */
263
+    public function new_invoice( $invoice ) {
264
+
265
+        // Only send this email for invoices created via the admin page.
266
+        if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
267
+            return;
268
+        }
269
+
270
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
271
+        $recipient = wpinv_get_admin_email();
272
+
273
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
274
+
275
+    }
276
+
277
+    /**
278
+     * Sends a cancelled invoice notification.
279
+     *
280
+     * @param WPInv_Invoice $invoice
281
+     */
282
+    public function cancelled_invoice( $invoice ) {
283
+
284
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
285
+        $recipient = $invoice->get_email();
286
+
287
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
288
+    }
289
+
290
+    /**
291
+     * Sends a failed invoice notification.
292
+     *
293
+     * @param WPInv_Invoice $invoice
294
+     */
295
+    public function failed_invoice( $invoice ) {
296
+
297
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
298
+        $recipient = wpinv_get_admin_email();
299
+
300
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
301
+
302
+    }
303
+
304
+    /**
305
+     * Sends a notification whenever an invoice is put on hold.
306
+     *
307
+     * @param WPInv_Invoice $invoice
308
+     */
309
+    public function onhold_invoice( $invoice ) {
310
+
311
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
312
+        $recipient = $invoice->get_email();
313
+
314
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
315
+
316
+    }
317
+
318
+    /**
319
+     * Sends a notification whenever an invoice is marked as processing payment.
320
+     *
321
+     * @param WPInv_Invoice $invoice
322
+     */
323
+    public function processing_invoice( $invoice ) {
364 324
 
365
-	/**
366
-	 * Notifies a user about new invoices
367
-	 *
368
-	 * @param WPInv_Invoice $invoice
369
-	 * @param bool $force
370
-	 */
371
-	public function user_invoice( $invoice, $force = false ) {
325
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
326
+        $recipient = $invoice->get_email();
327
+
328
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
329
+
330
+    }
331
+
332
+    /**
333
+     * Sends a notification whenever an invoice is paid.
334
+     *
335
+     * @param WPInv_Invoice $invoice
336
+     */
337
+    public function completed_invoice( $invoice ) {
372 338
 
373
-		if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
374
-			return;
375
-		}
376
-
377
-		// Only send this email for invoices created via the admin page.
378
-		if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
379
-			return;
380
-		}
339
+        // (Maybe) abort if it is a renewal invoice.
340
+        if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
341
+            return;
342
+        }
343
+
344
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
345
+        $recipient = $invoice->get_email();
381 346
 
382
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
383
-		$recipient = $invoice->get_email();
384
-
385
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
347
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
386 348
 
387
-	}
388
-
389
-	/**
390
-	 * Checks if an invoice is a payment form invoice.
391
-	 *
392
-	 * @param int $invoice
393
-	 * @return bool
394
-	 */
395
-	public function is_payment_form_invoice( $invoice ) {
396
-		$is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
397
-		return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
398
-	}
349
+    }
399 350
 
400
-	/**
401
-	 * Notifies admin about new invoice notes
402
-	 *
403
-	 * @param WPInv_Invoice $invoice
404
-	 * @param string $note
405
-	 */
406
-	public function user_note( $invoice, $note ) {
407
-
408
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
409
-		$recipient = $invoice->get_email();
351
+    /**
352
+     * Sends a notification whenever an invoice is refunded.
353
+     *
354
+     * @param WPInv_Invoice $invoice
355
+     */
356
+    public function refunded_invoice( $invoice ) {
410 357
 
411
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
412
-
413
-	}
414
-
415
-	/**
416
-	 * (Force) Sends overdue notices.
417
-	 *
418
-	 * @param WPInv_Invoice $invoice
419
-	 */
420
-	public function force_send_overdue_notice( $invoice ) {
421
-		$email = new GetPaid_Notification_Email( 'overdue', $invoice );
422
-		return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
423
-	}
424
-
425
-	/**
426
-	 * Sends overdue notices.
427
-	 *
428
-	 * @TODO: Create an invoices query class.
429
-	 */
430
-	public function overdue() {
431
-		global $wpdb;
432
-
433
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
434
-
435
-		// Fetch reminder days.
436
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
437
-
438
-		// Abort if non is set.
439
-		if ( empty( $reminder_days ) ) {
440
-			return;
441
-		}
442
-
443
-		// Retrieve date query.
444
-		$date_query = $this->get_date_query( $reminder_days );
445
-
446
-		// Invoices table.
447
-		$table = $wpdb->prefix . 'getpaid_invoices';
448
-
449
-		// Fetch invoices.
450
-		$invoices  = $wpdb->get_col(
451
-			"SELECT posts.ID FROM $wpdb->posts as posts
358
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
359
+        $recipient = $invoice->get_email();
360
+
361
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
362
+
363
+    }
364
+
365
+    /**
366
+     * Notifies a user about new invoices
367
+     *
368
+     * @param WPInv_Invoice $invoice
369
+     * @param bool $force
370
+     */
371
+    public function user_invoice( $invoice, $force = false ) {
372
+
373
+        if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
374
+            return;
375
+        }
376
+
377
+        // Only send this email for invoices created via the admin page.
378
+        if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
379
+            return;
380
+        }
381
+
382
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
383
+        $recipient = $invoice->get_email();
384
+
385
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
386
+
387
+    }
388
+
389
+    /**
390
+     * Checks if an invoice is a payment form invoice.
391
+     *
392
+     * @param int $invoice
393
+     * @return bool
394
+     */
395
+    public function is_payment_form_invoice( $invoice ) {
396
+        $is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
397
+        return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
398
+    }
399
+
400
+    /**
401
+     * Notifies admin about new invoice notes
402
+     *
403
+     * @param WPInv_Invoice $invoice
404
+     * @param string $note
405
+     */
406
+    public function user_note( $invoice, $note ) {
407
+
408
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
409
+        $recipient = $invoice->get_email();
410
+
411
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
412
+
413
+    }
414
+
415
+    /**
416
+     * (Force) Sends overdue notices.
417
+     *
418
+     * @param WPInv_Invoice $invoice
419
+     */
420
+    public function force_send_overdue_notice( $invoice ) {
421
+        $email = new GetPaid_Notification_Email( 'overdue', $invoice );
422
+        return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
423
+    }
424
+
425
+    /**
426
+     * Sends overdue notices.
427
+     *
428
+     * @TODO: Create an invoices query class.
429
+     */
430
+    public function overdue() {
431
+        global $wpdb;
432
+
433
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
434
+
435
+        // Fetch reminder days.
436
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
437
+
438
+        // Abort if non is set.
439
+        if ( empty( $reminder_days ) ) {
440
+            return;
441
+        }
442
+
443
+        // Retrieve date query.
444
+        $date_query = $this->get_date_query( $reminder_days );
445
+
446
+        // Invoices table.
447
+        $table = $wpdb->prefix . 'getpaid_invoices';
448
+
449
+        // Fetch invoices.
450
+        $invoices  = $wpdb->get_col(
451
+            "SELECT posts.ID FROM $wpdb->posts as posts
452 452
 			LEFT JOIN $table as invoices ON invoices.post_id = posts.ID
453 453
 			WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query"
454 454
         );
455 455
 
456
-		foreach ( $invoices as $invoice ) {
456
+        foreach ( $invoices as $invoice ) {
457 457
 
458
-			// Only send this email for invoices created via the admin page.
459
-			if ( ! $this->is_payment_form_invoice( $invoice ) ) {
460
-				$invoice       = new WPInv_Invoice( $invoice );
461
-				$email->object = $invoice;
458
+            // Only send this email for invoices created via the admin page.
459
+            if ( ! $this->is_payment_form_invoice( $invoice ) ) {
460
+                $invoice       = new WPInv_Invoice( $invoice );
461
+                $email->object = $invoice;
462 462
 
463
-				if ( $invoice->needs_payment() ) {
464
-					$this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
465
-				}
463
+                if ( $invoice->needs_payment() ) {
464
+                    $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
465
+                }
466 466
 }
467 467
 }
468 468
 
469
-	}
469
+    }
470 470
 
471
-	/**
472
-	 * Calculates the date query for an invoices query
473
-	 *
474
-	 * @param array $reminder_days
475
-	 * @return string
476
-	 */
477
-	public function get_date_query( $reminder_days ) {
471
+    /**
472
+     * Calculates the date query for an invoices query
473
+     *
474
+     * @param array $reminder_days
475
+     * @return string
476
+     */
477
+    public function get_date_query( $reminder_days ) {
478 478
 
479
-		$date_query = array(
480
-			'relation' => 'OR',
481
-		);
479
+        $date_query = array(
480
+            'relation' => 'OR',
481
+        );
482 482
 
483
-		foreach ( $reminder_days as $days ) {
484
-			$date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
483
+        foreach ( $reminder_days as $days ) {
484
+            $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
485 485
 
486
-			$date_query[] = array(
487
-				'year'  => $date['year'],
488
-				'month' => $date['month'],
489
-				'day'   => $date['day'],
490
-			);
486
+            $date_query[] = array(
487
+                'year'  => $date['year'],
488
+                'month' => $date['month'],
489
+                'day'   => $date['day'],
490
+            );
491 491
 
492
-		}
492
+        }
493 493
 
494
-		$date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
494
+        $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
495 495
 
496
-		return $date_query->get_sql();
496
+        return $date_query->get_sql();
497 497
 
498
-	}
498
+    }
499 499
 
500 500
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-export.php 1 patch
Indentation   +181 added lines, -181 removed lines patch added patch discarded remove patch
@@ -12,47 +12,47 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Export {
14 14
 
15
-	/**
16
-	 * Displays the reports tab.
17
-	 *
18
-	 */
19
-	public function display() {
20
-
21
-		echo "<div class='row mt-4' style='max-width: 920px;' >";
22
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
23
-			$this->display_post_type_export( $post_type );
24
-		}
25
-		$this->display_subscription_export();
26
-		echo '</div>';
27
-
28
-	}
29
-
30
-	/**
31
-	 * Retrieves the download url.
32
-	 *
33
-	 */
34
-	public function get_download_url( $post_type ) {
35
-
36
-		return wp_nonce_url(
37
-			add_query_arg(
38
-				array(
39
-					'getpaid-admin-action' => 'export_invoices',
40
-					'post_type'            => urlencode( $post_type ),
41
-				)
42
-			),
43
-			'getpaid-nonce',
44
-			'getpaid-nonce'
45
-		);
46
-
47
-	}
48
-
49
-	/**
50
-	 * Displays a single post type export card.
51
-	 *
52
-	 */
53
-	public function display_post_type_export( $post_type ) {
54
-
55
-		?>
15
+    /**
16
+     * Displays the reports tab.
17
+     *
18
+     */
19
+    public function display() {
20
+
21
+        echo "<div class='row mt-4' style='max-width: 920px;' >";
22
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
23
+            $this->display_post_type_export( $post_type );
24
+        }
25
+        $this->display_subscription_export();
26
+        echo '</div>';
27
+
28
+    }
29
+
30
+    /**
31
+     * Retrieves the download url.
32
+     *
33
+     */
34
+    public function get_download_url( $post_type ) {
35
+
36
+        return wp_nonce_url(
37
+            add_query_arg(
38
+                array(
39
+                    'getpaid-admin-action' => 'export_invoices',
40
+                    'post_type'            => urlencode( $post_type ),
41
+                )
42
+            ),
43
+            'getpaid-nonce',
44
+            'getpaid-nonce'
45
+        );
46
+
47
+    }
48
+
49
+    /**
50
+     * Displays a single post type export card.
51
+     *
52
+     */
53
+    public function display_post_type_export( $post_type ) {
54
+
55
+        ?>
56 56
 
57 57
 		<div class="col-12 col-md-6">
58 58
 			<div class="card m-0 p-0" style="max-width:100%">
@@ -60,11 +60,11 @@  discard block
 block discarded – undo
60 60
 				<div class="card-header">
61 61
 					<strong>
62 62
 						<?php
63
-							printf(
64
-								esc_html__( 'Export %s', 'invoicing' ),
65
-								esc_html( getpaid_get_post_type_label( $post_type ) )
66
-							);
67
-						?>
63
+                            printf(
64
+                                esc_html__( 'Export %s', 'invoicing' ),
65
+                                esc_html( getpaid_get_post_type_label( $post_type ) )
66
+                            );
67
+                        ?>
68 68
 					</strong>
69 69
 				</div>
70 70
 
@@ -73,12 +73,12 @@  discard block
 block discarded – undo
73 73
 					<form method="post" action="<?php echo esc_url( $this->get_download_url( $post_type ) ); ?>">
74 74
 
75 75
 						<?php
76
-							$this->display_markup( $this->generate_from_date( $post_type ) );
77
-							$this->display_markup( $this->generate_to_date( $post_type ) );
78
-							$this->display_markup( $this->generate_post_status_select( $post_type ) );
79
-							$this->display_markup( $this->generate_file_type_select( $post_type ) );
80
-							submit_button( __( 'Download', 'invoicing' ) );
81
-						?>
76
+                            $this->display_markup( $this->generate_from_date( $post_type ) );
77
+                            $this->display_markup( $this->generate_to_date( $post_type ) );
78
+                            $this->display_markup( $this->generate_post_status_select( $post_type ) );
79
+                            $this->display_markup( $this->generate_file_type_select( $post_type ) );
80
+                            submit_button( __( 'Download', 'invoicing' ) );
81
+                        ?>
82 82
 
83 83
 					</form>
84 84
 
@@ -89,128 +89,128 @@  discard block
 block discarded – undo
89 89
 
90 90
 		<?php
91 91
 
92
-	}
93
-
94
-	/**
95
-	 * Generates the from date input field.
96
-	 *
97
-	 */
98
-	public function generate_from_date( $post_type ) {
99
-
100
-		return aui()->input(
101
-			array(
102
-				'type'             => 'datepicker',
103
-				'id'               => esc_attr( "$post_type-from_date" ),
104
-				'name'             => 'from_date',
105
-				'label'            => __( 'From Date', 'invoicing' ),
106
-				'placeholder'      => 'YYYY-MM-DD',
107
-				'extra_attributes' => array(
108
-					'data-enable-time' => 'false',
109
-					'data-allow-input' => 'true',
110
-				),
111
-			),
112
-			false
113
-		);
114
-
115
-	}
116
-
117
-	/**
118
-	 * Generates the to date input field.
119
-	 *
120
-	 */
121
-	public function generate_to_date( $post_type ) {
122
-
123
-		return aui()->input(
124
-			array(
125
-				'name'        => 'to_date',
126
-				'id'          => esc_attr( "$post_type-to_date" ),
127
-				'placeholder' => 'yy-mm-dd',
128
-				'label'       => __( 'To Date', 'invoicing' ),
129
-				'label_type'  => 'vertical',
130
-				'label_class' => 'd-block',
131
-				'type'        => 'datepicker',
132
-			)
133
-		);
134
-
135
-	}
136
-
137
-	/**
138
-	 * Generates the to post status select field.
139
-	 *
140
-	 */
141
-	public function generate_post_status_select( $post_type ) {
142
-
143
-		if ( 'subscriptions' === $post_type ) {
144
-			$options = getpaid_get_subscription_statuses();
145
-		} else {
146
-			$options = wpinv_get_invoice_statuses( true, false, $post_type );
147
-		}
148
-
149
-		return aui()->select(
150
-			array(
151
-				'name'        => 'status',
152
-				'id'          => esc_attr( "$post_type-status" ),
153
-				'placeholder' => __( 'All Statuses', 'invoicing' ),
154
-				'label'       => __( 'Status', 'invoicing' ),
155
-				'label_type'  => 'vertical',
156
-				'label_class' => 'd-block',
157
-				'options'     => $options,
158
-			)
159
-		);
160
-
161
-	}
162
-
163
-	/**
164
-	 * Generates the to file type select field.
165
-	 *
166
-	 */
167
-	public function generate_file_type_select( $post_type ) {
168
-
169
-		return aui()->select(
170
-			array(
171
-				'name'        => 'file_type',
172
-				'id'          => esc_attr( "$post_type-file_type" ),
173
-				'placeholder' => __( 'Select File Type', 'invoicing' ),
174
-				'label'       => __( 'Export File', 'invoicing' ),
175
-				'label_type'  => 'vertical',
176
-				'label_class' => 'd-block',
177
-				'options'     => array(
178
-					'csv'  => __( 'CSV', 'invoicing' ),
179
-					'xml'  => __( 'XML', 'invoicing' ),
180
-					'json' => __( 'JSON', 'invoicing' ),
181
-				),
182
-			)
183
-		);
184
-
185
-	}
186
-
187
-	/**
188
-	 * Displays a field's markup.
189
-	 *
190
-	 */
191
-	public function display_markup( $markup ) {
192
-
193
-		echo wp_kses(
194
-			str_replace(
195
-				array(
196
-					'form-control',
197
-					'custom-select',
198
-				),
199
-				'regular-text',
200
-				$markup
201
-			),
202
-			getpaid_allowed_html()
203
-		);
204
-
205
-	}
206
-
207
-	/**
208
-	 * Displays a subscription export card.
209
-	 *
210
-	 */
211
-	public function display_subscription_export() {
212
-
213
-		?>
92
+    }
93
+
94
+    /**
95
+     * Generates the from date input field.
96
+     *
97
+     */
98
+    public function generate_from_date( $post_type ) {
99
+
100
+        return aui()->input(
101
+            array(
102
+                'type'             => 'datepicker',
103
+                'id'               => esc_attr( "$post_type-from_date" ),
104
+                'name'             => 'from_date',
105
+                'label'            => __( 'From Date', 'invoicing' ),
106
+                'placeholder'      => 'YYYY-MM-DD',
107
+                'extra_attributes' => array(
108
+                    'data-enable-time' => 'false',
109
+                    'data-allow-input' => 'true',
110
+                ),
111
+            ),
112
+            false
113
+        );
114
+
115
+    }
116
+
117
+    /**
118
+     * Generates the to date input field.
119
+     *
120
+     */
121
+    public function generate_to_date( $post_type ) {
122
+
123
+        return aui()->input(
124
+            array(
125
+                'name'        => 'to_date',
126
+                'id'          => esc_attr( "$post_type-to_date" ),
127
+                'placeholder' => 'yy-mm-dd',
128
+                'label'       => __( 'To Date', 'invoicing' ),
129
+                'label_type'  => 'vertical',
130
+                'label_class' => 'd-block',
131
+                'type'        => 'datepicker',
132
+            )
133
+        );
134
+
135
+    }
136
+
137
+    /**
138
+     * Generates the to post status select field.
139
+     *
140
+     */
141
+    public function generate_post_status_select( $post_type ) {
142
+
143
+        if ( 'subscriptions' === $post_type ) {
144
+            $options = getpaid_get_subscription_statuses();
145
+        } else {
146
+            $options = wpinv_get_invoice_statuses( true, false, $post_type );
147
+        }
148
+
149
+        return aui()->select(
150
+            array(
151
+                'name'        => 'status',
152
+                'id'          => esc_attr( "$post_type-status" ),
153
+                'placeholder' => __( 'All Statuses', 'invoicing' ),
154
+                'label'       => __( 'Status', 'invoicing' ),
155
+                'label_type'  => 'vertical',
156
+                'label_class' => 'd-block',
157
+                'options'     => $options,
158
+            )
159
+        );
160
+
161
+    }
162
+
163
+    /**
164
+     * Generates the to file type select field.
165
+     *
166
+     */
167
+    public function generate_file_type_select( $post_type ) {
168
+
169
+        return aui()->select(
170
+            array(
171
+                'name'        => 'file_type',
172
+                'id'          => esc_attr( "$post_type-file_type" ),
173
+                'placeholder' => __( 'Select File Type', 'invoicing' ),
174
+                'label'       => __( 'Export File', 'invoicing' ),
175
+                'label_type'  => 'vertical',
176
+                'label_class' => 'd-block',
177
+                'options'     => array(
178
+                    'csv'  => __( 'CSV', 'invoicing' ),
179
+                    'xml'  => __( 'XML', 'invoicing' ),
180
+                    'json' => __( 'JSON', 'invoicing' ),
181
+                ),
182
+            )
183
+        );
184
+
185
+    }
186
+
187
+    /**
188
+     * Displays a field's markup.
189
+     *
190
+     */
191
+    public function display_markup( $markup ) {
192
+
193
+        echo wp_kses(
194
+            str_replace(
195
+                array(
196
+                    'form-control',
197
+                    'custom-select',
198
+                ),
199
+                'regular-text',
200
+                $markup
201
+            ),
202
+            getpaid_allowed_html()
203
+        );
204
+
205
+    }
206
+
207
+    /**
208
+     * Displays a subscription export card.
209
+     *
210
+     */
211
+    public function display_subscription_export() {
212
+
213
+        ?>
214 214
 
215 215
 		<div class="col-12 col-md-6">
216 216
 			<div class="card m-0 p-0" style="max-width:100%">
@@ -226,12 +226,12 @@  discard block
 block discarded – undo
226 226
 					<form method="post" action="<?php echo esc_url( $this->get_download_url( 'subscriptions' ) ); ?>">
227 227
 
228 228
 						<?php
229
-							$this->display_markup( $this->generate_from_date( 'subscriptions' ) );
230
-							$this->display_markup( $this->generate_to_date( 'subscriptions' ) );
231
-							$this->display_markup( $this->generate_post_status_select( 'subscriptions' ) );
232
-							$this->display_markup( $this->generate_file_type_select( 'subscriptions' ) );
233
-							submit_button( __( 'Download', 'invoicing' ) );
234
-						?>
229
+                            $this->display_markup( $this->generate_from_date( 'subscriptions' ) );
230
+                            $this->display_markup( $this->generate_to_date( 'subscriptions' ) );
231
+                            $this->display_markup( $this->generate_post_status_select( 'subscriptions' ) );
232
+                            $this->display_markup( $this->generate_file_type_select( 'subscriptions' ) );
233
+                            submit_button( __( 'Download', 'invoicing' ) );
234
+                        ?>
235 235
 
236 236
 					</form>
237 237
 
@@ -242,6 +242,6 @@  discard block
 block discarded – undo
242 242
 
243 243
 		<?php
244 244
 
245
-	}
245
+    }
246 246
 
247 247
 }
Please login to merge, or discard this patch.
includes/class-getpaid-notification-email-sender.php 1 patch
Indentation   +134 added lines, -134 removed lines patch added patch discarded remove patch
@@ -13,17 +13,17 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Notification_Email_Sender {
14 14
 
15 15
     /**
16
-	 * Whether or not we should inline CSS into the email.
17
-	 */
18
-	public $inline_css = true;
16
+     * Whether or not we should inline CSS into the email.
17
+     */
18
+    public $inline_css = true;
19 19
 
20 20
     /**
21
-	 * The wp_mail() data.
22
-	 */
21
+     * The wp_mail() data.
22
+     */
23 23
     public $wp_mail_data = null;
24 24
 
25 25
     /**
26
-	 * Sends a new email.
26
+     * Sends a new email.
27 27
      *
28 28
      * @param string|array $to The recipients email or an array of recipient emails.
29 29
      * @param string $subject The email's subject.
@@ -31,49 +31,49 @@  discard block
 block discarded – undo
31 31
      * @param array $attachments The email attachments.
32 32
      *
33 33
      * @return bool
34
-	 */
35
-	public function send( $to, $subject, $email, $attachments = array() ) {
34
+     */
35
+    public function send( $to, $subject, $email, $attachments = array() ) {
36 36
 
37
-		/*
37
+        /*
38 38
 		 * Allow to filter data on per-email basis.
39 39
 		 */
40
-		$data = apply_filters(
41
-			'getpaid_email_data',
42
-			array(
43
-				'to'          => array_filter( array_unique( wpinv_parse_list( $to ) ) ),
44
-				'subject'     => htmlspecialchars_decode( wp_strip_all_tags( $subject ), ENT_QUOTES ),
45
-				'email'       => apply_filters( 'wpinv_mail_content', $email ),
46
-				'headers'     => $this->get_headers(),
47
-				'attachments' => $attachments,
48
-			),
49
-			$this
50
-		);
40
+        $data = apply_filters(
41
+            'getpaid_email_data',
42
+            array(
43
+                'to'          => array_filter( array_unique( wpinv_parse_list( $to ) ) ),
44
+                'subject'     => htmlspecialchars_decode( wp_strip_all_tags( $subject ), ENT_QUOTES ),
45
+                'email'       => apply_filters( 'wpinv_mail_content', $email ),
46
+                'headers'     => $this->get_headers(),
47
+                'attachments' => $attachments,
48
+            ),
49
+            $this
50
+        );
51 51
 
52 52
         // Remove slashes.
53 53
         $data               = (array) wp_unslash( $data );
54 54
 
55 55
         // Cache it.
56
-		$this->wp_mail_data = $data;
56
+        $this->wp_mail_data = $data;
57 57
 
58
-		// Attach our own hooks.
59
-		$this->before_sending();
58
+        // Attach our own hooks.
59
+        $this->before_sending();
60 60
 
61 61
         $result = false;
62 62
 
63 63
         foreach ( $this->wp_mail_data['to'] as $to ) {
64
-			$result = $this->_send( $to, $data );
64
+            $result = $this->_send( $to, $data );
65 65
         }
66 66
 
67
-		// Remove our hooks.
68
-		$this->after_sending();
67
+        // Remove our hooks.
68
+        $this->after_sending();
69 69
 
70
-		$this->wp_mail_data = null;
70
+        $this->wp_mail_data = null;
71 71
 
72
-		return $result;
73
-	}
72
+        return $result;
73
+    }
74 74
 
75
-	/**
76
-	 * Does the actual sending.
75
+    /**
76
+     * Does the actual sending.
77 77
      *
78 78
      * @param string $to The recipient's email.
79 79
      * @param array $data The email's data.
@@ -81,81 +81,81 @@  discard block
 block discarded – undo
81 81
      * @param array $attachments The email attachments.
82 82
      *
83 83
      * @return bool
84
-	 */
85
-	protected function _send( $to, $data ) {
86
-
87
-		// Prepare the sending function.
88
-		$sending_function = apply_filters( 'getpaid_email_email_sending_function', 'wp_mail' );
89
-
90
-		// Send the actual email.
91
-		$result = call_user_func(
92
-			$sending_function,
93
-			$to,
94
-			html_entity_decode( $data['subject'], ENT_QUOTES, get_bloginfo( 'charset' ) ),
95
-			$data['email'],
96
-			$data['headers'],
97
-			$data['attachments']
98
-		);
99
-
100
-		if ( ! $result ) {
101
-			$log_message = wp_sprintf( __( "\nTime: %1\$s\nTo: %2\$s\nSubject: %3\$s\n", 'invoicing' ), date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ), $to, $data['subject'] );
102
-			wpinv_error_log( $log_message, __( 'Email from Invoicing plugin failed to send', 'invoicing' ), __FILE__, __LINE__ );
103
-		}
104
-
105
-		return $result;
106
-	}
84
+     */
85
+    protected function _send( $to, $data ) {
86
+
87
+        // Prepare the sending function.
88
+        $sending_function = apply_filters( 'getpaid_email_email_sending_function', 'wp_mail' );
89
+
90
+        // Send the actual email.
91
+        $result = call_user_func(
92
+            $sending_function,
93
+            $to,
94
+            html_entity_decode( $data['subject'], ENT_QUOTES, get_bloginfo( 'charset' ) ),
95
+            $data['email'],
96
+            $data['headers'],
97
+            $data['attachments']
98
+        );
99
+
100
+        if ( ! $result ) {
101
+            $log_message = wp_sprintf( __( "\nTime: %1\$s\nTo: %2\$s\nSubject: %3\$s\n", 'invoicing' ), date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ), $to, $data['subject'] );
102
+            wpinv_error_log( $log_message, __( 'Email from Invoicing plugin failed to send', 'invoicing' ), __FILE__, __LINE__ );
103
+        }
104
+
105
+        return $result;
106
+    }
107 107
 
108 108
     /**
109
-	 * Retrieves email headers.
110
-	 */
111
-	public function get_headers() {
109
+     * Retrieves email headers.
110
+     */
111
+    public function get_headers() {
112 112
 
113
-		$name       = $this->get_from_name();
114
-		$reply_to   = $this->get_reply_to();
115
-		$headers    = array( "Reply-To:$name <$reply_to>" );
113
+        $name       = $this->get_from_name();
114
+        $reply_to   = $this->get_reply_to();
115
+        $headers    = array( "Reply-To:$name <$reply_to>" );
116 116
 
117
-		return apply_filters( 'getpaid_email_headers', $headers, $this );
117
+        return apply_filters( 'getpaid_email_headers', $headers, $this );
118 118
 
119
-	}
119
+    }
120 120
 
121 121
     /**
122
-	 * Fires before an email is sent
123
-	 *
124
-	 * @since 1.0.0
125
-	 */
126
-	public function before_sending() {
122
+     * Fires before an email is sent
123
+     *
124
+     * @since 1.0.0
125
+     */
126
+    public function before_sending() {
127 127
 
128 128
         do_action( 'getpaid_before_send_email', $this );
129
-		add_filter( 'wp_mail_from', array( $this, 'get_from_address' ), 1000 );
130
-		add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ), 1000 );
131
-		add_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ), 1000 );
132
-		add_filter( 'wp_mail', array( $this, 'ensure_email_content' ), 1000 );
129
+        add_filter( 'wp_mail_from', array( $this, 'get_from_address' ), 1000 );
130
+        add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ), 1000 );
131
+        add_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ), 1000 );
132
+        add_filter( 'wp_mail', array( $this, 'ensure_email_content' ), 1000 );
133 133
 
134
-	}
134
+    }
135 135
 
136 136
     /**
137
-	 * Returns the from name.
138
-	 */
139
-	public function get_from_name() {
137
+     * Returns the from name.
138
+     */
139
+    public function get_from_name() {
140 140
 
141 141
         $from_name = wpinv_get_option( 'email_from_name', get_bloginfo( 'name' ) );
142 142
 
143
-		if ( empty( $from_name ) ) {
144
-			$from_name = get_bloginfo( 'name' );
143
+        if ( empty( $from_name ) ) {
144
+            $from_name = get_bloginfo( 'name' );
145 145
         }
146 146
 
147
-		return wp_specialchars_decode( $from_name, ENT_QUOTES );
147
+        return wp_specialchars_decode( $from_name, ENT_QUOTES );
148 148
     }
149 149
 
150 150
     /**
151
-	 * Returns the from email.
152
-	 */
153
-	public function get_from_address() {
151
+     * Returns the from email.
152
+     */
153
+    public function get_from_address() {
154 154
 
155 155
         $from_address = wpinv_get_option( 'email_from', $this->default_from_address() );
156 156
 
157
-		if ( ! is_email( $from_address ) ) {
158
-			$from_address = $this->default_from_address();
157
+        if ( ! is_email( $from_address ) ) {
158
+            $from_address = $this->default_from_address();
159 159
         }
160 160
 
161 161
         return $from_address;
@@ -163,75 +163,75 @@  discard block
 block discarded – undo
163 163
     }
164 164
 
165 165
     /**
166
-	 * The default emails from address.
167
-	 *
168
-	 * Defaults to wordpress@$sitename
169
-	 * Some hosts will block outgoing mail from this address if it doesn't exist,
170
-	 * but there's no easy alternative. Defaulting to admin_email might appear to be
171
-	 * another option, but some hosts may refuse to relay mail from an unknown domain.
172
-	 *
173
-	 */
174
-	public function default_from_address() {
175
-
176
-		// Get the site domain and get rid of www.
177
-		$sitename = strtolower( $_SERVER['SERVER_NAME'] );
178
-		if ( substr( $sitename, 0, 4 ) == 'www.' ) {
179
-			$sitename = substr( $sitename, 4 );
180
-		}
181
-
182
-		$from_email = 'wordpress@' . $sitename;
183
-
184
-		return apply_filters( 'getpaid_default_from_address', $from_email );
166
+     * The default emails from address.
167
+     *
168
+     * Defaults to wordpress@$sitename
169
+     * Some hosts will block outgoing mail from this address if it doesn't exist,
170
+     * but there's no easy alternative. Defaulting to admin_email might appear to be
171
+     * another option, but some hosts may refuse to relay mail from an unknown domain.
172
+     *
173
+     */
174
+    public function default_from_address() {
175
+
176
+        // Get the site domain and get rid of www.
177
+        $sitename = strtolower( $_SERVER['SERVER_NAME'] );
178
+        if ( substr( $sitename, 0, 4 ) == 'www.' ) {
179
+            $sitename = substr( $sitename, 4 );
180
+        }
181
+
182
+        $from_email = 'wordpress@' . $sitename;
183
+
184
+        return apply_filters( 'getpaid_default_from_address', $from_email );
185 185
 
186 186
     }
187 187
 
188 188
     /**
189
-	 * Get the email reply-to.
190
-	 *
191
-	 *
192
-	 * @return string The email reply-to address.
193
-	 */
194
-	public function get_reply_to() {
189
+     * Get the email reply-to.
190
+     *
191
+     *
192
+     * @return string The email reply-to address.
193
+     */
194
+    public function get_reply_to() {
195 195
 
196
-		$reply_to = current( wpinv_parse_list( wpinv_get_admin_email() ) );
196
+        $reply_to = current( wpinv_parse_list( wpinv_get_admin_email() ) );
197 197
 
198
-		if ( ! is_email( $reply_to ) ) {
199
-			$reply_to = get_option( 'admin_email' );
200
-		}
198
+        if ( ! is_email( $reply_to ) ) {
199
+            $reply_to = get_option( 'admin_email' );
200
+        }
201 201
 
202
-		return $reply_to;
202
+        return $reply_to;
203 203
     }
204 204
 
205 205
     /**
206
-	 * Get the email content type.
207
-	 *
208
-	 */
209
-	public function get_content_type() {
210
-		return apply_filters( 'getpaid_email_content_type', 'text/html', $this );
206
+     * Get the email content type.
207
+     *
208
+     */
209
+    public function get_content_type() {
210
+        return apply_filters( 'getpaid_email_content_type', 'text/html', $this );
211 211
     }
212 212
 
213 213
     /**
214
-	 * Ensures that our email messages are not messed up by template plugins.
215
-	 *
216
-	 * @return array wp_mail_data.
217
-	 */
218
-	public function ensure_email_content( $args ) {
219
-		$args['message'] = $this->wp_mail_data['email'];
220
-		return $args;
214
+     * Ensures that our email messages are not messed up by template plugins.
215
+     *
216
+     * @return array wp_mail_data.
217
+     */
218
+    public function ensure_email_content( $args ) {
219
+        $args['message'] = $this->wp_mail_data['email'];
220
+        return $args;
221 221
     }
222 222
 
223 223
     /**
224
-	 * A little house keeping after an email is sent.
225
-	 *
226
- 	 */
227
-	public function after_sending() {
224
+     * A little house keeping after an email is sent.
225
+     *
226
+     */
227
+    public function after_sending() {
228 228
 
229 229
         do_action( 'getpaid_after_send_email', $this->wp_mail_data );
230
-		remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ), 1000 );
231
-		remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ), 1000 );
232
-		remove_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ), 1000 );
233
-		remove_filter( 'wp_mail', array( $this, 'ensure_email_content' ), 1000 );
230
+        remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ), 1000 );
231
+        remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ), 1000 );
232
+        remove_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ), 1000 );
233
+        remove_filter( 'wp_mail', array( $this, 'ensure_email_content' ), 1000 );
234 234
 
235
-	}
235
+    }
236 236
 
237 237
 }
Please login to merge, or discard this patch.
invoicing.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.6.12' );
26
+    define( 'WPINV_VERSION', '2.6.12' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.
includes/payments/class-getpaid-checkout.php 1 patch
Indentation   +303 added lines, -303 removed lines patch added patch discarded remove patch
@@ -12,184 +12,184 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Checkout {
14 14
 
15
-	/**
16
-	 * @var GetPaid_Payment_Form_Submission
17
-	 */
18
-	protected $payment_form_submission;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 * @param GetPaid_Payment_Form_Submission $submission
24
-	 */
25
-	public function __construct( $submission ) {
26
-		$this->payment_form_submission = $submission;
27
-	}
28
-
29
-	/**
30
-	 * Processes the checkout.
31
-	 *
32
-	 */
33
-	public function process_checkout() {
34
-
35
-		// Validate the submission.
36
-		$this->validate_submission();
37
-
38
-		// Prepare the invoice.
39
-		$items      = $this->get_submission_items();
40
-		$invoice    = $this->get_submission_invoice();
41
-		$invoice    = $this->process_submission_invoice( $invoice, $items );
42
-		$prepared   = $this->prepare_submission_data_for_saving();
43
-
44
-		$this->prepare_billing_info( $invoice );
45
-
46
-		$shipping   = $this->prepare_shipping_info( $invoice );
47
-
48
-		// Save the invoice.
49
-		$invoice->set_is_viewed( true );
50
-		$invoice->recalculate_total();
15
+    /**
16
+     * @var GetPaid_Payment_Form_Submission
17
+     */
18
+    protected $payment_form_submission;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     * @param GetPaid_Payment_Form_Submission $submission
24
+     */
25
+    public function __construct( $submission ) {
26
+        $this->payment_form_submission = $submission;
27
+    }
28
+
29
+    /**
30
+     * Processes the checkout.
31
+     *
32
+     */
33
+    public function process_checkout() {
34
+
35
+        // Validate the submission.
36
+        $this->validate_submission();
37
+
38
+        // Prepare the invoice.
39
+        $items      = $this->get_submission_items();
40
+        $invoice    = $this->get_submission_invoice();
41
+        $invoice    = $this->process_submission_invoice( $invoice, $items );
42
+        $prepared   = $this->prepare_submission_data_for_saving();
43
+
44
+        $this->prepare_billing_info( $invoice );
45
+
46
+        $shipping   = $this->prepare_shipping_info( $invoice );
47
+
48
+        // Save the invoice.
49
+        $invoice->set_is_viewed( true );
50
+        $invoice->recalculate_total();
51 51
         $invoice->save();
52 52
 
53
-		do_action( 'getpaid_checkout_invoice_updated', $invoice );
53
+        do_action( 'getpaid_checkout_invoice_updated', $invoice );
54 54
 
55
-		// Send to the gateway.
56
-		$this->post_process_submission( $invoice, $prepared, $shipping );
57
-	}
55
+        // Send to the gateway.
56
+        $this->post_process_submission( $invoice, $prepared, $shipping );
57
+    }
58 58
 
59
-	/**
60
-	 * Validates the submission.
61
-	 *
62
-	 */
63
-	protected function validate_submission() {
59
+    /**
60
+     * Validates the submission.
61
+     *
62
+     */
63
+    protected function validate_submission() {
64 64
 
65
-		$submission = $this->payment_form_submission;
66
-		$data       = $submission->get_data();
65
+        $submission = $this->payment_form_submission;
66
+        $data       = $submission->get_data();
67 67
 
68
-		// Do we have an error?
68
+        // Do we have an error?
69 69
         if ( ! empty( $submission->last_error ) ) {
70
-			wp_send_json_error( $submission->last_error );
70
+            wp_send_json_error( $submission->last_error );
71 71
         }
72 72
 
73
-		// We need a billing email.
73
+        // We need a billing email.
74 74
         if ( ! $submission->has_billing_email() ) {
75 75
             wp_send_json_error( __( 'Provide a valid billing email.', 'invoicing' ) );
76
-		}
76
+        }
77 77
 
78
-		// Non-recurring gateways should not be allowed to process recurring invoices.
79
-		if ( $submission->should_collect_payment_details() && $submission->has_recurring && ! wpinv_gateway_support_subscription( $data['wpi-gateway'] ) ) {
80
-			wp_send_json_error( __( 'The selected payment gateway does not support subscription payments.', 'invoicing' ) );
81
-		}
78
+        // Non-recurring gateways should not be allowed to process recurring invoices.
79
+        if ( $submission->should_collect_payment_details() && $submission->has_recurring && ! wpinv_gateway_support_subscription( $data['wpi-gateway'] ) ) {
80
+            wp_send_json_error( __( 'The selected payment gateway does not support subscription payments.', 'invoicing' ) );
81
+        }
82 82
 
83
-		// Ensure the gateway is active.
84
-		if ( $submission->should_collect_payment_details() && ! wpinv_is_gateway_active( $data['wpi-gateway'] ) ) {
85
-			wp_send_json_error( __( 'The selected payment gateway is not active', 'invoicing' ) );
86
-		}
83
+        // Ensure the gateway is active.
84
+        if ( $submission->should_collect_payment_details() && ! wpinv_is_gateway_active( $data['wpi-gateway'] ) ) {
85
+            wp_send_json_error( __( 'The selected payment gateway is not active', 'invoicing' ) );
86
+        }
87 87
 
88
-		// Clear any existing errors.
89
-		wpinv_clear_errors();
88
+        // Clear any existing errors.
89
+        wpinv_clear_errors();
90 90
 
91
-		// Allow themes and plugins to hook to errors
92
-		do_action( 'getpaid_checkout_error_checks', $submission );
91
+        // Allow themes and plugins to hook to errors
92
+        do_action( 'getpaid_checkout_error_checks', $submission );
93 93
 
94
-		// Do we have any errors?
94
+        // Do we have any errors?
95 95
         if ( wpinv_get_errors() ) {
96 96
             wp_send_json_error( getpaid_get_errors_html() );
97
-		}
97
+        }
98 98
 
99
-	}
99
+    }
100 100
 
101
-	/**
102
-	 * Retrieves submission items.
103
-	 *
104
-	 * @return GetPaid_Form_Item[]
105
-	 */
106
-	protected function get_submission_items() {
101
+    /**
102
+     * Retrieves submission items.
103
+     *
104
+     * @return GetPaid_Form_Item[]
105
+     */
106
+    protected function get_submission_items() {
107 107
 
108
-		$items = $this->payment_form_submission->get_items();
108
+        $items = $this->payment_form_submission->get_items();
109 109
 
110 110
         // Ensure that we have items.
111 111
         if ( empty( $items ) && ! $this->payment_form_submission->has_fees() ) {
112 112
             wp_send_json_error( __( 'Please provide at least one item or amount.', 'invoicing' ) );
113
-		}
114
-
115
-		return $items;
116
-	}
117
-
118
-	/**
119
-	 * Retrieves submission invoice.
120
-	 *
121
-	 * @return WPInv_Invoice
122
-	 */
123
-	protected function get_submission_invoice() {
124
-		$submission = $this->payment_form_submission;
125
-
126
-		if ( ! $submission->has_invoice() ) {
127
-			$invoice = new WPInv_Invoice();
128
-			$invoice->set_created_via( 'payment_form' );
129
-			return $invoice;
130 113
         }
131 114
 
132
-		$invoice = $submission->get_invoice();
115
+        return $items;
116
+    }
133 117
 
134
-		// Make sure that it is neither paid or refunded.
135
-		if ( $invoice->is_paid() || $invoice->is_refunded() ) {
136
-			wp_send_json_error( __( 'This invoice has already been paid for.', 'invoicing' ) );
137
-		}
118
+    /**
119
+     * Retrieves submission invoice.
120
+     *
121
+     * @return WPInv_Invoice
122
+     */
123
+    protected function get_submission_invoice() {
124
+        $submission = $this->payment_form_submission;
138 125
 
139
-		return $invoice;
140
-	}
126
+        if ( ! $submission->has_invoice() ) {
127
+            $invoice = new WPInv_Invoice();
128
+            $invoice->set_created_via( 'payment_form' );
129
+            return $invoice;
130
+        }
141 131
 
142
-	/**
143
-	 * Processes the submission invoice.
144
-	 *
145
-	 * @param WPInv_Invoice $invoice
146
-	 * @param GetPaid_Form_Item[] $items
147
-	 * @return WPInv_Invoice
148
-	 */
149
-	protected function process_submission_invoice( $invoice, $items ) {
132
+        $invoice = $submission->get_invoice();
150 133
 
151
-		$submission = $this->payment_form_submission;
134
+        // Make sure that it is neither paid or refunded.
135
+        if ( $invoice->is_paid() || $invoice->is_refunded() ) {
136
+            wp_send_json_error( __( 'This invoice has already been paid for.', 'invoicing' ) );
137
+        }
152 138
 
153
-		// Set-up the invoice details.
154
-		$invoice->set_email( sanitize_email( $submission->get_billing_email() ) );
155
-		$invoice->set_user_id( $this->get_submission_customer() );
156
-		$invoice->set_payment_form( absint( $submission->get_payment_form()->get_id() ) );
139
+        return $invoice;
140
+    }
141
+
142
+    /**
143
+     * Processes the submission invoice.
144
+     *
145
+     * @param WPInv_Invoice $invoice
146
+     * @param GetPaid_Form_Item[] $items
147
+     * @return WPInv_Invoice
148
+     */
149
+    protected function process_submission_invoice( $invoice, $items ) {
150
+
151
+        $submission = $this->payment_form_submission;
152
+
153
+        // Set-up the invoice details.
154
+        $invoice->set_email( sanitize_email( $submission->get_billing_email() ) );
155
+        $invoice->set_user_id( $this->get_submission_customer() );
156
+        $invoice->set_payment_form( absint( $submission->get_payment_form()->get_id() ) );
157 157
         $invoice->set_items( $items );
158 158
         $invoice->set_fees( $submission->get_fees() );
159 159
         $invoice->set_taxes( $submission->get_taxes() );
160
-		$invoice->set_discounts( $submission->get_discounts() );
161
-		$invoice->set_gateway( $submission->get_field( 'wpi-gateway' ) );
162
-		$invoice->set_currency( $submission->get_currency() );
160
+        $invoice->set_discounts( $submission->get_discounts() );
161
+        $invoice->set_gateway( $submission->get_field( 'wpi-gateway' ) );
162
+        $invoice->set_currency( $submission->get_currency() );
163 163
 
164
-		if ( $submission->has_shipping() ) {
165
-			$invoice->set_shipping( $submission->get_shipping() );
166
-		}
164
+        if ( $submission->has_shipping() ) {
165
+            $invoice->set_shipping( $submission->get_shipping() );
166
+        }
167 167
 
168
-		$address_confirmed = $submission->get_field( 'confirm-address' );
169
-		$invoice->set_address_confirmed( ! empty( $address_confirmed ) );
168
+        $address_confirmed = $submission->get_field( 'confirm-address' );
169
+        $invoice->set_address_confirmed( ! empty( $address_confirmed ) );
170 170
 
171
-		if ( $submission->has_discount_code() ) {
171
+        if ( $submission->has_discount_code() ) {
172 172
             $invoice->set_discount_code( $submission->get_discount_code() );
173
-		}
174
-
175
-		getpaid_maybe_add_default_address( $invoice );
176
-		return $invoice;
177
-	}
178
-
179
-	/**
180
-	 * Retrieves the submission's customer.
181
-	 *
182
-	 * @return int The customer id.
183
-	 */
184
-	protected function get_submission_customer() {
185
-		$submission = $this->payment_form_submission;
186
-
187
-		// If this is an existing invoice...
188
-		if ( $submission->has_invoice() ) {
189
-			return $submission->get_invoice()->get_user_id();
190
-		}
191
-
192
-		// (Maybe) create the user.
173
+        }
174
+
175
+        getpaid_maybe_add_default_address( $invoice );
176
+        return $invoice;
177
+    }
178
+
179
+    /**
180
+     * Retrieves the submission's customer.
181
+     *
182
+     * @return int The customer id.
183
+     */
184
+    protected function get_submission_customer() {
185
+        $submission = $this->payment_form_submission;
186
+
187
+        // If this is an existing invoice...
188
+        if ( $submission->has_invoice() ) {
189
+            return $submission->get_invoice()->get_user_id();
190
+        }
191
+
192
+        // (Maybe) create the user.
193 193
         $user = get_current_user_id();
194 194
 
195 195
         if ( empty( $user ) ) {
@@ -197,16 +197,16 @@  discard block
 block discarded – undo
197 197
         }
198 198
 
199 199
         if ( empty( $user ) ) {
200
-			$name = array( $submission->get_field( 'wpinv_first_name', 'billing' ), $submission->get_field( 'wpinv_last_name', 'billing' ) );
201
-			$name = implode( '', array_filter( $name ) );
200
+            $name = array( $submission->get_field( 'wpinv_first_name', 'billing' ), $submission->get_field( 'wpinv_last_name', 'billing' ) );
201
+            $name = implode( '', array_filter( $name ) );
202 202
             $user = wpinv_create_user( $submission->get_billing_email(), $name );
203 203
 
204
-			// (Maybe) send new user notification.
205
-			$should_send_notification = wpinv_get_option( 'disable_new_user_emails' );
206
-			if ( ! empty( $user ) && is_numeric( $user ) && apply_filters( 'getpaid_send_new_user_notification', empty( $should_send_notification ), $user ) ) {
207
-				wp_send_new_user_notifications( $user, 'user' );
208
-			}
209
-		}
204
+            // (Maybe) send new user notification.
205
+            $should_send_notification = wpinv_get_option( 'disable_new_user_emails' );
206
+            if ( ! empty( $user ) && is_numeric( $user ) && apply_filters( 'getpaid_send_new_user_notification', empty( $should_send_notification ), $user ) ) {
207
+                wp_send_new_user_notifications( $user, 'user' );
208
+            }
209
+        }
210 210
 
211 211
         if ( is_wp_error( $user ) ) {
212 212
             wp_send_json_error( $user->get_error_message() );
@@ -214,49 +214,49 @@  discard block
 block discarded – undo
214 214
 
215 215
         if ( is_numeric( $user ) ) {
216 216
             return $user;
217
-		}
217
+        }
218 218
 
219
-		return $user->ID;
219
+        return $user->ID;
220 220
 
221
-	}
221
+    }
222 222
 
223
-	/**
223
+    /**
224 224
      * Prepares submission data for saving to the database.
225 225
      *
226
-	 * @return array
226
+     * @return array
227 227
      */
228 228
     public function prepare_submission_data_for_saving() {
229 229
 
230
-		$submission = $this->payment_form_submission;
230
+        $submission = $this->payment_form_submission;
231 231
 
232
-		// Prepared submission details.
232
+        // Prepared submission details.
233 233
         $prepared = array(
234
-			'all'  => array(),
235
-			'meta' => array(),
236
-		);
234
+            'all'  => array(),
235
+            'meta' => array(),
236
+        );
237 237
 
238 238
         // Raw submission details.
239
-		$data     = $submission->get_data();
239
+        $data     = $submission->get_data();
240 240
 
241
-		// Loop through the submitted details.
241
+        // Loop through the submitted details.
242 242
         foreach ( $submission->get_payment_form()->get_elements() as $field ) {
243 243
 
244
-			// Skip premade fields.
244
+            // Skip premade fields.
245 245
             if ( ! empty( $field['premade'] ) ) {
246 246
                 continue;
247 247
             }
248 248
 
249
-			// Ensure address is provided.
250
-			if ( $field['type'] == 'address' ) {
249
+            // Ensure address is provided.
250
+            if ( $field['type'] == 'address' ) {
251 251
                 $address_type = isset( $field['address_type'] ) && 'shipping' === $field['address_type'] ? 'shipping' : 'billing';
252 252
 
253
-				foreach ( $field['fields'] as $address_field ) {
253
+                foreach ( $field['fields'] as $address_field ) {
254 254
 
255
-					if ( ! empty( $address_field['visible'] ) && ! empty( $address_field['required'] ) && '' === trim( $_POST[ $address_type ][ $address_field['name'] ] ) ) {
256
-						wp_send_json_error( __( 'Please fill all required fields.', 'invoicing' ) );
257
-					}
258
-			}
259
-		}
255
+                    if ( ! empty( $address_field['visible'] ) && ! empty( $address_field['required'] ) && '' === trim( $_POST[ $address_type ][ $address_field['name'] ] ) ) {
256
+                        wp_send_json_error( __( 'Please fill all required fields.', 'invoicing' ) );
257
+                    }
258
+            }
259
+        }
260 260
 
261 261
             // If it is required and not set, abort.
262 262
             if ( ! $submission->is_required_field_set( $field ) ) {
@@ -266,31 +266,31 @@  discard block
 block discarded – undo
266 266
             // Handle misc fields.
267 267
             if ( isset( $data[ $field['id'] ] ) ) {
268 268
 
269
-				// Uploads.
270
-				if ( $field['type'] == 'file_upload' ) {
271
-					$max_file_num = empty( $field['max_file_num'] ) ? 1 : absint( $field['max_file_num'] );
269
+                // Uploads.
270
+                if ( $field['type'] == 'file_upload' ) {
271
+                    $max_file_num = empty( $field['max_file_num'] ) ? 1 : absint( $field['max_file_num'] );
272 272
 
273
-					if ( count( $data[ $field['id'] ] ) > $max_file_num ) {
274
-						wp_send_json_error( __( 'Maximum number of allowed files exceeded.', 'invoicing' ) );
275
-					}
273
+                    if ( count( $data[ $field['id'] ] ) > $max_file_num ) {
274
+                        wp_send_json_error( __( 'Maximum number of allowed files exceeded.', 'invoicing' ) );
275
+                    }
276 276
 
277
-					$value = array();
277
+                    $value = array();
278 278
 
279
-					foreach ( $data[ $field['id'] ] as $url => $name ) {
280
-						$value[] = sprintf(
281
-							'<a href="%s" target="_blank">%s</a>',
282
-							esc_url_raw( $url ),
283
-							esc_html( $name )
284
-						);
285
-					}
279
+                    foreach ( $data[ $field['id'] ] as $url => $name ) {
280
+                        $value[] = sprintf(
281
+                            '<a href="%s" target="_blank">%s</a>',
282
+                            esc_url_raw( $url ),
283
+                            esc_html( $name )
284
+                        );
285
+                    }
286 286
 
287
-					$value = implode( ' | ', $value );
287
+                    $value = implode( ' | ', $value );
288 288
 
289
-				} elseif ( $field['type'] == 'checkbox' ) {
290
-					$value = isset( $data[ $field['id'] ] ) ? __( 'Yes', 'invoicing' ) : __( 'No', 'invoicing' );
291
-				} else {
292
-					$value = wp_kses_post( $data[ $field['id'] ] );
293
-				}
289
+                } elseif ( $field['type'] == 'checkbox' ) {
290
+                    $value = isset( $data[ $field['id'] ] ) ? __( 'Yes', 'invoicing' ) : __( 'No', 'invoicing' );
291
+                } else {
292
+                    $value = wp_kses_post( $data[ $field['id'] ] );
293
+                }
294 294
 
295 295
                 $label = $field['id'];
296 296
 
@@ -298,188 +298,188 @@  discard block
 block discarded – undo
298 298
                     $label = $field['label'];
299 299
                 }
300 300
 
301
-				if ( ! empty( $field['add_meta'] ) ) {
302
-					$prepared['meta'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
303
-				}
304
-				$prepared['all'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
301
+                if ( ! empty( $field['add_meta'] ) ) {
302
+                    $prepared['meta'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
303
+                }
304
+                $prepared['all'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
305 305
 
306 306
             }
307 307
 }
308 308
 
309
-		return $prepared;
309
+        return $prepared;
310 310
 
311
-	}
311
+    }
312 312
 
313
-	/**
313
+    /**
314 314
      * Retrieves address details.
315 315
      *
316
-	 * @return array
317
-	 * @param WPInv_Invoice $invoice
318
-	 * @param string $type
316
+     * @return array
317
+     * @param WPInv_Invoice $invoice
318
+     * @param string $type
319 319
      */
320 320
     public function prepare_address_details( $invoice, $type = 'billing' ) {
321 321
 
322
-		$data     = $this->payment_form_submission->get_data();
323
-		$type     = sanitize_key( $type );
324
-		$address  = array();
325
-		$prepared = array();
322
+        $data     = $this->payment_form_submission->get_data();
323
+        $type     = sanitize_key( $type );
324
+        $address  = array();
325
+        $prepared = array();
326 326
 
327
-		if ( ! empty( $data[ $type ] ) ) {
328
-			$address = $data[ $type ];
329
-		}
327
+        if ( ! empty( $data[ $type ] ) ) {
328
+            $address = $data[ $type ];
329
+        }
330 330
 
331
-		// Clean address details.
332
-		foreach ( $address as $key => $value ) {
333
-			$key             = sanitize_key( $key );
334
-			$key             = str_replace( 'wpinv_', '', $key );
335
-			$value           = wpinv_clean( $value );
336
-			$prepared[ $key ] = apply_filters( "getpaid_checkout_{$type}_address_$key", $value, $this->payment_form_submission, $invoice );
337
-		}
331
+        // Clean address details.
332
+        foreach ( $address as $key => $value ) {
333
+            $key             = sanitize_key( $key );
334
+            $key             = str_replace( 'wpinv_', '', $key );
335
+            $value           = wpinv_clean( $value );
336
+            $prepared[ $key ] = apply_filters( "getpaid_checkout_{$type}_address_$key", $value, $this->payment_form_submission, $invoice );
337
+        }
338 338
 
339
-		// Filter address details.
340
-		$prepared = apply_filters( "getpaid_checkout_{$type}_address", $prepared, $this->payment_form_submission, $invoice );
339
+        // Filter address details.
340
+        $prepared = apply_filters( "getpaid_checkout_{$type}_address", $prepared, $this->payment_form_submission, $invoice );
341 341
 
342
-		// Remove non-whitelisted values.
343
-		return array_filter( $prepared, 'getpaid_is_address_field_whitelisted', ARRAY_FILTER_USE_KEY );
342
+        // Remove non-whitelisted values.
343
+        return array_filter( $prepared, 'getpaid_is_address_field_whitelisted', ARRAY_FILTER_USE_KEY );
344 344
 
345
-	}
345
+    }
346 346
 
347
-	/**
347
+    /**
348 348
      * Prepares the billing details.
349 349
      *
350
-	 * @return array
351
-	 * @param WPInv_Invoice $invoice
350
+     * @return array
351
+     * @param WPInv_Invoice $invoice
352 352
      */
353 353
     protected function prepare_billing_info( &$invoice ) {
354 354
 
355
-		$billing_address = $this->prepare_address_details( $invoice, 'billing' );
355
+        $billing_address = $this->prepare_address_details( $invoice, 'billing' );
356 356
 
357
-		// Update the invoice with the billing details.
358
-		$invoice->set_props( $billing_address );
357
+        // Update the invoice with the billing details.
358
+        $invoice->set_props( $billing_address );
359 359
 
360
-	}
360
+    }
361 361
 
362
-	/**
362
+    /**
363 363
      * Prepares the shipping details.
364 364
      *
365
-	 * @return array
366
-	 * @param WPInv_Invoice $invoice
365
+     * @return array
366
+     * @param WPInv_Invoice $invoice
367 367
      */
368 368
     protected function prepare_shipping_info( $invoice ) {
369 369
 
370
-		$data = $this->payment_form_submission->get_data();
370
+        $data = $this->payment_form_submission->get_data();
371 371
 
372
-		if ( empty( $data['same-shipping-address'] ) ) {
373
-			return $this->prepare_address_details( $invoice, 'shipping' );
374
-		}
372
+        if ( empty( $data['same-shipping-address'] ) ) {
373
+            return $this->prepare_address_details( $invoice, 'shipping' );
374
+        }
375 375
 
376
-		return $this->prepare_address_details( $invoice, 'billing' );
376
+        return $this->prepare_address_details( $invoice, 'billing' );
377 377
 
378
-	}
378
+    }
379 379
 
380
-	/**
381
-	 * Confirms the submission is valid and send users to the gateway.
382
-	 *
383
-	 * @param WPInv_Invoice $invoice
384
-	 * @param array $prepared_payment_form_data
385
-	 * @param array $shipping
386
-	 */
387
-	protected function post_process_submission( $invoice, $prepared_payment_form_data, $shipping ) {
380
+    /**
381
+     * Confirms the submission is valid and send users to the gateway.
382
+     *
383
+     * @param WPInv_Invoice $invoice
384
+     * @param array $prepared_payment_form_data
385
+     * @param array $shipping
386
+     */
387
+    protected function post_process_submission( $invoice, $prepared_payment_form_data, $shipping ) {
388 388
 
389
-		// Ensure the invoice exists.
389
+        // Ensure the invoice exists.
390 390
         if ( ! $invoice->exists() ) {
391 391
             wp_send_json_error( __( 'An error occured while saving your invoice. Please try again.', 'invoicing' ) );
392 392
         }
393 393
 
394
-		// Save payment form data.
395
-		$prepared_payment_form_data = apply_filters( 'getpaid_prepared_payment_form_data', $prepared_payment_form_data, $invoice );
394
+        // Save payment form data.
395
+        $prepared_payment_form_data = apply_filters( 'getpaid_prepared_payment_form_data', $prepared_payment_form_data, $invoice );
396 396
         delete_post_meta( $invoice->get_id(), 'payment_form_data' );
397
-		delete_post_meta( $invoice->get_id(), 'additional_meta_data' );
398
-		if ( ! empty( $prepared_payment_form_data ) ) {
397
+        delete_post_meta( $invoice->get_id(), 'additional_meta_data' );
398
+        if ( ! empty( $prepared_payment_form_data ) ) {
399 399
 
400
-			if ( ! empty( $prepared_payment_form_data['all'] ) ) {
401
-				update_post_meta( $invoice->get_id(), 'payment_form_data', $prepared_payment_form_data['all'] );
402
-			}
400
+            if ( ! empty( $prepared_payment_form_data['all'] ) ) {
401
+                update_post_meta( $invoice->get_id(), 'payment_form_data', $prepared_payment_form_data['all'] );
402
+            }
403 403
 
404
-			if ( ! empty( $prepared_payment_form_data['meta'] ) ) {
405
-				update_post_meta( $invoice->get_id(), 'additional_meta_data', $prepared_payment_form_data['meta'] );
406
-			}
404
+            if ( ! empty( $prepared_payment_form_data['meta'] ) ) {
405
+                update_post_meta( $invoice->get_id(), 'additional_meta_data', $prepared_payment_form_data['meta'] );
406
+            }
407 407
 }
408 408
 
409
-		// Save payment form data.
410
-		$shipping = apply_filters( 'getpaid_checkout_shipping_details', $shipping, $this->payment_form_submission );
409
+        // Save payment form data.
410
+        $shipping = apply_filters( 'getpaid_checkout_shipping_details', $shipping, $this->payment_form_submission );
411 411
         if ( ! empty( $shipping ) ) {
412 412
             update_post_meta( $invoice->get_id(), 'shipping_address', $shipping );
413
-		}
413
+        }
414 414
 
415
-		// Backwards compatibility.
415
+        // Backwards compatibility.
416 416
         add_filter( 'wp_redirect', array( $this, 'send_redirect_response' ) );
417 417
 
418
-		$this->process_payment( $invoice );
418
+        $this->process_payment( $invoice );
419 419
 
420 420
         // If we are here, there was an error.
421
-		wpinv_send_back_to_checkout( $invoice );
421
+        wpinv_send_back_to_checkout( $invoice );
422 422
 
423
-	}
423
+    }
424 424
 
425
-	/**
426
-	 * Processes the actual payment.
427
-	 *
428
-	 * @param WPInv_Invoice $invoice
429
-	 */
430
-	protected function process_payment( $invoice ) {
425
+    /**
426
+     * Processes the actual payment.
427
+     *
428
+     * @param WPInv_Invoice $invoice
429
+     */
430
+    protected function process_payment( $invoice ) {
431 431
 
432
-		// Clear any checkout errors.
433
-		wpinv_clear_errors();
432
+        // Clear any checkout errors.
433
+        wpinv_clear_errors();
434 434
 
435
-		// No need to send free invoices to the gateway.
436
-		if ( $invoice->is_free() ) {
437
-			$this->process_free_payment( $invoice );
438
-		}
435
+        // No need to send free invoices to the gateway.
436
+        if ( $invoice->is_free() ) {
437
+            $this->process_free_payment( $invoice );
438
+        }
439 439
 
440
-		$submission = $this->payment_form_submission;
440
+        $submission = $this->payment_form_submission;
441 441
 
442
-		// Fires before sending to the gateway.
443
-		do_action( 'getpaid_checkout_before_gateway', $invoice, $submission );
442
+        // Fires before sending to the gateway.
443
+        do_action( 'getpaid_checkout_before_gateway', $invoice, $submission );
444 444
 
445
-		// Allow the sumission data to be modified before it is sent to the gateway.
446
-		$submission_data    = $submission->get_data();
447
-		$submission_gateway = apply_filters( 'getpaid_gateway_submission_gateway', $invoice->get_gateway(), $submission, $invoice );
448
-		$submission_data    = apply_filters( 'getpaid_gateway_submission_data', $submission_data, $submission, $invoice );
445
+        // Allow the sumission data to be modified before it is sent to the gateway.
446
+        $submission_data    = $submission->get_data();
447
+        $submission_gateway = apply_filters( 'getpaid_gateway_submission_gateway', $invoice->get_gateway(), $submission, $invoice );
448
+        $submission_data    = apply_filters( 'getpaid_gateway_submission_data', $submission_data, $submission, $invoice );
449 449
 
450
-		// Validate the currency.
451
-		if ( ! apply_filters( "getpaid_gateway_{$submission_gateway}_is_valid_for_currency", true, $invoice->get_currency() ) ) {
452
-			wpinv_set_error( 'invalid_currency', __( 'The chosen payment gateway does not support this currency', 'invoicing' ) );
453
-		}
450
+        // Validate the currency.
451
+        if ( ! apply_filters( "getpaid_gateway_{$submission_gateway}_is_valid_for_currency", true, $invoice->get_currency() ) ) {
452
+            wpinv_set_error( 'invalid_currency', __( 'The chosen payment gateway does not support this currency', 'invoicing' ) );
453
+        }
454 454
 
455
-		// Check to see if we have any errors.
456
-		if ( wpinv_get_errors() ) {
457
-			wpinv_send_back_to_checkout( $invoice );
458
-		}
455
+        // Check to see if we have any errors.
456
+        if ( wpinv_get_errors() ) {
457
+            wpinv_send_back_to_checkout( $invoice );
458
+        }
459 459
 
460
-		// Send info to the gateway for payment processing
461
-		do_action( "getpaid_gateway_$submission_gateway", $invoice, $submission_data, $submission );
460
+        // Send info to the gateway for payment processing
461
+        do_action( "getpaid_gateway_$submission_gateway", $invoice, $submission_data, $submission );
462 462
 
463
-		// Backwards compatibility.
464
-		wpinv_send_to_gateway( $submission_gateway, $invoice );
463
+        // Backwards compatibility.
464
+        wpinv_send_to_gateway( $submission_gateway, $invoice );
465 465
 
466
-	}
466
+    }
467 467
 
468
-	/**
469
-	 * Marks the invoice as paid in case the checkout is free.
470
-	 *
471
-	 * @param WPInv_Invoice $invoice
472
-	 */
473
-	protected function process_free_payment( $invoice ) {
468
+    /**
469
+     * Marks the invoice as paid in case the checkout is free.
470
+     *
471
+     * @param WPInv_Invoice $invoice
472
+     */
473
+    protected function process_free_payment( $invoice ) {
474 474
 
475
-		$invoice->set_gateway( 'none' );
476
-		$invoice->add_note( __( "This is a free invoice and won't be sent to the payment gateway", 'invoicing' ), false, false, true );
477
-		$invoice->mark_paid();
478
-		wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) );
475
+        $invoice->set_gateway( 'none' );
476
+        $invoice->add_note( __( "This is a free invoice and won't be sent to the payment gateway", 'invoicing' ), false, false, true );
477
+        $invoice->mark_paid();
478
+        wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) );
479 479
 
480
-	}
480
+    }
481 481
 
482
-	/**
482
+    /**
483 483
      * Sends a redrect response to payment details.
484 484
      *
485 485
      */
Please login to merge, or discard this patch.