@@ -13,7 +13,7 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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…', '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…', 'enhanced select', 'aui' ), |
|
2253 | - 'i18n_searching' => _x( 'Searching…', '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…', '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…', 'enhanced select', 'aui' ), |
|
2253 | + 'i18n_searching' => _x( 'Searching…', '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 |
||
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 |
@@ -1,7 +1,7 @@ discard block |
||
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 |
||
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 |
@@ -13,30 +13,30 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | } |
@@ -14,143 +14,143 @@ discard block |
||
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 |
||
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 |
||
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 | } |
@@ -12,489 +12,489 @@ |
||
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 | } |
@@ -12,47 +12,47 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
242 | 242 | |
243 | 243 | <?php |
244 | 244 | |
245 | - } |
|
245 | + } |
|
246 | 246 | |
247 | 247 | } |
@@ -13,17 +13,17 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 | } |
@@ -19,16 +19,16 @@ discard block |
||
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 |
||
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 | /** |
@@ -12,184 +12,184 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | */ |