@@ -15,125 +15,125 @@ discard block |
||
15 | 15 | */ |
16 | 16 | class WPInv_Subscription extends GetPaid_Data { |
17 | 17 | |
18 | - /** |
|
19 | - * Which data store to load. |
|
20 | - * |
|
21 | - * @var string |
|
22 | - */ |
|
23 | - protected $data_store_name = 'subscription'; |
|
24 | - |
|
25 | - /** |
|
26 | - * This is the name of this object type. |
|
27 | - * |
|
28 | - * @var string |
|
29 | - */ |
|
30 | - protected $object_type = 'subscription'; |
|
31 | - |
|
32 | - /** |
|
33 | - * Item Data array. This is the core item data exposed in APIs. |
|
34 | - * |
|
35 | - * @since 1.0.19 |
|
36 | - * @var array |
|
37 | - */ |
|
38 | - protected $data = array( |
|
39 | - 'customer_id' => 0, |
|
40 | - 'frequency' => 1, |
|
41 | - 'period' => 'D', |
|
42 | - 'initial_amount' => null, |
|
43 | - 'recurring_amount' => null, |
|
44 | - 'bill_times' => 0, |
|
45 | - 'transaction_id' => '', |
|
46 | - 'parent_payment_id' => null, |
|
47 | - 'product_id' => 0, |
|
48 | - 'created' => '0000-00-00 00:00:00', |
|
49 | - 'expiration' => '0000-00-00 00:00:00', |
|
50 | - 'trial_period' => '', |
|
51 | - 'status' => 'pending', |
|
52 | - 'profile_id' => '', |
|
53 | - 'gateway' => '', |
|
54 | - 'customer' => '', |
|
55 | - ); |
|
56 | - |
|
57 | - /** |
|
58 | - * Stores the status transition information. |
|
59 | - * |
|
60 | - * @since 1.0.19 |
|
61 | - * @var bool |
|
62 | - */ |
|
63 | - protected $status_transition = false; |
|
64 | - |
|
65 | - /** |
|
66 | - * Get the subscription if ID is passed, otherwise the subscription is new and empty. |
|
67 | - * |
|
68 | - * @param int|string|object|WPInv_Subscription $subscription Subscription id, profile_id, or object to read. |
|
69 | - * @param bool $deprecated |
|
70 | - */ |
|
71 | - function __construct( $subscription = 0, $deprecated = false ) { |
|
72 | - |
|
73 | - parent::__construct( $subscription ); |
|
74 | - |
|
75 | - if ( ! $deprecated && ! empty( $subscription ) && is_numeric( $subscription ) ) { |
|
76 | - $this->set_id( $subscription ); |
|
77 | - } elseif ( $subscription instanceof self ) { |
|
78 | - $this->set_id( $subscription->get_id() ); |
|
79 | - } elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_id' ) ) { |
|
80 | - $this->set_id( $subscription_id ); |
|
81 | - } elseif ( ! empty( $subscription->id ) ) { |
|
82 | - $this->set_id( $subscription->id ); |
|
83 | - } else { |
|
84 | - $this->set_object_read( true ); |
|
85 | - } |
|
86 | - |
|
87 | - // Load the datastore. |
|
88 | - $this->data_store = GetPaid_Data_Store::load( $this->data_store_name ); |
|
89 | - |
|
90 | - if ( $this->get_id() > 0 ) { |
|
91 | - $this->data_store->read( $this ); |
|
92 | - } |
|
93 | - |
|
94 | - } |
|
95 | - |
|
96 | - /** |
|
97 | - * Given an invoice id, profile id, transaction id, it returns the subscription's id. |
|
98 | - * |
|
99 | - * |
|
100 | - * @static |
|
101 | - * @param string $value |
|
102 | - * @param string $field Either invoice_id, transaction_id or profile_id. |
|
103 | - * @since 1.0.19 |
|
104 | - * @return int |
|
105 | - */ |
|
106 | - public static function get_subscription_id_by_field( $value, $field = 'profile_id' ) { |
|
18 | + /** |
|
19 | + * Which data store to load. |
|
20 | + * |
|
21 | + * @var string |
|
22 | + */ |
|
23 | + protected $data_store_name = 'subscription'; |
|
24 | + |
|
25 | + /** |
|
26 | + * This is the name of this object type. |
|
27 | + * |
|
28 | + * @var string |
|
29 | + */ |
|
30 | + protected $object_type = 'subscription'; |
|
31 | + |
|
32 | + /** |
|
33 | + * Item Data array. This is the core item data exposed in APIs. |
|
34 | + * |
|
35 | + * @since 1.0.19 |
|
36 | + * @var array |
|
37 | + */ |
|
38 | + protected $data = array( |
|
39 | + 'customer_id' => 0, |
|
40 | + 'frequency' => 1, |
|
41 | + 'period' => 'D', |
|
42 | + 'initial_amount' => null, |
|
43 | + 'recurring_amount' => null, |
|
44 | + 'bill_times' => 0, |
|
45 | + 'transaction_id' => '', |
|
46 | + 'parent_payment_id' => null, |
|
47 | + 'product_id' => 0, |
|
48 | + 'created' => '0000-00-00 00:00:00', |
|
49 | + 'expiration' => '0000-00-00 00:00:00', |
|
50 | + 'trial_period' => '', |
|
51 | + 'status' => 'pending', |
|
52 | + 'profile_id' => '', |
|
53 | + 'gateway' => '', |
|
54 | + 'customer' => '', |
|
55 | + ); |
|
56 | + |
|
57 | + /** |
|
58 | + * Stores the status transition information. |
|
59 | + * |
|
60 | + * @since 1.0.19 |
|
61 | + * @var bool |
|
62 | + */ |
|
63 | + protected $status_transition = false; |
|
64 | + |
|
65 | + /** |
|
66 | + * Get the subscription if ID is passed, otherwise the subscription is new and empty. |
|
67 | + * |
|
68 | + * @param int|string|object|WPInv_Subscription $subscription Subscription id, profile_id, or object to read. |
|
69 | + * @param bool $deprecated |
|
70 | + */ |
|
71 | + function __construct( $subscription = 0, $deprecated = false ) { |
|
72 | + |
|
73 | + parent::__construct( $subscription ); |
|
74 | + |
|
75 | + if ( ! $deprecated && ! empty( $subscription ) && is_numeric( $subscription ) ) { |
|
76 | + $this->set_id( $subscription ); |
|
77 | + } elseif ( $subscription instanceof self ) { |
|
78 | + $this->set_id( $subscription->get_id() ); |
|
79 | + } elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_id' ) ) { |
|
80 | + $this->set_id( $subscription_id ); |
|
81 | + } elseif ( ! empty( $subscription->id ) ) { |
|
82 | + $this->set_id( $subscription->id ); |
|
83 | + } else { |
|
84 | + $this->set_object_read( true ); |
|
85 | + } |
|
86 | + |
|
87 | + // Load the datastore. |
|
88 | + $this->data_store = GetPaid_Data_Store::load( $this->data_store_name ); |
|
89 | + |
|
90 | + if ( $this->get_id() > 0 ) { |
|
91 | + $this->data_store->read( $this ); |
|
92 | + } |
|
93 | + |
|
94 | + } |
|
95 | + |
|
96 | + /** |
|
97 | + * Given an invoice id, profile id, transaction id, it returns the subscription's id. |
|
98 | + * |
|
99 | + * |
|
100 | + * @static |
|
101 | + * @param string $value |
|
102 | + * @param string $field Either invoice_id, transaction_id or profile_id. |
|
103 | + * @since 1.0.19 |
|
104 | + * @return int |
|
105 | + */ |
|
106 | + public static function get_subscription_id_by_field( $value, $field = 'profile_id' ) { |
|
107 | 107 | global $wpdb; |
108 | 108 | |
109 | - // Trim the value. |
|
110 | - $value = trim( $value ); |
|
109 | + // Trim the value. |
|
110 | + $value = trim( $value ); |
|
111 | 111 | |
112 | - if ( empty( $value ) ) { |
|
113 | - return 0; |
|
114 | - } |
|
112 | + if ( empty( $value ) ) { |
|
113 | + return 0; |
|
114 | + } |
|
115 | 115 | |
116 | - if ( 'invoice_id' == $field ) { |
|
117 | - $field = 'parent_payment_id'; |
|
118 | - } |
|
116 | + if ( 'invoice_id' == $field ) { |
|
117 | + $field = 'parent_payment_id'; |
|
118 | + } |
|
119 | 119 | |
120 | 120 | // Valid fields. |
121 | 121 | $fields = array( |
122 | - 'parent_payment_id', |
|
123 | - 'transaction_id', |
|
124 | - 'profile_id' |
|
125 | - ); |
|
126 | - |
|
127 | - // Ensure a field has been passed. |
|
128 | - if ( empty( $field ) || ! in_array( $field, $fields ) ) { |
|
129 | - return 0; |
|
130 | - } |
|
131 | - |
|
132 | - // Maybe retrieve from the cache. |
|
133 | - $subscription_id = wp_cache_get( $value, "getpaid_subscription_{$field}s_to_subscription_ids" ); |
|
134 | - if ( ! empty( $subscription_id ) ) { |
|
135 | - return $subscription_id; |
|
136 | - } |
|
122 | + 'parent_payment_id', |
|
123 | + 'transaction_id', |
|
124 | + 'profile_id' |
|
125 | + ); |
|
126 | + |
|
127 | + // Ensure a field has been passed. |
|
128 | + if ( empty( $field ) || ! in_array( $field, $fields ) ) { |
|
129 | + return 0; |
|
130 | + } |
|
131 | + |
|
132 | + // Maybe retrieve from the cache. |
|
133 | + $subscription_id = wp_cache_get( $value, "getpaid_subscription_{$field}s_to_subscription_ids" ); |
|
134 | + if ( ! empty( $subscription_id ) ) { |
|
135 | + return $subscription_id; |
|
136 | + } |
|
137 | 137 | |
138 | 138 | // Fetch from the db. |
139 | 139 | $table = $wpdb->prefix . 'wpinv_subscriptions'; |
@@ -141,34 +141,34 @@ discard block |
||
141 | 141 | $wpdb->prepare( "SELECT `id` FROM $table WHERE `$field`=%s LIMIT 1", $value ) |
142 | 142 | ); |
143 | 143 | |
144 | - if ( empty( $subscription_id ) ) { |
|
145 | - return 0; |
|
146 | - } |
|
144 | + if ( empty( $subscription_id ) ) { |
|
145 | + return 0; |
|
146 | + } |
|
147 | 147 | |
148 | - // Update the cache with our data. |
|
149 | - wp_cache_set( $value, $subscription_id, "getpaid_subscription_{$field}s_to_subscription_ids" ); |
|
148 | + // Update the cache with our data. |
|
149 | + wp_cache_set( $value, $subscription_id, "getpaid_subscription_{$field}s_to_subscription_ids" ); |
|
150 | 150 | |
151 | - return $subscription_id; |
|
152 | - } |
|
151 | + return $subscription_id; |
|
152 | + } |
|
153 | 153 | |
154 | - /** |
|
154 | + /** |
|
155 | 155 | * Clears the subscription's cache. |
156 | 156 | */ |
157 | 157 | public function clear_cache() { |
158 | - wp_cache_delete( $this->get_parent_payment_id(), 'getpaid_subscription_parent_payment_ids_to_subscription_ids' ); |
|
159 | - wp_cache_delete( $this->get_transaction_id(), 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
160 | - wp_cache_delete( $this->get_profile_id(), 'getpaid_subscription_profile_ids_to_subscription_ids' ); |
|
161 | - wp_cache_delete( $this->get_id(), 'getpaid_subscriptions' ); |
|
162 | - } |
|
158 | + wp_cache_delete( $this->get_parent_payment_id(), 'getpaid_subscription_parent_payment_ids_to_subscription_ids' ); |
|
159 | + wp_cache_delete( $this->get_transaction_id(), 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
160 | + wp_cache_delete( $this->get_profile_id(), 'getpaid_subscription_profile_ids_to_subscription_ids' ); |
|
161 | + wp_cache_delete( $this->get_id(), 'getpaid_subscriptions' ); |
|
162 | + } |
|
163 | 163 | |
164 | - /** |
|
164 | + /** |
|
165 | 165 | * Checks if a subscription key is set. |
166 | 166 | */ |
167 | 167 | public function _isset( $key ) { |
168 | 168 | return isset( $this->data[$key] ) || method_exists( $this, "get_$key" ); |
169 | - } |
|
169 | + } |
|
170 | 170 | |
171 | - /* |
|
171 | + /* |
|
172 | 172 | |-------------------------------------------------------------------------- |
173 | 173 | | CRUD methods |
174 | 174 | |-------------------------------------------------------------------------- |
@@ -177,545 +177,545 @@ discard block |
||
177 | 177 | | |
178 | 178 | */ |
179 | 179 | |
180 | - /* |
|
181 | - |-------------------------------------------------------------------------- |
|
182 | - | Getters |
|
183 | - |-------------------------------------------------------------------------- |
|
184 | - */ |
|
180 | + /* |
|
181 | + |-------------------------------------------------------------------------- |
|
182 | + | Getters |
|
183 | + |-------------------------------------------------------------------------- |
|
184 | + */ |
|
185 | + |
|
186 | + /** |
|
187 | + * Get customer id. |
|
188 | + * |
|
189 | + * @since 1.0.19 |
|
190 | + * @param string $context View or edit context. |
|
191 | + * @return int |
|
192 | + */ |
|
193 | + public function get_customer_id( $context = 'view' ) { |
|
194 | + return (int) $this->get_prop( 'customer_id', $context ); |
|
195 | + } |
|
196 | + |
|
197 | + /** |
|
198 | + * Get customer information. |
|
199 | + * |
|
200 | + * @since 1.0.19 |
|
201 | + * @param string $context View or edit context. |
|
202 | + * @return WP_User|false WP_User object on success, false on failure. |
|
203 | + */ |
|
204 | + public function get_customer( $context = 'view' ) { |
|
205 | + return get_userdata( $this->get_customer_id( $context ) ); |
|
206 | + } |
|
207 | + |
|
208 | + /** |
|
209 | + * Get parent invoice id. |
|
210 | + * |
|
211 | + * @since 1.0.19 |
|
212 | + * @param string $context View or edit context. |
|
213 | + * @return int |
|
214 | + */ |
|
215 | + public function get_parent_invoice_id( $context = 'view' ) { |
|
216 | + return (int) $this->get_prop( 'parent_payment_id', $context ); |
|
217 | + } |
|
218 | + |
|
219 | + /** |
|
220 | + * Alias for self::get_parent_invoice_id(). |
|
221 | + * |
|
222 | + * @since 1.0.19 |
|
223 | + * @param string $context View or edit context. |
|
224 | + * @return int |
|
225 | + */ |
|
226 | + public function get_parent_payment_id( $context = 'view' ) { |
|
227 | + return $this->get_parent_invoice_id( $context ); |
|
228 | + } |
|
229 | + |
|
230 | + /** |
|
231 | + * Alias for self::get_parent_invoice_id(). |
|
232 | + * |
|
233 | + * @since 1.0.0 |
|
234 | + * @return int |
|
235 | + */ |
|
236 | + public function get_original_payment_id( $context = 'view' ) { |
|
237 | + return $this->get_parent_invoice_id( $context ); |
|
238 | + } |
|
239 | + |
|
240 | + /** |
|
241 | + * Get parent invoice. |
|
242 | + * |
|
243 | + * @since 1.0.19 |
|
244 | + * @param string $context View or edit context. |
|
245 | + * @return WPInv_Invoice |
|
246 | + */ |
|
247 | + public function get_parent_invoice( $context = 'view' ) { |
|
248 | + return new WPInv_Invoice( $this->get_parent_invoice_id( $context ) ); |
|
249 | + } |
|
250 | + |
|
251 | + /** |
|
252 | + * Alias for self::get_parent_invoice(). |
|
253 | + * |
|
254 | + * @since 1.0.19 |
|
255 | + * @param string $context View or edit context. |
|
256 | + * @return WPInv_Invoice |
|
257 | + */ |
|
258 | + public function get_parent_payment( $context = 'view' ) { |
|
259 | + return $this->get_parent_invoice( $context ); |
|
260 | + } |
|
261 | + |
|
262 | + /** |
|
263 | + * Get subscription's product id. |
|
264 | + * |
|
265 | + * @since 1.0.19 |
|
266 | + * @param string $context View or edit context. |
|
267 | + * @return int |
|
268 | + */ |
|
269 | + public function get_product_id( $context = 'view' ) { |
|
270 | + return (int) $this->get_prop( 'product_id', $context ); |
|
271 | + } |
|
272 | + |
|
273 | + /** |
|
274 | + * Get the subscription product. |
|
275 | + * |
|
276 | + * @since 1.0.19 |
|
277 | + * @param string $context View or edit context. |
|
278 | + * @return WPInv_Item |
|
279 | + */ |
|
280 | + public function get_product( $context = 'view' ) { |
|
281 | + return new WPInv_Item( $this->get_product_id( $context ) ); |
|
282 | + } |
|
283 | + |
|
284 | + /** |
|
285 | + * Get parent invoice's gateway. |
|
286 | + * |
|
287 | + * Here for backwards compatibility. |
|
288 | + * |
|
289 | + * @since 1.0.19 |
|
290 | + * @param string $context View or edit context. |
|
291 | + * @return string |
|
292 | + */ |
|
293 | + public function get_gateway( $context = 'view' ) { |
|
294 | + return $this->get_parent_invoice( $context )->get_gateway(); |
|
295 | + } |
|
296 | + |
|
297 | + /** |
|
298 | + * Get the period of a renewal. |
|
299 | + * |
|
300 | + * @since 1.0.19 |
|
301 | + * @param string $context View or edit context. |
|
302 | + * @return string |
|
303 | + */ |
|
304 | + public function get_period( $context = 'view' ) { |
|
305 | + return $this->get_prop( 'period', $context ); |
|
306 | + } |
|
307 | + |
|
308 | + /** |
|
309 | + * Get number of periods each renewal is valid for. |
|
310 | + * |
|
311 | + * @since 1.0.19 |
|
312 | + * @param string $context View or edit context. |
|
313 | + * @return int |
|
314 | + */ |
|
315 | + public function get_frequency( $context = 'view' ) { |
|
316 | + return (int) $this->get_prop( 'frequency', $context ); |
|
317 | + } |
|
318 | + |
|
319 | + /** |
|
320 | + * Get the initial amount for the subscription. |
|
321 | + * |
|
322 | + * @since 1.0.19 |
|
323 | + * @param string $context View or edit context. |
|
324 | + * @return float |
|
325 | + */ |
|
326 | + public function get_initial_amount( $context = 'view' ) { |
|
327 | + return (float) wpinv_sanitize_amount( $this->get_prop( 'initial_amount', $context ) ); |
|
328 | + } |
|
329 | + |
|
330 | + /** |
|
331 | + * Get the recurring amount for the subscription. |
|
332 | + * |
|
333 | + * @since 1.0.19 |
|
334 | + * @param string $context View or edit context. |
|
335 | + * @return float |
|
336 | + */ |
|
337 | + public function get_recurring_amount( $context = 'view' ) { |
|
338 | + return (float) wpinv_sanitize_amount( $this->get_prop( 'recurring_amount', $context ) ); |
|
339 | + } |
|
340 | + |
|
341 | + /** |
|
342 | + * Get number of times that this subscription can be renewed. |
|
343 | + * |
|
344 | + * @since 1.0.19 |
|
345 | + * @param string $context View or edit context. |
|
346 | + * @return int |
|
347 | + */ |
|
348 | + public function get_bill_times( $context = 'view' ) { |
|
349 | + return (int) $this->get_prop( 'bill_times', $context ); |
|
350 | + } |
|
351 | + |
|
352 | + /** |
|
353 | + * Get transaction id of this subscription's parent invoice. |
|
354 | + * |
|
355 | + * @since 1.0.19 |
|
356 | + * @param string $context View or edit context. |
|
357 | + * @return string |
|
358 | + */ |
|
359 | + public function get_transaction_id( $context = 'view' ) { |
|
360 | + return $this->get_prop( 'transaction_id', $context ); |
|
361 | + } |
|
362 | + |
|
363 | + /** |
|
364 | + * Get the date that the subscription was created. |
|
365 | + * |
|
366 | + * @since 1.0.19 |
|
367 | + * @param string $context View or edit context. |
|
368 | + * @return string |
|
369 | + */ |
|
370 | + public function get_created( $context = 'view' ) { |
|
371 | + return $this->get_prop( 'created', $context ); |
|
372 | + } |
|
373 | + |
|
374 | + /** |
|
375 | + * Alias for self::get_created(). |
|
376 | + * |
|
377 | + * @since 1.0.19 |
|
378 | + * @param string $context View or edit context. |
|
379 | + * @return string |
|
380 | + */ |
|
381 | + public function get_date_created( $context = 'view' ) { |
|
382 | + return $this->get_created( $context ); |
|
383 | + } |
|
384 | + |
|
385 | + /** |
|
386 | + * Retrieves the creation date in a timestamp |
|
387 | + * |
|
388 | + * @since 1.0.0 |
|
389 | + * @return int |
|
390 | + */ |
|
391 | + public function get_time_created() { |
|
392 | + $created = $this->get_date_created(); |
|
393 | + return empty( $created ) ? current_time( 'timestamp' ) : strtotime( $created, current_time( 'timestamp' ) ); |
|
394 | + } |
|
395 | + |
|
396 | + /** |
|
397 | + * Get GMT date when the subscription was created. |
|
398 | + * |
|
399 | + * @since 1.0.19 |
|
400 | + * @param string $context View or edit context. |
|
401 | + * @return string |
|
402 | + */ |
|
403 | + public function get_date_created_gmt( $context = 'view' ) { |
|
404 | + $date = $this->get_date_created( $context ); |
|
405 | + |
|
406 | + if ( $date ) { |
|
407 | + $date = get_gmt_from_date( $date ); |
|
408 | + } |
|
409 | + return $date; |
|
410 | + } |
|
411 | + |
|
412 | + /** |
|
413 | + * Get the date that the subscription will renew. |
|
414 | + * |
|
415 | + * @since 1.0.19 |
|
416 | + * @param string $context View or edit context. |
|
417 | + * @return string |
|
418 | + */ |
|
419 | + public function get_next_renewal_date( $context = 'view' ) { |
|
420 | + return $this->get_prop( 'expiration', $context ); |
|
421 | + } |
|
422 | + |
|
423 | + /** |
|
424 | + * Alias for self::get_next_renewal_date(). |
|
425 | + * |
|
426 | + * @since 1.0.19 |
|
427 | + * @param string $context View or edit context. |
|
428 | + * @return string |
|
429 | + */ |
|
430 | + public function get_expiration( $context = 'view' ) { |
|
431 | + return $this->get_next_renewal_date( $context ); |
|
432 | + } |
|
433 | + |
|
434 | + /** |
|
435 | + * Retrieves the expiration date in a timestamp |
|
436 | + * |
|
437 | + * @since 1.0.0 |
|
438 | + * @return int |
|
439 | + */ |
|
440 | + public function get_expiration_time() { |
|
441 | + $expiration = $this->get_expiration(); |
|
442 | + |
|
443 | + if ( empty( $expiration ) || '0000-00-00 00:00:00' == $expiration ) { |
|
444 | + return current_time( 'timestamp' ); |
|
445 | + } |
|
446 | + |
|
447 | + $expiration = strtotime( $expiration, current_time( 'timestamp' ) ); |
|
448 | + return $expiration < current_time( 'timestamp' ) ? current_time( 'timestamp' ) : $expiration; |
|
449 | + } |
|
450 | + |
|
451 | + /** |
|
452 | + * Get GMT date when the subscription will renew. |
|
453 | + * |
|
454 | + * @since 1.0.19 |
|
455 | + * @param string $context View or edit context. |
|
456 | + * @return string |
|
457 | + */ |
|
458 | + public function get_next_renewal_date_gmt( $context = 'view' ) { |
|
459 | + $date = $this->get_next_renewal_date( $context ); |
|
460 | + |
|
461 | + if ( $date ) { |
|
462 | + $date = get_gmt_from_date( $date ); |
|
463 | + } |
|
464 | + return $date; |
|
465 | + } |
|
466 | + |
|
467 | + /** |
|
468 | + * Get the subscription's trial period. |
|
469 | + * |
|
470 | + * @since 1.0.19 |
|
471 | + * @param string $context View or edit context. |
|
472 | + * @return string |
|
473 | + */ |
|
474 | + public function get_trial_period( $context = 'view' ) { |
|
475 | + return $this->get_prop( 'trial_period', $context ); |
|
476 | + } |
|
477 | + |
|
478 | + /** |
|
479 | + * Get the subscription's status. |
|
480 | + * |
|
481 | + * @since 1.0.19 |
|
482 | + * @param string $context View or edit context. |
|
483 | + * @return string |
|
484 | + */ |
|
485 | + public function get_status( $context = 'view' ) { |
|
486 | + return $this->get_prop( 'status', $context ); |
|
487 | + } |
|
488 | + |
|
489 | + /** |
|
490 | + * Get the subscription's profile id. |
|
491 | + * |
|
492 | + * @since 1.0.19 |
|
493 | + * @param string $context View or edit context. |
|
494 | + * @return string |
|
495 | + */ |
|
496 | + public function get_profile_id( $context = 'view' ) { |
|
497 | + return $this->get_prop( 'profile_id', $context ); |
|
498 | + } |
|
499 | + |
|
500 | + /* |
|
501 | + |-------------------------------------------------------------------------- |
|
502 | + | Setters |
|
503 | + |-------------------------------------------------------------------------- |
|
504 | + */ |
|
505 | + |
|
506 | + /** |
|
507 | + * Set customer id. |
|
508 | + * |
|
509 | + * @since 1.0.19 |
|
510 | + * @param int $value The customer's id. |
|
511 | + */ |
|
512 | + public function set_customer_id( $value ) { |
|
513 | + $this->set_prop( 'customer_id', (int) $value ); |
|
514 | + } |
|
515 | + |
|
516 | + /** |
|
517 | + * Set parent invoice id. |
|
518 | + * |
|
519 | + * @since 1.0.19 |
|
520 | + * @param int $value The parent invoice id. |
|
521 | + */ |
|
522 | + public function set_parent_invoice_id( $value ) { |
|
523 | + $this->set_prop( 'parent_payment_id', (int) $value ); |
|
524 | + } |
|
525 | + |
|
526 | + /** |
|
527 | + * Alias for self::set_parent_invoice_id(). |
|
528 | + * |
|
529 | + * @since 1.0.19 |
|
530 | + * @param int $value The parent invoice id. |
|
531 | + */ |
|
532 | + public function set_parent_payment_id( $value ) { |
|
533 | + $this->set_parent_invoice_id( $value ); |
|
534 | + } |
|
535 | + |
|
536 | + /** |
|
537 | + * Alias for self::set_parent_invoice_id(). |
|
538 | + * |
|
539 | + * @since 1.0.19 |
|
540 | + * @param int $value The parent invoice id. |
|
541 | + */ |
|
542 | + public function set_original_payment_id( $value ) { |
|
543 | + $this->set_parent_invoice_id( $value ); |
|
544 | + } |
|
545 | + |
|
546 | + /** |
|
547 | + * Set subscription's product id. |
|
548 | + * |
|
549 | + * @since 1.0.19 |
|
550 | + * @param int $value The subscription product id. |
|
551 | + */ |
|
552 | + public function set_product_id( $value ) { |
|
553 | + $this->set_prop( 'product_id', (int) $value ); |
|
554 | + } |
|
555 | + |
|
556 | + /** |
|
557 | + * Set the period of a renewal. |
|
558 | + * |
|
559 | + * @since 1.0.19 |
|
560 | + * @param string $value The renewal period. |
|
561 | + */ |
|
562 | + public function set_period( $value ) { |
|
563 | + $this->set_prop( 'period', $value ); |
|
564 | + } |
|
565 | + |
|
566 | + /** |
|
567 | + * Set number of periods each renewal is valid for. |
|
568 | + * |
|
569 | + * @since 1.0.19 |
|
570 | + * @param int $value The subscription frequency. |
|
571 | + */ |
|
572 | + public function set_frequency( $value ) { |
|
573 | + $value = empty( $value ) ? 1 : (int) $value; |
|
574 | + $this->set_prop( 'frequency', absint( $value ) ); |
|
575 | + } |
|
576 | + |
|
577 | + /** |
|
578 | + * Set the initial amount for the subscription. |
|
579 | + * |
|
580 | + * @since 1.0.19 |
|
581 | + * @param float $value The initial subcription amount. |
|
582 | + */ |
|
583 | + public function set_initial_amount( $value ) { |
|
584 | + $this->set_prop( 'initial_amount', wpinv_sanitize_amount( $value ) ); |
|
585 | + } |
|
586 | + |
|
587 | + /** |
|
588 | + * Set the recurring amount for the subscription. |
|
589 | + * |
|
590 | + * @since 1.0.19 |
|
591 | + * @param float $value The recurring subcription amount. |
|
592 | + */ |
|
593 | + public function set_recurring_amount( $value ) { |
|
594 | + $this->set_prop( 'recurring_amount', wpinv_sanitize_amount( $value ) ); |
|
595 | + } |
|
596 | + |
|
597 | + /** |
|
598 | + * Set number of times that this subscription can be renewed. |
|
599 | + * |
|
600 | + * @since 1.0.19 |
|
601 | + * @param int $value Bill times. |
|
602 | + */ |
|
603 | + public function set_bill_times( $value ) { |
|
604 | + $this->set_prop( 'bill_times', (int) $value ); |
|
605 | + } |
|
606 | + |
|
607 | + /** |
|
608 | + * Get transaction id of this subscription's parent invoice. |
|
609 | + * |
|
610 | + * @since 1.0.19 |
|
611 | + * @param string $value Bill times. |
|
612 | + */ |
|
613 | + public function set_transaction_id( $value ) { |
|
614 | + $this->set_prop( 'transaction_id', sanitize_text_field( $value ) ); |
|
615 | + } |
|
616 | + |
|
617 | + /** |
|
618 | + * Set date when this subscription started. |
|
619 | + * |
|
620 | + * @since 1.0.19 |
|
621 | + * @param string $value strtotime compliant date. |
|
622 | + */ |
|
623 | + public function set_created( $value ) { |
|
624 | + $date = strtotime( $value ); |
|
625 | + |
|
626 | + if ( $date && $value !== '0000-00-00 00:00:00' ) { |
|
627 | + $this->set_prop( 'created', date( 'Y-m-d H:i:s', $date ) ); |
|
628 | + return; |
|
629 | + } |
|
630 | + |
|
631 | + $this->set_prop( 'created', '' ); |
|
185 | 632 | |
186 | - /** |
|
187 | - * Get customer id. |
|
188 | - * |
|
189 | - * @since 1.0.19 |
|
190 | - * @param string $context View or edit context. |
|
191 | - * @return int |
|
192 | - */ |
|
193 | - public function get_customer_id( $context = 'view' ) { |
|
194 | - return (int) $this->get_prop( 'customer_id', $context ); |
|
195 | - } |
|
196 | - |
|
197 | - /** |
|
198 | - * Get customer information. |
|
199 | - * |
|
200 | - * @since 1.0.19 |
|
201 | - * @param string $context View or edit context. |
|
202 | - * @return WP_User|false WP_User object on success, false on failure. |
|
203 | - */ |
|
204 | - public function get_customer( $context = 'view' ) { |
|
205 | - return get_userdata( $this->get_customer_id( $context ) ); |
|
206 | - } |
|
207 | - |
|
208 | - /** |
|
209 | - * Get parent invoice id. |
|
210 | - * |
|
211 | - * @since 1.0.19 |
|
212 | - * @param string $context View or edit context. |
|
213 | - * @return int |
|
214 | - */ |
|
215 | - public function get_parent_invoice_id( $context = 'view' ) { |
|
216 | - return (int) $this->get_prop( 'parent_payment_id', $context ); |
|
217 | - } |
|
218 | - |
|
219 | - /** |
|
220 | - * Alias for self::get_parent_invoice_id(). |
|
221 | - * |
|
222 | - * @since 1.0.19 |
|
223 | - * @param string $context View or edit context. |
|
224 | - * @return int |
|
225 | - */ |
|
226 | - public function get_parent_payment_id( $context = 'view' ) { |
|
227 | - return $this->get_parent_invoice_id( $context ); |
|
228 | - } |
|
633 | + } |
|
229 | 634 | |
230 | - /** |
|
231 | - * Alias for self::get_parent_invoice_id(). |
|
635 | + /** |
|
636 | + * Alias for self::set_created(). |
|
232 | 637 | * |
233 | - * @since 1.0.0 |
|
234 | - * @return int |
|
638 | + * @since 1.0.19 |
|
639 | + * @param string $value strtotime compliant date. |
|
235 | 640 | */ |
236 | - public function get_original_payment_id( $context = 'view' ) { |
|
237 | - return $this->get_parent_invoice_id( $context ); |
|
641 | + public function set_date_created( $value ) { |
|
642 | + $this->set_created( $value ); |
|
238 | 643 | } |
239 | 644 | |
240 | - /** |
|
241 | - * Get parent invoice. |
|
242 | - * |
|
243 | - * @since 1.0.19 |
|
244 | - * @param string $context View or edit context. |
|
245 | - * @return WPInv_Invoice |
|
246 | - */ |
|
247 | - public function get_parent_invoice( $context = 'view' ) { |
|
248 | - return new WPInv_Invoice( $this->get_parent_invoice_id( $context ) ); |
|
249 | - } |
|
250 | - |
|
251 | - /** |
|
252 | - * Alias for self::get_parent_invoice(). |
|
253 | - * |
|
254 | - * @since 1.0.19 |
|
255 | - * @param string $context View or edit context. |
|
256 | - * @return WPInv_Invoice |
|
257 | - */ |
|
258 | - public function get_parent_payment( $context = 'view' ) { |
|
259 | - return $this->get_parent_invoice( $context ); |
|
260 | - } |
|
261 | - |
|
262 | - /** |
|
263 | - * Get subscription's product id. |
|
264 | - * |
|
265 | - * @since 1.0.19 |
|
266 | - * @param string $context View or edit context. |
|
267 | - * @return int |
|
268 | - */ |
|
269 | - public function get_product_id( $context = 'view' ) { |
|
270 | - return (int) $this->get_prop( 'product_id', $context ); |
|
271 | - } |
|
272 | - |
|
273 | - /** |
|
274 | - * Get the subscription product. |
|
275 | - * |
|
276 | - * @since 1.0.19 |
|
277 | - * @param string $context View or edit context. |
|
278 | - * @return WPInv_Item |
|
279 | - */ |
|
280 | - public function get_product( $context = 'view' ) { |
|
281 | - return new WPInv_Item( $this->get_product_id( $context ) ); |
|
282 | - } |
|
283 | - |
|
284 | - /** |
|
285 | - * Get parent invoice's gateway. |
|
286 | - * |
|
287 | - * Here for backwards compatibility. |
|
288 | - * |
|
289 | - * @since 1.0.19 |
|
290 | - * @param string $context View or edit context. |
|
291 | - * @return string |
|
292 | - */ |
|
293 | - public function get_gateway( $context = 'view' ) { |
|
294 | - return $this->get_parent_invoice( $context )->get_gateway(); |
|
295 | - } |
|
296 | - |
|
297 | - /** |
|
298 | - * Get the period of a renewal. |
|
299 | - * |
|
300 | - * @since 1.0.19 |
|
301 | - * @param string $context View or edit context. |
|
302 | - * @return string |
|
303 | - */ |
|
304 | - public function get_period( $context = 'view' ) { |
|
305 | - return $this->get_prop( 'period', $context ); |
|
306 | - } |
|
307 | - |
|
308 | - /** |
|
309 | - * Get number of periods each renewal is valid for. |
|
310 | - * |
|
311 | - * @since 1.0.19 |
|
312 | - * @param string $context View or edit context. |
|
313 | - * @return int |
|
314 | - */ |
|
315 | - public function get_frequency( $context = 'view' ) { |
|
316 | - return (int) $this->get_prop( 'frequency', $context ); |
|
317 | - } |
|
318 | - |
|
319 | - /** |
|
320 | - * Get the initial amount for the subscription. |
|
321 | - * |
|
322 | - * @since 1.0.19 |
|
323 | - * @param string $context View or edit context. |
|
324 | - * @return float |
|
325 | - */ |
|
326 | - public function get_initial_amount( $context = 'view' ) { |
|
327 | - return (float) wpinv_sanitize_amount( $this->get_prop( 'initial_amount', $context ) ); |
|
328 | - } |
|
329 | - |
|
330 | - /** |
|
331 | - * Get the recurring amount for the subscription. |
|
332 | - * |
|
333 | - * @since 1.0.19 |
|
334 | - * @param string $context View or edit context. |
|
335 | - * @return float |
|
336 | - */ |
|
337 | - public function get_recurring_amount( $context = 'view' ) { |
|
338 | - return (float) wpinv_sanitize_amount( $this->get_prop( 'recurring_amount', $context ) ); |
|
339 | - } |
|
340 | - |
|
341 | - /** |
|
342 | - * Get number of times that this subscription can be renewed. |
|
343 | - * |
|
344 | - * @since 1.0.19 |
|
345 | - * @param string $context View or edit context. |
|
346 | - * @return int |
|
347 | - */ |
|
348 | - public function get_bill_times( $context = 'view' ) { |
|
349 | - return (int) $this->get_prop( 'bill_times', $context ); |
|
350 | - } |
|
351 | - |
|
352 | - /** |
|
353 | - * Get transaction id of this subscription's parent invoice. |
|
354 | - * |
|
355 | - * @since 1.0.19 |
|
356 | - * @param string $context View or edit context. |
|
357 | - * @return string |
|
358 | - */ |
|
359 | - public function get_transaction_id( $context = 'view' ) { |
|
360 | - return $this->get_prop( 'transaction_id', $context ); |
|
361 | - } |
|
362 | - |
|
363 | - /** |
|
364 | - * Get the date that the subscription was created. |
|
365 | - * |
|
366 | - * @since 1.0.19 |
|
367 | - * @param string $context View or edit context. |
|
368 | - * @return string |
|
369 | - */ |
|
370 | - public function get_created( $context = 'view' ) { |
|
371 | - return $this->get_prop( 'created', $context ); |
|
372 | - } |
|
373 | - |
|
374 | - /** |
|
375 | - * Alias for self::get_created(). |
|
376 | - * |
|
377 | - * @since 1.0.19 |
|
378 | - * @param string $context View or edit context. |
|
379 | - * @return string |
|
380 | - */ |
|
381 | - public function get_date_created( $context = 'view' ) { |
|
382 | - return $this->get_created( $context ); |
|
383 | - } |
|
384 | - |
|
385 | - /** |
|
386 | - * Retrieves the creation date in a timestamp |
|
387 | - * |
|
388 | - * @since 1.0.0 |
|
389 | - * @return int |
|
390 | - */ |
|
391 | - public function get_time_created() { |
|
392 | - $created = $this->get_date_created(); |
|
393 | - return empty( $created ) ? current_time( 'timestamp' ) : strtotime( $created, current_time( 'timestamp' ) ); |
|
394 | - } |
|
395 | - |
|
396 | - /** |
|
397 | - * Get GMT date when the subscription was created. |
|
398 | - * |
|
399 | - * @since 1.0.19 |
|
400 | - * @param string $context View or edit context. |
|
401 | - * @return string |
|
402 | - */ |
|
403 | - public function get_date_created_gmt( $context = 'view' ) { |
|
404 | - $date = $this->get_date_created( $context ); |
|
645 | + /** |
|
646 | + * Set the date that the subscription will renew. |
|
647 | + * |
|
648 | + * @since 1.0.19 |
|
649 | + * @param string $value strtotime compliant date. |
|
650 | + */ |
|
651 | + public function set_next_renewal_date( $value ) { |
|
652 | + $date = strtotime( $value ); |
|
405 | 653 | |
406 | - if ( $date ) { |
|
407 | - $date = get_gmt_from_date( $date ); |
|
654 | + if ( $date && $value !== '0000-00-00 00:00:00' ) { |
|
655 | + $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) ); |
|
656 | + return; |
|
408 | 657 | } |
409 | - return $date; |
|
410 | - } |
|
411 | - |
|
412 | - /** |
|
413 | - * Get the date that the subscription will renew. |
|
414 | - * |
|
415 | - * @since 1.0.19 |
|
416 | - * @param string $context View or edit context. |
|
417 | - * @return string |
|
418 | - */ |
|
419 | - public function get_next_renewal_date( $context = 'view' ) { |
|
420 | - return $this->get_prop( 'expiration', $context ); |
|
421 | - } |
|
422 | - |
|
423 | - /** |
|
424 | - * Alias for self::get_next_renewal_date(). |
|
425 | - * |
|
426 | - * @since 1.0.19 |
|
427 | - * @param string $context View or edit context. |
|
428 | - * @return string |
|
429 | - */ |
|
430 | - public function get_expiration( $context = 'view' ) { |
|
431 | - return $this->get_next_renewal_date( $context ); |
|
432 | - } |
|
433 | - |
|
434 | - /** |
|
435 | - * Retrieves the expiration date in a timestamp |
|
436 | - * |
|
437 | - * @since 1.0.0 |
|
438 | - * @return int |
|
439 | - */ |
|
440 | - public function get_expiration_time() { |
|
441 | - $expiration = $this->get_expiration(); |
|
442 | - |
|
443 | - if ( empty( $expiration ) || '0000-00-00 00:00:00' == $expiration ) { |
|
444 | - return current_time( 'timestamp' ); |
|
445 | - } |
|
446 | - |
|
447 | - $expiration = strtotime( $expiration, current_time( 'timestamp' ) ); |
|
448 | - return $expiration < current_time( 'timestamp' ) ? current_time( 'timestamp' ) : $expiration; |
|
449 | - } |
|
450 | - |
|
451 | - /** |
|
452 | - * Get GMT date when the subscription will renew. |
|
453 | - * |
|
454 | - * @since 1.0.19 |
|
455 | - * @param string $context View or edit context. |
|
456 | - * @return string |
|
457 | - */ |
|
458 | - public function get_next_renewal_date_gmt( $context = 'view' ) { |
|
459 | - $date = $this->get_next_renewal_date( $context ); |
|
460 | 658 | |
461 | - if ( $date ) { |
|
462 | - $date = get_gmt_from_date( $date ); |
|
463 | - } |
|
464 | - return $date; |
|
465 | - } |
|
466 | - |
|
467 | - /** |
|
468 | - * Get the subscription's trial period. |
|
469 | - * |
|
470 | - * @since 1.0.19 |
|
471 | - * @param string $context View or edit context. |
|
472 | - * @return string |
|
473 | - */ |
|
474 | - public function get_trial_period( $context = 'view' ) { |
|
475 | - return $this->get_prop( 'trial_period', $context ); |
|
476 | - } |
|
477 | - |
|
478 | - /** |
|
479 | - * Get the subscription's status. |
|
480 | - * |
|
481 | - * @since 1.0.19 |
|
482 | - * @param string $context View or edit context. |
|
483 | - * @return string |
|
484 | - */ |
|
485 | - public function get_status( $context = 'view' ) { |
|
486 | - return $this->get_prop( 'status', $context ); |
|
487 | - } |
|
488 | - |
|
489 | - /** |
|
490 | - * Get the subscription's profile id. |
|
491 | - * |
|
492 | - * @since 1.0.19 |
|
493 | - * @param string $context View or edit context. |
|
494 | - * @return string |
|
495 | - */ |
|
496 | - public function get_profile_id( $context = 'view' ) { |
|
497 | - return $this->get_prop( 'profile_id', $context ); |
|
498 | - } |
|
499 | - |
|
500 | - /* |
|
501 | - |-------------------------------------------------------------------------- |
|
502 | - | Setters |
|
503 | - |-------------------------------------------------------------------------- |
|
504 | - */ |
|
659 | + $this->set_prop( 'expiration', '' ); |
|
505 | 660 | |
506 | - /** |
|
507 | - * Set customer id. |
|
508 | - * |
|
509 | - * @since 1.0.19 |
|
510 | - * @param int $value The customer's id. |
|
511 | - */ |
|
512 | - public function set_customer_id( $value ) { |
|
513 | - $this->set_prop( 'customer_id', (int) $value ); |
|
514 | - } |
|
515 | - |
|
516 | - /** |
|
517 | - * Set parent invoice id. |
|
518 | - * |
|
519 | - * @since 1.0.19 |
|
520 | - * @param int $value The parent invoice id. |
|
521 | - */ |
|
522 | - public function set_parent_invoice_id( $value ) { |
|
523 | - $this->set_prop( 'parent_payment_id', (int) $value ); |
|
524 | - } |
|
525 | - |
|
526 | - /** |
|
527 | - * Alias for self::set_parent_invoice_id(). |
|
528 | - * |
|
529 | - * @since 1.0.19 |
|
530 | - * @param int $value The parent invoice id. |
|
531 | - */ |
|
532 | - public function set_parent_payment_id( $value ) { |
|
533 | - $this->set_parent_invoice_id( $value ); |
|
534 | - } |
|
661 | + } |
|
535 | 662 | |
536 | - /** |
|
537 | - * Alias for self::set_parent_invoice_id(). |
|
663 | + /** |
|
664 | + * Alias for self::set_next_renewal_date(). |
|
538 | 665 | * |
539 | 666 | * @since 1.0.19 |
540 | - * @param int $value The parent invoice id. |
|
667 | + * @param string $value strtotime compliant date. |
|
541 | 668 | */ |
542 | - public function set_original_payment_id( $value ) { |
|
543 | - $this->set_parent_invoice_id( $value ); |
|
544 | - } |
|
545 | - |
|
546 | - /** |
|
547 | - * Set subscription's product id. |
|
548 | - * |
|
549 | - * @since 1.0.19 |
|
550 | - * @param int $value The subscription product id. |
|
551 | - */ |
|
552 | - public function set_product_id( $value ) { |
|
553 | - $this->set_prop( 'product_id', (int) $value ); |
|
554 | - } |
|
555 | - |
|
556 | - /** |
|
557 | - * Set the period of a renewal. |
|
558 | - * |
|
559 | - * @since 1.0.19 |
|
560 | - * @param string $value The renewal period. |
|
561 | - */ |
|
562 | - public function set_period( $value ) { |
|
563 | - $this->set_prop( 'period', $value ); |
|
564 | - } |
|
565 | - |
|
566 | - /** |
|
567 | - * Set number of periods each renewal is valid for. |
|
568 | - * |
|
569 | - * @since 1.0.19 |
|
570 | - * @param int $value The subscription frequency. |
|
571 | - */ |
|
572 | - public function set_frequency( $value ) { |
|
573 | - $value = empty( $value ) ? 1 : (int) $value; |
|
574 | - $this->set_prop( 'frequency', absint( $value ) ); |
|
575 | - } |
|
576 | - |
|
577 | - /** |
|
578 | - * Set the initial amount for the subscription. |
|
579 | - * |
|
580 | - * @since 1.0.19 |
|
581 | - * @param float $value The initial subcription amount. |
|
582 | - */ |
|
583 | - public function set_initial_amount( $value ) { |
|
584 | - $this->set_prop( 'initial_amount', wpinv_sanitize_amount( $value ) ); |
|
585 | - } |
|
586 | - |
|
587 | - /** |
|
588 | - * Set the recurring amount for the subscription. |
|
589 | - * |
|
590 | - * @since 1.0.19 |
|
591 | - * @param float $value The recurring subcription amount. |
|
592 | - */ |
|
593 | - public function set_recurring_amount( $value ) { |
|
594 | - $this->set_prop( 'recurring_amount', wpinv_sanitize_amount( $value ) ); |
|
595 | - } |
|
596 | - |
|
597 | - /** |
|
598 | - * Set number of times that this subscription can be renewed. |
|
599 | - * |
|
600 | - * @since 1.0.19 |
|
601 | - * @param int $value Bill times. |
|
602 | - */ |
|
603 | - public function set_bill_times( $value ) { |
|
604 | - $this->set_prop( 'bill_times', (int) $value ); |
|
605 | - } |
|
606 | - |
|
607 | - /** |
|
608 | - * Get transaction id of this subscription's parent invoice. |
|
609 | - * |
|
610 | - * @since 1.0.19 |
|
611 | - * @param string $value Bill times. |
|
612 | - */ |
|
613 | - public function set_transaction_id( $value ) { |
|
614 | - $this->set_prop( 'transaction_id', sanitize_text_field( $value ) ); |
|
615 | - } |
|
616 | - |
|
617 | - /** |
|
618 | - * Set date when this subscription started. |
|
619 | - * |
|
620 | - * @since 1.0.19 |
|
621 | - * @param string $value strtotime compliant date. |
|
622 | - */ |
|
623 | - public function set_created( $value ) { |
|
624 | - $date = strtotime( $value ); |
|
669 | + public function set_expiration( $value ) { |
|
670 | + $this->set_next_renewal_date( $value ); |
|
671 | + } |
|
625 | 672 | |
626 | - if ( $date && $value !== '0000-00-00 00:00:00' ) { |
|
627 | - $this->set_prop( 'created', date( 'Y-m-d H:i:s', $date ) ); |
|
673 | + /** |
|
674 | + * Set the subscription's trial period. |
|
675 | + * |
|
676 | + * @since 1.0.19 |
|
677 | + * @param string $value trial period e.g 1 year. |
|
678 | + */ |
|
679 | + public function set_trial_period( $value ) { |
|
680 | + $this->set_prop( 'trial_period', $value ); |
|
681 | + } |
|
682 | + |
|
683 | + /** |
|
684 | + * Set the subscription's status. |
|
685 | + * |
|
686 | + * @since 1.0.19 |
|
687 | + * @param string $new_status New subscription status. |
|
688 | + */ |
|
689 | + public function set_status( $new_status ) { |
|
690 | + |
|
691 | + // Abort if this is not a valid status; |
|
692 | + if ( ! array_key_exists( $new_status, getpaid_get_subscription_statuses() ) ) { |
|
628 | 693 | return; |
629 | 694 | } |
630 | 695 | |
631 | - $this->set_prop( 'created', '' ); |
|
632 | 696 | |
633 | - } |
|
697 | + $old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status(); |
|
698 | + if ( true === $this->object_read && $old_status !== $new_status ) { |
|
699 | + $this->status_transition = array( |
|
700 | + 'from' => $old_status, |
|
701 | + 'to' => $new_status, |
|
702 | + ); |
|
703 | + } |
|
634 | 704 | |
635 | - /** |
|
636 | - * Alias for self::set_created(). |
|
637 | - * |
|
638 | - * @since 1.0.19 |
|
639 | - * @param string $value strtotime compliant date. |
|
640 | - */ |
|
641 | - public function set_date_created( $value ) { |
|
642 | - $this->set_created( $value ); |
|
705 | + $this->set_prop( 'status', $new_status ); |
|
643 | 706 | } |
644 | 707 | |
645 | - /** |
|
646 | - * Set the date that the subscription will renew. |
|
647 | - * |
|
648 | - * @since 1.0.19 |
|
649 | - * @param string $value strtotime compliant date. |
|
650 | - */ |
|
651 | - public function set_next_renewal_date( $value ) { |
|
652 | - $date = strtotime( $value ); |
|
708 | + /** |
|
709 | + * Set the subscription's (remote) profile id. |
|
710 | + * |
|
711 | + * @since 1.0.19 |
|
712 | + * @param string $value the remote profile id. |
|
713 | + */ |
|
714 | + public function set_profile_id( $value ) { |
|
715 | + $this->set_prop( 'profile_id', sanitize_text_field( $value ) ); |
|
716 | + } |
|
653 | 717 | |
654 | - if ( $date && $value !== '0000-00-00 00:00:00' ) { |
|
655 | - $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) ); |
|
656 | - return; |
|
657 | - } |
|
658 | - |
|
659 | - $this->set_prop( 'expiration', '' ); |
|
660 | - |
|
661 | - } |
|
662 | - |
|
663 | - /** |
|
664 | - * Alias for self::set_next_renewal_date(). |
|
665 | - * |
|
666 | - * @since 1.0.19 |
|
667 | - * @param string $value strtotime compliant date. |
|
668 | - */ |
|
669 | - public function set_expiration( $value ) { |
|
670 | - $this->set_next_renewal_date( $value ); |
|
671 | - } |
|
672 | - |
|
673 | - /** |
|
674 | - * Set the subscription's trial period. |
|
675 | - * |
|
676 | - * @since 1.0.19 |
|
677 | - * @param string $value trial period e.g 1 year. |
|
678 | - */ |
|
679 | - public function set_trial_period( $value ) { |
|
680 | - $this->set_prop( 'trial_period', $value ); |
|
681 | - } |
|
682 | - |
|
683 | - /** |
|
684 | - * Set the subscription's status. |
|
685 | - * |
|
686 | - * @since 1.0.19 |
|
687 | - * @param string $new_status New subscription status. |
|
688 | - */ |
|
689 | - public function set_status( $new_status ) { |
|
690 | - |
|
691 | - // Abort if this is not a valid status; |
|
692 | - if ( ! array_key_exists( $new_status, getpaid_get_subscription_statuses() ) ) { |
|
693 | - return; |
|
694 | - } |
|
695 | - |
|
696 | - |
|
697 | - $old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status(); |
|
698 | - if ( true === $this->object_read && $old_status !== $new_status ) { |
|
699 | - $this->status_transition = array( |
|
700 | - 'from' => $old_status, |
|
701 | - 'to' => $new_status, |
|
702 | - ); |
|
703 | - } |
|
704 | - |
|
705 | - $this->set_prop( 'status', $new_status ); |
|
706 | - } |
|
707 | - |
|
708 | - /** |
|
709 | - * Set the subscription's (remote) profile id. |
|
710 | - * |
|
711 | - * @since 1.0.19 |
|
712 | - * @param string $value the remote profile id. |
|
713 | - */ |
|
714 | - public function set_profile_id( $value ) { |
|
715 | - $this->set_prop( 'profile_id', sanitize_text_field( $value ) ); |
|
716 | - } |
|
717 | - |
|
718 | - /* |
|
718 | + /* |
|
719 | 719 | |-------------------------------------------------------------------------- |
720 | 720 | | Boolean methods |
721 | 721 | |-------------------------------------------------------------------------- |
@@ -724,55 +724,55 @@ discard block |
||
724 | 724 | | |
725 | 725 | */ |
726 | 726 | |
727 | - /** |
|
727 | + /** |
|
728 | 728 | * Checks if the subscription has a given status. |
729 | - * |
|
730 | - * @param string|array String or array of strings to check for. |
|
731 | - * @return bool |
|
729 | + * |
|
730 | + * @param string|array String or array of strings to check for. |
|
731 | + * @return bool |
|
732 | 732 | */ |
733 | 733 | public function has_status( $status ) { |
734 | 734 | return in_array( $this->get_status(), wpinv_clean( wpinv_parse_list( $status ) ) ); |
735 | - } |
|
735 | + } |
|
736 | 736 | |
737 | - /** |
|
737 | + /** |
|
738 | 738 | * Checks if the subscription has a trial period. |
739 | - * |
|
740 | - * @return bool |
|
739 | + * |
|
740 | + * @return bool |
|
741 | 741 | */ |
742 | 742 | public function has_trial_period() { |
743 | - $period = $this->get_trial_period(); |
|
743 | + $period = $this->get_trial_period(); |
|
744 | 744 | return ! empty( $period ); |
745 | - } |
|
746 | - |
|
747 | - /** |
|
748 | - * Is the subscription active? |
|
749 | - * |
|
750 | - * @return bool |
|
751 | - */ |
|
752 | - public function is_active() { |
|
753 | - return $this->has_status( 'active trialling' ) && ! $this->is_expired(); |
|
754 | - } |
|
755 | - |
|
756 | - /** |
|
757 | - * Is the subscription expired? |
|
758 | - * |
|
759 | - * @return bool |
|
760 | - */ |
|
761 | - public function is_expired() { |
|
762 | - return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'mysql' ) ); |
|
763 | - } |
|
764 | - |
|
765 | - /** |
|
766 | - * Is this the last renewals? |
|
767 | - * |
|
768 | - * @return bool |
|
769 | - */ |
|
770 | - public function is_last_renewal() { |
|
771 | - $max_bills = $this->get_bill_times(); |
|
772 | - return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed(); |
|
773 | - } |
|
774 | - |
|
775 | - /* |
|
745 | + } |
|
746 | + |
|
747 | + /** |
|
748 | + * Is the subscription active? |
|
749 | + * |
|
750 | + * @return bool |
|
751 | + */ |
|
752 | + public function is_active() { |
|
753 | + return $this->has_status( 'active trialling' ) && ! $this->is_expired(); |
|
754 | + } |
|
755 | + |
|
756 | + /** |
|
757 | + * Is the subscription expired? |
|
758 | + * |
|
759 | + * @return bool |
|
760 | + */ |
|
761 | + public function is_expired() { |
|
762 | + return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'mysql' ) ); |
|
763 | + } |
|
764 | + |
|
765 | + /** |
|
766 | + * Is this the last renewals? |
|
767 | + * |
|
768 | + * @return bool |
|
769 | + */ |
|
770 | + public function is_last_renewal() { |
|
771 | + $max_bills = $this->get_bill_times(); |
|
772 | + return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed(); |
|
773 | + } |
|
774 | + |
|
775 | + /* |
|
776 | 776 | |-------------------------------------------------------------------------- |
777 | 777 | | Additional methods |
778 | 778 | |-------------------------------------------------------------------------- |
@@ -781,27 +781,27 @@ discard block |
||
781 | 781 | | |
782 | 782 | */ |
783 | 783 | |
784 | - /** |
|
785 | - * Backwards compatibilty. |
|
786 | - */ |
|
787 | - public function create( $data = array() ) { |
|
784 | + /** |
|
785 | + * Backwards compatibilty. |
|
786 | + */ |
|
787 | + public function create( $data = array() ) { |
|
788 | 788 | |
789 | - // Set the properties. |
|
790 | - if ( is_array( $data ) ) { |
|
791 | - $this->set_props( $data ); |
|
792 | - } |
|
789 | + // Set the properties. |
|
790 | + if ( is_array( $data ) ) { |
|
791 | + $this->set_props( $data ); |
|
792 | + } |
|
793 | 793 | |
794 | - // Save the item. |
|
795 | - return $this->save(); |
|
794 | + // Save the item. |
|
795 | + return $this->save(); |
|
796 | 796 | |
797 | - } |
|
797 | + } |
|
798 | 798 | |
799 | - /** |
|
800 | - * Backwards compatibilty. |
|
801 | - */ |
|
802 | - public function update( $args = array() ) { |
|
803 | - return $this->create( $args ); |
|
804 | - } |
|
799 | + /** |
|
800 | + * Backwards compatibilty. |
|
801 | + */ |
|
802 | + public function update( $args = array() ) { |
|
803 | + return $this->create( $args ); |
|
804 | + } |
|
805 | 805 | |
806 | 806 | /** |
807 | 807 | * Retrieve renewal payments for a subscription |
@@ -811,22 +811,22 @@ discard block |
||
811 | 811 | */ |
812 | 812 | public function get_child_payments( $hide_pending = true ) { |
813 | 813 | |
814 | - $statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' ); |
|
814 | + $statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' ); |
|
815 | 815 | |
816 | - if ( ! $hide_pending ) { |
|
817 | - $statuses = array_keys( wpinv_get_invoice_statuses() ); |
|
818 | - } |
|
816 | + if ( ! $hide_pending ) { |
|
817 | + $statuses = array_keys( wpinv_get_invoice_statuses() ); |
|
818 | + } |
|
819 | 819 | |
820 | 820 | return get_posts( |
821 | - array( |
|
822 | - 'post_parent' => $this->get_parent_payment_id(), |
|
823 | - 'numberposts' => -1, |
|
824 | - 'post_status' => $statuses, |
|
825 | - 'orderby' => 'ID', |
|
826 | - 'order' => 'ASC', |
|
827 | - 'post_type' => 'wpi_invoice' |
|
828 | - ) |
|
829 | - ); |
|
821 | + array( |
|
822 | + 'post_parent' => $this->get_parent_payment_id(), |
|
823 | + 'numberposts' => -1, |
|
824 | + 'post_status' => $statuses, |
|
825 | + 'orderby' => 'ID', |
|
826 | + 'order' => 'ASC', |
|
827 | + 'post_type' => 'wpi_invoice' |
|
828 | + ) |
|
829 | + ); |
|
830 | 830 | } |
831 | 831 | |
832 | 832 | /** |
@@ -836,7 +836,7 @@ discard block |
||
836 | 836 | * @return int |
837 | 837 | */ |
838 | 838 | public function get_total_payments() { |
839 | - return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() ); |
|
839 | + return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() ); |
|
840 | 840 | } |
841 | 841 | |
842 | 842 | /** |
@@ -860,57 +860,57 @@ discard block |
||
860 | 860 | * |
861 | 861 | * @since 2.4 |
862 | 862 | * @param array $args Array of values for the payment, including amount and transaction ID |
863 | - * @param WPInv_Invoice $invoice If adding an existing invoice. |
|
863 | + * @param WPInv_Invoice $invoice If adding an existing invoice. |
|
864 | 864 | * @return bool |
865 | 865 | */ |
866 | 866 | public function add_payment( $args = array(), $invoice = false ) { |
867 | 867 | |
868 | - // Process each payment once. |
|
868 | + // Process each payment once. |
|
869 | 869 | if ( ! empty( $args['transaction_id'] ) && $this->payment_exists( $args['transaction_id'] ) ) { |
870 | 870 | return false; |
871 | 871 | } |
872 | 872 | |
873 | - // Are we creating a new invoice? |
|
874 | - if ( empty( $invoice ) ) { |
|
875 | - $invoice = $this->create_payment(); |
|
873 | + // Are we creating a new invoice? |
|
874 | + if ( empty( $invoice ) ) { |
|
875 | + $invoice = $this->create_payment(); |
|
876 | 876 | |
877 | - if ( empty( $invoice ) ) { |
|
878 | - return false; |
|
879 | - } |
|
877 | + if ( empty( $invoice ) ) { |
|
878 | + return false; |
|
879 | + } |
|
880 | 880 | |
881 | - } |
|
881 | + } |
|
882 | 882 | |
883 | - $invoice->set_status( 'wpi-renewal' ); |
|
883 | + $invoice->set_status( 'wpi-renewal' ); |
|
884 | 884 | |
885 | - // Maybe set a transaction id. |
|
886 | - if ( ! empty( $args['transaction_id'] ) ) { |
|
887 | - $invoice->set_transaction_id( $args['transaction_id'] ); |
|
888 | - } |
|
885 | + // Maybe set a transaction id. |
|
886 | + if ( ! empty( $args['transaction_id'] ) ) { |
|
887 | + $invoice->set_transaction_id( $args['transaction_id'] ); |
|
888 | + } |
|
889 | 889 | |
890 | - // Set the completed date. |
|
891 | - $invoice->set_completed_date( current_time( 'mysql' ) ); |
|
890 | + // Set the completed date. |
|
891 | + $invoice->set_completed_date( current_time( 'mysql' ) ); |
|
892 | 892 | |
893 | - // And the gateway. |
|
894 | - if ( ! empty( $args['gateway'] ) ) { |
|
895 | - $invoice->set_gateway( $args['gateway'] ); |
|
896 | - } |
|
893 | + // And the gateway. |
|
894 | + if ( ! empty( $args['gateway'] ) ) { |
|
895 | + $invoice->set_gateway( $args['gateway'] ); |
|
896 | + } |
|
897 | 897 | |
898 | - $invoice->save(); |
|
898 | + $invoice->save(); |
|
899 | 899 | |
900 | - if ( ! $invoice->exists() ) { |
|
901 | - return false; |
|
902 | - } |
|
900 | + if ( ! $invoice->exists() ) { |
|
901 | + return false; |
|
902 | + } |
|
903 | 903 | |
904 | - do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this ); |
|
905 | - do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this ); |
|
904 | + do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this ); |
|
905 | + do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this ); |
|
906 | 906 | do_action( 'wpinv_recurring_record_payment', $invoice->get_id(), $this->get_parent_invoice_id(), $invoice->get_recurring_total(), $invoice->get_transaction_id() ); |
907 | 907 | |
908 | 908 | update_post_meta( $invoice->get_id(), '_wpinv_subscription_id', $this->id ); |
909 | 909 | |
910 | 910 | return $invoice->get_id(); |
911 | - } |
|
911 | + } |
|
912 | 912 | |
913 | - /** |
|
913 | + /** |
|
914 | 914 | * Creates a new invoice and returns it. |
915 | 915 | * |
916 | 916 | * @since 1.0.19 |
@@ -918,124 +918,124 @@ discard block |
||
918 | 918 | */ |
919 | 919 | public function create_payment() { |
920 | 920 | |
921 | - $parent_invoice = $this->get_parent_payment(); |
|
922 | - |
|
923 | - if ( ! $parent_invoice->exists() ) { |
|
924 | - return false; |
|
925 | - } |
|
926 | - |
|
927 | - // Duplicate the parent invoice. |
|
928 | - $invoice = getpaid_duplicate_invoice( $parent_invoice ); |
|
929 | - $invoice->set_parent_id( $parent_invoice->get_id() ); |
|
930 | - $invoice->set_subscription_id( $this->get_id() ); |
|
931 | - $invoice->set_remote_subscription_id( $this->get_profile_id() ); |
|
932 | - |
|
933 | - // Set invoice items. |
|
934 | - $subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() ); |
|
935 | - $allowed_items = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] ); |
|
936 | - $invoice_items = array(); |
|
937 | - |
|
938 | - foreach ( $invoice->get_items() as $item ) { |
|
939 | - if ( in_array( $item->get_id(), $allowed_items ) ) { |
|
940 | - $invoice_items[] = $item; |
|
941 | - } |
|
942 | - } |
|
943 | - |
|
944 | - $invoice->set_items( $invoice_items ); |
|
945 | - |
|
946 | - if ( ! empty( $subscription_group['fees'] ) ) { |
|
947 | - $invoice->set_fees( $subscription_group['fees'] ); |
|
948 | - } |
|
949 | - |
|
950 | - // Maybe recalculate discount (Pre-GetPaid Fix). |
|
951 | - $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
952 | - if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) { |
|
953 | - $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
954 | - } |
|
955 | - |
|
956 | - $invoice->recalculate_total(); |
|
957 | - $invoice->set_status( 'wpi-pending' ); |
|
958 | - $invoice->save(); |
|
959 | - |
|
960 | - return $invoice->exists() ? $invoice : false; |
|
961 | - } |
|
962 | - |
|
963 | - /** |
|
964 | - * Renews or completes a subscription |
|
965 | - * |
|
966 | - * @since 1.0.0 |
|
967 | - * @return int The subscription's id |
|
968 | - */ |
|
969 | - public function renew() { |
|
970 | - |
|
971 | - // Complete subscription if applicable |
|
972 | - if ( $this->is_last_renewal() ) { |
|
973 | - return $this->complete(); |
|
974 | - } |
|
975 | - |
|
976 | - // Calculate new expiration |
|
977 | - $frequency = $this->get_frequency(); |
|
978 | - $period = $this->get_period(); |
|
979 | - $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() ); |
|
980 | - |
|
981 | - $this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) ); |
|
982 | - $this->set_status( 'active' ); |
|
983 | - $this->save(); |
|
984 | - |
|
985 | - do_action( 'getpaid_subscription_renewed', $this ); |
|
986 | - |
|
987 | - return $this->get_id(); |
|
988 | - } |
|
989 | - |
|
990 | - /** |
|
991 | - * Marks a subscription as completed |
|
992 | - * |
|
993 | - * Subscription is completed when the number of payments matches the billing_times field |
|
994 | - * |
|
995 | - * @since 1.0.0 |
|
996 | - * @return int|bool Subscription id or false if the subscription is cancelled. |
|
997 | - */ |
|
998 | - public function complete() { |
|
999 | - |
|
1000 | - // Only mark a subscription as complete if it's not already cancelled. |
|
1001 | - if ( $this->has_status( 'cancelled' ) ) { |
|
1002 | - return false; |
|
1003 | - } |
|
1004 | - |
|
1005 | - $this->set_status( 'completed' ); |
|
1006 | - return $this->save(); |
|
1007 | - |
|
1008 | - } |
|
1009 | - |
|
1010 | - /** |
|
1011 | - * Marks a subscription as expired |
|
1012 | - * |
|
1013 | - * @since 1.0.0 |
|
1014 | - * @param bool $check_expiration |
|
1015 | - * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future. |
|
1016 | - */ |
|
1017 | - public function expire( $check_expiration = false ) { |
|
1018 | - |
|
1019 | - if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) { |
|
1020 | - // Do not mark as expired since real expiration date is in the future |
|
1021 | - return false; |
|
1022 | - } |
|
1023 | - |
|
1024 | - $this->set_status( 'expired' ); |
|
1025 | - return $this->save(); |
|
1026 | - |
|
1027 | - } |
|
1028 | - |
|
1029 | - /** |
|
1030 | - * Marks a subscription as failing |
|
1031 | - * |
|
1032 | - * @since 2.4.2 |
|
1033 | - * @return int Subscription id. |
|
1034 | - */ |
|
1035 | - public function failing() { |
|
1036 | - $this->set_status( 'failing' ); |
|
1037 | - return $this->save(); |
|
1038 | - } |
|
921 | + $parent_invoice = $this->get_parent_payment(); |
|
922 | + |
|
923 | + if ( ! $parent_invoice->exists() ) { |
|
924 | + return false; |
|
925 | + } |
|
926 | + |
|
927 | + // Duplicate the parent invoice. |
|
928 | + $invoice = getpaid_duplicate_invoice( $parent_invoice ); |
|
929 | + $invoice->set_parent_id( $parent_invoice->get_id() ); |
|
930 | + $invoice->set_subscription_id( $this->get_id() ); |
|
931 | + $invoice->set_remote_subscription_id( $this->get_profile_id() ); |
|
932 | + |
|
933 | + // Set invoice items. |
|
934 | + $subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() ); |
|
935 | + $allowed_items = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] ); |
|
936 | + $invoice_items = array(); |
|
937 | + |
|
938 | + foreach ( $invoice->get_items() as $item ) { |
|
939 | + if ( in_array( $item->get_id(), $allowed_items ) ) { |
|
940 | + $invoice_items[] = $item; |
|
941 | + } |
|
942 | + } |
|
943 | + |
|
944 | + $invoice->set_items( $invoice_items ); |
|
945 | + |
|
946 | + if ( ! empty( $subscription_group['fees'] ) ) { |
|
947 | + $invoice->set_fees( $subscription_group['fees'] ); |
|
948 | + } |
|
949 | + |
|
950 | + // Maybe recalculate discount (Pre-GetPaid Fix). |
|
951 | + $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
952 | + if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) { |
|
953 | + $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
954 | + } |
|
955 | + |
|
956 | + $invoice->recalculate_total(); |
|
957 | + $invoice->set_status( 'wpi-pending' ); |
|
958 | + $invoice->save(); |
|
959 | + |
|
960 | + return $invoice->exists() ? $invoice : false; |
|
961 | + } |
|
962 | + |
|
963 | + /** |
|
964 | + * Renews or completes a subscription |
|
965 | + * |
|
966 | + * @since 1.0.0 |
|
967 | + * @return int The subscription's id |
|
968 | + */ |
|
969 | + public function renew() { |
|
970 | + |
|
971 | + // Complete subscription if applicable |
|
972 | + if ( $this->is_last_renewal() ) { |
|
973 | + return $this->complete(); |
|
974 | + } |
|
975 | + |
|
976 | + // Calculate new expiration |
|
977 | + $frequency = $this->get_frequency(); |
|
978 | + $period = $this->get_period(); |
|
979 | + $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() ); |
|
980 | + |
|
981 | + $this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) ); |
|
982 | + $this->set_status( 'active' ); |
|
983 | + $this->save(); |
|
984 | + |
|
985 | + do_action( 'getpaid_subscription_renewed', $this ); |
|
986 | + |
|
987 | + return $this->get_id(); |
|
988 | + } |
|
989 | + |
|
990 | + /** |
|
991 | + * Marks a subscription as completed |
|
992 | + * |
|
993 | + * Subscription is completed when the number of payments matches the billing_times field |
|
994 | + * |
|
995 | + * @since 1.0.0 |
|
996 | + * @return int|bool Subscription id or false if the subscription is cancelled. |
|
997 | + */ |
|
998 | + public function complete() { |
|
999 | + |
|
1000 | + // Only mark a subscription as complete if it's not already cancelled. |
|
1001 | + if ( $this->has_status( 'cancelled' ) ) { |
|
1002 | + return false; |
|
1003 | + } |
|
1004 | + |
|
1005 | + $this->set_status( 'completed' ); |
|
1006 | + return $this->save(); |
|
1007 | + |
|
1008 | + } |
|
1009 | + |
|
1010 | + /** |
|
1011 | + * Marks a subscription as expired |
|
1012 | + * |
|
1013 | + * @since 1.0.0 |
|
1014 | + * @param bool $check_expiration |
|
1015 | + * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future. |
|
1016 | + */ |
|
1017 | + public function expire( $check_expiration = false ) { |
|
1018 | + |
|
1019 | + if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) { |
|
1020 | + // Do not mark as expired since real expiration date is in the future |
|
1021 | + return false; |
|
1022 | + } |
|
1023 | + |
|
1024 | + $this->set_status( 'expired' ); |
|
1025 | + return $this->save(); |
|
1026 | + |
|
1027 | + } |
|
1028 | + |
|
1029 | + /** |
|
1030 | + * Marks a subscription as failing |
|
1031 | + * |
|
1032 | + * @since 2.4.2 |
|
1033 | + * @return int Subscription id. |
|
1034 | + */ |
|
1035 | + public function failing() { |
|
1036 | + $this->set_status( 'failing' ); |
|
1037 | + return $this->save(); |
|
1038 | + } |
|
1039 | 1039 | |
1040 | 1040 | /** |
1041 | 1041 | * Marks a subscription as cancelled |
@@ -1044,19 +1044,19 @@ discard block |
||
1044 | 1044 | * @return int Subscription id. |
1045 | 1045 | */ |
1046 | 1046 | public function cancel() { |
1047 | - $this->set_status( 'cancelled' ); |
|
1048 | - return $this->save(); |
|
1047 | + $this->set_status( 'cancelled' ); |
|
1048 | + return $this->save(); |
|
1049 | 1049 | } |
1050 | 1050 | |
1051 | - /** |
|
1052 | - * Determines if a subscription can be cancelled both locally and with a payment processor. |
|
1053 | - * |
|
1054 | - * @since 1.0.0 |
|
1055 | - * @return bool |
|
1056 | - */ |
|
1057 | - public function can_cancel() { |
|
1058 | - return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this ); |
|
1059 | - } |
|
1051 | + /** |
|
1052 | + * Determines if a subscription can be cancelled both locally and with a payment processor. |
|
1053 | + * |
|
1054 | + * @since 1.0.0 |
|
1055 | + * @return bool |
|
1056 | + */ |
|
1057 | + public function can_cancel() { |
|
1058 | + return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this ); |
|
1059 | + } |
|
1060 | 1060 | |
1061 | 1061 | /** |
1062 | 1062 | * Returns an array of subscription statuses that can be cancelled |
@@ -1069,96 +1069,96 @@ discard block |
||
1069 | 1069 | return apply_filters( 'wpinv_recurring_cancellable_statuses', array( 'active', 'trialling', 'failing' ) ); |
1070 | 1070 | } |
1071 | 1071 | |
1072 | - /** |
|
1073 | - * Retrieves the URL to cancel subscription |
|
1074 | - * |
|
1075 | - * @since 1.0.0 |
|
1076 | - * @return string |
|
1077 | - */ |
|
1078 | - public function get_cancel_url() { |
|
1079 | - $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() ); |
|
1080 | - return apply_filters( 'wpinv_subscription_cancel_url', $url, $this ); |
|
1081 | - } |
|
1082 | - |
|
1083 | - /** |
|
1084 | - * Retrieves the URL to view a subscription |
|
1085 | - * |
|
1086 | - * @since 1.0.19 |
|
1087 | - * @return string |
|
1088 | - */ |
|
1089 | - public function get_view_url() { |
|
1090 | - |
|
1091 | - $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ); |
|
1092 | - $url = add_query_arg( 'subscription', $this->get_id(), $url ); |
|
1093 | - |
|
1094 | - return apply_filters( 'getpaid_get_subscription_view_url', $url, $this ); |
|
1095 | - } |
|
1096 | - |
|
1097 | - /** |
|
1098 | - * Determines if subscription can be manually renewed |
|
1099 | - * |
|
1100 | - * This method is filtered by payment gateways in order to return true on subscriptions |
|
1101 | - * that can be renewed manually |
|
1102 | - * |
|
1103 | - * @since 2.5 |
|
1104 | - * @return bool |
|
1105 | - */ |
|
1106 | - public function can_renew() { |
|
1107 | - return apply_filters( 'wpinv_subscription_can_renew', true, $this ); |
|
1108 | - } |
|
1109 | - |
|
1110 | - /** |
|
1111 | - * Retrieves the URL to renew a subscription |
|
1112 | - * |
|
1113 | - * @since 2.5 |
|
1114 | - * @return string |
|
1115 | - */ |
|
1116 | - public function get_renew_url() { |
|
1117 | - $url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' ); |
|
1118 | - return apply_filters( 'wpinv_subscription_renew_url', $url, $this ); |
|
1119 | - } |
|
1120 | - |
|
1121 | - /** |
|
1122 | - * Determines if subscription can have their payment method updated |
|
1123 | - * |
|
1124 | - * @since 1.0.0 |
|
1125 | - * @return bool |
|
1126 | - */ |
|
1127 | - public function can_update() { |
|
1128 | - return apply_filters( 'wpinv_subscription_can_update', false, $this ); |
|
1129 | - } |
|
1130 | - |
|
1131 | - /** |
|
1132 | - * Retrieves the URL to update subscription |
|
1133 | - * |
|
1134 | - * @since 1.0.0 |
|
1135 | - * @return string |
|
1136 | - */ |
|
1137 | - public function get_update_url() { |
|
1138 | - $url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) ); |
|
1139 | - return apply_filters( 'wpinv_subscription_update_url', $url, $this ); |
|
1140 | - } |
|
1141 | - |
|
1142 | - /** |
|
1143 | - * Retrieves the subscription status label |
|
1144 | - * |
|
1145 | - * @since 1.0.0 |
|
1146 | - * @return string |
|
1147 | - */ |
|
1148 | - public function get_status_label() { |
|
1149 | - return getpaid_get_subscription_status_label( $this->get_status() ); |
|
1150 | - } |
|
1151 | - |
|
1152 | - /** |
|
1153 | - * Retrieves the subscription status class |
|
1154 | - * |
|
1155 | - * @since 1.0.19 |
|
1156 | - * @return string |
|
1157 | - */ |
|
1158 | - public function get_status_class() { |
|
1159 | - $statuses = getpaid_get_subscription_status_classes(); |
|
1160 | - return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark'; |
|
1161 | - } |
|
1072 | + /** |
|
1073 | + * Retrieves the URL to cancel subscription |
|
1074 | + * |
|
1075 | + * @since 1.0.0 |
|
1076 | + * @return string |
|
1077 | + */ |
|
1078 | + public function get_cancel_url() { |
|
1079 | + $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() ); |
|
1080 | + return apply_filters( 'wpinv_subscription_cancel_url', $url, $this ); |
|
1081 | + } |
|
1082 | + |
|
1083 | + /** |
|
1084 | + * Retrieves the URL to view a subscription |
|
1085 | + * |
|
1086 | + * @since 1.0.19 |
|
1087 | + * @return string |
|
1088 | + */ |
|
1089 | + public function get_view_url() { |
|
1090 | + |
|
1091 | + $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ); |
|
1092 | + $url = add_query_arg( 'subscription', $this->get_id(), $url ); |
|
1093 | + |
|
1094 | + return apply_filters( 'getpaid_get_subscription_view_url', $url, $this ); |
|
1095 | + } |
|
1096 | + |
|
1097 | + /** |
|
1098 | + * Determines if subscription can be manually renewed |
|
1099 | + * |
|
1100 | + * This method is filtered by payment gateways in order to return true on subscriptions |
|
1101 | + * that can be renewed manually |
|
1102 | + * |
|
1103 | + * @since 2.5 |
|
1104 | + * @return bool |
|
1105 | + */ |
|
1106 | + public function can_renew() { |
|
1107 | + return apply_filters( 'wpinv_subscription_can_renew', true, $this ); |
|
1108 | + } |
|
1109 | + |
|
1110 | + /** |
|
1111 | + * Retrieves the URL to renew a subscription |
|
1112 | + * |
|
1113 | + * @since 2.5 |
|
1114 | + * @return string |
|
1115 | + */ |
|
1116 | + public function get_renew_url() { |
|
1117 | + $url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' ); |
|
1118 | + return apply_filters( 'wpinv_subscription_renew_url', $url, $this ); |
|
1119 | + } |
|
1120 | + |
|
1121 | + /** |
|
1122 | + * Determines if subscription can have their payment method updated |
|
1123 | + * |
|
1124 | + * @since 1.0.0 |
|
1125 | + * @return bool |
|
1126 | + */ |
|
1127 | + public function can_update() { |
|
1128 | + return apply_filters( 'wpinv_subscription_can_update', false, $this ); |
|
1129 | + } |
|
1130 | + |
|
1131 | + /** |
|
1132 | + * Retrieves the URL to update subscription |
|
1133 | + * |
|
1134 | + * @since 1.0.0 |
|
1135 | + * @return string |
|
1136 | + */ |
|
1137 | + public function get_update_url() { |
|
1138 | + $url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) ); |
|
1139 | + return apply_filters( 'wpinv_subscription_update_url', $url, $this ); |
|
1140 | + } |
|
1141 | + |
|
1142 | + /** |
|
1143 | + * Retrieves the subscription status label |
|
1144 | + * |
|
1145 | + * @since 1.0.0 |
|
1146 | + * @return string |
|
1147 | + */ |
|
1148 | + public function get_status_label() { |
|
1149 | + return getpaid_get_subscription_status_label( $this->get_status() ); |
|
1150 | + } |
|
1151 | + |
|
1152 | + /** |
|
1153 | + * Retrieves the subscription status class |
|
1154 | + * |
|
1155 | + * @since 1.0.19 |
|
1156 | + * @return string |
|
1157 | + */ |
|
1158 | + public function get_status_class() { |
|
1159 | + $statuses = getpaid_get_subscription_status_classes(); |
|
1160 | + return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark'; |
|
1161 | + } |
|
1162 | 1162 | |
1163 | 1163 | /** |
1164 | 1164 | * Retrieves the subscription status label |
@@ -1168,11 +1168,11 @@ discard block |
||
1168 | 1168 | */ |
1169 | 1169 | public function get_status_label_html() { |
1170 | 1170 | |
1171 | - $status_label = sanitize_text_field( $this->get_status_label() ); |
|
1172 | - $class = esc_attr( $this->get_status_class() ); |
|
1173 | - $status = sanitize_html_class( $this->get_status() ); |
|
1171 | + $status_label = sanitize_text_field( $this->get_status_label() ); |
|
1172 | + $class = esc_attr( $this->get_status_class() ); |
|
1173 | + $status = sanitize_html_class( $this->get_status() ); |
|
1174 | 1174 | |
1175 | - return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>"; |
|
1175 | + return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>"; |
|
1176 | 1176 | } |
1177 | 1177 | |
1178 | 1178 | /** |
@@ -1183,75 +1183,75 @@ discard block |
||
1183 | 1183 | * @return bool |
1184 | 1184 | */ |
1185 | 1185 | public function payment_exists( $txn_id = '' ) { |
1186 | - $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' ); |
|
1186 | + $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' ); |
|
1187 | 1187 | return ! empty( $invoice_id ); |
1188 | - } |
|
1189 | - |
|
1190 | - /** |
|
1191 | - * Handle the status transition. |
|
1192 | - */ |
|
1193 | - protected function status_transition() { |
|
1194 | - $status_transition = $this->status_transition; |
|
1195 | - |
|
1196 | - // Reset status transition variable. |
|
1197 | - $this->status_transition = false; |
|
1198 | - |
|
1199 | - if ( $status_transition ) { |
|
1200 | - try { |
|
1201 | - |
|
1202 | - // Fire a hook for the status change. |
|
1203 | - do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition ); |
|
1204 | - do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition ); |
|
1205 | - |
|
1206 | - if ( ! empty( $status_transition['from'] ) ) { |
|
1207 | - |
|
1208 | - /* translators: 1: old subscription status 2: new subscription status */ |
|
1209 | - $transition_note = sprintf( __( 'Subscription status changed from %1$s to %2$s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['from'] ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1210 | - |
|
1211 | - // Note the transition occurred. |
|
1212 | - $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1213 | - |
|
1214 | - // Fire another hook. |
|
1215 | - do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this ); |
|
1216 | - do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] ); |
|
1217 | - |
|
1218 | - } else { |
|
1219 | - /* translators: %s: new invoice status */ |
|
1220 | - $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1221 | - |
|
1222 | - // Note the transition occurred. |
|
1223 | - $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1224 | - |
|
1225 | - } |
|
1226 | - } catch ( Exception $e ) { |
|
1227 | - $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() ); |
|
1228 | - } |
|
1229 | - } |
|
1230 | - |
|
1231 | - } |
|
1232 | - |
|
1233 | - /** |
|
1234 | - * Save data to the database. |
|
1235 | - * |
|
1236 | - * @since 1.0.19 |
|
1237 | - * @return int subscription ID |
|
1238 | - */ |
|
1239 | - public function save() { |
|
1240 | - parent::save(); |
|
1241 | - $this->status_transition(); |
|
1242 | - return $this->get_id(); |
|
1243 | - } |
|
1244 | - |
|
1245 | - /** |
|
1246 | - * Activates a subscription. |
|
1247 | - * |
|
1248 | - * @since 1.0.19 |
|
1249 | - * @return int subscription ID |
|
1250 | - */ |
|
1251 | - public function activate() { |
|
1252 | - $status = 'trialling' == $this->get_status() ? 'trialling' : 'active'; |
|
1253 | - $this->set_status( $status ); |
|
1254 | - return $this->save(); |
|
1255 | - } |
|
1188 | + } |
|
1189 | + |
|
1190 | + /** |
|
1191 | + * Handle the status transition. |
|
1192 | + */ |
|
1193 | + protected function status_transition() { |
|
1194 | + $status_transition = $this->status_transition; |
|
1195 | + |
|
1196 | + // Reset status transition variable. |
|
1197 | + $this->status_transition = false; |
|
1198 | + |
|
1199 | + if ( $status_transition ) { |
|
1200 | + try { |
|
1201 | + |
|
1202 | + // Fire a hook for the status change. |
|
1203 | + do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition ); |
|
1204 | + do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition ); |
|
1205 | + |
|
1206 | + if ( ! empty( $status_transition['from'] ) ) { |
|
1207 | + |
|
1208 | + /* translators: 1: old subscription status 2: new subscription status */ |
|
1209 | + $transition_note = sprintf( __( 'Subscription status changed from %1$s to %2$s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['from'] ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1210 | + |
|
1211 | + // Note the transition occurred. |
|
1212 | + $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1213 | + |
|
1214 | + // Fire another hook. |
|
1215 | + do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this ); |
|
1216 | + do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] ); |
|
1217 | + |
|
1218 | + } else { |
|
1219 | + /* translators: %s: new invoice status */ |
|
1220 | + $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1221 | + |
|
1222 | + // Note the transition occurred. |
|
1223 | + $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1224 | + |
|
1225 | + } |
|
1226 | + } catch ( Exception $e ) { |
|
1227 | + $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() ); |
|
1228 | + } |
|
1229 | + } |
|
1230 | + |
|
1231 | + } |
|
1232 | + |
|
1233 | + /** |
|
1234 | + * Save data to the database. |
|
1235 | + * |
|
1236 | + * @since 1.0.19 |
|
1237 | + * @return int subscription ID |
|
1238 | + */ |
|
1239 | + public function save() { |
|
1240 | + parent::save(); |
|
1241 | + $this->status_transition(); |
|
1242 | + return $this->get_id(); |
|
1243 | + } |
|
1244 | + |
|
1245 | + /** |
|
1246 | + * Activates a subscription. |
|
1247 | + * |
|
1248 | + * @since 1.0.19 |
|
1249 | + * @return int subscription ID |
|
1250 | + */ |
|
1251 | + public function activate() { |
|
1252 | + $status = 'trialling' == $this->get_status() ? 'trialling' : 'active'; |
|
1253 | + $this->set_status( $status ); |
|
1254 | + return $this->save(); |
|
1255 | + } |
|
1256 | 1256 | |
1257 | 1257 | } |
@@ -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' ), |
@@ -170,144 +170,144 @@ discard block |
||
170 | 170 | return; |
171 | 171 | } |
172 | 172 | |
173 | - echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
173 | + echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
174 | + |
|
175 | + echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
176 | + |
|
177 | + foreach ( $bank_info as $key => $data ) { |
|
178 | + |
|
179 | + $key = sanitize_html_class( $key ); |
|
180 | + $label = wp_kses_post( $data['label'] ); |
|
181 | + $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
182 | + |
|
183 | + echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL; |
|
184 | + } |
|
174 | 185 | |
175 | - echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
186 | + echo '</table>'; |
|
176 | 187 | |
177 | - foreach ( $bank_info as $key => $data ) { |
|
188 | + } |
|
178 | 189 | |
179 | - $key = sanitize_html_class( $key ); |
|
180 | - $label = wp_kses_post( $data['label'] ); |
|
181 | - $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
190 | + /** |
|
191 | + * Get country locale if localized. |
|
192 | + * |
|
193 | + * @return array |
|
194 | + */ |
|
195 | + public function get_country_locale() { |
|
196 | + |
|
197 | + if ( empty( $this->locale ) ) { |
|
198 | + |
|
199 | + // Locale information to be used - only those that are not 'Sort Code'. |
|
200 | + $this->locale = apply_filters( |
|
201 | + 'getpaid_get_bank_transfer_locale', |
|
202 | + array( |
|
203 | + 'AU' => array( |
|
204 | + 'sortcode' => array( |
|
205 | + 'label' => __( 'BSB', 'invoicing' ), |
|
206 | + ), |
|
207 | + ), |
|
208 | + 'CA' => array( |
|
209 | + 'sortcode' => array( |
|
210 | + 'label' => __( 'Bank transit number', 'invoicing' ), |
|
211 | + ), |
|
212 | + ), |
|
213 | + 'IN' => array( |
|
214 | + 'sortcode' => array( |
|
215 | + 'label' => __( 'IFSC', 'invoicing' ), |
|
216 | + ), |
|
217 | + ), |
|
218 | + 'IT' => array( |
|
219 | + 'sortcode' => array( |
|
220 | + 'label' => __( 'Branch sort', 'invoicing' ), |
|
221 | + ), |
|
222 | + ), |
|
223 | + 'NZ' => array( |
|
224 | + 'sortcode' => array( |
|
225 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
226 | + ), |
|
227 | + ), |
|
228 | + 'SE' => array( |
|
229 | + 'sortcode' => array( |
|
230 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
231 | + ), |
|
232 | + ), |
|
233 | + 'US' => array( |
|
234 | + 'sortcode' => array( |
|
235 | + 'label' => __( 'Routing number', 'invoicing' ), |
|
236 | + ), |
|
237 | + ), |
|
238 | + 'ZA' => array( |
|
239 | + 'sortcode' => array( |
|
240 | + 'label' => __( 'Branch code', 'invoicing' ), |
|
241 | + ), |
|
242 | + ), |
|
243 | + ) |
|
244 | + ); |
|
182 | 245 | |
183 | - echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL; |
|
184 | - } |
|
246 | + } |
|
185 | 247 | |
186 | - echo '</table>'; |
|
248 | + return $this->locale; |
|
187 | 249 | |
188 | 250 | } |
189 | 251 | |
190 | 252 | /** |
191 | - * Get country locale if localized. |
|
192 | - * |
|
193 | - * @return array |
|
194 | - */ |
|
195 | - public function get_country_locale() { |
|
196 | - |
|
197 | - if ( empty( $this->locale ) ) { |
|
198 | - |
|
199 | - // Locale information to be used - only those that are not 'Sort Code'. |
|
200 | - $this->locale = apply_filters( |
|
201 | - 'getpaid_get_bank_transfer_locale', |
|
202 | - array( |
|
203 | - 'AU' => array( |
|
204 | - 'sortcode' => array( |
|
205 | - 'label' => __( 'BSB', 'invoicing' ), |
|
206 | - ), |
|
207 | - ), |
|
208 | - 'CA' => array( |
|
209 | - 'sortcode' => array( |
|
210 | - 'label' => __( 'Bank transit number', 'invoicing' ), |
|
211 | - ), |
|
212 | - ), |
|
213 | - 'IN' => array( |
|
214 | - 'sortcode' => array( |
|
215 | - 'label' => __( 'IFSC', 'invoicing' ), |
|
216 | - ), |
|
217 | - ), |
|
218 | - 'IT' => array( |
|
219 | - 'sortcode' => array( |
|
220 | - 'label' => __( 'Branch sort', 'invoicing' ), |
|
221 | - ), |
|
222 | - ), |
|
223 | - 'NZ' => array( |
|
224 | - 'sortcode' => array( |
|
225 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
226 | - ), |
|
227 | - ), |
|
228 | - 'SE' => array( |
|
229 | - 'sortcode' => array( |
|
230 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
231 | - ), |
|
232 | - ), |
|
233 | - 'US' => array( |
|
234 | - 'sortcode' => array( |
|
235 | - 'label' => __( 'Routing number', 'invoicing' ), |
|
236 | - ), |
|
237 | - ), |
|
238 | - 'ZA' => array( |
|
239 | - 'sortcode' => array( |
|
240 | - 'label' => __( 'Branch code', 'invoicing' ), |
|
241 | - ), |
|
242 | - ), |
|
243 | - ) |
|
244 | - ); |
|
245 | - |
|
246 | - } |
|
247 | - |
|
248 | - return $this->locale; |
|
249 | - |
|
250 | - } |
|
251 | - |
|
252 | - /** |
|
253 | - * Filters the gateway settings. |
|
254 | - * |
|
255 | - * @param array $admin_settings |
|
256 | - */ |
|
257 | - public function admin_settings( $admin_settings ) { |
|
253 | + * Filters the gateway settings. |
|
254 | + * |
|
255 | + * @param array $admin_settings |
|
256 | + */ |
|
257 | + public function admin_settings( $admin_settings ) { |
|
258 | 258 | |
259 | 259 | $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' ); |
260 | - $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
260 | + $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
261 | 261 | |
262 | - $locale = $this->get_country_locale(); |
|
262 | + $locale = $this->get_country_locale(); |
|
263 | 263 | |
264 | - // Get sortcode label in the $locale array and use appropriate one. |
|
265 | - $country = wpinv_default_billing_country(); |
|
266 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
264 | + // Get sortcode label in the $locale array and use appropriate one. |
|
265 | + $country = wpinv_default_billing_country(); |
|
266 | + $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
267 | 267 | |
268 | - $admin_settings['bank_transfer_ac_name'] = array( |
|
268 | + $admin_settings['bank_transfer_ac_name'] = array( |
|
269 | 269 | 'type' => 'text', |
270 | 270 | 'id' => 'bank_transfer_ac_name', |
271 | 271 | 'name' => __( 'Account Name', 'invoicing' ), |
272 | - ); |
|
272 | + ); |
|
273 | 273 | |
274 | - $admin_settings['bank_transfer_ac_no'] = array( |
|
274 | + $admin_settings['bank_transfer_ac_no'] = array( |
|
275 | 275 | 'type' => 'text', |
276 | 276 | 'id' => 'bank_transfer_ac_no', |
277 | 277 | 'name' => __( 'Account Number', 'invoicing' ), |
278 | - ); |
|
278 | + ); |
|
279 | 279 | |
280 | - $admin_settings['bank_transfer_bank_name'] = array( |
|
280 | + $admin_settings['bank_transfer_bank_name'] = array( |
|
281 | 281 | 'type' => 'text', |
282 | 282 | 'id' => 'bank_transfer_bank_name', |
283 | 283 | 'name' => __( 'Bank Name', 'invoicing' ), |
284 | - ); |
|
284 | + ); |
|
285 | 285 | |
286 | - $admin_settings['bank_transfer_ifsc'] = array( |
|
286 | + $admin_settings['bank_transfer_ifsc'] = array( |
|
287 | 287 | 'type' => 'text', |
288 | 288 | 'id' => 'bank_transfer_ifsc', |
289 | 289 | 'name' => __( 'IFSC Code', 'invoicing' ), |
290 | - ); |
|
290 | + ); |
|
291 | 291 | |
292 | - $admin_settings['bank_transfer_iban'] = array( |
|
292 | + $admin_settings['bank_transfer_iban'] = array( |
|
293 | 293 | 'type' => 'text', |
294 | 294 | 'id' => 'bank_transfer_iban', |
295 | 295 | 'name' => __( 'IBAN', 'invoicing' ), |
296 | - ); |
|
296 | + ); |
|
297 | 297 | |
298 | - $admin_settings['bank_transfer_bic'] = array( |
|
298 | + $admin_settings['bank_transfer_bic'] = array( |
|
299 | 299 | 'type' => 'text', |
300 | 300 | 'id' => 'bank_transfer_bic', |
301 | 301 | 'name' => __( 'BIC/Swift Code', 'invoicing' ), |
302 | - ); |
|
302 | + ); |
|
303 | 303 | |
304 | - $admin_settings['bank_transfer_sort_code'] = array( |
|
305 | - 'type' => 'text', |
|
306 | - 'id' => 'bank_transfer_sort_code', |
|
307 | - 'name' => $sortcode, |
|
308 | - ); |
|
304 | + $admin_settings['bank_transfer_sort_code'] = array( |
|
305 | + 'type' => 'text', |
|
306 | + 'id' => 'bank_transfer_sort_code', |
|
307 | + 'name' => $sortcode, |
|
308 | + ); |
|
309 | 309 | |
310 | - $admin_settings['bank_transfer_info'] = array( |
|
310 | + $admin_settings['bank_transfer_info'] = array( |
|
311 | 311 | 'id' => 'bank_transfer_info', |
312 | 312 | 'name' => __( 'Instructions', 'invoicing' ), |
313 | 313 | 'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ), |
@@ -317,17 +317,17 @@ discard block |
||
317 | 317 | 'rows' => 5 |
318 | 318 | ); |
319 | 319 | |
320 | - return $admin_settings; |
|
321 | - } |
|
320 | + return $admin_settings; |
|
321 | + } |
|
322 | 322 | |
323 | - /** |
|
324 | - * Processes invoice addons. |
|
325 | - * |
|
326 | - * @param WPInv_Invoice $invoice |
|
327 | - * @param GetPaid_Form_Item[] $items |
|
328 | - * @return WPInv_Invoice |
|
329 | - */ |
|
330 | - public function process_addons( $invoice, $items ) { |
|
323 | + /** |
|
324 | + * Processes invoice addons. |
|
325 | + * |
|
326 | + * @param WPInv_Invoice $invoice |
|
327 | + * @param GetPaid_Form_Item[] $items |
|
328 | + * @return WPInv_Invoice |
|
329 | + */ |
|
330 | + public function process_addons( $invoice, $items ) { |
|
331 | 331 | |
332 | 332 | foreach ( $items as $item ) { |
333 | 333 | $invoice->add_item( $item ); |
@@ -335,70 +335,70 @@ discard block |
||
335 | 335 | |
336 | 336 | $invoice->recalculate_total(); |
337 | 337 | $invoice->save(); |
338 | - } |
|
338 | + } |
|
339 | 339 | |
340 | - /** |
|
341 | - * (Maybe) renews a bank transfer subscription profile. |
|
342 | - * |
|
343 | - * |
|
340 | + /** |
|
341 | + * (Maybe) renews a bank transfer subscription profile. |
|
342 | + * |
|
343 | + * |
|
344 | 344 | * @param WPInv_Subscription $subscription |
345 | - */ |
|
346 | - public function maybe_renew_subscription( $subscription ) { |
|
345 | + */ |
|
346 | + public function maybe_renew_subscription( $subscription ) { |
|
347 | 347 | |
348 | 348 | // Ensure its our subscription && it's active. |
349 | 349 | if ( $this->id == $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) { |
350 | - $subscription->create_payment(); |
|
350 | + $subscription->create_payment(); |
|
351 | 351 | } |
352 | 352 | |
353 | 353 | } |
354 | 354 | |
355 | - /** |
|
356 | - * Process a bank transfer payment. |
|
357 | - * |
|
358 | - * |
|
355 | + /** |
|
356 | + * Process a bank transfer payment. |
|
357 | + * |
|
358 | + * |
|
359 | 359 | * @param WPInv_Invoice $invoice |
360 | - */ |
|
361 | - public function invoice_paid( $invoice ) { |
|
360 | + */ |
|
361 | + public function invoice_paid( $invoice ) { |
|
362 | 362 | |
363 | - // Abort if not paid by bank transfer. |
|
364 | - if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) { |
|
365 | - return; |
|
366 | - } |
|
363 | + // Abort if not paid by bank transfer. |
|
364 | + if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) { |
|
365 | + return; |
|
366 | + } |
|
367 | 367 | |
368 | - // Is it a parent payment? |
|
369 | - if ( 0 == $invoice->get_parent_id() ) { |
|
368 | + // Is it a parent payment? |
|
369 | + if ( 0 == $invoice->get_parent_id() ) { |
|
370 | 370 | |
371 | - // (Maybe) activate subscriptions. |
|
372 | - $subscriptions = getpaid_get_invoice_subscriptions( $invoice ); |
|
371 | + // (Maybe) activate subscriptions. |
|
372 | + $subscriptions = getpaid_get_invoice_subscriptions( $invoice ); |
|
373 | 373 | |
374 | - if ( ! empty( $subscriptions ) ) { |
|
375 | - $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions ); |
|
374 | + if ( ! empty( $subscriptions ) ) { |
|
375 | + $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions ); |
|
376 | 376 | |
377 | - foreach ( $subscriptions as $subscription ) { |
|
378 | - if ( $subscription->exists() ) { |
|
379 | - $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() ); |
|
380 | - $expiry = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ); |
|
377 | + foreach ( $subscriptions as $subscription ) { |
|
378 | + if ( $subscription->exists() ) { |
|
379 | + $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() ); |
|
380 | + $expiry = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ); |
|
381 | 381 | |
382 | - $subscription->set_next_renewal_date( $expiry ); |
|
383 | - $subscription->set_date_created( current_time( 'mysql' ) ); |
|
384 | - $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() ); |
|
385 | - $subscription->activate(); |
|
386 | - } |
|
387 | - } |
|
382 | + $subscription->set_next_renewal_date( $expiry ); |
|
383 | + $subscription->set_date_created( current_time( 'mysql' ) ); |
|
384 | + $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() ); |
|
385 | + $subscription->activate(); |
|
386 | + } |
|
387 | + } |
|
388 | 388 | |
389 | - } |
|
389 | + } |
|
390 | 390 | |
391 | - } else { |
|
391 | + } else { |
|
392 | 392 | |
393 | - $subscription = getpaid_get_subscription( $invoice->get_subscription_id() ); |
|
393 | + $subscription = getpaid_get_subscription( $invoice->get_subscription_id() ); |
|
394 | 394 | |
395 | - // Renew the subscription. |
|
396 | - if ( $subscription && $subscription->exists() ) { |
|
397 | - $subscription->add_payment( array(), $invoice ); |
|
398 | - $subscription->renew(); |
|
399 | - } |
|
395 | + // Renew the subscription. |
|
396 | + if ( $subscription && $subscription->exists() ) { |
|
397 | + $subscription->add_payment( array(), $invoice ); |
|
398 | + $subscription->renew(); |
|
399 | + } |
|
400 | 400 | |
401 | - } |
|
401 | + } |
|
402 | 402 | |
403 | 403 | } |
404 | 404 |
@@ -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,1056 +11,1056 @@ discard block |
||
11 | 11 | */ |
12 | 12 | class AUI_Component_Input { |
13 | 13 | |
14 | - /** |
|
15 | - * Build the component. |
|
16 | - * |
|
17 | - * @param array $args |
|
18 | - * |
|
19 | - * @return string The rendered component. |
|
20 | - */ |
|
21 | - public static function input($args = array()){ |
|
22 | - $defaults = array( |
|
23 | - 'type' => 'text', |
|
24 | - 'name' => '', |
|
25 | - 'class' => '', |
|
26 | - 'wrap_class' => '', |
|
27 | - 'id' => '', |
|
28 | - 'placeholder'=> '', |
|
29 | - 'title' => '', |
|
30 | - 'value' => '', |
|
31 | - 'required' => false, |
|
32 | - 'label' => '', |
|
33 | - 'label_after'=> false, |
|
34 | - 'label_class'=> '', |
|
35 | - 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
36 | - 'help_text' => '', |
|
37 | - 'validation_text' => '', |
|
38 | - 'validation_pattern' => '', |
|
39 | - 'no_wrap' => false, |
|
40 | - 'input_group_right' => '', |
|
41 | - 'input_group_left' => '', |
|
42 | - 'input_group_right_inside' => false, // forces the input group inside the input |
|
43 | - 'input_group_left_inside' => false, // forces the input group inside the input |
|
44 | - 'step' => '', |
|
45 | - 'switch' => false, // to show checkbox as a switch |
|
46 | - 'checked' => false, // set a checkbox or radio as selected |
|
47 | - 'password_toggle' => true, // toggle view/hide password |
|
48 | - 'element_require' => '', // [%element_id%] == "1" |
|
49 | - 'extra_attributes' => array(), // an array of extra attributes |
|
50 | - 'wrap_attributes' => array() |
|
51 | - ); |
|
52 | - |
|
53 | - /** |
|
54 | - * Parse incoming $args into an array and merge it with $defaults |
|
55 | - */ |
|
56 | - $args = wp_parse_args( $args, $defaults ); |
|
57 | - $output = ''; |
|
58 | - if ( ! empty( $args['type'] ) ) { |
|
59 | - // hidden label option needs to be empty |
|
60 | - $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
61 | - |
|
62 | - $type = sanitize_html_class( $args['type'] ); |
|
63 | - |
|
64 | - $help_text = ''; |
|
65 | - $label = ''; |
|
66 | - $label_after = $args['label_after']; |
|
67 | - $label_args = array( |
|
68 | - 'title'=> $args['label'], |
|
69 | - 'for'=> $args['id'], |
|
70 | - 'class' => $args['label_class']." ", |
|
71 | - 'label_type' => $args['label_type'] |
|
72 | - ); |
|
73 | - |
|
74 | - // floating labels need label after |
|
75 | - if( $args['label_type'] == 'floating' && $type != 'checkbox' ){ |
|
76 | - $label_after = true; |
|
77 | - $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
78 | - } |
|
79 | - |
|
80 | - // Some special sauce for files |
|
81 | - if($type=='file' ){ |
|
82 | - $label_after = true; // if type file we need the label after |
|
83 | - $args['class'] .= ' custom-file-input '; |
|
84 | - }elseif($type=='checkbox'){ |
|
85 | - $label_after = true; // if type file we need the label after |
|
86 | - $args['class'] .= ' custom-control-input '; |
|
87 | - }elseif($type=='datepicker' || $type=='timepicker'){ |
|
88 | - $type = 'text'; |
|
89 | - //$args['class'] .= ' aui-flatpickr bg-initial '; |
|
90 | - $args['class'] .= ' bg-initial '; |
|
91 | - |
|
92 | - $args['extra_attributes']['data-aui-init'] = 'flatpickr'; |
|
93 | - // enqueue the script |
|
94 | - $aui_settings = AyeCode_UI_Settings::instance(); |
|
95 | - $aui_settings->enqueue_flatpickr(); |
|
96 | - } |
|
97 | - |
|
98 | - |
|
99 | - // open/type |
|
100 | - $output .= '<input type="' . $type . '" '; |
|
101 | - |
|
102 | - // name |
|
103 | - if(!empty($args['name'])){ |
|
104 | - $output .= ' name="'.esc_attr($args['name']).'" '; |
|
105 | - } |
|
106 | - |
|
107 | - // id |
|
108 | - if(!empty($args['id'])){ |
|
109 | - $output .= ' id="'.sanitize_html_class($args['id']).'" '; |
|
110 | - } |
|
111 | - |
|
112 | - // placeholder |
|
113 | - if(isset($args['placeholder']) && '' != $args['placeholder'] ){ |
|
114 | - $output .= ' placeholder="'.esc_attr($args['placeholder']).'" '; |
|
115 | - } |
|
116 | - |
|
117 | - // title |
|
118 | - if(!empty($args['title'])){ |
|
119 | - $output .= ' title="'.esc_attr($args['title']).'" '; |
|
120 | - } |
|
121 | - |
|
122 | - // value |
|
123 | - if(!empty($args['value'])){ |
|
124 | - $output .= AUI_Component_Helper::value($args['value']); |
|
125 | - } |
|
126 | - |
|
127 | - // checked, for radio and checkboxes |
|
128 | - if( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ){ |
|
129 | - $output .= ' checked '; |
|
130 | - } |
|
131 | - |
|
132 | - // validation text |
|
133 | - if(!empty($args['validation_text'])){ |
|
134 | - $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" '; |
|
135 | - $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" '; |
|
136 | - } |
|
137 | - |
|
138 | - // validation_pattern |
|
139 | - if(!empty($args['validation_pattern'])){ |
|
140 | - $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" '; |
|
141 | - } |
|
142 | - |
|
143 | - // step (for numbers) |
|
144 | - if(!empty($args['step'])){ |
|
145 | - $output .= ' step="'.$args['step'].'" '; |
|
146 | - } |
|
147 | - |
|
148 | - // required |
|
149 | - if(!empty($args['required'])){ |
|
150 | - $output .= ' required '; |
|
151 | - } |
|
152 | - |
|
153 | - // class |
|
154 | - $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : ''; |
|
155 | - $output .= ' class="form-control '.$class.'" '; |
|
156 | - |
|
157 | - // data-attributes |
|
158 | - $output .= AUI_Component_Helper::data_attributes($args); |
|
159 | - |
|
160 | - // extra attributes |
|
161 | - if(!empty($args['extra_attributes'])){ |
|
162 | - $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
163 | - } |
|
164 | - |
|
165 | - // close |
|
166 | - $output .= ' >'; |
|
167 | - |
|
168 | - |
|
169 | - // label |
|
170 | - if(!empty($args['label'])){ |
|
171 | - if($type == 'file'){$label_args['class'] .= 'custom-file-label';} |
|
172 | - elseif($type == 'checkbox'){$label_args['class'] .= 'custom-control-label';} |
|
173 | - $label = self::label( $label_args, $type ); |
|
174 | - } |
|
175 | - |
|
176 | - // help text |
|
177 | - if(!empty($args['help_text'])){ |
|
178 | - $help_text = AUI_Component_Helper::help_text($args['help_text']); |
|
179 | - } |
|
180 | - |
|
181 | - |
|
182 | - // set help text in the correct possition |
|
183 | - if($label_after){ |
|
184 | - $output .= $label . $help_text; |
|
185 | - } |
|
186 | - |
|
187 | - // some input types need a separate wrap |
|
188 | - if($type == 'file') { |
|
189 | - $output = self::wrap( array( |
|
190 | - 'content' => $output, |
|
191 | - 'class' => 'form-group custom-file' |
|
192 | - ) ); |
|
193 | - }elseif($type == 'checkbox'){ |
|
194 | - $wrap_class = $args['switch'] ? 'custom-switch' : 'custom-checkbox'; |
|
195 | - $output = self::wrap( array( |
|
196 | - 'content' => $output, |
|
197 | - 'class' => 'custom-control '.$wrap_class |
|
198 | - ) ); |
|
199 | - |
|
200 | - if($args['label_type']=='horizontal'){ |
|
201 | - $output = '<div class="col-sm-2 col-form-label"></div><div class="col-sm-10">' . $output . '</div>'; |
|
202 | - } |
|
203 | - }elseif($type == 'password' && $args['password_toggle'] && !$args['input_group_right']){ |
|
204 | - |
|
205 | - |
|
206 | - // allow password field to toggle view |
|
207 | - $args['input_group_right'] = '<span class="input-group-text c-pointer px-3" |
|
14 | + /** |
|
15 | + * Build the component. |
|
16 | + * |
|
17 | + * @param array $args |
|
18 | + * |
|
19 | + * @return string The rendered component. |
|
20 | + */ |
|
21 | + public static function input($args = array()){ |
|
22 | + $defaults = array( |
|
23 | + 'type' => 'text', |
|
24 | + 'name' => '', |
|
25 | + 'class' => '', |
|
26 | + 'wrap_class' => '', |
|
27 | + 'id' => '', |
|
28 | + 'placeholder'=> '', |
|
29 | + 'title' => '', |
|
30 | + 'value' => '', |
|
31 | + 'required' => false, |
|
32 | + 'label' => '', |
|
33 | + 'label_after'=> false, |
|
34 | + 'label_class'=> '', |
|
35 | + 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
36 | + 'help_text' => '', |
|
37 | + 'validation_text' => '', |
|
38 | + 'validation_pattern' => '', |
|
39 | + 'no_wrap' => false, |
|
40 | + 'input_group_right' => '', |
|
41 | + 'input_group_left' => '', |
|
42 | + 'input_group_right_inside' => false, // forces the input group inside the input |
|
43 | + 'input_group_left_inside' => false, // forces the input group inside the input |
|
44 | + 'step' => '', |
|
45 | + 'switch' => false, // to show checkbox as a switch |
|
46 | + 'checked' => false, // set a checkbox or radio as selected |
|
47 | + 'password_toggle' => true, // toggle view/hide password |
|
48 | + 'element_require' => '', // [%element_id%] == "1" |
|
49 | + 'extra_attributes' => array(), // an array of extra attributes |
|
50 | + 'wrap_attributes' => array() |
|
51 | + ); |
|
52 | + |
|
53 | + /** |
|
54 | + * Parse incoming $args into an array and merge it with $defaults |
|
55 | + */ |
|
56 | + $args = wp_parse_args( $args, $defaults ); |
|
57 | + $output = ''; |
|
58 | + if ( ! empty( $args['type'] ) ) { |
|
59 | + // hidden label option needs to be empty |
|
60 | + $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
61 | + |
|
62 | + $type = sanitize_html_class( $args['type'] ); |
|
63 | + |
|
64 | + $help_text = ''; |
|
65 | + $label = ''; |
|
66 | + $label_after = $args['label_after']; |
|
67 | + $label_args = array( |
|
68 | + 'title'=> $args['label'], |
|
69 | + 'for'=> $args['id'], |
|
70 | + 'class' => $args['label_class']." ", |
|
71 | + 'label_type' => $args['label_type'] |
|
72 | + ); |
|
73 | + |
|
74 | + // floating labels need label after |
|
75 | + if( $args['label_type'] == 'floating' && $type != 'checkbox' ){ |
|
76 | + $label_after = true; |
|
77 | + $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
78 | + } |
|
79 | + |
|
80 | + // Some special sauce for files |
|
81 | + if($type=='file' ){ |
|
82 | + $label_after = true; // if type file we need the label after |
|
83 | + $args['class'] .= ' custom-file-input '; |
|
84 | + }elseif($type=='checkbox'){ |
|
85 | + $label_after = true; // if type file we need the label after |
|
86 | + $args['class'] .= ' custom-control-input '; |
|
87 | + }elseif($type=='datepicker' || $type=='timepicker'){ |
|
88 | + $type = 'text'; |
|
89 | + //$args['class'] .= ' aui-flatpickr bg-initial '; |
|
90 | + $args['class'] .= ' bg-initial '; |
|
91 | + |
|
92 | + $args['extra_attributes']['data-aui-init'] = 'flatpickr'; |
|
93 | + // enqueue the script |
|
94 | + $aui_settings = AyeCode_UI_Settings::instance(); |
|
95 | + $aui_settings->enqueue_flatpickr(); |
|
96 | + } |
|
97 | + |
|
98 | + |
|
99 | + // open/type |
|
100 | + $output .= '<input type="' . $type . '" '; |
|
101 | + |
|
102 | + // name |
|
103 | + if(!empty($args['name'])){ |
|
104 | + $output .= ' name="'.esc_attr($args['name']).'" '; |
|
105 | + } |
|
106 | + |
|
107 | + // id |
|
108 | + if(!empty($args['id'])){ |
|
109 | + $output .= ' id="'.sanitize_html_class($args['id']).'" '; |
|
110 | + } |
|
111 | + |
|
112 | + // placeholder |
|
113 | + if(isset($args['placeholder']) && '' != $args['placeholder'] ){ |
|
114 | + $output .= ' placeholder="'.esc_attr($args['placeholder']).'" '; |
|
115 | + } |
|
116 | + |
|
117 | + // title |
|
118 | + if(!empty($args['title'])){ |
|
119 | + $output .= ' title="'.esc_attr($args['title']).'" '; |
|
120 | + } |
|
121 | + |
|
122 | + // value |
|
123 | + if(!empty($args['value'])){ |
|
124 | + $output .= AUI_Component_Helper::value($args['value']); |
|
125 | + } |
|
126 | + |
|
127 | + // checked, for radio and checkboxes |
|
128 | + if( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ){ |
|
129 | + $output .= ' checked '; |
|
130 | + } |
|
131 | + |
|
132 | + // validation text |
|
133 | + if(!empty($args['validation_text'])){ |
|
134 | + $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" '; |
|
135 | + $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" '; |
|
136 | + } |
|
137 | + |
|
138 | + // validation_pattern |
|
139 | + if(!empty($args['validation_pattern'])){ |
|
140 | + $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" '; |
|
141 | + } |
|
142 | + |
|
143 | + // step (for numbers) |
|
144 | + if(!empty($args['step'])){ |
|
145 | + $output .= ' step="'.$args['step'].'" '; |
|
146 | + } |
|
147 | + |
|
148 | + // required |
|
149 | + if(!empty($args['required'])){ |
|
150 | + $output .= ' required '; |
|
151 | + } |
|
152 | + |
|
153 | + // class |
|
154 | + $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : ''; |
|
155 | + $output .= ' class="form-control '.$class.'" '; |
|
156 | + |
|
157 | + // data-attributes |
|
158 | + $output .= AUI_Component_Helper::data_attributes($args); |
|
159 | + |
|
160 | + // extra attributes |
|
161 | + if(!empty($args['extra_attributes'])){ |
|
162 | + $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
163 | + } |
|
164 | + |
|
165 | + // close |
|
166 | + $output .= ' >'; |
|
167 | + |
|
168 | + |
|
169 | + // label |
|
170 | + if(!empty($args['label'])){ |
|
171 | + if($type == 'file'){$label_args['class'] .= 'custom-file-label';} |
|
172 | + elseif($type == 'checkbox'){$label_args['class'] .= 'custom-control-label';} |
|
173 | + $label = self::label( $label_args, $type ); |
|
174 | + } |
|
175 | + |
|
176 | + // help text |
|
177 | + if(!empty($args['help_text'])){ |
|
178 | + $help_text = AUI_Component_Helper::help_text($args['help_text']); |
|
179 | + } |
|
180 | + |
|
181 | + |
|
182 | + // set help text in the correct possition |
|
183 | + if($label_after){ |
|
184 | + $output .= $label . $help_text; |
|
185 | + } |
|
186 | + |
|
187 | + // some input types need a separate wrap |
|
188 | + if($type == 'file') { |
|
189 | + $output = self::wrap( array( |
|
190 | + 'content' => $output, |
|
191 | + 'class' => 'form-group custom-file' |
|
192 | + ) ); |
|
193 | + }elseif($type == 'checkbox'){ |
|
194 | + $wrap_class = $args['switch'] ? 'custom-switch' : 'custom-checkbox'; |
|
195 | + $output = self::wrap( array( |
|
196 | + 'content' => $output, |
|
197 | + 'class' => 'custom-control '.$wrap_class |
|
198 | + ) ); |
|
199 | + |
|
200 | + if($args['label_type']=='horizontal'){ |
|
201 | + $output = '<div class="col-sm-2 col-form-label"></div><div class="col-sm-10">' . $output . '</div>'; |
|
202 | + } |
|
203 | + }elseif($type == 'password' && $args['password_toggle'] && !$args['input_group_right']){ |
|
204 | + |
|
205 | + |
|
206 | + // allow password field to toggle view |
|
207 | + $args['input_group_right'] = '<span class="input-group-text c-pointer px-3" |
|
208 | 208 | onclick="var $el = jQuery(this).find(\'i\');$el.toggleClass(\'fa-eye fa-eye-slash\'); |
209 | 209 | var $eli = jQuery(this).parent().parent().find(\'input\'); |
210 | 210 | if($el.hasClass(\'fa-eye\')) |
211 | 211 | {$eli.attr(\'type\',\'text\');} |
212 | 212 | else{$eli.attr(\'type\',\'password\');}" |
213 | 213 | ><i class="far fa-fw fa-eye-slash"></i></span>'; |
214 | - } |
|
215 | - |
|
216 | - // input group wraps |
|
217 | - if($args['input_group_left'] || $args['input_group_right']){ |
|
218 | - $w100 = strpos($args['class'], 'w-100') !== false ? ' w-100' : ''; |
|
219 | - if($args['input_group_left']){ |
|
220 | - $output = self::wrap( array( |
|
221 | - 'content' => $output, |
|
222 | - 'class' => $args['input_group_left_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group', |
|
223 | - 'input_group_left' => $args['input_group_left'], |
|
224 | - 'input_group_left_inside' => $args['input_group_left_inside'] |
|
225 | - ) ); |
|
226 | - } |
|
227 | - if($args['input_group_right']){ |
|
228 | - $output = self::wrap( array( |
|
229 | - 'content' => $output, |
|
230 | - 'class' => $args['input_group_right_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group', |
|
231 | - 'input_group_right' => $args['input_group_right'], |
|
232 | - 'input_group_right_inside' => $args['input_group_right_inside'] |
|
233 | - ) ); |
|
234 | - } |
|
235 | - |
|
236 | - } |
|
237 | - |
|
238 | - if(!$label_after){ |
|
239 | - $output .= $help_text; |
|
240 | - } |
|
241 | - |
|
242 | - |
|
243 | - if($args['label_type']=='horizontal' && $type != 'checkbox'){ |
|
244 | - $output = self::wrap( array( |
|
245 | - 'content' => $output, |
|
246 | - 'class' => 'col-sm-10', |
|
247 | - ) ); |
|
248 | - } |
|
249 | - |
|
250 | - if(!$label_after){ |
|
251 | - $output = $label . $output; |
|
252 | - } |
|
253 | - |
|
254 | - // wrap |
|
255 | - if ( ! $args['no_wrap'] ) { |
|
256 | - $form_group_class = $args['label_type']=='floating' && $type != 'checkbox' ? 'form-label-group' : 'form-group'; |
|
257 | - $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class; |
|
258 | - $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
259 | - $output = self::wrap(array( |
|
260 | - 'content' => $output, |
|
261 | - 'class' => $wrap_class, |
|
262 | - 'element_require' => $args['element_require'], |
|
263 | - 'argument_id' => $args['id'], |
|
264 | - 'wrap_attributes' => $args['wrap_attributes'], |
|
265 | - )); |
|
266 | - } |
|
267 | - } |
|
268 | - |
|
269 | - return $output; |
|
270 | - } |
|
271 | - |
|
272 | - /** |
|
273 | - * Build the component. |
|
274 | - * |
|
275 | - * @param array $args |
|
276 | - * |
|
277 | - * @return string The rendered component. |
|
278 | - */ |
|
279 | - public static function textarea($args = array()){ |
|
280 | - $defaults = array( |
|
281 | - 'name' => '', |
|
282 | - 'class' => '', |
|
283 | - 'wrap_class' => '', |
|
284 | - 'id' => '', |
|
285 | - 'placeholder'=> '', |
|
286 | - 'title' => '', |
|
287 | - 'value' => '', |
|
288 | - 'required' => false, |
|
289 | - 'label' => '', |
|
290 | - 'label_after'=> false, |
|
291 | - 'label_class' => '', |
|
292 | - 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
293 | - 'help_text' => '', |
|
294 | - 'validation_text' => '', |
|
295 | - 'validation_pattern' => '', |
|
296 | - 'no_wrap' => false, |
|
297 | - 'rows' => '', |
|
298 | - 'wysiwyg' => false, |
|
299 | - 'allow_tags' => false, // Allow HTML tags |
|
300 | - 'element_require' => '', // [%element_id%] == "1" |
|
301 | - 'extra_attributes' => array(), // an array of extra attributes |
|
302 | - 'wrap_attributes' => array(), |
|
303 | - ); |
|
304 | - |
|
305 | - /** |
|
306 | - * Parse incoming $args into an array and merge it with $defaults |
|
307 | - */ |
|
308 | - $args = wp_parse_args( $args, $defaults ); |
|
309 | - $output = ''; |
|
310 | - |
|
311 | - // hidden label option needs to be empty |
|
312 | - $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
313 | - |
|
314 | - // floating labels don't work with wysiwyg so set it as top |
|
315 | - if($args['label_type'] == 'floating' && !empty($args['wysiwyg'])){ |
|
316 | - $args['label_type'] = 'top'; |
|
317 | - } |
|
318 | - |
|
319 | - $label_after = $args['label_after']; |
|
320 | - |
|
321 | - // floating labels need label after |
|
322 | - if( $args['label_type'] == 'floating' && empty($args['wysiwyg']) ){ |
|
323 | - $label_after = true; |
|
324 | - $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
325 | - } |
|
326 | - |
|
327 | - // label |
|
328 | - if(!empty($args['label']) && is_array($args['label'])){ |
|
329 | - }elseif(!empty($args['label']) && !$label_after){ |
|
330 | - $label_args = array( |
|
331 | - 'title'=> $args['label'], |
|
332 | - 'for'=> $args['id'], |
|
333 | - 'class' => $args['label_class']." ", |
|
334 | - 'label_type' => $args['label_type'] |
|
335 | - ); |
|
336 | - $output .= self::label( $label_args ); |
|
337 | - } |
|
338 | - |
|
339 | - // maybe horizontal label |
|
340 | - if($args['label_type']=='horizontal'){ |
|
341 | - $output .= '<div class="col-sm-10">'; |
|
342 | - } |
|
343 | - |
|
344 | - if(!empty($args['wysiwyg'])){ |
|
345 | - ob_start(); |
|
346 | - $content = $args['value']; |
|
347 | - $editor_id = !empty($args['id']) ? sanitize_html_class($args['id']) : 'wp_editor'; |
|
348 | - $settings = array( |
|
349 | - 'textarea_rows' => !empty(absint($args['rows'])) ? absint($args['rows']) : 4, |
|
350 | - 'quicktags' => false, |
|
351 | - 'media_buttons' => false, |
|
352 | - 'editor_class' => 'form-control', |
|
353 | - 'textarea_name' => !empty($args['name']) ? sanitize_html_class($args['name']) : sanitize_html_class($args['id']), |
|
354 | - 'teeny' => true, |
|
355 | - ); |
|
356 | - |
|
357 | - // maybe set settings if array |
|
358 | - if(is_array($args['wysiwyg'])){ |
|
359 | - $settings = wp_parse_args( $args['wysiwyg'], $settings ); |
|
360 | - } |
|
361 | - |
|
362 | - wp_editor( $content, $editor_id, $settings ); |
|
363 | - $output .= ob_get_clean(); |
|
364 | - }else{ |
|
365 | - |
|
366 | - // open |
|
367 | - $output .= '<textarea '; |
|
368 | - |
|
369 | - // name |
|
370 | - if(!empty($args['name'])){ |
|
371 | - $output .= ' name="'.esc_attr($args['name']).'" '; |
|
372 | - } |
|
373 | - |
|
374 | - // id |
|
375 | - if(!empty($args['id'])){ |
|
376 | - $output .= ' id="'.sanitize_html_class($args['id']).'" '; |
|
377 | - } |
|
378 | - |
|
379 | - // placeholder |
|
380 | - if(isset($args['placeholder']) && '' != $args['placeholder']){ |
|
381 | - $output .= ' placeholder="'.esc_attr($args['placeholder']).'" '; |
|
382 | - } |
|
383 | - |
|
384 | - // title |
|
385 | - if(!empty($args['title'])){ |
|
386 | - $output .= ' title="'.esc_attr($args['title']).'" '; |
|
387 | - } |
|
388 | - |
|
389 | - // validation text |
|
390 | - if(!empty($args['validation_text'])){ |
|
391 | - $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" '; |
|
392 | - $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" '; |
|
393 | - } |
|
394 | - |
|
395 | - // validation_pattern |
|
396 | - if(!empty($args['validation_pattern'])){ |
|
397 | - $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" '; |
|
398 | - } |
|
399 | - |
|
400 | - // required |
|
401 | - if(!empty($args['required'])){ |
|
402 | - $output .= ' required '; |
|
403 | - } |
|
404 | - |
|
405 | - // rows |
|
406 | - if(!empty($args['rows'])){ |
|
407 | - $output .= ' rows="'.absint($args['rows']).'" '; |
|
408 | - } |
|
409 | - |
|
410 | - |
|
411 | - // class |
|
412 | - $class = !empty($args['class']) ? $args['class'] : ''; |
|
413 | - $output .= ' class="form-control '.$class.'" '; |
|
414 | - |
|
415 | - // extra attributes |
|
416 | - if(!empty($args['extra_attributes'])){ |
|
417 | - $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
418 | - } |
|
419 | - |
|
420 | - // close tag |
|
421 | - $output .= ' >'; |
|
422 | - |
|
423 | - // value |
|
424 | - if ( ! empty( $args['value'] ) ) { |
|
425 | - if ( ! empty( $args['allow_tags'] ) ) { |
|
426 | - $output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML. |
|
427 | - } else { |
|
428 | - $output .= sanitize_textarea_field( $args['value'] ); |
|
429 | - } |
|
430 | - } |
|
431 | - |
|
432 | - // closing tag |
|
433 | - $output .= '</textarea>'; |
|
434 | - |
|
435 | - } |
|
436 | - |
|
437 | - if(!empty($args['label']) && $label_after){ |
|
438 | - $label_args = array( |
|
439 | - 'title'=> $args['label'], |
|
440 | - 'for'=> $args['id'], |
|
441 | - 'class' => $args['label_class']." ", |
|
442 | - 'label_type' => $args['label_type'] |
|
443 | - ); |
|
444 | - $output .= self::label( $label_args ); |
|
445 | - } |
|
446 | - |
|
447 | - // help text |
|
448 | - if(!empty($args['help_text'])){ |
|
449 | - $output .= AUI_Component_Helper::help_text($args['help_text']); |
|
450 | - } |
|
451 | - |
|
452 | - // maybe horizontal label |
|
453 | - if($args['label_type']=='horizontal'){ |
|
454 | - $output .= '</div>'; |
|
455 | - } |
|
456 | - |
|
457 | - |
|
458 | - // wrap |
|
459 | - if(!$args['no_wrap']){ |
|
460 | - $form_group_class = $args['label_type']=='floating' ? 'form-label-group' : 'form-group'; |
|
461 | - $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class; |
|
462 | - $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
463 | - $output = self::wrap(array( |
|
464 | - 'content' => $output, |
|
465 | - 'class' => $wrap_class, |
|
466 | - 'element_require' => $args['element_require'], |
|
467 | - 'argument_id' => $args['id'], |
|
468 | - 'wrap_attributes' => $args['wrap_attributes'], |
|
469 | - )); |
|
470 | - } |
|
471 | - |
|
472 | - |
|
473 | - return $output; |
|
474 | - } |
|
475 | - |
|
476 | - public static function label($args = array(), $type = ''){ |
|
477 | - //<label for="exampleInputEmail1">Email address</label> |
|
478 | - $defaults = array( |
|
479 | - 'title' => 'div', |
|
480 | - 'for' => '', |
|
481 | - 'class' => '', |
|
482 | - 'label_type' => '', // empty = hidden, top, horizontal |
|
483 | - ); |
|
484 | - |
|
485 | - /** |
|
486 | - * Parse incoming $args into an array and merge it with $defaults |
|
487 | - */ |
|
488 | - $args = wp_parse_args( $args, $defaults ); |
|
489 | - $output = ''; |
|
490 | - |
|
491 | - if($args['title']){ |
|
492 | - |
|
493 | - // maybe hide labels //@todo set a global option for visibility class |
|
494 | - if($type == 'file' || $type == 'checkbox' || $type == 'radio' || !empty($args['label_type']) ){ |
|
495 | - $class = $args['class']; |
|
496 | - }else{ |
|
497 | - $class = 'sr-only '.$args['class']; |
|
498 | - } |
|
499 | - |
|
500 | - // maybe horizontal |
|
501 | - if($args['label_type']=='horizontal' && $type != 'checkbox'){ |
|
502 | - $class .= ' col-sm-2 col-form-label'; |
|
503 | - } |
|
504 | - |
|
505 | - // open |
|
506 | - $output .= '<label '; |
|
507 | - |
|
508 | - // for |
|
509 | - if(!empty($args['for'])){ |
|
510 | - $output .= ' for="'.esc_attr($args['for']).'" '; |
|
511 | - } |
|
512 | - |
|
513 | - // class |
|
514 | - $class = $class ? AUI_Component_Helper::esc_classes( $class ) : ''; |
|
515 | - $output .= ' class="'.$class.'" '; |
|
516 | - |
|
517 | - // close |
|
518 | - $output .= '>'; |
|
519 | - |
|
520 | - |
|
521 | - // title, don't escape fully as can contain html |
|
522 | - if(!empty($args['title'])){ |
|
523 | - $output .= wp_kses_post($args['title']); |
|
524 | - } |
|
525 | - |
|
526 | - // close wrap |
|
527 | - $output .= '</label>'; |
|
528 | - |
|
529 | - |
|
530 | - } |
|
531 | - |
|
532 | - |
|
533 | - return $output; |
|
534 | - } |
|
535 | - |
|
536 | - /** |
|
537 | - * Wrap some content in a HTML wrapper. |
|
538 | - * |
|
539 | - * @param array $args |
|
540 | - * |
|
541 | - * @return string |
|
542 | - */ |
|
543 | - public static function wrap($args = array()){ |
|
544 | - $defaults = array( |
|
545 | - 'type' => 'div', |
|
546 | - 'class' => 'form-group', |
|
547 | - 'content' => '', |
|
548 | - 'input_group_left' => '', |
|
549 | - 'input_group_right' => '', |
|
550 | - 'input_group_left_inside' => false, |
|
551 | - 'input_group_right_inside' => false, |
|
552 | - 'element_require' => '', |
|
553 | - 'argument_id' => '', |
|
554 | - 'wrap_attributes' => array() |
|
555 | - ); |
|
556 | - |
|
557 | - /** |
|
558 | - * Parse incoming $args into an array and merge it with $defaults |
|
559 | - */ |
|
560 | - $args = wp_parse_args( $args, $defaults ); |
|
561 | - $output = ''; |
|
562 | - if($args['type']){ |
|
563 | - |
|
564 | - // open |
|
565 | - $output .= '<'.sanitize_html_class($args['type']); |
|
566 | - |
|
567 | - // element require |
|
568 | - if(!empty($args['element_require'])){ |
|
569 | - $output .= AUI_Component_Helper::element_require($args['element_require']); |
|
570 | - $args['class'] .= " aui-conditional-field"; |
|
571 | - } |
|
572 | - |
|
573 | - // argument_id |
|
574 | - if( !empty($args['argument_id']) ){ |
|
575 | - $output .= ' data-argument="'.esc_attr($args['argument_id']).'"'; |
|
576 | - } |
|
577 | - |
|
578 | - // class |
|
579 | - $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : ''; |
|
580 | - $output .= ' class="'.$class.'" '; |
|
581 | - |
|
582 | - // Attributes |
|
583 | - if ( ! empty( $args['wrap_attributes'] ) ) { |
|
584 | - $output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] ); |
|
585 | - } |
|
586 | - |
|
587 | - // close wrap |
|
588 | - $output .= ' >'; |
|
589 | - |
|
590 | - |
|
591 | - // Input group left |
|
592 | - if(!empty($args['input_group_left'])){ |
|
593 | - $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : ''; |
|
594 | - $input_group_left = strpos($args['input_group_left'], '<') !== false ? $args['input_group_left'] : '<span class="input-group-text">'.$args['input_group_left'].'</span>'; |
|
595 | - $output .= '<div class="input-group-prepend '.$position_class.'">'.$input_group_left.'</div>'; |
|
596 | - } |
|
597 | - |
|
598 | - // content |
|
599 | - $output .= $args['content']; |
|
600 | - |
|
601 | - // Input group right |
|
602 | - if(!empty($args['input_group_right'])){ |
|
603 | - $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : ''; |
|
604 | - $input_group_right = strpos($args['input_group_right'], '<') !== false ? $args['input_group_right'] : '<span class="input-group-text">'.$args['input_group_right'].'</span>'; |
|
605 | - $output .= '<div class="input-group-append '.$position_class.'">'.$input_group_right.'</div>'; |
|
606 | - } |
|
607 | - |
|
608 | - |
|
609 | - // close wrap |
|
610 | - $output .= '</'.sanitize_html_class($args['type']).'>'; |
|
611 | - |
|
612 | - |
|
613 | - }else{ |
|
614 | - $output = $args['content']; |
|
615 | - } |
|
616 | - |
|
617 | - return $output; |
|
618 | - } |
|
619 | - |
|
620 | - /** |
|
621 | - * Build the component. |
|
622 | - * |
|
623 | - * @param array $args |
|
624 | - * |
|
625 | - * @return string The rendered component. |
|
626 | - */ |
|
627 | - public static function select($args = array()){ |
|
628 | - $defaults = array( |
|
629 | - 'class' => '', |
|
630 | - 'wrap_class' => '', |
|
631 | - 'id' => '', |
|
632 | - 'title' => '', |
|
633 | - 'value' => '', // can be an array or a string |
|
634 | - 'required' => false, |
|
635 | - 'label' => '', |
|
636 | - 'label_after'=> false, |
|
637 | - 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
638 | - 'label_class' => '', |
|
639 | - 'help_text' => '', |
|
640 | - 'placeholder'=> '', |
|
641 | - 'options' => array(), // array or string |
|
642 | - 'icon' => '', |
|
643 | - 'multiple' => false, |
|
644 | - 'select2' => false, |
|
645 | - 'no_wrap' => false, |
|
646 | - 'element_require' => '', // [%element_id%] == "1" |
|
647 | - 'extra_attributes' => array(), // an array of extra attributes |
|
648 | - 'wrap_attributes' => array(), |
|
649 | - ); |
|
650 | - |
|
651 | - /** |
|
652 | - * Parse incoming $args into an array and merge it with $defaults |
|
653 | - */ |
|
654 | - $args = wp_parse_args( $args, $defaults ); |
|
655 | - $output = ''; |
|
656 | - |
|
657 | - // for now lets hide floating labels |
|
658 | - if( $args['label_type'] == 'floating' ){$args['label_type'] = 'hidden';} |
|
659 | - |
|
660 | - // hidden label option needs to be empty |
|
661 | - $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
662 | - |
|
663 | - |
|
664 | - $label_after = $args['label_after']; |
|
665 | - |
|
666 | - // floating labels need label after |
|
667 | - if( $args['label_type'] == 'floating' ){ |
|
668 | - $label_after = true; |
|
669 | - $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
670 | - } |
|
671 | - |
|
672 | - // Maybe setup select2 |
|
673 | - $is_select2 = false; |
|
674 | - if(!empty($args['select2'])){ |
|
675 | - $args['class'] .= ' aui-select2'; |
|
676 | - $is_select2 = true; |
|
677 | - }elseif( strpos($args['class'], 'aui-select2') !== false){ |
|
678 | - $is_select2 = true; |
|
679 | - } |
|
680 | - |
|
681 | - // select2 tags |
|
682 | - if( !empty($args['select2']) && $args['select2'] === 'tags'){ // triple equals needed here for some reason |
|
683 | - $args['data-tags'] = 'true'; |
|
684 | - $args['data-token-separators'] = "[',']"; |
|
685 | - $args['multiple'] = true; |
|
686 | - } |
|
687 | - |
|
688 | - // select2 placeholder |
|
689 | - if($is_select2 && isset($args['placeholder']) && '' != $args['placeholder'] && empty($args['data-placeholder'])){ |
|
690 | - $args['data-placeholder'] = esc_attr($args['placeholder']); |
|
691 | - $args['data-allow-clear'] = isset($args['data-allow-clear']) ? (bool) $args['data-allow-clear'] : true; |
|
692 | - } |
|
693 | - |
|
694 | - // label |
|
695 | - if(!empty($args['label']) && is_array($args['label'])){ |
|
696 | - }elseif(!empty($args['label']) && !$label_after){ |
|
697 | - $label_args = array( |
|
698 | - 'title'=> $args['label'], |
|
699 | - 'for'=> $args['id'], |
|
700 | - 'class' => $args['label_class']." ", |
|
701 | - 'label_type' => $args['label_type'] |
|
702 | - ); |
|
703 | - $output .= self::label($label_args); |
|
704 | - } |
|
705 | - |
|
706 | - // maybe horizontal label |
|
707 | - if($args['label_type']=='horizontal'){ |
|
708 | - $output .= '<div class="col-sm-10">'; |
|
709 | - } |
|
710 | - |
|
711 | - // Set hidden input to save empty value for multiselect. |
|
712 | - if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) { |
|
713 | - $output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value=""/>'; |
|
714 | - } |
|
715 | - |
|
716 | - // open/type |
|
717 | - $output .= '<select '; |
|
718 | - |
|
719 | - // style |
|
720 | - if($is_select2){ |
|
721 | - $output .= " style='width:100%;' "; |
|
722 | - } |
|
723 | - |
|
724 | - // element require |
|
725 | - if(!empty($args['element_require'])){ |
|
726 | - $output .= AUI_Component_Helper::element_require($args['element_require']); |
|
727 | - $args['class'] .= " aui-conditional-field"; |
|
728 | - } |
|
729 | - |
|
730 | - // class |
|
731 | - $class = !empty($args['class']) ? $args['class'] : ''; |
|
732 | - $output .= AUI_Component_Helper::class_attr('custom-select '.$class); |
|
733 | - |
|
734 | - // name |
|
735 | - if(!empty($args['name'])){ |
|
736 | - $output .= AUI_Component_Helper::name($args['name'],$args['multiple']); |
|
737 | - } |
|
738 | - |
|
739 | - // id |
|
740 | - if(!empty($args['id'])){ |
|
741 | - $output .= AUI_Component_Helper::id($args['id']); |
|
742 | - } |
|
743 | - |
|
744 | - // title |
|
745 | - if(!empty($args['title'])){ |
|
746 | - $output .= AUI_Component_Helper::title($args['title']); |
|
747 | - } |
|
748 | - |
|
749 | - // data-attributes |
|
750 | - $output .= AUI_Component_Helper::data_attributes($args); |
|
751 | - |
|
752 | - // aria-attributes |
|
753 | - $output .= AUI_Component_Helper::aria_attributes($args); |
|
754 | - |
|
755 | - // extra attributes |
|
756 | - if(!empty($args['extra_attributes'])){ |
|
757 | - $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
758 | - } |
|
759 | - |
|
760 | - // required |
|
761 | - if(!empty($args['required'])){ |
|
762 | - $output .= ' required '; |
|
763 | - } |
|
764 | - |
|
765 | - // multiple |
|
766 | - if(!empty($args['multiple'])){ |
|
767 | - $output .= ' multiple '; |
|
768 | - } |
|
769 | - |
|
770 | - // close opening tag |
|
771 | - $output .= ' >'; |
|
772 | - |
|
773 | - // placeholder |
|
774 | - if(isset($args['placeholder']) && '' != $args['placeholder'] && !$is_select2){ |
|
775 | - $output .= '<option value="" disabled selected hidden>'.esc_attr($args['placeholder']).'</option>'; |
|
776 | - }elseif($is_select2 && !empty($args['placeholder'])){ |
|
777 | - $output .= "<option></option>"; // select2 needs an empty select to fill the placeholder |
|
778 | - } |
|
779 | - |
|
780 | - // Options |
|
781 | - if(!empty($args['options'])){ |
|
782 | - |
|
783 | - if(!is_array($args['options'])){ |
|
784 | - $output .= $args['options']; // not the preferred way but an option |
|
785 | - }else{ |
|
786 | - foreach($args['options'] as $val => $name){ |
|
787 | - $selected = ''; |
|
788 | - if(is_array($name)){ |
|
789 | - if (isset($name['optgroup']) && ($name['optgroup'] == 'start' || $name['optgroup'] == 'end')) { |
|
790 | - $option_label = isset($name['label']) ? $name['label'] : ''; |
|
791 | - |
|
792 | - $output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>'; |
|
793 | - } else { |
|
794 | - $option_label = isset($name['label']) ? $name['label'] : ''; |
|
795 | - $option_value = isset($name['value']) ? $name['value'] : ''; |
|
796 | - if(!empty($args['multiple']) && !empty($args['value']) && is_array($args['value']) ){ |
|
797 | - $selected = in_array($option_value, stripslashes_deep($args['value'])) ? "selected" : ""; |
|
798 | - } elseif(!empty($args['value'])) { |
|
799 | - $selected = selected($option_value,stripslashes_deep($args['value']), false); |
|
800 | - } |
|
801 | - |
|
802 | - $output .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>'; |
|
803 | - } |
|
804 | - }else{ |
|
805 | - if(!empty($args['value'])){ |
|
806 | - if(is_array($args['value'])){ |
|
807 | - $selected = in_array($val,$args['value']) ? 'selected="selected"' : ''; |
|
808 | - } elseif(!empty($args['value'])) { |
|
809 | - $selected = selected( $args['value'], $val, false); |
|
810 | - } |
|
811 | - } |
|
812 | - $output .= '<option value="'.esc_attr($val).'" '.$selected.'>'.esc_attr($name).'</option>'; |
|
813 | - } |
|
814 | - } |
|
815 | - } |
|
816 | - |
|
817 | - } |
|
818 | - |
|
819 | - // closing tag |
|
820 | - $output .= '</select>'; |
|
821 | - |
|
822 | - if(!empty($args['label']) && $label_after){ |
|
823 | - $label_args = array( |
|
824 | - 'title'=> $args['label'], |
|
825 | - 'for'=> $args['id'], |
|
826 | - 'class' => $args['label_class']." ", |
|
827 | - 'label_type' => $args['label_type'] |
|
828 | - ); |
|
829 | - $output .= self::label($label_args); |
|
830 | - } |
|
831 | - |
|
832 | - // help text |
|
833 | - if(!empty($args['help_text'])){ |
|
834 | - $output .= AUI_Component_Helper::help_text($args['help_text']); |
|
835 | - } |
|
836 | - |
|
837 | - // maybe horizontal label |
|
838 | - if($args['label_type']=='horizontal'){ |
|
839 | - $output .= '</div>'; |
|
840 | - } |
|
841 | - |
|
842 | - |
|
843 | - // wrap |
|
844 | - if(!$args['no_wrap']){ |
|
845 | - $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group'; |
|
846 | - $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
847 | - $output = self::wrap(array( |
|
848 | - 'content' => $output, |
|
849 | - 'class' => $wrap_class, |
|
850 | - 'element_require' => $args['element_require'], |
|
851 | - 'argument_id' => $args['id'], |
|
852 | - 'wrap_attributes' => $args['wrap_attributes'], |
|
853 | - )); |
|
854 | - } |
|
855 | - |
|
856 | - |
|
857 | - return $output; |
|
858 | - } |
|
859 | - |
|
860 | - /** |
|
861 | - * Build the component. |
|
862 | - * |
|
863 | - * @param array $args |
|
864 | - * |
|
865 | - * @return string The rendered component. |
|
866 | - */ |
|
867 | - public static function radio($args = array()){ |
|
868 | - $defaults = array( |
|
869 | - 'class' => '', |
|
870 | - 'wrap_class' => '', |
|
871 | - 'id' => '', |
|
872 | - 'title' => '', |
|
873 | - 'horizontal' => false, // sets the lable horizontal |
|
874 | - 'value' => '', |
|
875 | - 'label' => '', |
|
876 | - 'label_class'=> '', |
|
877 | - 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
878 | - 'help_text' => '', |
|
879 | - 'inline' => true, |
|
880 | - 'required' => false, |
|
881 | - 'options' => array(), |
|
882 | - 'icon' => '', |
|
883 | - 'no_wrap' => false, |
|
884 | - 'element_require' => '', // [%element_id%] == "1" |
|
885 | - 'extra_attributes' => array(), // an array of extra attributes |
|
886 | - 'wrap_attributes' => array() |
|
887 | - ); |
|
888 | - |
|
889 | - /** |
|
890 | - * Parse incoming $args into an array and merge it with $defaults |
|
891 | - */ |
|
892 | - $args = wp_parse_args( $args, $defaults ); |
|
893 | - |
|
894 | - // for now lets use horizontal for floating |
|
895 | - if( $args['label_type'] == 'floating' ){$args['label_type'] = 'horizontal';} |
|
896 | - |
|
897 | - $label_args = array( |
|
898 | - 'title'=> $args['label'], |
|
899 | - 'class' => $args['label_class']." pt-0 ", |
|
900 | - 'label_type' => $args['label_type'] |
|
901 | - ); |
|
902 | - |
|
903 | - $output = ''; |
|
904 | - |
|
905 | - |
|
906 | - |
|
907 | - // label before |
|
908 | - if(!empty($args['label'])){ |
|
909 | - $output .= self::label( $label_args, 'radio' ); |
|
910 | - } |
|
911 | - |
|
912 | - // maybe horizontal label |
|
913 | - if($args['label_type']=='horizontal'){ |
|
914 | - $output .= '<div class="col-sm-10">'; |
|
915 | - } |
|
916 | - |
|
917 | - if(!empty($args['options'])){ |
|
918 | - $count = 0; |
|
919 | - foreach($args['options'] as $value => $label){ |
|
920 | - $option_args = $args; |
|
921 | - $option_args['value'] = $value; |
|
922 | - $option_args['label'] = $label; |
|
923 | - $option_args['checked'] = $value == $args['value'] ? true : false; |
|
924 | - $output .= self::radio_option($option_args,$count); |
|
925 | - $count++; |
|
926 | - } |
|
927 | - } |
|
928 | - |
|
929 | - // help text |
|
930 | - $help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : ''; |
|
931 | - $output .= $help_text; |
|
932 | - |
|
933 | - // maybe horizontal label |
|
934 | - if($args['label_type']=='horizontal'){ |
|
935 | - $output .= '</div>'; |
|
936 | - } |
|
937 | - |
|
938 | - // wrap |
|
939 | - $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group'; |
|
940 | - $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
941 | - $output = self::wrap(array( |
|
942 | - 'content' => $output, |
|
943 | - 'class' => $wrap_class, |
|
944 | - 'element_require' => $args['element_require'], |
|
945 | - 'argument_id' => $args['id'], |
|
946 | - 'wrap_attributes' => $args['wrap_attributes'], |
|
947 | - )); |
|
948 | - |
|
949 | - |
|
950 | - return $output; |
|
951 | - } |
|
952 | - |
|
953 | - /** |
|
954 | - * Build the component. |
|
955 | - * |
|
956 | - * @param array $args |
|
957 | - * |
|
958 | - * @return string The rendered component. |
|
959 | - */ |
|
960 | - public static function radio_option($args = array(),$count = ''){ |
|
961 | - $defaults = array( |
|
962 | - 'class' => '', |
|
963 | - 'id' => '', |
|
964 | - 'title' => '', |
|
965 | - 'value' => '', |
|
966 | - 'required' => false, |
|
967 | - 'inline' => true, |
|
968 | - 'label' => '', |
|
969 | - 'options' => array(), |
|
970 | - 'icon' => '', |
|
971 | - 'no_wrap' => false, |
|
972 | - 'extra_attributes' => array() // an array of extra attributes |
|
973 | - ); |
|
974 | - |
|
975 | - /** |
|
976 | - * Parse incoming $args into an array and merge it with $defaults |
|
977 | - */ |
|
978 | - $args = wp_parse_args( $args, $defaults ); |
|
979 | - |
|
980 | - $output = ''; |
|
981 | - |
|
982 | - // open/type |
|
983 | - $output .= '<input type="radio"'; |
|
984 | - |
|
985 | - // class |
|
986 | - $output .= ' class="form-check-input" '; |
|
987 | - |
|
988 | - // name |
|
989 | - if(!empty($args['name'])){ |
|
990 | - $output .= AUI_Component_Helper::name($args['name']); |
|
991 | - } |
|
992 | - |
|
993 | - // id |
|
994 | - if(!empty($args['id'])){ |
|
995 | - $output .= AUI_Component_Helper::id($args['id'].$count); |
|
996 | - } |
|
997 | - |
|
998 | - // title |
|
999 | - if(!empty($args['title'])){ |
|
1000 | - $output .= AUI_Component_Helper::title($args['title']); |
|
1001 | - } |
|
1002 | - |
|
1003 | - // value |
|
1004 | - if(isset($args['value'])){ |
|
1005 | - $output .= AUI_Component_Helper::value($args['value']); |
|
1006 | - } |
|
1007 | - |
|
1008 | - // checked, for radio and checkboxes |
|
1009 | - if( $args['checked'] ){ |
|
1010 | - $output .= ' checked '; |
|
1011 | - } |
|
1012 | - |
|
1013 | - // data-attributes |
|
1014 | - $output .= AUI_Component_Helper::data_attributes($args); |
|
1015 | - |
|
1016 | - // aria-attributes |
|
1017 | - $output .= AUI_Component_Helper::aria_attributes($args); |
|
1018 | - |
|
1019 | - // extra attributes |
|
1020 | - if(!empty($args['extra_attributes'])){ |
|
1021 | - $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
1022 | - } |
|
1023 | - |
|
1024 | - // required |
|
1025 | - if(!empty($args['required'])){ |
|
1026 | - $output .= ' required '; |
|
1027 | - } |
|
1028 | - |
|
1029 | - // close opening tag |
|
1030 | - $output .= ' >'; |
|
1031 | - |
|
1032 | - // label |
|
1033 | - if(!empty($args['label']) && is_array($args['label'])){ |
|
1034 | - }elseif(!empty($args['label'])){ |
|
1035 | - $output .= self::label(array('title'=>$args['label'],'for'=>$args['id'].$count,'class'=>'form-check-label'),'radio'); |
|
1036 | - } |
|
1037 | - |
|
1038 | - // wrap |
|
1039 | - if ( ! $args['no_wrap'] ) { |
|
1040 | - $wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check'; |
|
1041 | - |
|
1042 | - // Unique wrap class |
|
1043 | - $uniq_class = 'fwrap'; |
|
1044 | - if ( ! empty( $args['name'] ) ) { |
|
1045 | - $uniq_class .= '-' . $args['name']; |
|
1046 | - } else if ( ! empty( $args['id'] ) ) { |
|
1047 | - $uniq_class .= '-' . $args['id']; |
|
1048 | - } |
|
1049 | - |
|
1050 | - if ( isset( $args['value'] ) || $args['value'] !== "" ) { |
|
1051 | - $uniq_class .= '-' . $args['value']; |
|
1052 | - } else { |
|
1053 | - $uniq_class .= '-' . $count; |
|
1054 | - } |
|
1055 | - $wrap_class .= ' ' . sanitize_html_class( $uniq_class ); |
|
1056 | - |
|
1057 | - $output = self::wrap(array( |
|
1058 | - 'content' => $output, |
|
1059 | - 'class' => $wrap_class |
|
1060 | - )); |
|
1061 | - } |
|
1062 | - |
|
1063 | - return $output; |
|
1064 | - } |
|
214 | + } |
|
215 | + |
|
216 | + // input group wraps |
|
217 | + if($args['input_group_left'] || $args['input_group_right']){ |
|
218 | + $w100 = strpos($args['class'], 'w-100') !== false ? ' w-100' : ''; |
|
219 | + if($args['input_group_left']){ |
|
220 | + $output = self::wrap( array( |
|
221 | + 'content' => $output, |
|
222 | + 'class' => $args['input_group_left_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group', |
|
223 | + 'input_group_left' => $args['input_group_left'], |
|
224 | + 'input_group_left_inside' => $args['input_group_left_inside'] |
|
225 | + ) ); |
|
226 | + } |
|
227 | + if($args['input_group_right']){ |
|
228 | + $output = self::wrap( array( |
|
229 | + 'content' => $output, |
|
230 | + 'class' => $args['input_group_right_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group', |
|
231 | + 'input_group_right' => $args['input_group_right'], |
|
232 | + 'input_group_right_inside' => $args['input_group_right_inside'] |
|
233 | + ) ); |
|
234 | + } |
|
235 | + |
|
236 | + } |
|
237 | + |
|
238 | + if(!$label_after){ |
|
239 | + $output .= $help_text; |
|
240 | + } |
|
241 | + |
|
242 | + |
|
243 | + if($args['label_type']=='horizontal' && $type != 'checkbox'){ |
|
244 | + $output = self::wrap( array( |
|
245 | + 'content' => $output, |
|
246 | + 'class' => 'col-sm-10', |
|
247 | + ) ); |
|
248 | + } |
|
249 | + |
|
250 | + if(!$label_after){ |
|
251 | + $output = $label . $output; |
|
252 | + } |
|
253 | + |
|
254 | + // wrap |
|
255 | + if ( ! $args['no_wrap'] ) { |
|
256 | + $form_group_class = $args['label_type']=='floating' && $type != 'checkbox' ? 'form-label-group' : 'form-group'; |
|
257 | + $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class; |
|
258 | + $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
259 | + $output = self::wrap(array( |
|
260 | + 'content' => $output, |
|
261 | + 'class' => $wrap_class, |
|
262 | + 'element_require' => $args['element_require'], |
|
263 | + 'argument_id' => $args['id'], |
|
264 | + 'wrap_attributes' => $args['wrap_attributes'], |
|
265 | + )); |
|
266 | + } |
|
267 | + } |
|
268 | + |
|
269 | + return $output; |
|
270 | + } |
|
271 | + |
|
272 | + /** |
|
273 | + * Build the component. |
|
274 | + * |
|
275 | + * @param array $args |
|
276 | + * |
|
277 | + * @return string The rendered component. |
|
278 | + */ |
|
279 | + public static function textarea($args = array()){ |
|
280 | + $defaults = array( |
|
281 | + 'name' => '', |
|
282 | + 'class' => '', |
|
283 | + 'wrap_class' => '', |
|
284 | + 'id' => '', |
|
285 | + 'placeholder'=> '', |
|
286 | + 'title' => '', |
|
287 | + 'value' => '', |
|
288 | + 'required' => false, |
|
289 | + 'label' => '', |
|
290 | + 'label_after'=> false, |
|
291 | + 'label_class' => '', |
|
292 | + 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
293 | + 'help_text' => '', |
|
294 | + 'validation_text' => '', |
|
295 | + 'validation_pattern' => '', |
|
296 | + 'no_wrap' => false, |
|
297 | + 'rows' => '', |
|
298 | + 'wysiwyg' => false, |
|
299 | + 'allow_tags' => false, // Allow HTML tags |
|
300 | + 'element_require' => '', // [%element_id%] == "1" |
|
301 | + 'extra_attributes' => array(), // an array of extra attributes |
|
302 | + 'wrap_attributes' => array(), |
|
303 | + ); |
|
304 | + |
|
305 | + /** |
|
306 | + * Parse incoming $args into an array and merge it with $defaults |
|
307 | + */ |
|
308 | + $args = wp_parse_args( $args, $defaults ); |
|
309 | + $output = ''; |
|
310 | + |
|
311 | + // hidden label option needs to be empty |
|
312 | + $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
313 | + |
|
314 | + // floating labels don't work with wysiwyg so set it as top |
|
315 | + if($args['label_type'] == 'floating' && !empty($args['wysiwyg'])){ |
|
316 | + $args['label_type'] = 'top'; |
|
317 | + } |
|
318 | + |
|
319 | + $label_after = $args['label_after']; |
|
320 | + |
|
321 | + // floating labels need label after |
|
322 | + if( $args['label_type'] == 'floating' && empty($args['wysiwyg']) ){ |
|
323 | + $label_after = true; |
|
324 | + $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
325 | + } |
|
326 | + |
|
327 | + // label |
|
328 | + if(!empty($args['label']) && is_array($args['label'])){ |
|
329 | + }elseif(!empty($args['label']) && !$label_after){ |
|
330 | + $label_args = array( |
|
331 | + 'title'=> $args['label'], |
|
332 | + 'for'=> $args['id'], |
|
333 | + 'class' => $args['label_class']." ", |
|
334 | + 'label_type' => $args['label_type'] |
|
335 | + ); |
|
336 | + $output .= self::label( $label_args ); |
|
337 | + } |
|
338 | + |
|
339 | + // maybe horizontal label |
|
340 | + if($args['label_type']=='horizontal'){ |
|
341 | + $output .= '<div class="col-sm-10">'; |
|
342 | + } |
|
343 | + |
|
344 | + if(!empty($args['wysiwyg'])){ |
|
345 | + ob_start(); |
|
346 | + $content = $args['value']; |
|
347 | + $editor_id = !empty($args['id']) ? sanitize_html_class($args['id']) : 'wp_editor'; |
|
348 | + $settings = array( |
|
349 | + 'textarea_rows' => !empty(absint($args['rows'])) ? absint($args['rows']) : 4, |
|
350 | + 'quicktags' => false, |
|
351 | + 'media_buttons' => false, |
|
352 | + 'editor_class' => 'form-control', |
|
353 | + 'textarea_name' => !empty($args['name']) ? sanitize_html_class($args['name']) : sanitize_html_class($args['id']), |
|
354 | + 'teeny' => true, |
|
355 | + ); |
|
356 | + |
|
357 | + // maybe set settings if array |
|
358 | + if(is_array($args['wysiwyg'])){ |
|
359 | + $settings = wp_parse_args( $args['wysiwyg'], $settings ); |
|
360 | + } |
|
361 | + |
|
362 | + wp_editor( $content, $editor_id, $settings ); |
|
363 | + $output .= ob_get_clean(); |
|
364 | + }else{ |
|
365 | + |
|
366 | + // open |
|
367 | + $output .= '<textarea '; |
|
368 | + |
|
369 | + // name |
|
370 | + if(!empty($args['name'])){ |
|
371 | + $output .= ' name="'.esc_attr($args['name']).'" '; |
|
372 | + } |
|
373 | + |
|
374 | + // id |
|
375 | + if(!empty($args['id'])){ |
|
376 | + $output .= ' id="'.sanitize_html_class($args['id']).'" '; |
|
377 | + } |
|
378 | + |
|
379 | + // placeholder |
|
380 | + if(isset($args['placeholder']) && '' != $args['placeholder']){ |
|
381 | + $output .= ' placeholder="'.esc_attr($args['placeholder']).'" '; |
|
382 | + } |
|
383 | + |
|
384 | + // title |
|
385 | + if(!empty($args['title'])){ |
|
386 | + $output .= ' title="'.esc_attr($args['title']).'" '; |
|
387 | + } |
|
388 | + |
|
389 | + // validation text |
|
390 | + if(!empty($args['validation_text'])){ |
|
391 | + $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" '; |
|
392 | + $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" '; |
|
393 | + } |
|
394 | + |
|
395 | + // validation_pattern |
|
396 | + if(!empty($args['validation_pattern'])){ |
|
397 | + $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" '; |
|
398 | + } |
|
399 | + |
|
400 | + // required |
|
401 | + if(!empty($args['required'])){ |
|
402 | + $output .= ' required '; |
|
403 | + } |
|
404 | + |
|
405 | + // rows |
|
406 | + if(!empty($args['rows'])){ |
|
407 | + $output .= ' rows="'.absint($args['rows']).'" '; |
|
408 | + } |
|
409 | + |
|
410 | + |
|
411 | + // class |
|
412 | + $class = !empty($args['class']) ? $args['class'] : ''; |
|
413 | + $output .= ' class="form-control '.$class.'" '; |
|
414 | + |
|
415 | + // extra attributes |
|
416 | + if(!empty($args['extra_attributes'])){ |
|
417 | + $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
418 | + } |
|
419 | + |
|
420 | + // close tag |
|
421 | + $output .= ' >'; |
|
422 | + |
|
423 | + // value |
|
424 | + if ( ! empty( $args['value'] ) ) { |
|
425 | + if ( ! empty( $args['allow_tags'] ) ) { |
|
426 | + $output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML. |
|
427 | + } else { |
|
428 | + $output .= sanitize_textarea_field( $args['value'] ); |
|
429 | + } |
|
430 | + } |
|
431 | + |
|
432 | + // closing tag |
|
433 | + $output .= '</textarea>'; |
|
434 | + |
|
435 | + } |
|
436 | + |
|
437 | + if(!empty($args['label']) && $label_after){ |
|
438 | + $label_args = array( |
|
439 | + 'title'=> $args['label'], |
|
440 | + 'for'=> $args['id'], |
|
441 | + 'class' => $args['label_class']." ", |
|
442 | + 'label_type' => $args['label_type'] |
|
443 | + ); |
|
444 | + $output .= self::label( $label_args ); |
|
445 | + } |
|
446 | + |
|
447 | + // help text |
|
448 | + if(!empty($args['help_text'])){ |
|
449 | + $output .= AUI_Component_Helper::help_text($args['help_text']); |
|
450 | + } |
|
451 | + |
|
452 | + // maybe horizontal label |
|
453 | + if($args['label_type']=='horizontal'){ |
|
454 | + $output .= '</div>'; |
|
455 | + } |
|
456 | + |
|
457 | + |
|
458 | + // wrap |
|
459 | + if(!$args['no_wrap']){ |
|
460 | + $form_group_class = $args['label_type']=='floating' ? 'form-label-group' : 'form-group'; |
|
461 | + $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class; |
|
462 | + $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
463 | + $output = self::wrap(array( |
|
464 | + 'content' => $output, |
|
465 | + 'class' => $wrap_class, |
|
466 | + 'element_require' => $args['element_require'], |
|
467 | + 'argument_id' => $args['id'], |
|
468 | + 'wrap_attributes' => $args['wrap_attributes'], |
|
469 | + )); |
|
470 | + } |
|
471 | + |
|
472 | + |
|
473 | + return $output; |
|
474 | + } |
|
475 | + |
|
476 | + public static function label($args = array(), $type = ''){ |
|
477 | + //<label for="exampleInputEmail1">Email address</label> |
|
478 | + $defaults = array( |
|
479 | + 'title' => 'div', |
|
480 | + 'for' => '', |
|
481 | + 'class' => '', |
|
482 | + 'label_type' => '', // empty = hidden, top, horizontal |
|
483 | + ); |
|
484 | + |
|
485 | + /** |
|
486 | + * Parse incoming $args into an array and merge it with $defaults |
|
487 | + */ |
|
488 | + $args = wp_parse_args( $args, $defaults ); |
|
489 | + $output = ''; |
|
490 | + |
|
491 | + if($args['title']){ |
|
492 | + |
|
493 | + // maybe hide labels //@todo set a global option for visibility class |
|
494 | + if($type == 'file' || $type == 'checkbox' || $type == 'radio' || !empty($args['label_type']) ){ |
|
495 | + $class = $args['class']; |
|
496 | + }else{ |
|
497 | + $class = 'sr-only '.$args['class']; |
|
498 | + } |
|
499 | + |
|
500 | + // maybe horizontal |
|
501 | + if($args['label_type']=='horizontal' && $type != 'checkbox'){ |
|
502 | + $class .= ' col-sm-2 col-form-label'; |
|
503 | + } |
|
504 | + |
|
505 | + // open |
|
506 | + $output .= '<label '; |
|
507 | + |
|
508 | + // for |
|
509 | + if(!empty($args['for'])){ |
|
510 | + $output .= ' for="'.esc_attr($args['for']).'" '; |
|
511 | + } |
|
512 | + |
|
513 | + // class |
|
514 | + $class = $class ? AUI_Component_Helper::esc_classes( $class ) : ''; |
|
515 | + $output .= ' class="'.$class.'" '; |
|
516 | + |
|
517 | + // close |
|
518 | + $output .= '>'; |
|
519 | + |
|
520 | + |
|
521 | + // title, don't escape fully as can contain html |
|
522 | + if(!empty($args['title'])){ |
|
523 | + $output .= wp_kses_post($args['title']); |
|
524 | + } |
|
525 | + |
|
526 | + // close wrap |
|
527 | + $output .= '</label>'; |
|
528 | + |
|
529 | + |
|
530 | + } |
|
531 | + |
|
532 | + |
|
533 | + return $output; |
|
534 | + } |
|
535 | + |
|
536 | + /** |
|
537 | + * Wrap some content in a HTML wrapper. |
|
538 | + * |
|
539 | + * @param array $args |
|
540 | + * |
|
541 | + * @return string |
|
542 | + */ |
|
543 | + public static function wrap($args = array()){ |
|
544 | + $defaults = array( |
|
545 | + 'type' => 'div', |
|
546 | + 'class' => 'form-group', |
|
547 | + 'content' => '', |
|
548 | + 'input_group_left' => '', |
|
549 | + 'input_group_right' => '', |
|
550 | + 'input_group_left_inside' => false, |
|
551 | + 'input_group_right_inside' => false, |
|
552 | + 'element_require' => '', |
|
553 | + 'argument_id' => '', |
|
554 | + 'wrap_attributes' => array() |
|
555 | + ); |
|
556 | + |
|
557 | + /** |
|
558 | + * Parse incoming $args into an array and merge it with $defaults |
|
559 | + */ |
|
560 | + $args = wp_parse_args( $args, $defaults ); |
|
561 | + $output = ''; |
|
562 | + if($args['type']){ |
|
563 | + |
|
564 | + // open |
|
565 | + $output .= '<'.sanitize_html_class($args['type']); |
|
566 | + |
|
567 | + // element require |
|
568 | + if(!empty($args['element_require'])){ |
|
569 | + $output .= AUI_Component_Helper::element_require($args['element_require']); |
|
570 | + $args['class'] .= " aui-conditional-field"; |
|
571 | + } |
|
572 | + |
|
573 | + // argument_id |
|
574 | + if( !empty($args['argument_id']) ){ |
|
575 | + $output .= ' data-argument="'.esc_attr($args['argument_id']).'"'; |
|
576 | + } |
|
577 | + |
|
578 | + // class |
|
579 | + $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : ''; |
|
580 | + $output .= ' class="'.$class.'" '; |
|
581 | + |
|
582 | + // Attributes |
|
583 | + if ( ! empty( $args['wrap_attributes'] ) ) { |
|
584 | + $output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] ); |
|
585 | + } |
|
586 | + |
|
587 | + // close wrap |
|
588 | + $output .= ' >'; |
|
589 | + |
|
590 | + |
|
591 | + // Input group left |
|
592 | + if(!empty($args['input_group_left'])){ |
|
593 | + $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : ''; |
|
594 | + $input_group_left = strpos($args['input_group_left'], '<') !== false ? $args['input_group_left'] : '<span class="input-group-text">'.$args['input_group_left'].'</span>'; |
|
595 | + $output .= '<div class="input-group-prepend '.$position_class.'">'.$input_group_left.'</div>'; |
|
596 | + } |
|
597 | + |
|
598 | + // content |
|
599 | + $output .= $args['content']; |
|
600 | + |
|
601 | + // Input group right |
|
602 | + if(!empty($args['input_group_right'])){ |
|
603 | + $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : ''; |
|
604 | + $input_group_right = strpos($args['input_group_right'], '<') !== false ? $args['input_group_right'] : '<span class="input-group-text">'.$args['input_group_right'].'</span>'; |
|
605 | + $output .= '<div class="input-group-append '.$position_class.'">'.$input_group_right.'</div>'; |
|
606 | + } |
|
607 | + |
|
608 | + |
|
609 | + // close wrap |
|
610 | + $output .= '</'.sanitize_html_class($args['type']).'>'; |
|
611 | + |
|
612 | + |
|
613 | + }else{ |
|
614 | + $output = $args['content']; |
|
615 | + } |
|
616 | + |
|
617 | + return $output; |
|
618 | + } |
|
619 | + |
|
620 | + /** |
|
621 | + * Build the component. |
|
622 | + * |
|
623 | + * @param array $args |
|
624 | + * |
|
625 | + * @return string The rendered component. |
|
626 | + */ |
|
627 | + public static function select($args = array()){ |
|
628 | + $defaults = array( |
|
629 | + 'class' => '', |
|
630 | + 'wrap_class' => '', |
|
631 | + 'id' => '', |
|
632 | + 'title' => '', |
|
633 | + 'value' => '', // can be an array or a string |
|
634 | + 'required' => false, |
|
635 | + 'label' => '', |
|
636 | + 'label_after'=> false, |
|
637 | + 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
638 | + 'label_class' => '', |
|
639 | + 'help_text' => '', |
|
640 | + 'placeholder'=> '', |
|
641 | + 'options' => array(), // array or string |
|
642 | + 'icon' => '', |
|
643 | + 'multiple' => false, |
|
644 | + 'select2' => false, |
|
645 | + 'no_wrap' => false, |
|
646 | + 'element_require' => '', // [%element_id%] == "1" |
|
647 | + 'extra_attributes' => array(), // an array of extra attributes |
|
648 | + 'wrap_attributes' => array(), |
|
649 | + ); |
|
650 | + |
|
651 | + /** |
|
652 | + * Parse incoming $args into an array and merge it with $defaults |
|
653 | + */ |
|
654 | + $args = wp_parse_args( $args, $defaults ); |
|
655 | + $output = ''; |
|
656 | + |
|
657 | + // for now lets hide floating labels |
|
658 | + if( $args['label_type'] == 'floating' ){$args['label_type'] = 'hidden';} |
|
659 | + |
|
660 | + // hidden label option needs to be empty |
|
661 | + $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type']; |
|
662 | + |
|
663 | + |
|
664 | + $label_after = $args['label_after']; |
|
665 | + |
|
666 | + // floating labels need label after |
|
667 | + if( $args['label_type'] == 'floating' ){ |
|
668 | + $label_after = true; |
|
669 | + $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works. |
|
670 | + } |
|
671 | + |
|
672 | + // Maybe setup select2 |
|
673 | + $is_select2 = false; |
|
674 | + if(!empty($args['select2'])){ |
|
675 | + $args['class'] .= ' aui-select2'; |
|
676 | + $is_select2 = true; |
|
677 | + }elseif( strpos($args['class'], 'aui-select2') !== false){ |
|
678 | + $is_select2 = true; |
|
679 | + } |
|
680 | + |
|
681 | + // select2 tags |
|
682 | + if( !empty($args['select2']) && $args['select2'] === 'tags'){ // triple equals needed here for some reason |
|
683 | + $args['data-tags'] = 'true'; |
|
684 | + $args['data-token-separators'] = "[',']"; |
|
685 | + $args['multiple'] = true; |
|
686 | + } |
|
687 | + |
|
688 | + // select2 placeholder |
|
689 | + if($is_select2 && isset($args['placeholder']) && '' != $args['placeholder'] && empty($args['data-placeholder'])){ |
|
690 | + $args['data-placeholder'] = esc_attr($args['placeholder']); |
|
691 | + $args['data-allow-clear'] = isset($args['data-allow-clear']) ? (bool) $args['data-allow-clear'] : true; |
|
692 | + } |
|
693 | + |
|
694 | + // label |
|
695 | + if(!empty($args['label']) && is_array($args['label'])){ |
|
696 | + }elseif(!empty($args['label']) && !$label_after){ |
|
697 | + $label_args = array( |
|
698 | + 'title'=> $args['label'], |
|
699 | + 'for'=> $args['id'], |
|
700 | + 'class' => $args['label_class']." ", |
|
701 | + 'label_type' => $args['label_type'] |
|
702 | + ); |
|
703 | + $output .= self::label($label_args); |
|
704 | + } |
|
705 | + |
|
706 | + // maybe horizontal label |
|
707 | + if($args['label_type']=='horizontal'){ |
|
708 | + $output .= '<div class="col-sm-10">'; |
|
709 | + } |
|
710 | + |
|
711 | + // Set hidden input to save empty value for multiselect. |
|
712 | + if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) { |
|
713 | + $output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value=""/>'; |
|
714 | + } |
|
715 | + |
|
716 | + // open/type |
|
717 | + $output .= '<select '; |
|
718 | + |
|
719 | + // style |
|
720 | + if($is_select2){ |
|
721 | + $output .= " style='width:100%;' "; |
|
722 | + } |
|
723 | + |
|
724 | + // element require |
|
725 | + if(!empty($args['element_require'])){ |
|
726 | + $output .= AUI_Component_Helper::element_require($args['element_require']); |
|
727 | + $args['class'] .= " aui-conditional-field"; |
|
728 | + } |
|
729 | + |
|
730 | + // class |
|
731 | + $class = !empty($args['class']) ? $args['class'] : ''; |
|
732 | + $output .= AUI_Component_Helper::class_attr('custom-select '.$class); |
|
733 | + |
|
734 | + // name |
|
735 | + if(!empty($args['name'])){ |
|
736 | + $output .= AUI_Component_Helper::name($args['name'],$args['multiple']); |
|
737 | + } |
|
738 | + |
|
739 | + // id |
|
740 | + if(!empty($args['id'])){ |
|
741 | + $output .= AUI_Component_Helper::id($args['id']); |
|
742 | + } |
|
743 | + |
|
744 | + // title |
|
745 | + if(!empty($args['title'])){ |
|
746 | + $output .= AUI_Component_Helper::title($args['title']); |
|
747 | + } |
|
748 | + |
|
749 | + // data-attributes |
|
750 | + $output .= AUI_Component_Helper::data_attributes($args); |
|
751 | + |
|
752 | + // aria-attributes |
|
753 | + $output .= AUI_Component_Helper::aria_attributes($args); |
|
754 | + |
|
755 | + // extra attributes |
|
756 | + if(!empty($args['extra_attributes'])){ |
|
757 | + $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
758 | + } |
|
759 | + |
|
760 | + // required |
|
761 | + if(!empty($args['required'])){ |
|
762 | + $output .= ' required '; |
|
763 | + } |
|
764 | + |
|
765 | + // multiple |
|
766 | + if(!empty($args['multiple'])){ |
|
767 | + $output .= ' multiple '; |
|
768 | + } |
|
769 | + |
|
770 | + // close opening tag |
|
771 | + $output .= ' >'; |
|
772 | + |
|
773 | + // placeholder |
|
774 | + if(isset($args['placeholder']) && '' != $args['placeholder'] && !$is_select2){ |
|
775 | + $output .= '<option value="" disabled selected hidden>'.esc_attr($args['placeholder']).'</option>'; |
|
776 | + }elseif($is_select2 && !empty($args['placeholder'])){ |
|
777 | + $output .= "<option></option>"; // select2 needs an empty select to fill the placeholder |
|
778 | + } |
|
779 | + |
|
780 | + // Options |
|
781 | + if(!empty($args['options'])){ |
|
782 | + |
|
783 | + if(!is_array($args['options'])){ |
|
784 | + $output .= $args['options']; // not the preferred way but an option |
|
785 | + }else{ |
|
786 | + foreach($args['options'] as $val => $name){ |
|
787 | + $selected = ''; |
|
788 | + if(is_array($name)){ |
|
789 | + if (isset($name['optgroup']) && ($name['optgroup'] == 'start' || $name['optgroup'] == 'end')) { |
|
790 | + $option_label = isset($name['label']) ? $name['label'] : ''; |
|
791 | + |
|
792 | + $output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>'; |
|
793 | + } else { |
|
794 | + $option_label = isset($name['label']) ? $name['label'] : ''; |
|
795 | + $option_value = isset($name['value']) ? $name['value'] : ''; |
|
796 | + if(!empty($args['multiple']) && !empty($args['value']) && is_array($args['value']) ){ |
|
797 | + $selected = in_array($option_value, stripslashes_deep($args['value'])) ? "selected" : ""; |
|
798 | + } elseif(!empty($args['value'])) { |
|
799 | + $selected = selected($option_value,stripslashes_deep($args['value']), false); |
|
800 | + } |
|
801 | + |
|
802 | + $output .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>'; |
|
803 | + } |
|
804 | + }else{ |
|
805 | + if(!empty($args['value'])){ |
|
806 | + if(is_array($args['value'])){ |
|
807 | + $selected = in_array($val,$args['value']) ? 'selected="selected"' : ''; |
|
808 | + } elseif(!empty($args['value'])) { |
|
809 | + $selected = selected( $args['value'], $val, false); |
|
810 | + } |
|
811 | + } |
|
812 | + $output .= '<option value="'.esc_attr($val).'" '.$selected.'>'.esc_attr($name).'</option>'; |
|
813 | + } |
|
814 | + } |
|
815 | + } |
|
816 | + |
|
817 | + } |
|
818 | + |
|
819 | + // closing tag |
|
820 | + $output .= '</select>'; |
|
821 | + |
|
822 | + if(!empty($args['label']) && $label_after){ |
|
823 | + $label_args = array( |
|
824 | + 'title'=> $args['label'], |
|
825 | + 'for'=> $args['id'], |
|
826 | + 'class' => $args['label_class']." ", |
|
827 | + 'label_type' => $args['label_type'] |
|
828 | + ); |
|
829 | + $output .= self::label($label_args); |
|
830 | + } |
|
831 | + |
|
832 | + // help text |
|
833 | + if(!empty($args['help_text'])){ |
|
834 | + $output .= AUI_Component_Helper::help_text($args['help_text']); |
|
835 | + } |
|
836 | + |
|
837 | + // maybe horizontal label |
|
838 | + if($args['label_type']=='horizontal'){ |
|
839 | + $output .= '</div>'; |
|
840 | + } |
|
841 | + |
|
842 | + |
|
843 | + // wrap |
|
844 | + if(!$args['no_wrap']){ |
|
845 | + $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group'; |
|
846 | + $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
847 | + $output = self::wrap(array( |
|
848 | + 'content' => $output, |
|
849 | + 'class' => $wrap_class, |
|
850 | + 'element_require' => $args['element_require'], |
|
851 | + 'argument_id' => $args['id'], |
|
852 | + 'wrap_attributes' => $args['wrap_attributes'], |
|
853 | + )); |
|
854 | + } |
|
855 | + |
|
856 | + |
|
857 | + return $output; |
|
858 | + } |
|
859 | + |
|
860 | + /** |
|
861 | + * Build the component. |
|
862 | + * |
|
863 | + * @param array $args |
|
864 | + * |
|
865 | + * @return string The rendered component. |
|
866 | + */ |
|
867 | + public static function radio($args = array()){ |
|
868 | + $defaults = array( |
|
869 | + 'class' => '', |
|
870 | + 'wrap_class' => '', |
|
871 | + 'id' => '', |
|
872 | + 'title' => '', |
|
873 | + 'horizontal' => false, // sets the lable horizontal |
|
874 | + 'value' => '', |
|
875 | + 'label' => '', |
|
876 | + 'label_class'=> '', |
|
877 | + 'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating |
|
878 | + 'help_text' => '', |
|
879 | + 'inline' => true, |
|
880 | + 'required' => false, |
|
881 | + 'options' => array(), |
|
882 | + 'icon' => '', |
|
883 | + 'no_wrap' => false, |
|
884 | + 'element_require' => '', // [%element_id%] == "1" |
|
885 | + 'extra_attributes' => array(), // an array of extra attributes |
|
886 | + 'wrap_attributes' => array() |
|
887 | + ); |
|
888 | + |
|
889 | + /** |
|
890 | + * Parse incoming $args into an array and merge it with $defaults |
|
891 | + */ |
|
892 | + $args = wp_parse_args( $args, $defaults ); |
|
893 | + |
|
894 | + // for now lets use horizontal for floating |
|
895 | + if( $args['label_type'] == 'floating' ){$args['label_type'] = 'horizontal';} |
|
896 | + |
|
897 | + $label_args = array( |
|
898 | + 'title'=> $args['label'], |
|
899 | + 'class' => $args['label_class']." pt-0 ", |
|
900 | + 'label_type' => $args['label_type'] |
|
901 | + ); |
|
902 | + |
|
903 | + $output = ''; |
|
904 | + |
|
905 | + |
|
906 | + |
|
907 | + // label before |
|
908 | + if(!empty($args['label'])){ |
|
909 | + $output .= self::label( $label_args, 'radio' ); |
|
910 | + } |
|
911 | + |
|
912 | + // maybe horizontal label |
|
913 | + if($args['label_type']=='horizontal'){ |
|
914 | + $output .= '<div class="col-sm-10">'; |
|
915 | + } |
|
916 | + |
|
917 | + if(!empty($args['options'])){ |
|
918 | + $count = 0; |
|
919 | + foreach($args['options'] as $value => $label){ |
|
920 | + $option_args = $args; |
|
921 | + $option_args['value'] = $value; |
|
922 | + $option_args['label'] = $label; |
|
923 | + $option_args['checked'] = $value == $args['value'] ? true : false; |
|
924 | + $output .= self::radio_option($option_args,$count); |
|
925 | + $count++; |
|
926 | + } |
|
927 | + } |
|
928 | + |
|
929 | + // help text |
|
930 | + $help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : ''; |
|
931 | + $output .= $help_text; |
|
932 | + |
|
933 | + // maybe horizontal label |
|
934 | + if($args['label_type']=='horizontal'){ |
|
935 | + $output .= '</div>'; |
|
936 | + } |
|
937 | + |
|
938 | + // wrap |
|
939 | + $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group'; |
|
940 | + $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class; |
|
941 | + $output = self::wrap(array( |
|
942 | + 'content' => $output, |
|
943 | + 'class' => $wrap_class, |
|
944 | + 'element_require' => $args['element_require'], |
|
945 | + 'argument_id' => $args['id'], |
|
946 | + 'wrap_attributes' => $args['wrap_attributes'], |
|
947 | + )); |
|
948 | + |
|
949 | + |
|
950 | + return $output; |
|
951 | + } |
|
952 | + |
|
953 | + /** |
|
954 | + * Build the component. |
|
955 | + * |
|
956 | + * @param array $args |
|
957 | + * |
|
958 | + * @return string The rendered component. |
|
959 | + */ |
|
960 | + public static function radio_option($args = array(),$count = ''){ |
|
961 | + $defaults = array( |
|
962 | + 'class' => '', |
|
963 | + 'id' => '', |
|
964 | + 'title' => '', |
|
965 | + 'value' => '', |
|
966 | + 'required' => false, |
|
967 | + 'inline' => true, |
|
968 | + 'label' => '', |
|
969 | + 'options' => array(), |
|
970 | + 'icon' => '', |
|
971 | + 'no_wrap' => false, |
|
972 | + 'extra_attributes' => array() // an array of extra attributes |
|
973 | + ); |
|
974 | + |
|
975 | + /** |
|
976 | + * Parse incoming $args into an array and merge it with $defaults |
|
977 | + */ |
|
978 | + $args = wp_parse_args( $args, $defaults ); |
|
979 | + |
|
980 | + $output = ''; |
|
981 | + |
|
982 | + // open/type |
|
983 | + $output .= '<input type="radio"'; |
|
984 | + |
|
985 | + // class |
|
986 | + $output .= ' class="form-check-input" '; |
|
987 | + |
|
988 | + // name |
|
989 | + if(!empty($args['name'])){ |
|
990 | + $output .= AUI_Component_Helper::name($args['name']); |
|
991 | + } |
|
992 | + |
|
993 | + // id |
|
994 | + if(!empty($args['id'])){ |
|
995 | + $output .= AUI_Component_Helper::id($args['id'].$count); |
|
996 | + } |
|
997 | + |
|
998 | + // title |
|
999 | + if(!empty($args['title'])){ |
|
1000 | + $output .= AUI_Component_Helper::title($args['title']); |
|
1001 | + } |
|
1002 | + |
|
1003 | + // value |
|
1004 | + if(isset($args['value'])){ |
|
1005 | + $output .= AUI_Component_Helper::value($args['value']); |
|
1006 | + } |
|
1007 | + |
|
1008 | + // checked, for radio and checkboxes |
|
1009 | + if( $args['checked'] ){ |
|
1010 | + $output .= ' checked '; |
|
1011 | + } |
|
1012 | + |
|
1013 | + // data-attributes |
|
1014 | + $output .= AUI_Component_Helper::data_attributes($args); |
|
1015 | + |
|
1016 | + // aria-attributes |
|
1017 | + $output .= AUI_Component_Helper::aria_attributes($args); |
|
1018 | + |
|
1019 | + // extra attributes |
|
1020 | + if(!empty($args['extra_attributes'])){ |
|
1021 | + $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']); |
|
1022 | + } |
|
1023 | + |
|
1024 | + // required |
|
1025 | + if(!empty($args['required'])){ |
|
1026 | + $output .= ' required '; |
|
1027 | + } |
|
1028 | + |
|
1029 | + // close opening tag |
|
1030 | + $output .= ' >'; |
|
1031 | + |
|
1032 | + // label |
|
1033 | + if(!empty($args['label']) && is_array($args['label'])){ |
|
1034 | + }elseif(!empty($args['label'])){ |
|
1035 | + $output .= self::label(array('title'=>$args['label'],'for'=>$args['id'].$count,'class'=>'form-check-label'),'radio'); |
|
1036 | + } |
|
1037 | + |
|
1038 | + // wrap |
|
1039 | + if ( ! $args['no_wrap'] ) { |
|
1040 | + $wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check'; |
|
1041 | + |
|
1042 | + // Unique wrap class |
|
1043 | + $uniq_class = 'fwrap'; |
|
1044 | + if ( ! empty( $args['name'] ) ) { |
|
1045 | + $uniq_class .= '-' . $args['name']; |
|
1046 | + } else if ( ! empty( $args['id'] ) ) { |
|
1047 | + $uniq_class .= '-' . $args['id']; |
|
1048 | + } |
|
1049 | + |
|
1050 | + if ( isset( $args['value'] ) || $args['value'] !== "" ) { |
|
1051 | + $uniq_class .= '-' . $args['value']; |
|
1052 | + } else { |
|
1053 | + $uniq_class .= '-' . $count; |
|
1054 | + } |
|
1055 | + $wrap_class .= ' ' . sanitize_html_class( $uniq_class ); |
|
1056 | + |
|
1057 | + $output = self::wrap(array( |
|
1058 | + 'content' => $output, |
|
1059 | + 'class' => $wrap_class |
|
1060 | + )); |
|
1061 | + } |
|
1062 | + |
|
1063 | + return $output; |
|
1064 | + } |
|
1065 | 1065 | |
1066 | 1066 | } |
1067 | 1067 | \ No newline at end of file |
@@ -14,90 +14,90 @@ discard block |
||
14 | 14 | class GetPaid_Admin { |
15 | 15 | |
16 | 16 | /** |
17 | - * Local path to this plugins admin directory |
|
18 | - * |
|
19 | - * @var string |
|
20 | - */ |
|
21 | - public $admin_path; |
|
22 | - |
|
23 | - /** |
|
24 | - * Web path to this plugins admin directory |
|
25 | - * |
|
26 | - * @var string |
|
27 | - */ |
|
28 | - public $admin_url; |
|
17 | + * Local path to this plugins admin directory |
|
18 | + * |
|
19 | + * @var string |
|
20 | + */ |
|
21 | + public $admin_path; |
|
22 | + |
|
23 | + /** |
|
24 | + * Web path to this plugins admin directory |
|
25 | + * |
|
26 | + * @var string |
|
27 | + */ |
|
28 | + public $admin_url; |
|
29 | 29 | |
30 | - /** |
|
31 | - * Reports components. |
|
32 | - * |
|
33 | - * @var GetPaid_Reports |
|
34 | - */ |
|
30 | + /** |
|
31 | + * Reports components. |
|
32 | + * |
|
33 | + * @var GetPaid_Reports |
|
34 | + */ |
|
35 | 35 | public $reports; |
36 | 36 | |
37 | 37 | /** |
38 | - * Class constructor. |
|
39 | - */ |
|
40 | - public function __construct(){ |
|
38 | + * Class constructor. |
|
39 | + */ |
|
40 | + public function __construct(){ |
|
41 | 41 | |
42 | 42 | $this->admin_path = plugin_dir_path( __FILE__ ); |
43 | - $this->admin_url = plugins_url( '/', __FILE__ ); |
|
44 | - $this->reports = new GetPaid_Reports(); |
|
43 | + $this->admin_url = plugins_url( '/', __FILE__ ); |
|
44 | + $this->reports = new GetPaid_Reports(); |
|
45 | 45 | |
46 | 46 | if ( is_admin() ) { |
47 | - $this->init_admin_hooks(); |
|
47 | + $this->init_admin_hooks(); |
|
48 | 48 | } |
49 | 49 | |
50 | 50 | } |
51 | 51 | |
52 | 52 | /** |
53 | - * Init action and filter hooks |
|
54 | - * |
|
55 | - */ |
|
56 | - private function init_admin_hooks() { |
|
53 | + * Init action and filter hooks |
|
54 | + * |
|
55 | + */ |
|
56 | + private function init_admin_hooks() { |
|
57 | 57 | add_action( 'admin_enqueue_scripts', array( $this, 'enqeue_scripts' ), 9 ); |
58 | 58 | add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) ); |
59 | 59 | add_action( 'admin_init', array( $this, 'init_ayecode_connect_helper' ) ); |
60 | 60 | add_action( 'admin_init', array( $this, 'activation_redirect') ); |
61 | 61 | add_action( 'admin_init', array( $this, 'maybe_do_admin_action') ); |
62 | - add_action( 'admin_notices', array( $this, 'show_notices' ) ); |
|
63 | - add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) ); |
|
64 | - add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) ); |
|
65 | - add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) ); |
|
66 | - add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) ); |
|
62 | + add_action( 'admin_notices', array( $this, 'show_notices' ) ); |
|
63 | + add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) ); |
|
64 | + add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) ); |
|
65 | + add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) ); |
|
66 | + add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) ); |
|
67 | 67 | add_action( 'getpaid_authenticated_admin_action_reset_tax_rates', array( $this, 'admin_reset_tax_rates' ) ); |
68 | - add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) ); |
|
69 | - add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) ); |
|
70 | - add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) ); |
|
71 | - add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) ); |
|
72 | - add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) ); |
|
73 | - add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) ); |
|
74 | - add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) ); |
|
75 | - add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) ); |
|
76 | - do_action( 'getpaid_init_admin_hooks', $this ); |
|
77 | - |
|
78 | - // Setup/welcome |
|
79 | - if ( ! empty( $_GET['page'] ) ) { |
|
80 | - switch ( $_GET['page'] ) { |
|
81 | - case 'gp-setup' : |
|
82 | - include_once( dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php' ); |
|
83 | - break; |
|
84 | - } |
|
85 | - } |
|
68 | + add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) ); |
|
69 | + add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) ); |
|
70 | + add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) ); |
|
71 | + add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) ); |
|
72 | + add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) ); |
|
73 | + add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) ); |
|
74 | + add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) ); |
|
75 | + add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) ); |
|
76 | + do_action( 'getpaid_init_admin_hooks', $this ); |
|
77 | + |
|
78 | + // Setup/welcome |
|
79 | + if ( ! empty( $_GET['page'] ) ) { |
|
80 | + switch ( $_GET['page'] ) { |
|
81 | + case 'gp-setup' : |
|
82 | + include_once( dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php' ); |
|
83 | + break; |
|
84 | + } |
|
85 | + } |
|
86 | 86 | |
87 | 87 | } |
88 | 88 | |
89 | 89 | /** |
90 | - * Register admin scripts |
|
91 | - * |
|
92 | - */ |
|
93 | - public function enqeue_scripts() { |
|
90 | + * Register admin scripts |
|
91 | + * |
|
92 | + */ |
|
93 | + public function enqeue_scripts() { |
|
94 | 94 | global $current_screen, $pagenow; |
95 | 95 | |
96 | - $page = isset( $_GET['page'] ) ? $_GET['page'] : ''; |
|
97 | - $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php'; |
|
96 | + $page = isset( $_GET['page'] ) ? $_GET['page'] : ''; |
|
97 | + $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php'; |
|
98 | 98 | |
99 | 99 | if ( ! empty( $current_screen->post_type ) ) { |
100 | - $page = $current_screen->post_type; |
|
100 | + $page = $current_screen->post_type; |
|
101 | 101 | } |
102 | 102 | |
103 | 103 | // General styles. |
@@ -118,54 +118,54 @@ discard block |
||
118 | 118 | } |
119 | 119 | |
120 | 120 | // Payment form scripts. |
121 | - if ( 'wpi_payment_form' == $page && $editing ) { |
|
121 | + if ( 'wpi_payment_form' == $page && $editing ) { |
|
122 | 122 | $this->load_payment_form_scripts(); |
123 | 123 | } |
124 | 124 | |
125 | - if ( $page == 'wpinv-subscriptions' ) { |
|
126 | - wp_enqueue_script( 'postbox' ); |
|
127 | - } |
|
125 | + if ( $page == 'wpinv-subscriptions' ) { |
|
126 | + wp_enqueue_script( 'postbox' ); |
|
127 | + } |
|
128 | 128 | |
129 | 129 | } |
130 | 130 | |
131 | 131 | /** |
132 | - * Returns admin js translations. |
|
133 | - * |
|
134 | - */ |
|
135 | - protected function get_admin_i18() { |
|
132 | + * Returns admin js translations. |
|
133 | + * |
|
134 | + */ |
|
135 | + protected function get_admin_i18() { |
|
136 | 136 | global $post; |
137 | 137 | |
138 | - $date_range = array( |
|
139 | - 'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days' |
|
140 | - ); |
|
138 | + $date_range = array( |
|
139 | + 'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days' |
|
140 | + ); |
|
141 | 141 | |
142 | - if ( $date_range['period'] == 'custom' ) { |
|
142 | + if ( $date_range['period'] == 'custom' ) { |
|
143 | 143 | |
144 | - if ( isset( $_GET['from'] ) ) { |
|
145 | - $date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS ); |
|
146 | - } |
|
144 | + if ( isset( $_GET['from'] ) ) { |
|
145 | + $date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS ); |
|
146 | + } |
|
147 | 147 | |
148 | - if ( isset( $_GET['to'] ) ) { |
|
149 | - $date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS ); |
|
150 | - } |
|
148 | + if ( isset( $_GET['to'] ) ) { |
|
149 | + $date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS ); |
|
150 | + } |
|
151 | 151 | |
152 | - } |
|
152 | + } |
|
153 | 153 | |
154 | 154 | $i18n = array( |
155 | 155 | 'ajax_url' => admin_url( 'admin-ajax.php' ), |
156 | 156 | 'post_ID' => isset( $post->ID ) ? $post->ID : '', |
157 | - 'wpinv_nonce' => wp_create_nonce( 'wpinv-nonce' ), |
|
158 | - 'rest_nonce' => wp_create_nonce( 'wp_rest' ), |
|
159 | - 'rest_root' => esc_url_raw( rest_url() ), |
|
160 | - 'date_range' => $date_range, |
|
157 | + 'wpinv_nonce' => wp_create_nonce( 'wpinv-nonce' ), |
|
158 | + 'rest_nonce' => wp_create_nonce( 'wp_rest' ), |
|
159 | + 'rest_root' => esc_url_raw( rest_url() ), |
|
160 | + 'date_range' => $date_range, |
|
161 | 161 | 'add_invoice_note_nonce' => wp_create_nonce( 'add-invoice-note' ), |
162 | 162 | 'delete_invoice_note_nonce' => wp_create_nonce( 'delete-invoice-note' ), |
163 | 163 | 'invoice_item_nonce' => wp_create_nonce( 'invoice-item' ), |
164 | 164 | 'billing_details_nonce' => wp_create_nonce( 'get-billing-details' ), |
165 | 165 | 'tax' => wpinv_tax_amount(), |
166 | 166 | 'discount' => 0, |
167 | - 'currency_symbol' => wpinv_currency_symbol(), |
|
168 | - 'currency' => wpinv_get_currency(), |
|
167 | + 'currency_symbol' => wpinv_currency_symbol(), |
|
168 | + 'currency' => wpinv_get_currency(), |
|
169 | 169 | 'currency_pos' => wpinv_currency_position(), |
170 | 170 | 'thousand_sep' => wpinv_thousands_separator(), |
171 | 171 | 'decimal_sep' => wpinv_decimal_separator(), |
@@ -185,118 +185,118 @@ discard block |
||
185 | 185 | 'item_description' => __( 'Item Description', 'invoicing' ), |
186 | 186 | 'invoice_description' => __( 'Invoice Description', 'invoicing' ), |
187 | 187 | 'discount_description' => __( 'Discount Description', 'invoicing' ), |
188 | - 'searching' => __( 'Searching', 'invoicing' ), |
|
189 | - 'loading' => __( 'Loading...', 'invoicing' ), |
|
190 | - 'search_customers' => __( 'Enter customer name or email', 'invoicing' ), |
|
191 | - 'search_items' => __( 'Enter item name', 'invoicing' ), |
|
188 | + 'searching' => __( 'Searching', 'invoicing' ), |
|
189 | + 'loading' => __( 'Loading...', 'invoicing' ), |
|
190 | + 'search_customers' => __( 'Enter customer name or email', 'invoicing' ), |
|
191 | + 'search_items' => __( 'Enter item name', 'invoicing' ), |
|
192 | 192 | ); |
193 | 193 | |
194 | - if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) { |
|
194 | + if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) { |
|
195 | 195 | |
196 | - $invoice = new WPInv_Invoice( $post ); |
|
197 | - $i18n['save_invoice'] = sprintf( |
|
198 | - __( 'Save %s', 'invoicing' ), |
|
199 | - ucfirst( $invoice->get_invoice_quote_type() ) |
|
200 | - ); |
|
196 | + $invoice = new WPInv_Invoice( $post ); |
|
197 | + $i18n['save_invoice'] = sprintf( |
|
198 | + __( 'Save %s', 'invoicing' ), |
|
199 | + ucfirst( $invoice->get_invoice_quote_type() ) |
|
200 | + ); |
|
201 | 201 | |
202 | - $i18n['invoice_description'] = sprintf( |
|
203 | - __( '%s Description', 'invoicing' ), |
|
204 | - ucfirst( $invoice->get_invoice_quote_type() ) |
|
205 | - ); |
|
202 | + $i18n['invoice_description'] = sprintf( |
|
203 | + __( '%s Description', 'invoicing' ), |
|
204 | + ucfirst( $invoice->get_invoice_quote_type() ) |
|
205 | + ); |
|
206 | 206 | |
207 | - } |
|
208 | - return $i18n; |
|
209 | - } |
|
207 | + } |
|
208 | + return $i18n; |
|
209 | + } |
|
210 | 210 | |
211 | - /** |
|
212 | - * Change the admin footer text on GetPaid admin pages. |
|
213 | - * |
|
214 | - * @since 2.0.0 |
|
215 | - * @param string $footer_text |
|
216 | - * @return string |
|
217 | - */ |
|
218 | - public function admin_footer_text( $footer_text ) { |
|
219 | - global $current_screen; |
|
211 | + /** |
|
212 | + * Change the admin footer text on GetPaid admin pages. |
|
213 | + * |
|
214 | + * @since 2.0.0 |
|
215 | + * @param string $footer_text |
|
216 | + * @return string |
|
217 | + */ |
|
218 | + public function admin_footer_text( $footer_text ) { |
|
219 | + global $current_screen; |
|
220 | 220 | |
221 | - $page = isset( $_GET['page'] ) ? $_GET['page'] : ''; |
|
221 | + $page = isset( $_GET['page'] ) ? $_GET['page'] : ''; |
|
222 | 222 | |
223 | 223 | if ( ! empty( $current_screen->post_type ) ) { |
224 | - $page = $current_screen->post_type; |
|
224 | + $page = $current_screen->post_type; |
|
225 | 225 | } |
226 | 226 | |
227 | 227 | // General styles. |
228 | 228 | if ( apply_filters( 'getpaid_display_admin_footer_text', wpinv_current_user_can_manage_invoicing() ) && false !== stripos( $page, 'wpi' ) ) { |
229 | 229 | |
230 | - // Change the footer text |
|
231 | - if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) { |
|
232 | - |
|
233 | - $rating_url = esc_url( |
|
234 | - wp_nonce_url( |
|
235 | - admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ), |
|
236 | - 'getpaid-nonce', |
|
237 | - 'getpaid-nonce' |
|
238 | - ) |
|
239 | - ); |
|
240 | - |
|
241 | - $footer_text = sprintf( |
|
242 | - /* translators: %s: five stars */ |
|
243 | - __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ), |
|
244 | - "<a href='$rating_url'>★★★★★</a>" |
|
245 | - ); |
|
246 | - |
|
247 | - } else { |
|
248 | - |
|
249 | - $footer_text = sprintf( |
|
250 | - /* translators: %s: GetPaid */ |
|
251 | - __( 'Thank you for using %s!', 'invoicing' ), |
|
252 | - "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>" |
|
253 | - ); |
|
254 | - |
|
255 | - } |
|
256 | - |
|
257 | - } |
|
258 | - |
|
259 | - return $footer_text; |
|
260 | - } |
|
261 | - |
|
262 | - /** |
|
263 | - * Redirects to wp.org to rate the plugin. |
|
264 | - * |
|
265 | - * @since 2.0.0 |
|
266 | - */ |
|
267 | - public function redirect_to_wordpress_rating_page() { |
|
268 | - update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 ); |
|
269 | - wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' ); |
|
270 | - exit; |
|
271 | - } |
|
272 | - |
|
273 | - /** |
|
274 | - * Loads payment form js. |
|
275 | - * |
|
276 | - */ |
|
277 | - protected function load_payment_form_scripts() { |
|
230 | + // Change the footer text |
|
231 | + if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) { |
|
232 | + |
|
233 | + $rating_url = esc_url( |
|
234 | + wp_nonce_url( |
|
235 | + admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ), |
|
236 | + 'getpaid-nonce', |
|
237 | + 'getpaid-nonce' |
|
238 | + ) |
|
239 | + ); |
|
240 | + |
|
241 | + $footer_text = sprintf( |
|
242 | + /* translators: %s: five stars */ |
|
243 | + __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ), |
|
244 | + "<a href='$rating_url'>★★★★★</a>" |
|
245 | + ); |
|
246 | + |
|
247 | + } else { |
|
248 | + |
|
249 | + $footer_text = sprintf( |
|
250 | + /* translators: %s: GetPaid */ |
|
251 | + __( 'Thank you for using %s!', 'invoicing' ), |
|
252 | + "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>" |
|
253 | + ); |
|
254 | + |
|
255 | + } |
|
256 | + |
|
257 | + } |
|
258 | + |
|
259 | + return $footer_text; |
|
260 | + } |
|
261 | + |
|
262 | + /** |
|
263 | + * Redirects to wp.org to rate the plugin. |
|
264 | + * |
|
265 | + * @since 2.0.0 |
|
266 | + */ |
|
267 | + public function redirect_to_wordpress_rating_page() { |
|
268 | + update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 ); |
|
269 | + wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' ); |
|
270 | + exit; |
|
271 | + } |
|
272 | + |
|
273 | + /** |
|
274 | + * Loads payment form js. |
|
275 | + * |
|
276 | + */ |
|
277 | + protected function load_payment_form_scripts() { |
|
278 | 278 | global $post; |
279 | 279 | |
280 | 280 | wp_enqueue_script( 'vue', WPINV_PLUGIN_URL . 'assets/js/vue/vue.min.js', array(), WPINV_VERSION ); |
281 | - wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION ); |
|
282 | - wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION ); |
|
281 | + wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION ); |
|
282 | + wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION ); |
|
283 | 283 | |
284 | - $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' ); |
|
285 | - wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), $version ); |
|
284 | + $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' ); |
|
285 | + wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), $version ); |
|
286 | 286 | |
287 | - wp_localize_script( |
|
287 | + wp_localize_script( |
|
288 | 288 | 'wpinv-admin-payment-form-script', |
289 | 289 | 'wpinvPaymentFormAdmin', |
290 | 290 | array( |
291 | - 'elements' => wpinv_get_data( 'payment-form-elements' ), |
|
292 | - 'form_elements' => getpaid_get_payment_form_elements( $post->ID ), |
|
293 | - 'currency' => wpinv_currency_symbol(), |
|
294 | - 'position' => wpinv_currency_position(), |
|
295 | - 'decimals' => (int) wpinv_decimals(), |
|
296 | - 'thousands_sep' => wpinv_thousands_separator(), |
|
297 | - 'decimals_sep' => wpinv_decimal_separator(), |
|
298 | - 'form_items' => gepaid_get_form_items( $post->ID ), |
|
299 | - 'is_default' => $post->ID == wpinv_get_default_payment_form(), |
|
291 | + 'elements' => wpinv_get_data( 'payment-form-elements' ), |
|
292 | + 'form_elements' => getpaid_get_payment_form_elements( $post->ID ), |
|
293 | + 'currency' => wpinv_currency_symbol(), |
|
294 | + 'position' => wpinv_currency_position(), |
|
295 | + 'decimals' => (int) wpinv_decimals(), |
|
296 | + 'thousands_sep' => wpinv_thousands_separator(), |
|
297 | + 'decimals_sep' => wpinv_decimal_separator(), |
|
298 | + 'form_items' => gepaid_get_form_items( $post->ID ), |
|
299 | + 'is_default' => $post->ID == wpinv_get_default_payment_form(), |
|
300 | 300 | ) |
301 | 301 | ); |
302 | 302 | |
@@ -305,20 +305,20 @@ discard block |
||
305 | 305 | } |
306 | 306 | |
307 | 307 | /** |
308 | - * Add our classes to admin pages. |
|
308 | + * Add our classes to admin pages. |
|
309 | 309 | * |
310 | 310 | * @param string $classes |
311 | 311 | * @return string |
312 | - * |
|
313 | - */ |
|
312 | + * |
|
313 | + */ |
|
314 | 314 | public function admin_body_class( $classes ) { |
315 | - global $pagenow, $post, $current_screen; |
|
315 | + global $pagenow, $post, $current_screen; |
|
316 | 316 | |
317 | 317 | |
318 | 318 | $page = isset( $_GET['page'] ) ? $_GET['page'] : ''; |
319 | 319 | |
320 | 320 | if ( ! empty( $current_screen->post_type ) ) { |
321 | - $page = $current_screen->post_type; |
|
321 | + $page = $current_screen->post_type; |
|
322 | 322 | } |
323 | 323 | |
324 | 324 | if ( false !== stripos( $page, 'wpi' ) ) { |
@@ -327,68 +327,68 @@ discard block |
||
327 | 327 | |
328 | 328 | if ( in_array( $page, wpinv_parse_list( 'wpi_invoice wpi_payment_form wpi_quote' ) ) ) { |
329 | 329 | $classes .= ' wpinv-cpt wpinv'; |
330 | - } |
|
330 | + } |
|
331 | 331 | |
332 | - if ( getpaid_is_invoice_post_type( $page ) ) { |
|
332 | + if ( getpaid_is_invoice_post_type( $page ) ) { |
|
333 | 333 | $classes .= ' getpaid-is-invoice-cpt'; |
334 | 334 | } |
335 | 335 | |
336 | - return $classes; |
|
336 | + return $classes; |
|
337 | 337 | } |
338 | 338 | |
339 | 339 | /** |
340 | - * Maybe show the AyeCode Connect Notice. |
|
341 | - */ |
|
342 | - public function init_ayecode_connect_helper(){ |
|
340 | + * Maybe show the AyeCode Connect Notice. |
|
341 | + */ |
|
342 | + public function init_ayecode_connect_helper(){ |
|
343 | 343 | |
344 | - // Register with the deactivation survey class. |
|
345 | - AyeCode_Deactivation_Survey::instance(array( |
|
346 | - 'slug' => 'invoicing', |
|
347 | - 'version' => WPINV_VERSION, |
|
348 | - 'support_url' => 'https://wpgetpaid.com/support/', |
|
349 | - 'documentation_url' => 'https://docs.wpgetpaid.com/', |
|
350 | - 'activated' => (int) get_option( 'gepaid_installed_on' ), |
|
351 | - )); |
|
344 | + // Register with the deactivation survey class. |
|
345 | + AyeCode_Deactivation_Survey::instance(array( |
|
346 | + 'slug' => 'invoicing', |
|
347 | + 'version' => WPINV_VERSION, |
|
348 | + 'support_url' => 'https://wpgetpaid.com/support/', |
|
349 | + 'documentation_url' => 'https://docs.wpgetpaid.com/', |
|
350 | + 'activated' => (int) get_option( 'gepaid_installed_on' ), |
|
351 | + )); |
|
352 | 352 | |
353 | 353 | new AyeCode_Connect_Helper( |
354 | 354 | array( |
355 | - 'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"), |
|
356 | - 'connect_external' => __( "Please confirm you wish to connect your site?","invoicing" ), |
|
357 | - 'connect' => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ), |
|
358 | - 'connect_button' => __("Connect Site","invoicing"), |
|
359 | - 'connecting_button' => __("Connecting...","invoicing"), |
|
360 | - 'error_localhost' => __( "This service will only work with a live domain, not a localhost.","invoicing" ), |
|
361 | - 'error' => __( "Something went wrong, please refresh and try again.","invoicing" ), |
|
355 | + 'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"), |
|
356 | + 'connect_external' => __( "Please confirm you wish to connect your site?","invoicing" ), |
|
357 | + 'connect' => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ), |
|
358 | + 'connect_button' => __("Connect Site","invoicing"), |
|
359 | + 'connecting_button' => __("Connecting...","invoicing"), |
|
360 | + 'error_localhost' => __( "This service will only work with a live domain, not a localhost.","invoicing" ), |
|
361 | + 'error' => __( "Something went wrong, please refresh and try again.","invoicing" ), |
|
362 | 362 | ), |
363 | 363 | array( 'wpi-addons' ) |
364 | 364 | ); |
365 | 365 | |
366 | 366 | } |
367 | 367 | |
368 | - /** |
|
369 | - * Redirect users to settings on activation. |
|
370 | - * |
|
371 | - * @return void |
|
372 | - */ |
|
373 | - public function activation_redirect() { |
|
368 | + /** |
|
369 | + * Redirect users to settings on activation. |
|
370 | + * |
|
371 | + * @return void |
|
372 | + */ |
|
373 | + public function activation_redirect() { |
|
374 | 374 | |
375 | - $redirected = get_option( 'wpinv_redirected_to_settings' ); |
|
375 | + $redirected = get_option( 'wpinv_redirected_to_settings' ); |
|
376 | 376 | |
377 | - if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) { |
|
378 | - return; |
|
379 | - } |
|
377 | + if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) { |
|
378 | + return; |
|
379 | + } |
|
380 | 380 | |
381 | - // Bail if activating from network, or bulk |
|
382 | - if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) { |
|
383 | - return; |
|
384 | - } |
|
381 | + // Bail if activating from network, or bulk |
|
382 | + if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) { |
|
383 | + return; |
|
384 | + } |
|
385 | 385 | |
386 | - update_option( 'wpinv_redirected_to_settings', 1 ); |
|
386 | + update_option( 'wpinv_redirected_to_settings', 1 ); |
|
387 | 387 | |
388 | 388 | wp_safe_redirect( admin_url( 'index.php?page=gp-setup' ) ); |
389 | 389 | exit; |
390 | 390 | |
391 | - } |
|
391 | + } |
|
392 | 392 | |
393 | 393 | /** |
394 | 394 | * Fires an admin action after verifying that a user can fire them. |
@@ -402,498 +402,498 @@ discard block |
||
402 | 402 | |
403 | 403 | } |
404 | 404 | |
405 | - /** |
|
405 | + /** |
|
406 | 406 | * Sends a payment reminder to a customer. |
407 | - * |
|
408 | - * @param array $args |
|
407 | + * |
|
408 | + * @param array $args |
|
409 | 409 | */ |
410 | 410 | public function duplicate_payment_form( $args ) { |
411 | 411 | |
412 | - if ( empty( $args['form_id'] ) ) { |
|
413 | - return; |
|
414 | - } |
|
415 | - |
|
416 | - $form = new GetPaid_Payment_Form( $args['form_id'] ); |
|
412 | + if ( empty( $args['form_id'] ) ) { |
|
413 | + return; |
|
414 | + } |
|
417 | 415 | |
418 | - if ( ! $form->exists() ) { |
|
419 | - return; |
|
420 | - } |
|
416 | + $form = new GetPaid_Payment_Form( $args['form_id'] ); |
|
421 | 417 | |
422 | - $new_form = new GetPaid_Payment_Form(); |
|
423 | - $new_form->set_author( $form->get_author( 'edit' ) ); |
|
424 | - $new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) ); |
|
425 | - $new_form->set_elements( $form->get_elements( 'edit' ) ); |
|
426 | - $new_form->set_items( $form->get_items( 'edit' ) ); |
|
427 | - $new_form->save(); |
|
418 | + if ( ! $form->exists() ) { |
|
419 | + return; |
|
420 | + } |
|
428 | 421 | |
429 | - if ( $new_form->exists() ) { |
|
430 | - $this->show_success( __( 'Form duplicated successfully', 'invoicing' ) ); |
|
431 | - $url = get_edit_post_link( $new_form->get_id(), 'edit' ); |
|
432 | - } else { |
|
433 | - $this->show_error( __( 'Unable to duplicate form', 'invoicing' ) ); |
|
434 | - $url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) ); |
|
435 | - } |
|
422 | + $new_form = new GetPaid_Payment_Form(); |
|
423 | + $new_form->set_author( $form->get_author( 'edit' ) ); |
|
424 | + $new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) ); |
|
425 | + $new_form->set_elements( $form->get_elements( 'edit' ) ); |
|
426 | + $new_form->set_items( $form->get_items( 'edit' ) ); |
|
427 | + $new_form->save(); |
|
428 | + |
|
429 | + if ( $new_form->exists() ) { |
|
430 | + $this->show_success( __( 'Form duplicated successfully', 'invoicing' ) ); |
|
431 | + $url = get_edit_post_link( $new_form->get_id(), 'edit' ); |
|
432 | + } else { |
|
433 | + $this->show_error( __( 'Unable to duplicate form', 'invoicing' ) ); |
|
434 | + $url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) ); |
|
435 | + } |
|
436 | 436 | |
437 | - wp_redirect( $url ); |
|
438 | - exit; |
|
439 | - } |
|
437 | + wp_redirect( $url ); |
|
438 | + exit; |
|
439 | + } |
|
440 | 440 | |
441 | - /** |
|
441 | + /** |
|
442 | 442 | * Sends a payment reminder to a customer. |
443 | - * |
|
444 | - * @param array $args |
|
443 | + * |
|
444 | + * @param array $args |
|
445 | 445 | */ |
446 | 446 | public function send_customer_invoice( $args ) { |
447 | - $sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true ); |
|
447 | + $sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true ); |
|
448 | 448 | |
449 | - if ( $sent ) { |
|
450 | - $this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) ); |
|
451 | - } else { |
|
452 | - $this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) ); |
|
453 | - } |
|
449 | + if ( $sent ) { |
|
450 | + $this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) ); |
|
451 | + } else { |
|
452 | + $this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) ); |
|
453 | + } |
|
454 | 454 | |
455 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) ); |
|
456 | - exit; |
|
457 | - } |
|
455 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) ); |
|
456 | + exit; |
|
457 | + } |
|
458 | 458 | |
459 | - /** |
|
459 | + /** |
|
460 | 460 | * Sends a payment reminder to a customer. |
461 | - * |
|
462 | - * @param array $args |
|
461 | + * |
|
462 | + * @param array $args |
|
463 | 463 | */ |
464 | 464 | public function send_customer_payment_reminder( $args ) { |
465 | - $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) ); |
|
465 | + $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) ); |
|
466 | 466 | |
467 | - if ( $sent ) { |
|
468 | - $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) ); |
|
469 | - } else { |
|
470 | - $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) ); |
|
471 | - } |
|
467 | + if ( $sent ) { |
|
468 | + $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) ); |
|
469 | + } else { |
|
470 | + $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) ); |
|
471 | + } |
|
472 | 472 | |
473 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) ); |
|
474 | - exit; |
|
475 | - } |
|
473 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) ); |
|
474 | + exit; |
|
475 | + } |
|
476 | 476 | |
477 | - /** |
|
477 | + /** |
|
478 | 478 | * Resets tax rates. |
479 | - * |
|
479 | + * |
|
480 | 480 | */ |
481 | 481 | public function admin_reset_tax_rates() { |
482 | 482 | |
483 | - update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) ); |
|
484 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
485 | - exit; |
|
483 | + update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) ); |
|
484 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
485 | + exit; |
|
486 | 486 | |
487 | - } |
|
487 | + } |
|
488 | 488 | |
489 | - /** |
|
489 | + /** |
|
490 | 490 | * Resets admin pages. |
491 | - * |
|
491 | + * |
|
492 | 492 | */ |
493 | 493 | public function admin_create_missing_pages() { |
494 | - $installer = new GetPaid_Installer(); |
|
495 | - $installer->create_pages(); |
|
496 | - $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) ); |
|
497 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
498 | - exit; |
|
499 | - } |
|
500 | - |
|
501 | - /** |
|
494 | + $installer = new GetPaid_Installer(); |
|
495 | + $installer->create_pages(); |
|
496 | + $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) ); |
|
497 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
498 | + exit; |
|
499 | + } |
|
500 | + |
|
501 | + /** |
|
502 | 502 | * Creates an missing admin tables. |
503 | - * |
|
503 | + * |
|
504 | 504 | */ |
505 | 505 | public function admin_create_missing_tables() { |
506 | - global $wpdb; |
|
507 | - $installer = new GetPaid_Installer(); |
|
506 | + global $wpdb; |
|
507 | + $installer = new GetPaid_Installer(); |
|
508 | 508 | |
509 | - if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) { |
|
510 | - $installer->create_subscriptions_table(); |
|
509 | + if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) { |
|
510 | + $installer->create_subscriptions_table(); |
|
511 | 511 | |
512 | - if ( $wpdb->last_error !== '' ) { |
|
513 | - $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
514 | - } |
|
515 | - } |
|
512 | + if ( $wpdb->last_error !== '' ) { |
|
513 | + $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
514 | + } |
|
515 | + } |
|
516 | 516 | |
517 | - if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) { |
|
518 | - $installer->create_invoices_table(); |
|
517 | + if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) { |
|
518 | + $installer->create_invoices_table(); |
|
519 | 519 | |
520 | - if ( $wpdb->last_error !== '' ) { |
|
521 | - $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
522 | - } |
|
523 | - } |
|
520 | + if ( $wpdb->last_error !== '' ) { |
|
521 | + $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
522 | + } |
|
523 | + } |
|
524 | 524 | |
525 | - if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) { |
|
526 | - $installer->create_invoice_items_table(); |
|
525 | + if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) { |
|
526 | + $installer->create_invoice_items_table(); |
|
527 | 527 | |
528 | - if ( $wpdb->last_error !== '' ) { |
|
529 | - $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
530 | - } |
|
531 | - } |
|
528 | + if ( $wpdb->last_error !== '' ) { |
|
529 | + $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error ); |
|
530 | + } |
|
531 | + } |
|
532 | 532 | |
533 | - if ( ! $this->has_notices() ) { |
|
534 | - $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) ); |
|
535 | - } |
|
533 | + if ( ! $this->has_notices() ) { |
|
534 | + $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) ); |
|
535 | + } |
|
536 | 536 | |
537 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
538 | - exit; |
|
539 | - } |
|
537 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
538 | + exit; |
|
539 | + } |
|
540 | 540 | |
541 | - /** |
|
541 | + /** |
|
542 | 542 | * Migrates old invoices to the new database tables. |
543 | - * |
|
543 | + * |
|
544 | 544 | */ |
545 | 545 | public function admin_migrate_old_invoices() { |
546 | 546 | |
547 | - // Migrate the invoices. |
|
548 | - $installer = new GetPaid_Installer(); |
|
549 | - $installer->migrate_old_invoices(); |
|
547 | + // Migrate the invoices. |
|
548 | + $installer = new GetPaid_Installer(); |
|
549 | + $installer->migrate_old_invoices(); |
|
550 | 550 | |
551 | - // Show an admin message. |
|
552 | - $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) ); |
|
551 | + // Show an admin message. |
|
552 | + $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) ); |
|
553 | 553 | |
554 | - // Redirect the admin. |
|
555 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
556 | - exit; |
|
554 | + // Redirect the admin. |
|
555 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
556 | + exit; |
|
557 | 557 | |
558 | - } |
|
558 | + } |
|
559 | 559 | |
560 | - /** |
|
560 | + /** |
|
561 | 561 | * Download customers. |
562 | - * |
|
562 | + * |
|
563 | 563 | */ |
564 | 564 | public function admin_download_customers() { |
565 | - global $wpdb; |
|
565 | + global $wpdb; |
|
566 | 566 | |
567 | - $output = fopen( 'php://output', 'w' ) or die( __( 'Unsupported server', 'invoicing' ) ); |
|
567 | + $output = fopen( 'php://output', 'w' ) or die( __( 'Unsupported server', 'invoicing' ) ); |
|
568 | 568 | |
569 | - header( "Content-Type:text/csv" ); |
|
570 | - header( "Content-Disposition:attachment;filename=customers.csv" ); |
|
569 | + header( "Content-Type:text/csv" ); |
|
570 | + header( "Content-Disposition:attachment;filename=customers.csv" ); |
|
571 | 571 | |
572 | - $post_types = ''; |
|
572 | + $post_types = ''; |
|
573 | 573 | |
574 | - foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) { |
|
575 | - $post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type ); |
|
576 | - } |
|
574 | + foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) { |
|
575 | + $post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type ); |
|
576 | + } |
|
577 | 577 | |
578 | - $post_types = rtrim( $post_types, ' OR' ); |
|
578 | + $post_types = rtrim( $post_types, ' OR' ); |
|
579 | 579 | |
580 | - $customers = $wpdb->get_col( |
|
581 | - $wpdb->prepare( |
|
582 | - "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types" |
|
583 | - ) |
|
584 | - ); |
|
580 | + $customers = $wpdb->get_col( |
|
581 | + $wpdb->prepare( |
|
582 | + "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types" |
|
583 | + ) |
|
584 | + ); |
|
585 | 585 | |
586 | - $columns = array( |
|
587 | - 'name' => __( 'Name', 'invoicing' ), |
|
588 | - 'email' => __( 'Email', 'invoicing' ), |
|
589 | - 'country' => __( 'Country', 'invoicing' ), |
|
590 | - 'state' => __( 'State', 'invoicing' ), |
|
591 | - 'city' => __( 'City', 'invoicing' ), |
|
592 | - 'zip' => __( 'ZIP', 'invoicing' ), |
|
593 | - 'address' => __( 'Address', 'invoicing' ), |
|
594 | - 'phone' => __( 'Phone', 'invoicing' ), |
|
595 | - 'company' => __( 'Company', 'invoicing' ), |
|
596 | - 'company_id' => __( 'Company ID', 'invoicing' ), |
|
597 | - 'invoices' => __( 'Invoices', 'invoicing' ), |
|
598 | - 'total_raw' => __( 'Total Spend', 'invoicing' ), |
|
599 | - 'signup' => __( 'Date created', 'invoicing' ), |
|
600 | - ); |
|
586 | + $columns = array( |
|
587 | + 'name' => __( 'Name', 'invoicing' ), |
|
588 | + 'email' => __( 'Email', 'invoicing' ), |
|
589 | + 'country' => __( 'Country', 'invoicing' ), |
|
590 | + 'state' => __( 'State', 'invoicing' ), |
|
591 | + 'city' => __( 'City', 'invoicing' ), |
|
592 | + 'zip' => __( 'ZIP', 'invoicing' ), |
|
593 | + 'address' => __( 'Address', 'invoicing' ), |
|
594 | + 'phone' => __( 'Phone', 'invoicing' ), |
|
595 | + 'company' => __( 'Company', 'invoicing' ), |
|
596 | + 'company_id' => __( 'Company ID', 'invoicing' ), |
|
597 | + 'invoices' => __( 'Invoices', 'invoicing' ), |
|
598 | + 'total_raw' => __( 'Total Spend', 'invoicing' ), |
|
599 | + 'signup' => __( 'Date created', 'invoicing' ), |
|
600 | + ); |
|
601 | 601 | |
602 | - // Output the csv column headers. |
|
603 | - fputcsv( $output, array_values( $columns ) ); |
|
602 | + // Output the csv column headers. |
|
603 | + fputcsv( $output, array_values( $columns ) ); |
|
604 | 604 | |
605 | - // Loop through |
|
606 | - $table = new WPInv_Customers_Table(); |
|
607 | - foreach ( $customers as $customer_id ) { |
|
605 | + // Loop through |
|
606 | + $table = new WPInv_Customers_Table(); |
|
607 | + foreach ( $customers as $customer_id ) { |
|
608 | 608 | |
609 | - $user = get_user_by( 'id', $customer_id ); |
|
610 | - $row = array(); |
|
611 | - if ( empty( $user ) ) { |
|
612 | - continue; |
|
613 | - } |
|
609 | + $user = get_user_by( 'id', $customer_id ); |
|
610 | + $row = array(); |
|
611 | + if ( empty( $user ) ) { |
|
612 | + continue; |
|
613 | + } |
|
614 | 614 | |
615 | - foreach ( array_keys( $columns ) as $column ) { |
|
615 | + foreach ( array_keys( $columns ) as $column ) { |
|
616 | 616 | |
617 | - $method = 'column_' . $column; |
|
617 | + $method = 'column_' . $column; |
|
618 | 618 | |
619 | - if ( 'name' == $column ) { |
|
620 | - $value = esc_html( $user->display_name ); |
|
621 | - } else if( 'email' == $column ) { |
|
622 | - $value = sanitize_email( $user->user_email ); |
|
623 | - } else if ( is_callable( array( $table, $method ) ) ) { |
|
624 | - $value = strip_tags( $table->$method( $user ) ); |
|
625 | - } |
|
619 | + if ( 'name' == $column ) { |
|
620 | + $value = esc_html( $user->display_name ); |
|
621 | + } else if( 'email' == $column ) { |
|
622 | + $value = sanitize_email( $user->user_email ); |
|
623 | + } else if ( is_callable( array( $table, $method ) ) ) { |
|
624 | + $value = strip_tags( $table->$method( $user ) ); |
|
625 | + } |
|
626 | 626 | |
627 | - if ( empty( $value ) ) { |
|
628 | - $value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) ); |
|
629 | - } |
|
627 | + if ( empty( $value ) ) { |
|
628 | + $value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) ); |
|
629 | + } |
|
630 | 630 | |
631 | - $row[] = $value; |
|
631 | + $row[] = $value; |
|
632 | 632 | |
633 | - } |
|
633 | + } |
|
634 | 634 | |
635 | - fputcsv( $output, $row ); |
|
636 | - } |
|
635 | + fputcsv( $output, $row ); |
|
636 | + } |
|
637 | 637 | |
638 | - fclose( $output ); |
|
639 | - exit; |
|
638 | + fclose( $output ); |
|
639 | + exit; |
|
640 | 640 | |
641 | - } |
|
641 | + } |
|
642 | 642 | |
643 | - /** |
|
643 | + /** |
|
644 | 644 | * Installs a plugin. |
645 | - * |
|
646 | - * @param array $data |
|
645 | + * |
|
646 | + * @param array $data |
|
647 | 647 | */ |
648 | 648 | public function admin_install_plugin( $data ) { |
649 | 649 | |
650 | - if ( ! empty( $data['plugins'] ) ) { |
|
651 | - include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
652 | - wp_cache_flush(); |
|
650 | + if ( ! empty( $data['plugins'] ) ) { |
|
651 | + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
652 | + wp_cache_flush(); |
|
653 | 653 | |
654 | - foreach ( $data['plugins'] as $slug => $file ) { |
|
655 | - $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' ); |
|
656 | - $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); |
|
657 | - $installed = $upgrader->install( $plugin_zip ); |
|
654 | + foreach ( $data['plugins'] as $slug => $file ) { |
|
655 | + $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' ); |
|
656 | + $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); |
|
657 | + $installed = $upgrader->install( $plugin_zip ); |
|
658 | 658 | |
659 | - if ( ! is_wp_error( $installed ) && $installed ) { |
|
660 | - activate_plugin( $file, '', false, true ); |
|
661 | - } else { |
|
662 | - wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false ); |
|
663 | - } |
|
659 | + if ( ! is_wp_error( $installed ) && $installed ) { |
|
660 | + activate_plugin( $file, '', false, true ); |
|
661 | + } else { |
|
662 | + wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false ); |
|
663 | + } |
|
664 | 664 | |
665 | - } |
|
665 | + } |
|
666 | 666 | |
667 | - } |
|
667 | + } |
|
668 | 668 | |
669 | - $redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' ); |
|
670 | - wp_safe_redirect( $redirect ); |
|
671 | - exit; |
|
669 | + $redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' ); |
|
670 | + wp_safe_redirect( $redirect ); |
|
671 | + exit; |
|
672 | 672 | |
673 | - } |
|
673 | + } |
|
674 | 674 | |
675 | - /** |
|
675 | + /** |
|
676 | 676 | * Connects a gateway. |
677 | - * |
|
678 | - * @param array $data |
|
677 | + * |
|
678 | + * @param array $data |
|
679 | 679 | */ |
680 | 680 | public function admin_connect_gateway( $data ) { |
681 | 681 | |
682 | - if ( ! empty( $data['plugin'] ) ) { |
|
682 | + if ( ! empty( $data['plugin'] ) ) { |
|
683 | 683 | |
684 | - $gateway = sanitize_key( $data['plugin'] ); |
|
685 | - $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data ); |
|
684 | + $gateway = sanitize_key( $data['plugin'] ); |
|
685 | + $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data ); |
|
686 | 686 | |
687 | - if ( ! empty( $connect_url ) ) { |
|
688 | - wp_redirect( $connect_url ); |
|
689 | - exit; |
|
690 | - } |
|
687 | + if ( ! empty( $connect_url ) ) { |
|
688 | + wp_redirect( $connect_url ); |
|
689 | + exit; |
|
690 | + } |
|
691 | 691 | |
692 | - if ( 'stripe' == $data['plugin'] ) { |
|
693 | - require_once ABSPATH . 'wp-admin/includes/plugin.php'; |
|
694 | - include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
695 | - wp_cache_flush(); |
|
692 | + if ( 'stripe' == $data['plugin'] ) { |
|
693 | + require_once ABSPATH . 'wp-admin/includes/plugin.php'; |
|
694 | + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; |
|
695 | + wp_cache_flush(); |
|
696 | 696 | |
697 | - if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) { |
|
698 | - $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' ); |
|
699 | - $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); |
|
700 | - $upgrader->install( $plugin_zip ); |
|
701 | - } |
|
697 | + if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) { |
|
698 | + $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' ); |
|
699 | + $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); |
|
700 | + $upgrader->install( $plugin_zip ); |
|
701 | + } |
|
702 | 702 | |
703 | - activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true ); |
|
704 | - } |
|
703 | + activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true ); |
|
704 | + } |
|
705 | 705 | |
706 | - $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data ); |
|
707 | - if ( ! empty( $connect_url ) ) { |
|
708 | - wp_redirect( $connect_url ); |
|
709 | - exit; |
|
710 | - } |
|
706 | + $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data ); |
|
707 | + if ( ! empty( $connect_url ) ) { |
|
708 | + wp_redirect( $connect_url ); |
|
709 | + exit; |
|
710 | + } |
|
711 | 711 | |
712 | - } |
|
712 | + } |
|
713 | 713 | |
714 | - $redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' ); |
|
715 | - wp_safe_redirect( $redirect ); |
|
716 | - exit; |
|
714 | + $redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' ); |
|
715 | + wp_safe_redirect( $redirect ); |
|
716 | + exit; |
|
717 | 717 | |
718 | - } |
|
718 | + } |
|
719 | 719 | |
720 | - /** |
|
720 | + /** |
|
721 | 721 | * Recalculates discounts. |
722 | - * |
|
722 | + * |
|
723 | 723 | */ |
724 | 724 | public function admin_recalculate_discounts() { |
725 | - global $wpdb; |
|
725 | + global $wpdb; |
|
726 | 726 | |
727 | - // Fetch all invoices that have discount codes. |
|
728 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
729 | - $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" ); |
|
727 | + // Fetch all invoices that have discount codes. |
|
728 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
729 | + $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" ); |
|
730 | 730 | |
731 | - foreach ( $invoices as $invoice ) { |
|
731 | + foreach ( $invoices as $invoice ) { |
|
732 | 732 | |
733 | - $invoice = new WPInv_Invoice( $invoice ); |
|
733 | + $invoice = new WPInv_Invoice( $invoice ); |
|
734 | 734 | |
735 | - if ( ! $invoice->exists() ) { |
|
736 | - continue; |
|
737 | - } |
|
735 | + if ( ! $invoice->exists() ) { |
|
736 | + continue; |
|
737 | + } |
|
738 | 738 | |
739 | - // Abort if the discount does not exist or does not apply here. |
|
740 | - $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
741 | - if ( ! $discount->exists() ) { |
|
742 | - continue; |
|
743 | - } |
|
739 | + // Abort if the discount does not exist or does not apply here. |
|
740 | + $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
741 | + if ( ! $discount->exists() ) { |
|
742 | + continue; |
|
743 | + } |
|
744 | 744 | |
745 | - $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
746 | - $invoice->recalculate_total(); |
|
745 | + $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
746 | + $invoice->recalculate_total(); |
|
747 | 747 | |
748 | - if ( $invoice->get_total_discount() > 0 ) { |
|
749 | - $invoice->save(); |
|
750 | - } |
|
748 | + if ( $invoice->get_total_discount() > 0 ) { |
|
749 | + $invoice->save(); |
|
750 | + } |
|
751 | 751 | |
752 | - } |
|
752 | + } |
|
753 | 753 | |
754 | - // Show an admin message. |
|
755 | - $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) ); |
|
754 | + // Show an admin message. |
|
755 | + $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) ); |
|
756 | 756 | |
757 | - // Redirect the admin. |
|
758 | - wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
759 | - exit; |
|
757 | + // Redirect the admin. |
|
758 | + wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) ); |
|
759 | + exit; |
|
760 | 760 | |
761 | - } |
|
761 | + } |
|
762 | 762 | |
763 | 763 | /** |
764 | - * Returns an array of admin notices. |
|
765 | - * |
|
766 | - * @since 1.0.19 |
|
764 | + * Returns an array of admin notices. |
|
765 | + * |
|
766 | + * @since 1.0.19 |
|
767 | 767 | * @return array |
768 | - */ |
|
769 | - public function get_notices() { |
|
770 | - $notices = get_option( 'wpinv_admin_notices' ); |
|
768 | + */ |
|
769 | + public function get_notices() { |
|
770 | + $notices = get_option( 'wpinv_admin_notices' ); |
|
771 | 771 | return is_array( $notices ) ? $notices : array(); |
772 | - } |
|
772 | + } |
|
773 | 773 | |
774 | - /** |
|
775 | - * Checks if we have any admin notices. |
|
776 | - * |
|
777 | - * @since 2.0.4 |
|
774 | + /** |
|
775 | + * Checks if we have any admin notices. |
|
776 | + * |
|
777 | + * @since 2.0.4 |
|
778 | 778 | * @return array |
779 | - */ |
|
780 | - public function has_notices() { |
|
781 | - return count( $this->get_notices() ) > 0; |
|
782 | - } |
|
783 | - |
|
784 | - /** |
|
785 | - * Clears all admin notices |
|
786 | - * |
|
787 | - * @access public |
|
788 | - * @since 1.0.19 |
|
789 | - */ |
|
790 | - public function clear_notices() { |
|
791 | - delete_option( 'wpinv_admin_notices' ); |
|
792 | - } |
|
793 | - |
|
794 | - /** |
|
795 | - * Saves a new admin notice |
|
796 | - * |
|
797 | - * @access public |
|
798 | - * @since 1.0.19 |
|
799 | - */ |
|
800 | - public function save_notice( $type, $message ) { |
|
801 | - $notices = $this->get_notices(); |
|
802 | - |
|
803 | - if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) { |
|
804 | - $notices[ $type ] = array(); |
|
805 | - } |
|
806 | - |
|
807 | - $notices[ $type ][] = $message; |
|
808 | - |
|
809 | - update_option( 'wpinv_admin_notices', $notices ); |
|
810 | - } |
|
811 | - |
|
812 | - /** |
|
813 | - * Displays a success notice |
|
814 | - * |
|
815 | - * @param string $msg The message to qeue. |
|
816 | - * @access public |
|
817 | - * @since 1.0.19 |
|
818 | - */ |
|
819 | - public function show_success( $msg ) { |
|
820 | - $this->save_notice( 'success', $msg ); |
|
821 | - } |
|
822 | - |
|
823 | - /** |
|
824 | - * Displays a error notice |
|
825 | - * |
|
826 | - * @access public |
|
827 | - * @param string $msg The message to qeue. |
|
828 | - * @since 1.0.19 |
|
829 | - */ |
|
830 | - public function show_error( $msg ) { |
|
831 | - $this->save_notice( 'error', $msg ); |
|
832 | - } |
|
833 | - |
|
834 | - /** |
|
835 | - * Displays a warning notice |
|
836 | - * |
|
837 | - * @access public |
|
838 | - * @param string $msg The message to qeue. |
|
839 | - * @since 1.0.19 |
|
840 | - */ |
|
841 | - public function show_warning( $msg ) { |
|
842 | - $this->save_notice( 'warning', $msg ); |
|
843 | - } |
|
844 | - |
|
845 | - /** |
|
846 | - * Displays a info notice |
|
847 | - * |
|
848 | - * @access public |
|
849 | - * @param string $msg The message to qeue. |
|
850 | - * @since 1.0.19 |
|
851 | - */ |
|
852 | - public function show_info( $msg ) { |
|
853 | - $this->save_notice( 'info', $msg ); |
|
854 | - } |
|
855 | - |
|
856 | - /** |
|
857 | - * Show notices |
|
858 | - * |
|
859 | - * @access public |
|
860 | - * @since 1.0.19 |
|
861 | - */ |
|
862 | - public function show_notices() { |
|
779 | + */ |
|
780 | + public function has_notices() { |
|
781 | + return count( $this->get_notices() ) > 0; |
|
782 | + } |
|
783 | + |
|
784 | + /** |
|
785 | + * Clears all admin notices |
|
786 | + * |
|
787 | + * @access public |
|
788 | + * @since 1.0.19 |
|
789 | + */ |
|
790 | + public function clear_notices() { |
|
791 | + delete_option( 'wpinv_admin_notices' ); |
|
792 | + } |
|
793 | + |
|
794 | + /** |
|
795 | + * Saves a new admin notice |
|
796 | + * |
|
797 | + * @access public |
|
798 | + * @since 1.0.19 |
|
799 | + */ |
|
800 | + public function save_notice( $type, $message ) { |
|
801 | + $notices = $this->get_notices(); |
|
802 | + |
|
803 | + if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) { |
|
804 | + $notices[ $type ] = array(); |
|
805 | + } |
|
806 | + |
|
807 | + $notices[ $type ][] = $message; |
|
808 | + |
|
809 | + update_option( 'wpinv_admin_notices', $notices ); |
|
810 | + } |
|
811 | + |
|
812 | + /** |
|
813 | + * Displays a success notice |
|
814 | + * |
|
815 | + * @param string $msg The message to qeue. |
|
816 | + * @access public |
|
817 | + * @since 1.0.19 |
|
818 | + */ |
|
819 | + public function show_success( $msg ) { |
|
820 | + $this->save_notice( 'success', $msg ); |
|
821 | + } |
|
822 | + |
|
823 | + /** |
|
824 | + * Displays a error notice |
|
825 | + * |
|
826 | + * @access public |
|
827 | + * @param string $msg The message to qeue. |
|
828 | + * @since 1.0.19 |
|
829 | + */ |
|
830 | + public function show_error( $msg ) { |
|
831 | + $this->save_notice( 'error', $msg ); |
|
832 | + } |
|
833 | + |
|
834 | + /** |
|
835 | + * Displays a warning notice |
|
836 | + * |
|
837 | + * @access public |
|
838 | + * @param string $msg The message to qeue. |
|
839 | + * @since 1.0.19 |
|
840 | + */ |
|
841 | + public function show_warning( $msg ) { |
|
842 | + $this->save_notice( 'warning', $msg ); |
|
843 | + } |
|
844 | + |
|
845 | + /** |
|
846 | + * Displays a info notice |
|
847 | + * |
|
848 | + * @access public |
|
849 | + * @param string $msg The message to qeue. |
|
850 | + * @since 1.0.19 |
|
851 | + */ |
|
852 | + public function show_info( $msg ) { |
|
853 | + $this->save_notice( 'info', $msg ); |
|
854 | + } |
|
855 | + |
|
856 | + /** |
|
857 | + * Show notices |
|
858 | + * |
|
859 | + * @access public |
|
860 | + * @since 1.0.19 |
|
861 | + */ |
|
862 | + public function show_notices() { |
|
863 | 863 | |
864 | 864 | $notices = $this->get_notices(); |
865 | 865 | $this->clear_notices(); |
866 | 866 | |
867 | - foreach ( $notices as $type => $messages ) { |
|
867 | + foreach ( $notices as $type => $messages ) { |
|
868 | 868 | |
869 | - if ( ! is_array( $messages ) ) { |
|
870 | - continue; |
|
871 | - } |
|
869 | + if ( ! is_array( $messages ) ) { |
|
870 | + continue; |
|
871 | + } |
|
872 | 872 | |
873 | 873 | $type = sanitize_key( $type ); |
874 | - foreach ( $messages as $message ) { |
|
874 | + foreach ( $messages as $message ) { |
|
875 | 875 | $message = wp_kses_post( $message ); |
876 | - echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>"; |
|
876 | + echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>"; |
|
877 | 877 | } |
878 | 878 | |
879 | 879 | } |
880 | 880 | |
881 | - foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) { |
|
882 | - |
|
883 | - if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) { |
|
884 | - $url = wp_nonce_url( |
|
885 | - add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ), |
|
886 | - 'getpaid-nonce', |
|
887 | - 'getpaid-nonce' |
|
888 | - ); |
|
889 | - $message = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' ); |
|
890 | - $message2 = __( 'Generate Pages', 'invoicing' ); |
|
891 | - echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>"; |
|
892 | - break; |
|
893 | - } |
|
881 | + foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) { |
|
882 | + |
|
883 | + if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) { |
|
884 | + $url = wp_nonce_url( |
|
885 | + add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ), |
|
886 | + 'getpaid-nonce', |
|
887 | + 'getpaid-nonce' |
|
888 | + ); |
|
889 | + $message = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' ); |
|
890 | + $message2 = __( 'Generate Pages', 'invoicing' ); |
|
891 | + echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>"; |
|
892 | + break; |
|
893 | + } |
|
894 | 894 | |
895 | - } |
|
895 | + } |
|
896 | 896 | |
897 | - } |
|
897 | + } |
|
898 | 898 | |
899 | 899 | } |
@@ -1,103 +1,103 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | if ( ! defined( 'ABSPATH' ) ) { |
4 | - exit; |
|
4 | + exit; |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | if ( ! class_exists( 'AyeCode_Deactivation_Survey' ) ) { |
8 | 8 | |
9 | - class AyeCode_Deactivation_Survey { |
|
9 | + class AyeCode_Deactivation_Survey { |
|
10 | 10 | |
11 | - /** |
|
12 | - * AyeCode_Deactivation_Survey instance. |
|
13 | - * |
|
14 | - * @access private |
|
15 | - * @since 1.0.0 |
|
16 | - * @var AyeCode_Deactivation_Survey There can be only one! |
|
17 | - */ |
|
18 | - private static $instance = null; |
|
11 | + /** |
|
12 | + * AyeCode_Deactivation_Survey instance. |
|
13 | + * |
|
14 | + * @access private |
|
15 | + * @since 1.0.0 |
|
16 | + * @var AyeCode_Deactivation_Survey There can be only one! |
|
17 | + */ |
|
18 | + private static $instance = null; |
|
19 | 19 | |
20 | - public static $plugins; |
|
20 | + public static $plugins; |
|
21 | 21 | |
22 | - public $version = "1.0.4"; |
|
22 | + public $version = "1.0.4"; |
|
23 | 23 | |
24 | - public static function instance( $plugin = array() ) { |
|
25 | - if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_Deactivation_Survey ) ) { |
|
26 | - self::$instance = new AyeCode_Deactivation_Survey; |
|
27 | - self::$plugins = array(); |
|
24 | + public static function instance( $plugin = array() ) { |
|
25 | + if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_Deactivation_Survey ) ) { |
|
26 | + self::$instance = new AyeCode_Deactivation_Survey; |
|
27 | + self::$plugins = array(); |
|
28 | 28 | |
29 | - add_action( 'admin_enqueue_scripts', array( self::$instance, 'scripts' ) ); |
|
29 | + add_action( 'admin_enqueue_scripts', array( self::$instance, 'scripts' ) ); |
|
30 | 30 | |
31 | - do_action( 'ayecode_deactivation_survey_loaded' ); |
|
32 | - } |
|
31 | + do_action( 'ayecode_deactivation_survey_loaded' ); |
|
32 | + } |
|
33 | 33 | |
34 | - if(!empty($plugin)){ |
|
35 | - self::$plugins[] = (object)$plugin; |
|
36 | - } |
|
34 | + if(!empty($plugin)){ |
|
35 | + self::$plugins[] = (object)$plugin; |
|
36 | + } |
|
37 | 37 | |
38 | - return self::$instance; |
|
39 | - } |
|
38 | + return self::$instance; |
|
39 | + } |
|
40 | 40 | |
41 | - public function scripts() { |
|
42 | - global $pagenow; |
|
41 | + public function scripts() { |
|
42 | + global $pagenow; |
|
43 | 43 | |
44 | - // Bail if we are not on the plugins page |
|
45 | - if ( $pagenow != "plugins.php" ) { |
|
46 | - return; |
|
47 | - } |
|
44 | + // Bail if we are not on the plugins page |
|
45 | + if ( $pagenow != "plugins.php" ) { |
|
46 | + return; |
|
47 | + } |
|
48 | 48 | |
49 | - // Enqueue scripts |
|
50 | - add_thickbox(); |
|
51 | - wp_enqueue_script('ayecode-deactivation-survey', plugin_dir_url(__FILE__) . 'ayecode-ds.js'); |
|
49 | + // Enqueue scripts |
|
50 | + add_thickbox(); |
|
51 | + wp_enqueue_script('ayecode-deactivation-survey', plugin_dir_url(__FILE__) . 'ayecode-ds.js'); |
|
52 | 52 | |
53 | - /* |
|
53 | + /* |
|
54 | 54 | * Localized strings. Strings can be localised by plugins using this class. |
55 | 55 | * We deliberately don't add textdomains here so that double textdomain warning is not given in theme review. |
56 | 56 | */ |
57 | - wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_strings', array( |
|
58 | - 'quick_feedback' => 'Quick Feedback', |
|
59 | - 'foreword' => 'If you would be kind enough, please tell us why you\'re deactivating?', |
|
60 | - 'better_plugins_name' => 'Please tell us which plugin?', |
|
61 | - 'please_tell_us' => 'Please tell us the reason so we can improve the plugin', |
|
62 | - 'do_not_attach_email' => 'Do not send my e-mail address with this feedback', |
|
63 | - 'brief_description' => 'Please give us any feedback that could help us improve', |
|
64 | - 'cancel' => 'Cancel', |
|
65 | - 'skip_and_deactivate' => 'Skip & Deactivate', |
|
66 | - 'submit_and_deactivate' => 'Submit & Deactivate', |
|
67 | - 'please_wait' => 'Please wait', |
|
68 | - 'get_support' => 'Get Support', |
|
69 | - 'documentation' => 'Documentation', |
|
70 | - 'thank_you' => 'Thank you!', |
|
71 | - )); |
|
72 | - |
|
73 | - // Plugins |
|
74 | - $plugins = apply_filters('ayecode_deactivation_survey_plugins', self::$plugins); |
|
75 | - |
|
76 | - // Reasons |
|
77 | - $defaultReasons = array( |
|
78 | - 'suddenly-stopped-working' => 'The plugin suddenly stopped working', |
|
79 | - 'plugin-broke-site' => 'The plugin broke my site', |
|
80 | - 'plugin-setup-difficult' => 'Too difficult to setup', |
|
81 | - 'plugin-design-difficult' => 'Too difficult to get the design i want', |
|
82 | - 'no-longer-needed' => 'I don\'t need this plugin any more', |
|
83 | - 'found-better-plugin' => 'I found a better plugin', |
|
84 | - 'temporary-deactivation' => 'It\'s a temporary deactivation, I\'m troubleshooting', |
|
85 | - 'other' => 'Other', |
|
86 | - ); |
|
87 | - |
|
88 | - foreach($plugins as $plugin) |
|
89 | - { |
|
90 | - $plugin->reasons = apply_filters('ayecode_deactivation_survey_reasons', $defaultReasons, $plugin); |
|
91 | - $plugin->url = home_url(); |
|
92 | - $plugin->activated = 0; |
|
93 | - } |
|
94 | - |
|
95 | - // Send plugin data |
|
96 | - wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_plugins', $plugins); |
|
97 | - |
|
98 | - } |
|
57 | + wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_strings', array( |
|
58 | + 'quick_feedback' => 'Quick Feedback', |
|
59 | + 'foreword' => 'If you would be kind enough, please tell us why you\'re deactivating?', |
|
60 | + 'better_plugins_name' => 'Please tell us which plugin?', |
|
61 | + 'please_tell_us' => 'Please tell us the reason so we can improve the plugin', |
|
62 | + 'do_not_attach_email' => 'Do not send my e-mail address with this feedback', |
|
63 | + 'brief_description' => 'Please give us any feedback that could help us improve', |
|
64 | + 'cancel' => 'Cancel', |
|
65 | + 'skip_and_deactivate' => 'Skip & Deactivate', |
|
66 | + 'submit_and_deactivate' => 'Submit & Deactivate', |
|
67 | + 'please_wait' => 'Please wait', |
|
68 | + 'get_support' => 'Get Support', |
|
69 | + 'documentation' => 'Documentation', |
|
70 | + 'thank_you' => 'Thank you!', |
|
71 | + )); |
|
72 | + |
|
73 | + // Plugins |
|
74 | + $plugins = apply_filters('ayecode_deactivation_survey_plugins', self::$plugins); |
|
75 | + |
|
76 | + // Reasons |
|
77 | + $defaultReasons = array( |
|
78 | + 'suddenly-stopped-working' => 'The plugin suddenly stopped working', |
|
79 | + 'plugin-broke-site' => 'The plugin broke my site', |
|
80 | + 'plugin-setup-difficult' => 'Too difficult to setup', |
|
81 | + 'plugin-design-difficult' => 'Too difficult to get the design i want', |
|
82 | + 'no-longer-needed' => 'I don\'t need this plugin any more', |
|
83 | + 'found-better-plugin' => 'I found a better plugin', |
|
84 | + 'temporary-deactivation' => 'It\'s a temporary deactivation, I\'m troubleshooting', |
|
85 | + 'other' => 'Other', |
|
86 | + ); |
|
87 | + |
|
88 | + foreach($plugins as $plugin) |
|
89 | + { |
|
90 | + $plugin->reasons = apply_filters('ayecode_deactivation_survey_reasons', $defaultReasons, $plugin); |
|
91 | + $plugin->url = home_url(); |
|
92 | + $plugin->activated = 0; |
|
93 | + } |
|
94 | + |
|
95 | + // Send plugin data |
|
96 | + wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_plugins', $plugins); |
|
97 | + |
|
98 | + } |
|
99 | 99 | |
100 | 100 | |
101 | - } |
|
101 | + } |
|
102 | 102 | |
103 | 103 | } |
104 | 104 | \ No newline at end of file |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined( 'ABSPATH' ) ) { |
3 | - exit; |
|
3 | + exit; |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | /** |
@@ -10,67 +10,67 @@ discard block |
||
10 | 10 | class GetPaid_Form_Item extends WPInv_Item { |
11 | 11 | |
12 | 12 | /** |
13 | - * Stores a custom description for the item. |
|
14 | - * |
|
15 | - * @var string |
|
16 | - */ |
|
17 | - protected $custom_description = null; |
|
18 | - |
|
19 | - /** |
|
20 | - * Stores the item quantity. |
|
21 | - * |
|
22 | - * @var float |
|
23 | - */ |
|
24 | - protected $quantity = 1; |
|
25 | - |
|
26 | - /** |
|
27 | - * Stores the item meta. |
|
28 | - * |
|
29 | - * @var array |
|
30 | - */ |
|
31 | - protected $meta = array(); |
|
32 | - |
|
33 | - /** |
|
34 | - * Is this item required? |
|
35 | - * |
|
36 | - * @var int |
|
37 | - */ |
|
38 | - protected $is_required = true; |
|
39 | - |
|
40 | - /** |
|
41 | - * Are quantities allowed? |
|
42 | - * |
|
43 | - * @var int |
|
44 | - */ |
|
45 | - protected $allow_quantities = false; |
|
46 | - |
|
47 | - /** |
|
48 | - * Associated invoice. |
|
49 | - * |
|
50 | - * @var int |
|
51 | - */ |
|
52 | - public $invoice_id = 0; |
|
53 | - |
|
54 | - /** |
|
55 | - * Item discount. |
|
56 | - * |
|
57 | - * @var float |
|
58 | - */ |
|
59 | - public $item_discount = 0; |
|
60 | - |
|
61 | - /** |
|
62 | - * Recurring item discount. |
|
63 | - * |
|
64 | - * @var float |
|
65 | - */ |
|
66 | - public $recurring_item_discount = 0; |
|
67 | - |
|
68 | - /** |
|
69 | - * Item tax. |
|
70 | - * |
|
71 | - * @var float |
|
72 | - */ |
|
73 | - public $item_tax = 0; |
|
13 | + * Stores a custom description for the item. |
|
14 | + * |
|
15 | + * @var string |
|
16 | + */ |
|
17 | + protected $custom_description = null; |
|
18 | + |
|
19 | + /** |
|
20 | + * Stores the item quantity. |
|
21 | + * |
|
22 | + * @var float |
|
23 | + */ |
|
24 | + protected $quantity = 1; |
|
25 | + |
|
26 | + /** |
|
27 | + * Stores the item meta. |
|
28 | + * |
|
29 | + * @var array |
|
30 | + */ |
|
31 | + protected $meta = array(); |
|
32 | + |
|
33 | + /** |
|
34 | + * Is this item required? |
|
35 | + * |
|
36 | + * @var int |
|
37 | + */ |
|
38 | + protected $is_required = true; |
|
39 | + |
|
40 | + /** |
|
41 | + * Are quantities allowed? |
|
42 | + * |
|
43 | + * @var int |
|
44 | + */ |
|
45 | + protected $allow_quantities = false; |
|
46 | + |
|
47 | + /** |
|
48 | + * Associated invoice. |
|
49 | + * |
|
50 | + * @var int |
|
51 | + */ |
|
52 | + public $invoice_id = 0; |
|
53 | + |
|
54 | + /** |
|
55 | + * Item discount. |
|
56 | + * |
|
57 | + * @var float |
|
58 | + */ |
|
59 | + public $item_discount = 0; |
|
60 | + |
|
61 | + /** |
|
62 | + * Recurring item discount. |
|
63 | + * |
|
64 | + * @var float |
|
65 | + */ |
|
66 | + public $recurring_item_discount = 0; |
|
67 | + |
|
68 | + /** |
|
69 | + * Item tax. |
|
70 | + * |
|
71 | + * @var float |
|
72 | + */ |
|
73 | + public $item_tax = 0; |
|
74 | 74 | |
75 | 75 | /* |
76 | 76 | |-------------------------------------------------------------------------- |
@@ -88,230 +88,230 @@ discard block |
||
88 | 88 | */ |
89 | 89 | |
90 | 90 | /** |
91 | - * Get the item name. |
|
92 | - * |
|
93 | - * @since 1.0.19 |
|
94 | - * @param string $context View or edit context. |
|
95 | - * @return string |
|
96 | - */ |
|
97 | - public function get_name( $context = 'view' ) { |
|
98 | - $name = parent::get_name( $context ); |
|
99 | - return $name . wpinv_get_item_suffix( $this ); |
|
100 | - } |
|
101 | - |
|
102 | - /** |
|
103 | - * Get the item name without a suffix. |
|
104 | - * |
|
105 | - * @since 1.0.19 |
|
106 | - * @param string $context View or edit context. |
|
107 | - * @return string |
|
108 | - */ |
|
109 | - public function get_raw_name( $context = 'view' ) { |
|
110 | - return parent::get_name( $context ); |
|
111 | - } |
|
112 | - |
|
113 | - /** |
|
114 | - * Get the item description. |
|
115 | - * |
|
116 | - * @since 1.0.19 |
|
117 | - * @param string $context View or edit context. |
|
118 | - * @return string |
|
119 | - */ |
|
120 | - public function get_description( $context = 'view' ) { |
|
121 | - |
|
122 | - if ( isset( $this->custom_description ) ) { |
|
123 | - return $this->custom_description; |
|
124 | - } |
|
125 | - |
|
126 | - return parent::get_description( $context ); |
|
127 | - } |
|
128 | - |
|
129 | - /** |
|
130 | - * Returns the sub total. |
|
131 | - * |
|
132 | - * @since 1.0.19 |
|
133 | - * @param string $context View or edit context. |
|
134 | - * @return float |
|
135 | - */ |
|
136 | - public function get_sub_total( $context = 'view' ) { |
|
137 | - return $this->get_quantity( $context ) * $this->get_initial_price( $context ); |
|
138 | - } |
|
139 | - |
|
140 | - /** |
|
141 | - * Returns the recurring sub total. |
|
142 | - * |
|
143 | - * @since 1.0.19 |
|
144 | - * @param string $context View or edit context. |
|
145 | - * @return float |
|
146 | - */ |
|
147 | - public function get_recurring_sub_total( $context = 'view' ) { |
|
148 | - |
|
149 | - if ( $this->is_recurring() ) { |
|
150 | - return $this->get_quantity( $context ) * $this->get_price( $context ); |
|
151 | - } |
|
152 | - |
|
153 | - return 0; |
|
154 | - } |
|
155 | - |
|
156 | - /** |
|
157 | - * @deprecated |
|
158 | - */ |
|
159 | - public function get_qantity( $context = 'view' ) { |
|
160 | - return $this->get_quantity( $context ); |
|
161 | - } |
|
162 | - |
|
163 | - /** |
|
164 | - * Get the item quantity. |
|
165 | - * |
|
166 | - * @since 1.0.19 |
|
167 | - * @param string $context View or edit context. |
|
168 | - * @return float |
|
169 | - */ |
|
170 | - public function get_quantity( $context = 'view' ) { |
|
171 | - $quantity = (float) $this->quantity; |
|
172 | - |
|
173 | - if ( 'view' == $context ) { |
|
174 | - return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this ); |
|
175 | - } |
|
176 | - |
|
177 | - return $quantity; |
|
178 | - |
|
179 | - } |
|
180 | - |
|
181 | - /** |
|
182 | - * Get the item meta data. |
|
183 | - * |
|
184 | - * @since 1.0.19 |
|
185 | - * @param string $context View or edit context. |
|
186 | - * @return meta |
|
187 | - */ |
|
188 | - public function get_item_meta( $context = 'view' ) { |
|
189 | - $meta = $this->meta; |
|
190 | - |
|
191 | - if ( 'view' == $context ) { |
|
192 | - return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this ); |
|
193 | - } |
|
194 | - |
|
195 | - return $meta; |
|
196 | - |
|
197 | - } |
|
198 | - |
|
199 | - /** |
|
200 | - * Returns whether or not customers can update the item quantity. |
|
201 | - * |
|
202 | - * @since 1.0.19 |
|
203 | - * @param string $context View or edit context. |
|
204 | - * @return bool |
|
205 | - */ |
|
206 | - public function get_allow_quantities( $context = 'view' ) { |
|
207 | - $allow_quantities = (bool) $this->allow_quantities; |
|
208 | - |
|
209 | - if ( 'view' == $context ) { |
|
210 | - return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this ); |
|
211 | - } |
|
212 | - |
|
213 | - return $allow_quantities; |
|
214 | - |
|
215 | - } |
|
216 | - |
|
217 | - /** |
|
218 | - * Returns whether or not the item is required. |
|
219 | - * |
|
220 | - * @since 1.0.19 |
|
221 | - * @param string $context View or edit context. |
|
222 | - * @return bool |
|
223 | - */ |
|
224 | - public function get_is_required( $context = 'view' ) { |
|
225 | - $is_required = (bool) $this->is_required; |
|
226 | - |
|
227 | - if ( 'view' == $context ) { |
|
228 | - return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this ); |
|
229 | - } |
|
230 | - |
|
231 | - return $is_required; |
|
232 | - |
|
233 | - } |
|
234 | - |
|
235 | - /** |
|
236 | - * Prepares form data for use. |
|
237 | - * |
|
238 | - * @since 1.0.19 |
|
239 | - * @return array |
|
240 | - */ |
|
241 | - public function prepare_data_for_use( $required = null ) { |
|
242 | - |
|
243 | - $required = is_null( $required ) ? $this->is_required() : $required; |
|
244 | - return array( |
|
245 | - 'title' => strip_tags( $this->get_name() ), |
|
246 | - 'id' => $this->get_id(), |
|
247 | - 'price' => $this->get_price(), |
|
248 | - 'recurring' => $this->is_recurring(), |
|
249 | - 'description' => $this->get_description(), |
|
250 | - 'allow_quantities' => $this->allows_quantities(), |
|
251 | - 'required' => $required, |
|
252 | - ); |
|
253 | - |
|
254 | - } |
|
255 | - |
|
256 | - /** |
|
257 | - * Prepares form data for ajax use. |
|
258 | - * |
|
259 | - * @since 1.0.19 |
|
260 | - * @return array |
|
261 | - */ |
|
262 | - public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) { |
|
263 | - |
|
264 | - $description = getpaid_item_recurring_price_help_text( $this, $currency ); |
|
265 | - |
|
266 | - if ( $description ) { |
|
267 | - $description = "<div class='getpaid-subscription-help-text'>$description</div>"; |
|
268 | - } |
|
269 | - |
|
270 | - $price = ! $is_renewal ? $this->get_price() : $this->get_recurring_price(); |
|
271 | - $subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total(); |
|
272 | - return array( |
|
273 | - 'id' => $this->get_id(), |
|
274 | - 'texts' => array( |
|
275 | - 'item-name' => sanitize_text_field( $this->get_name() ), |
|
276 | - 'item-description' => wp_kses_post( $this->get_description() ) . $description, |
|
277 | - 'item-quantity' => floatval( $this->get_quantity() ), |
|
278 | - 'item-price' => wpinv_price( $price, $currency ), |
|
279 | - 'item-total' => wpinv_price( $subtotal, $currency ), |
|
280 | - ), |
|
281 | - 'inputs' => array( |
|
282 | - 'item-id' => $this->get_id(), |
|
283 | - 'item-name' => sanitize_text_field( $this->get_name() ), |
|
284 | - 'item-description' => wp_kses_post( $this->get_description() ), |
|
285 | - 'item-quantity' => floatval( $this->get_quantity() ), |
|
286 | - 'item-price' => $price, |
|
287 | - ) |
|
288 | - ); |
|
289 | - |
|
290 | - } |
|
291 | - |
|
292 | - /** |
|
293 | - * Prepares form data for saving (cart_details). |
|
294 | - * |
|
295 | - * @since 1.0.19 |
|
296 | - * @return array |
|
297 | - */ |
|
298 | - public function prepare_data_for_saving() { |
|
299 | - |
|
300 | - return array( |
|
301 | - 'post_id' => $this->invoice_id, |
|
302 | - 'item_id' => $this->get_id(), |
|
303 | - 'item_name' => sanitize_text_field( $this->get_raw_name( 'edit' ) ), |
|
304 | - 'item_description' => $this->get_description( 'edit' ), |
|
305 | - 'tax' => $this->item_tax, |
|
306 | - 'item_price' => $this->get_price( 'edit' ), |
|
307 | - 'quantity' => (float) $this->get_quantity( 'edit' ), |
|
308 | - 'discount' => $this->item_discount, |
|
309 | - 'subtotal' => $this->get_sub_total( 'edit' ), |
|
310 | - 'price' => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount, |
|
311 | - 'meta' => $this->get_item_meta( 'edit' ), |
|
312 | - ); |
|
313 | - |
|
314 | - } |
|
91 | + * Get the item name. |
|
92 | + * |
|
93 | + * @since 1.0.19 |
|
94 | + * @param string $context View or edit context. |
|
95 | + * @return string |
|
96 | + */ |
|
97 | + public function get_name( $context = 'view' ) { |
|
98 | + $name = parent::get_name( $context ); |
|
99 | + return $name . wpinv_get_item_suffix( $this ); |
|
100 | + } |
|
101 | + |
|
102 | + /** |
|
103 | + * Get the item name without a suffix. |
|
104 | + * |
|
105 | + * @since 1.0.19 |
|
106 | + * @param string $context View or edit context. |
|
107 | + * @return string |
|
108 | + */ |
|
109 | + public function get_raw_name( $context = 'view' ) { |
|
110 | + return parent::get_name( $context ); |
|
111 | + } |
|
112 | + |
|
113 | + /** |
|
114 | + * Get the item description. |
|
115 | + * |
|
116 | + * @since 1.0.19 |
|
117 | + * @param string $context View or edit context. |
|
118 | + * @return string |
|
119 | + */ |
|
120 | + public function get_description( $context = 'view' ) { |
|
121 | + |
|
122 | + if ( isset( $this->custom_description ) ) { |
|
123 | + return $this->custom_description; |
|
124 | + } |
|
125 | + |
|
126 | + return parent::get_description( $context ); |
|
127 | + } |
|
128 | + |
|
129 | + /** |
|
130 | + * Returns the sub total. |
|
131 | + * |
|
132 | + * @since 1.0.19 |
|
133 | + * @param string $context View or edit context. |
|
134 | + * @return float |
|
135 | + */ |
|
136 | + public function get_sub_total( $context = 'view' ) { |
|
137 | + return $this->get_quantity( $context ) * $this->get_initial_price( $context ); |
|
138 | + } |
|
139 | + |
|
140 | + /** |
|
141 | + * Returns the recurring sub total. |
|
142 | + * |
|
143 | + * @since 1.0.19 |
|
144 | + * @param string $context View or edit context. |
|
145 | + * @return float |
|
146 | + */ |
|
147 | + public function get_recurring_sub_total( $context = 'view' ) { |
|
148 | + |
|
149 | + if ( $this->is_recurring() ) { |
|
150 | + return $this->get_quantity( $context ) * $this->get_price( $context ); |
|
151 | + } |
|
152 | + |
|
153 | + return 0; |
|
154 | + } |
|
155 | + |
|
156 | + /** |
|
157 | + * @deprecated |
|
158 | + */ |
|
159 | + public function get_qantity( $context = 'view' ) { |
|
160 | + return $this->get_quantity( $context ); |
|
161 | + } |
|
162 | + |
|
163 | + /** |
|
164 | + * Get the item quantity. |
|
165 | + * |
|
166 | + * @since 1.0.19 |
|
167 | + * @param string $context View or edit context. |
|
168 | + * @return float |
|
169 | + */ |
|
170 | + public function get_quantity( $context = 'view' ) { |
|
171 | + $quantity = (float) $this->quantity; |
|
172 | + |
|
173 | + if ( 'view' == $context ) { |
|
174 | + return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this ); |
|
175 | + } |
|
176 | + |
|
177 | + return $quantity; |
|
178 | + |
|
179 | + } |
|
180 | + |
|
181 | + /** |
|
182 | + * Get the item meta data. |
|
183 | + * |
|
184 | + * @since 1.0.19 |
|
185 | + * @param string $context View or edit context. |
|
186 | + * @return meta |
|
187 | + */ |
|
188 | + public function get_item_meta( $context = 'view' ) { |
|
189 | + $meta = $this->meta; |
|
190 | + |
|
191 | + if ( 'view' == $context ) { |
|
192 | + return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this ); |
|
193 | + } |
|
194 | + |
|
195 | + return $meta; |
|
196 | + |
|
197 | + } |
|
198 | + |
|
199 | + /** |
|
200 | + * Returns whether or not customers can update the item quantity. |
|
201 | + * |
|
202 | + * @since 1.0.19 |
|
203 | + * @param string $context View or edit context. |
|
204 | + * @return bool |
|
205 | + */ |
|
206 | + public function get_allow_quantities( $context = 'view' ) { |
|
207 | + $allow_quantities = (bool) $this->allow_quantities; |
|
208 | + |
|
209 | + if ( 'view' == $context ) { |
|
210 | + return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this ); |
|
211 | + } |
|
212 | + |
|
213 | + return $allow_quantities; |
|
214 | + |
|
215 | + } |
|
216 | + |
|
217 | + /** |
|
218 | + * Returns whether or not the item is required. |
|
219 | + * |
|
220 | + * @since 1.0.19 |
|
221 | + * @param string $context View or edit context. |
|
222 | + * @return bool |
|
223 | + */ |
|
224 | + public function get_is_required( $context = 'view' ) { |
|
225 | + $is_required = (bool) $this->is_required; |
|
226 | + |
|
227 | + if ( 'view' == $context ) { |
|
228 | + return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this ); |
|
229 | + } |
|
230 | + |
|
231 | + return $is_required; |
|
232 | + |
|
233 | + } |
|
234 | + |
|
235 | + /** |
|
236 | + * Prepares form data for use. |
|
237 | + * |
|
238 | + * @since 1.0.19 |
|
239 | + * @return array |
|
240 | + */ |
|
241 | + public function prepare_data_for_use( $required = null ) { |
|
242 | + |
|
243 | + $required = is_null( $required ) ? $this->is_required() : $required; |
|
244 | + return array( |
|
245 | + 'title' => strip_tags( $this->get_name() ), |
|
246 | + 'id' => $this->get_id(), |
|
247 | + 'price' => $this->get_price(), |
|
248 | + 'recurring' => $this->is_recurring(), |
|
249 | + 'description' => $this->get_description(), |
|
250 | + 'allow_quantities' => $this->allows_quantities(), |
|
251 | + 'required' => $required, |
|
252 | + ); |
|
253 | + |
|
254 | + } |
|
255 | + |
|
256 | + /** |
|
257 | + * Prepares form data for ajax use. |
|
258 | + * |
|
259 | + * @since 1.0.19 |
|
260 | + * @return array |
|
261 | + */ |
|
262 | + public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) { |
|
263 | + |
|
264 | + $description = getpaid_item_recurring_price_help_text( $this, $currency ); |
|
265 | + |
|
266 | + if ( $description ) { |
|
267 | + $description = "<div class='getpaid-subscription-help-text'>$description</div>"; |
|
268 | + } |
|
269 | + |
|
270 | + $price = ! $is_renewal ? $this->get_price() : $this->get_recurring_price(); |
|
271 | + $subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total(); |
|
272 | + return array( |
|
273 | + 'id' => $this->get_id(), |
|
274 | + 'texts' => array( |
|
275 | + 'item-name' => sanitize_text_field( $this->get_name() ), |
|
276 | + 'item-description' => wp_kses_post( $this->get_description() ) . $description, |
|
277 | + 'item-quantity' => floatval( $this->get_quantity() ), |
|
278 | + 'item-price' => wpinv_price( $price, $currency ), |
|
279 | + 'item-total' => wpinv_price( $subtotal, $currency ), |
|
280 | + ), |
|
281 | + 'inputs' => array( |
|
282 | + 'item-id' => $this->get_id(), |
|
283 | + 'item-name' => sanitize_text_field( $this->get_name() ), |
|
284 | + 'item-description' => wp_kses_post( $this->get_description() ), |
|
285 | + 'item-quantity' => floatval( $this->get_quantity() ), |
|
286 | + 'item-price' => $price, |
|
287 | + ) |
|
288 | + ); |
|
289 | + |
|
290 | + } |
|
291 | + |
|
292 | + /** |
|
293 | + * Prepares form data for saving (cart_details). |
|
294 | + * |
|
295 | + * @since 1.0.19 |
|
296 | + * @return array |
|
297 | + */ |
|
298 | + public function prepare_data_for_saving() { |
|
299 | + |
|
300 | + return array( |
|
301 | + 'post_id' => $this->invoice_id, |
|
302 | + 'item_id' => $this->get_id(), |
|
303 | + 'item_name' => sanitize_text_field( $this->get_raw_name( 'edit' ) ), |
|
304 | + 'item_description' => $this->get_description( 'edit' ), |
|
305 | + 'tax' => $this->item_tax, |
|
306 | + 'item_price' => $this->get_price( 'edit' ), |
|
307 | + 'quantity' => (float) $this->get_quantity( 'edit' ), |
|
308 | + 'discount' => $this->item_discount, |
|
309 | + 'subtotal' => $this->get_sub_total( 'edit' ), |
|
310 | + 'price' => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount, |
|
311 | + 'meta' => $this->get_item_meta( 'edit' ), |
|
312 | + ); |
|
313 | + |
|
314 | + } |
|
315 | 315 | |
316 | 316 | /* |
317 | 317 | |-------------------------------------------------------------------------- |
@@ -323,70 +323,70 @@ discard block |
||
323 | 323 | | object. |
324 | 324 | */ |
325 | 325 | |
326 | - /** |
|
327 | - * Set the item qantity. |
|
328 | - * |
|
329 | - * @since 1.0.19 |
|
330 | - * @param float $quantity The item quantity. |
|
331 | - */ |
|
332 | - public function set_quantity( $quantity ) { |
|
333 | - |
|
334 | - if ( ! is_numeric( $quantity ) ) { |
|
335 | - $quantity = 1; |
|
336 | - } |
|
337 | - |
|
338 | - $this->quantity = (float) $quantity; |
|
339 | - |
|
340 | - } |
|
341 | - |
|
342 | - /** |
|
343 | - * Set the item meta data. |
|
344 | - * |
|
345 | - * @since 1.0.19 |
|
346 | - * @param array $meta The item meta data. |
|
347 | - */ |
|
348 | - public function set_item_meta( $meta ) { |
|
349 | - $this->meta = maybe_unserialize( $meta ); |
|
350 | - } |
|
351 | - |
|
352 | - /** |
|
353 | - * Set whether or not the quantities are allowed. |
|
354 | - * |
|
355 | - * @since 1.0.19 |
|
356 | - * @param bool $allow_quantities |
|
357 | - */ |
|
358 | - public function set_allow_quantities( $allow_quantities ) { |
|
359 | - $this->allow_quantities = (bool) $allow_quantities; |
|
360 | - } |
|
361 | - |
|
362 | - /** |
|
363 | - * Set whether or not the item is required. |
|
364 | - * |
|
365 | - * @since 1.0.19 |
|
366 | - * @param bool $is_required |
|
367 | - */ |
|
368 | - public function set_is_required( $is_required ) { |
|
369 | - $this->is_required = (bool) $is_required; |
|
370 | - } |
|
371 | - |
|
372 | - /** |
|
373 | - * Sets the custom item description. |
|
374 | - * |
|
375 | - * @since 1.0.19 |
|
376 | - * @param string $description |
|
377 | - */ |
|
378 | - public function set_custom_description( $description ) { |
|
379 | - $this->custom_description = $description; |
|
380 | - } |
|
326 | + /** |
|
327 | + * Set the item qantity. |
|
328 | + * |
|
329 | + * @since 1.0.19 |
|
330 | + * @param float $quantity The item quantity. |
|
331 | + */ |
|
332 | + public function set_quantity( $quantity ) { |
|
333 | + |
|
334 | + if ( ! is_numeric( $quantity ) ) { |
|
335 | + $quantity = 1; |
|
336 | + } |
|
337 | + |
|
338 | + $this->quantity = (float) $quantity; |
|
339 | + |
|
340 | + } |
|
341 | + |
|
342 | + /** |
|
343 | + * Set the item meta data. |
|
344 | + * |
|
345 | + * @since 1.0.19 |
|
346 | + * @param array $meta The item meta data. |
|
347 | + */ |
|
348 | + public function set_item_meta( $meta ) { |
|
349 | + $this->meta = maybe_unserialize( $meta ); |
|
350 | + } |
|
351 | + |
|
352 | + /** |
|
353 | + * Set whether or not the quantities are allowed. |
|
354 | + * |
|
355 | + * @since 1.0.19 |
|
356 | + * @param bool $allow_quantities |
|
357 | + */ |
|
358 | + public function set_allow_quantities( $allow_quantities ) { |
|
359 | + $this->allow_quantities = (bool) $allow_quantities; |
|
360 | + } |
|
361 | + |
|
362 | + /** |
|
363 | + * Set whether or not the item is required. |
|
364 | + * |
|
365 | + * @since 1.0.19 |
|
366 | + * @param bool $is_required |
|
367 | + */ |
|
368 | + public function set_is_required( $is_required ) { |
|
369 | + $this->is_required = (bool) $is_required; |
|
370 | + } |
|
371 | + |
|
372 | + /** |
|
373 | + * Sets the custom item description. |
|
374 | + * |
|
375 | + * @since 1.0.19 |
|
376 | + * @param string $description |
|
377 | + */ |
|
378 | + public function set_custom_description( $description ) { |
|
379 | + $this->custom_description = $description; |
|
380 | + } |
|
381 | 381 | |
382 | 382 | /** |
383 | 383 | * We do not want to save items to the database. |
384 | 384 | * |
385 | - * @return int item id |
|
385 | + * @return int item id |
|
386 | 386 | */ |
387 | 387 | public function save( $data = array() ) { |
388 | 388 | return $this->get_id(); |
389 | - } |
|
389 | + } |
|
390 | 390 | |
391 | 391 | /* |
392 | 392 | |-------------------------------------------------------------------------- |
@@ -398,23 +398,23 @@ discard block |
||
398 | 398 | */ |
399 | 399 | |
400 | 400 | /** |
401 | - * Checks whether the item has enabled dynamic pricing. |
|
402 | - * |
|
403 | - * @since 1.0.19 |
|
404 | - * @return bool |
|
405 | - */ |
|
406 | - public function is_required() { |
|
401 | + * Checks whether the item has enabled dynamic pricing. |
|
402 | + * |
|
403 | + * @since 1.0.19 |
|
404 | + * @return bool |
|
405 | + */ |
|
406 | + public function is_required() { |
|
407 | 407 | return (bool) $this->get_is_required(); |
408 | - } |
|
409 | - |
|
410 | - /** |
|
411 | - * Checks whether users can edit the quantities. |
|
412 | - * |
|
413 | - * @since 1.0.19 |
|
414 | - * @return bool |
|
415 | - */ |
|
416 | - public function allows_quantities() { |
|
408 | + } |
|
409 | + |
|
410 | + /** |
|
411 | + * Checks whether users can edit the quantities. |
|
412 | + * |
|
413 | + * @since 1.0.19 |
|
414 | + * @return bool |
|
415 | + */ |
|
416 | + public function allows_quantities() { |
|
417 | 417 | return (bool) $this->get_allow_quantities(); |
418 | - } |
|
418 | + } |
|
419 | 419 | |
420 | 420 | } |
@@ -21,22 +21,22 @@ |
||
21 | 21 | |
22 | 22 | foreach ( $file_types as $file_type ) { |
23 | 23 | |
24 | - if ( isset( $all_types[ $file_type ] ) ) { |
|
25 | - $types[] = $all_types[ $file_type ]; |
|
26 | - $file_type = explode( '|', $file_type ); |
|
24 | + if ( isset( $all_types[ $file_type ] ) ) { |
|
25 | + $types[] = $all_types[ $file_type ]; |
|
26 | + $file_type = explode( '|', $file_type ); |
|
27 | 27 | |
28 | - foreach ( $file_type as $type ) { |
|
29 | - $type = trim( $type ); |
|
30 | - $types[] = ".$type"; |
|
31 | - $_types[] = $type; |
|
32 | - } |
|
28 | + foreach ( $file_type as $type ) { |
|
29 | + $type = trim( $type ); |
|
30 | + $types[] = ".$type"; |
|
31 | + $_types[] = $type; |
|
32 | + } |
|
33 | 33 | |
34 | - } |
|
34 | + } |
|
35 | 35 | |
36 | 36 | } |
37 | 37 | |
38 | 38 | if ( ! empty( $required ) ) { |
39 | - $label .= "<span class='text-danger'> *</span>"; |
|
39 | + $label .= "<span class='text-danger'> *</span>"; |
|
40 | 40 | } |
41 | 41 | |
42 | 42 | ?> |
@@ -14,70 +14,70 @@ discard block |
||
14 | 14 | class WPInv_Ajax { |
15 | 15 | |
16 | 16 | /** |
17 | - * Hook in ajax handlers. |
|
18 | - */ |
|
19 | - public static function init() { |
|
20 | - add_action( 'init', array( __CLASS__, 'define_ajax' ), 0 ); |
|
21 | - add_action( 'template_redirect', array( __CLASS__, 'do_wpinv_ajax' ), 0 ); |
|
22 | - self::add_ajax_events(); |
|
17 | + * Hook in ajax handlers. |
|
18 | + */ |
|
19 | + public static function init() { |
|
20 | + add_action( 'init', array( __CLASS__, 'define_ajax' ), 0 ); |
|
21 | + add_action( 'template_redirect', array( __CLASS__, 'do_wpinv_ajax' ), 0 ); |
|
22 | + self::add_ajax_events(); |
|
23 | 23 | } |
24 | 24 | |
25 | 25 | /** |
26 | - * Set GetPaid AJAX constant and headers. |
|
27 | - */ |
|
28 | - public static function define_ajax() { |
|
29 | - |
|
30 | - if ( ! empty( $_GET['wpinv-ajax'] ) ) { |
|
31 | - getpaid_maybe_define_constant( 'DOING_AJAX', true ); |
|
32 | - getpaid_maybe_define_constant( 'WPInv_DOING_AJAX', true ); |
|
33 | - if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) { |
|
34 | - /** @scrutinizer ignore-unhandled */ @ini_set( 'display_errors', 0 ); |
|
35 | - } |
|
36 | - $GLOBALS['wpdb']->hide_errors(); |
|
37 | - } |
|
26 | + * Set GetPaid AJAX constant and headers. |
|
27 | + */ |
|
28 | + public static function define_ajax() { |
|
29 | + |
|
30 | + if ( ! empty( $_GET['wpinv-ajax'] ) ) { |
|
31 | + getpaid_maybe_define_constant( 'DOING_AJAX', true ); |
|
32 | + getpaid_maybe_define_constant( 'WPInv_DOING_AJAX', true ); |
|
33 | + if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) { |
|
34 | + /** @scrutinizer ignore-unhandled */ @ini_set( 'display_errors', 0 ); |
|
35 | + } |
|
36 | + $GLOBALS['wpdb']->hide_errors(); |
|
37 | + } |
|
38 | 38 | |
39 | 39 | } |
40 | 40 | |
41 | 41 | /** |
42 | - * Send headers for GetPaid Ajax Requests. |
|
43 | - * |
|
44 | - * @since 1.0.18 |
|
45 | - */ |
|
46 | - private static function wpinv_ajax_headers() { |
|
47 | - if ( ! headers_sent() ) { |
|
48 | - send_origin_headers(); |
|
49 | - send_nosniff_header(); |
|
50 | - nocache_headers(); |
|
51 | - header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); |
|
52 | - header( 'X-Robots-Tag: noindex' ); |
|
53 | - status_header( 200 ); |
|
54 | - } |
|
42 | + * Send headers for GetPaid Ajax Requests. |
|
43 | + * |
|
44 | + * @since 1.0.18 |
|
45 | + */ |
|
46 | + private static function wpinv_ajax_headers() { |
|
47 | + if ( ! headers_sent() ) { |
|
48 | + send_origin_headers(); |
|
49 | + send_nosniff_header(); |
|
50 | + nocache_headers(); |
|
51 | + header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); |
|
52 | + header( 'X-Robots-Tag: noindex' ); |
|
53 | + status_header( 200 ); |
|
54 | + } |
|
55 | 55 | } |
56 | 56 | |
57 | 57 | /** |
58 | - * Check for GetPaid Ajax request and fire action. |
|
59 | - */ |
|
60 | - public static function do_wpinv_ajax() { |
|
61 | - global $wp_query; |
|
58 | + * Check for GetPaid Ajax request and fire action. |
|
59 | + */ |
|
60 | + public static function do_wpinv_ajax() { |
|
61 | + global $wp_query; |
|
62 | 62 | |
63 | - if ( ! empty( $_GET['wpinv-ajax'] ) ) { |
|
64 | - $wp_query->set( 'wpinv-ajax', sanitize_text_field( wp_unslash( $_GET['wpinv-ajax'] ) ) ); |
|
65 | - } |
|
63 | + if ( ! empty( $_GET['wpinv-ajax'] ) ) { |
|
64 | + $wp_query->set( 'wpinv-ajax', sanitize_text_field( wp_unslash( $_GET['wpinv-ajax'] ) ) ); |
|
65 | + } |
|
66 | 66 | |
67 | - $action = $wp_query->get( 'wpinv-ajax' ); |
|
67 | + $action = $wp_query->get( 'wpinv-ajax' ); |
|
68 | 68 | |
69 | - if ( $action ) { |
|
70 | - self::wpinv_ajax_headers(); |
|
71 | - $action = sanitize_text_field( $action ); |
|
72 | - do_action( 'wpinv_ajax_' . $action ); |
|
73 | - wp_die(); |
|
74 | - } |
|
69 | + if ( $action ) { |
|
70 | + self::wpinv_ajax_headers(); |
|
71 | + $action = sanitize_text_field( $action ); |
|
72 | + do_action( 'wpinv_ajax_' . $action ); |
|
73 | + wp_die(); |
|
74 | + } |
|
75 | 75 | |
76 | 76 | } |
77 | 77 | |
78 | 78 | /** |
79 | - * Hook in ajax methods. |
|
80 | - */ |
|
79 | + * Hook in ajax methods. |
|
80 | + */ |
|
81 | 81 | public static function add_ajax_events() { |
82 | 82 | |
83 | 83 | // array( 'event' => is_frontend ) |
@@ -261,18 +261,18 @@ discard block |
||
261 | 261 | check_ajax_referer( 'getpaid_form_nonce' ); |
262 | 262 | |
263 | 263 | // Is the request set up correctly? |
264 | - if ( empty( $_GET['form'] ) && empty( $_GET['item'] ) && empty( $_GET['invoice'] ) ) { |
|
265 | - echo aui()->alert( |
|
266 | - array( |
|
267 | - 'type' => 'warning', |
|
268 | - 'content' => __( 'No payment form or item provided', 'invoicing' ), |
|
269 | - ) |
|
264 | + if ( empty( $_GET['form'] ) && empty( $_GET['item'] ) && empty( $_GET['invoice'] ) ) { |
|
265 | + echo aui()->alert( |
|
266 | + array( |
|
267 | + 'type' => 'warning', |
|
268 | + 'content' => __( 'No payment form or item provided', 'invoicing' ), |
|
269 | + ) |
|
270 | 270 | ); |
271 | 271 | exit; |
272 | 272 | } |
273 | 273 | |
274 | 274 | // Payment form or button? |
275 | - if ( ! empty( $_GET['form'] ) ) { |
|
275 | + if ( ! empty( $_GET['form'] ) ) { |
|
276 | 276 | $form = urldecode( $_GET['form'] ); |
277 | 277 | |
278 | 278 | if ( false !== strpos( $form, '|' ) ) { |
@@ -326,11 +326,11 @@ discard block |
||
326 | 326 | getpaid_display_payment_form( $form ); |
327 | 327 | } |
328 | 328 | |
329 | - } else if( ! empty( $_GET['invoice'] ) ) { |
|
330 | - getpaid_display_invoice_payment_form( urldecode( $_GET['invoice'] ) ); |
|
329 | + } else if( ! empty( $_GET['invoice'] ) ) { |
|
330 | + getpaid_display_invoice_payment_form( urldecode( $_GET['invoice'] ) ); |
|
331 | 331 | } else { |
332 | - $items = getpaid_convert_items_to_array( urldecode( $_GET['item'] ) ); |
|
333 | - getpaid_display_item_payment_form( $items ); |
|
332 | + $items = getpaid_convert_items_to_array( urldecode( $_GET['item'] ) ); |
|
333 | + getpaid_display_item_payment_form( $items ); |
|
334 | 334 | } |
335 | 335 | |
336 | 336 | exit; |
@@ -651,7 +651,7 @@ discard block |
||
651 | 651 | if ( is_wp_error( $error ) ) { |
652 | 652 | $alert = $error->get_error_message(); |
653 | 653 | wp_send_json_success( compact( 'alert' ) ); |
654 | - } |
|
654 | + } |
|
655 | 655 | |
656 | 656 | // Update totals. |
657 | 657 | $invoice->recalculate_total(); |
@@ -1085,12 +1085,12 @@ discard block |
||
1085 | 1085 | } |
1086 | 1086 | |
1087 | 1087 | /** |
1088 | - * Handles file uploads. |
|
1089 | - * |
|
1090 | - * @since 1.0.0 |
|
1091 | - * @return void |
|
1092 | - */ |
|
1093 | - public static function file_upload() { |
|
1088 | + * Handles file uploads. |
|
1089 | + * |
|
1090 | + * @since 1.0.0 |
|
1091 | + * @return void |
|
1092 | + */ |
|
1093 | + public static function file_upload() { |
|
1094 | 1094 | |
1095 | 1095 | // Check nonce. |
1096 | 1096 | check_ajax_referer( 'getpaid_form_nonce' ); |
@@ -1151,7 +1151,7 @@ discard block |
||
1151 | 1151 | |
1152 | 1152 | wp_send_json_success( $response ); |
1153 | 1153 | |
1154 | - } |
|
1154 | + } |
|
1155 | 1155 | |
1156 | 1156 | } |
1157 | 1157 |
@@ -136,13 +136,13 @@ discard block |
||
136 | 136 | */ |
137 | 137 | function wpinv_get_invoice_statuses( $draft = false, $trashed = false, $invoice = false ) { |
138 | 138 | |
139 | - $invoice_statuses = array( |
|
140 | - 'wpi-pending' => _x( 'Pending payment', 'Invoice status', 'invoicing' ), |
|
139 | + $invoice_statuses = array( |
|
140 | + 'wpi-pending' => _x( 'Pending payment', 'Invoice status', 'invoicing' ), |
|
141 | 141 | 'publish' => _x( 'Paid', 'Invoice status', 'invoicing' ), |
142 | 142 | 'wpi-processing' => _x( 'Processing', 'Invoice status', 'invoicing' ), |
143 | - 'wpi-onhold' => _x( 'On hold', 'Invoice status', 'invoicing' ), |
|
144 | - 'wpi-cancelled' => _x( 'Cancelled', 'Invoice status', 'invoicing' ), |
|
145 | - 'wpi-refunded' => _x( 'Refunded', 'Invoice status', 'invoicing' ), |
|
143 | + 'wpi-onhold' => _x( 'On hold', 'Invoice status', 'invoicing' ), |
|
144 | + 'wpi-cancelled' => _x( 'Cancelled', 'Invoice status', 'invoicing' ), |
|
145 | + 'wpi-refunded' => _x( 'Refunded', 'Invoice status', 'invoicing' ), |
|
146 | 146 | 'wpi-failed' => _x( 'Failed', 'Invoice status', 'invoicing' ), |
147 | 147 | 'wpi-renewal' => _x( 'Renewal Payment', 'Invoice status', 'invoicing' ), |
148 | 148 | ); |
@@ -159,7 +159,7 @@ discard block |
||
159 | 159 | $invoice = $invoice->get_post_type(); |
160 | 160 | } |
161 | 161 | |
162 | - return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice ); |
|
162 | + return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice ); |
|
163 | 163 | } |
164 | 164 | |
165 | 165 | /** |
@@ -277,25 +277,25 @@ discard block |
||
277 | 277 | * @return string |
278 | 278 | */ |
279 | 279 | function getpaid_get_price_format() { |
280 | - $currency_pos = wpinv_currency_position(); |
|
281 | - $format = '%1$s%2$s'; |
|
282 | - |
|
283 | - switch ( $currency_pos ) { |
|
284 | - case 'left': |
|
285 | - $format = '%1$s%2$s'; |
|
286 | - break; |
|
287 | - case 'right': |
|
288 | - $format = '%2$s%1$s'; |
|
289 | - break; |
|
290 | - case 'left_space': |
|
291 | - $format = '%1$s %2$s'; |
|
292 | - break; |
|
293 | - case 'right_space': |
|
294 | - $format = '%2$s %1$s'; |
|
295 | - break; |
|
296 | - } |
|
297 | - |
|
298 | - return apply_filters( 'getpaid_price_format', $format, $currency_pos ); |
|
280 | + $currency_pos = wpinv_currency_position(); |
|
281 | + $format = '%1$s%2$s'; |
|
282 | + |
|
283 | + switch ( $currency_pos ) { |
|
284 | + case 'left': |
|
285 | + $format = '%1$s%2$s'; |
|
286 | + break; |
|
287 | + case 'right': |
|
288 | + $format = '%2$s%1$s'; |
|
289 | + break; |
|
290 | + case 'left_space': |
|
291 | + $format = '%1$s %2$s'; |
|
292 | + break; |
|
293 | + case 'right_space': |
|
294 | + $format = '%2$s %1$s'; |
|
295 | + break; |
|
296 | + } |
|
297 | + |
|
298 | + return apply_filters( 'getpaid_price_format', $format, $currency_pos ); |
|
299 | 299 | } |
300 | 300 | |
301 | 301 | /** |
@@ -390,13 +390,13 @@ discard block |
||
390 | 390 | * @param mixed $value Value. |
391 | 391 | */ |
392 | 392 | function getpaid_maybe_define_constant( $name, $value ) { |
393 | - if ( ! defined( $name ) ) { |
|
394 | - define( $name, $value ); |
|
395 | - } |
|
393 | + if ( ! defined( $name ) ) { |
|
394 | + define( $name, $value ); |
|
395 | + } |
|
396 | 396 | } |
397 | 397 | |
398 | 398 | function wpinv_get_php_arg_separator_output() { |
399 | - return ini_get( 'arg_separator.output' ); |
|
399 | + return ini_get( 'arg_separator.output' ); |
|
400 | 400 | } |
401 | 401 | |
402 | 402 | function wpinv_rgb_from_hex( $color ) { |
@@ -751,11 +751,11 @@ discard block |
||
751 | 751 | $list = array(); |
752 | 752 | } |
753 | 753 | |
754 | - if ( ! is_array( $list ) ) { |
|
755 | - return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY ); |
|
756 | - } |
|
754 | + if ( ! is_array( $list ) ) { |
|
755 | + return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY ); |
|
756 | + } |
|
757 | 757 | |
758 | - return $list; |
|
758 | + return $list; |
|
759 | 759 | } |
760 | 760 | |
761 | 761 | /** |
@@ -775,9 +775,9 @@ discard block |
||
775 | 775 | } |
776 | 776 | |
777 | 777 | $data = apply_filters( "wpinv_get_$key", include WPINV_PLUGIN_DIR . "includes/data/$key.php" ); |
778 | - wp_cache_set( "wpinv-data-$key", $data, 'wpinv' ); |
|
778 | + wp_cache_set( "wpinv-data-$key", $data, 'wpinv' ); |
|
779 | 779 | |
780 | - return $data; |
|
780 | + return $data; |
|
781 | 781 | } |
782 | 782 | |
783 | 783 | /** |
@@ -806,17 +806,17 @@ discard block |
||
806 | 806 | */ |
807 | 807 | function wpinv_clean( $var ) { |
808 | 808 | |
809 | - if ( is_array( $var ) ) { |
|
810 | - return array_map( 'wpinv_clean', $var ); |
|
809 | + if ( is_array( $var ) ) { |
|
810 | + return array_map( 'wpinv_clean', $var ); |
|
811 | 811 | } |
812 | 812 | |
813 | 813 | if ( is_object( $var ) ) { |
814 | - $object_vars = get_object_vars( $var ); |
|
815 | - foreach ( $object_vars as $property_name => $property_value ) { |
|
816 | - $var->$property_name = wpinv_clean( $property_value ); |
|
814 | + $object_vars = get_object_vars( $var ); |
|
815 | + foreach ( $object_vars as $property_name => $property_value ) { |
|
816 | + $var->$property_name = wpinv_clean( $property_value ); |
|
817 | 817 | } |
818 | 818 | return $var; |
819 | - } |
|
819 | + } |
|
820 | 820 | |
821 | 821 | return is_string( $var ) ? sanitize_text_field( stripslashes( $var ) ) : $var; |
822 | 822 | } |
@@ -829,7 +829,7 @@ discard block |
||
829 | 829 | */ |
830 | 830 | function getpaid_convert_price_string_to_options( $str ) { |
831 | 831 | |
832 | - $raw_options = array_map( 'trim', explode( ',', $str ) ); |
|
832 | + $raw_options = array_map( 'trim', explode( ',', $str ) ); |
|
833 | 833 | $options = array(); |
834 | 834 | |
835 | 835 | foreach ( $raw_options as $option ) { |
@@ -912,7 +912,7 @@ discard block |
||
912 | 912 | * @return string |
913 | 913 | */ |
914 | 914 | function getpaid_date_format() { |
915 | - return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) ); |
|
915 | + return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) ); |
|
916 | 916 | } |
917 | 917 | |
918 | 918 | /** |
@@ -921,7 +921,7 @@ discard block |
||
921 | 921 | * @return string |
922 | 922 | */ |
923 | 923 | function getpaid_time_format() { |
924 | - return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) ); |
|
924 | + return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) ); |
|
925 | 925 | } |
926 | 926 | |
927 | 927 | /** |
@@ -934,15 +934,15 @@ discard block |
||
934 | 934 | function getpaid_limit_length( $string, $limit ) { |
935 | 935 | $str_limit = $limit - 3; |
936 | 936 | |
937 | - if ( function_exists( 'mb_strimwidth' ) ) { |
|
938 | - if ( mb_strlen( $string ) > $limit ) { |
|
939 | - $string = mb_strimwidth( $string, 0, $str_limit ) . '...'; |
|
940 | - } |
|
941 | - } else { |
|
942 | - if ( strlen( $string ) > $limit ) { |
|
943 | - $string = substr( $string, 0, $str_limit ) . '...'; |
|
944 | - } |
|
945 | - } |
|
937 | + if ( function_exists( 'mb_strimwidth' ) ) { |
|
938 | + if ( mb_strlen( $string ) > $limit ) { |
|
939 | + $string = mb_strimwidth( $string, 0, $str_limit ) . '...'; |
|
940 | + } |
|
941 | + } else { |
|
942 | + if ( strlen( $string ) > $limit ) { |
|
943 | + $string = substr( $string, 0, $str_limit ) . '...'; |
|
944 | + } |
|
945 | + } |
|
946 | 946 | return $string; |
947 | 947 | |
948 | 948 | } |
@@ -1073,12 +1073,12 @@ discard block |
||
1073 | 1073 | $types = get_allowed_mime_types(); |
1074 | 1074 | |
1075 | 1075 | if ( isset( $types['htm|html'] ) ) { |
1076 | - unset( $types['htm|html'] ); |
|
1077 | - } |
|
1076 | + unset( $types['htm|html'] ); |
|
1077 | + } |
|
1078 | 1078 | |
1079 | 1079 | if ( isset( $types['js'] ) ) { |
1080 | - unset( $types['js'] ); |
|
1081 | - } |
|
1080 | + unset( $types['js'] ); |
|
1081 | + } |
|
1082 | 1082 | |
1083 | 1083 | return $types; |
1084 | 1084 |