@@ -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( 'addons' ); |
|
22 | + /** |
|
23 | + * An array of features that this gateway supports. |
|
24 | + * |
|
25 | + * @var array |
|
26 | + */ |
|
27 | + protected $supports = array( 'addons' ); |
|
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,23 +44,23 @@ 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 ); |
|
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 | 51 | |
52 | 52 | } |
53 | 53 | |
54 | 54 | /** |
55 | - * Process Payment. |
|
56 | - * |
|
57 | - * |
|
58 | - * @param WPInv_Invoice $invoice Invoice. |
|
59 | - * @param array $submission_data Posted checkout fields. |
|
60 | - * @param GetPaid_Payment_Form_Submission $submission Checkout submission. |
|
61 | - * @return array |
|
62 | - */ |
|
63 | - public function process_payment( $invoice, $submission_data, $submission ) { |
|
55 | + * Process Payment. |
|
56 | + * |
|
57 | + * |
|
58 | + * @param WPInv_Invoice $invoice Invoice. |
|
59 | + * @param array $submission_data Posted checkout fields. |
|
60 | + * @param GetPaid_Payment_Form_Submission $submission Checkout submission. |
|
61 | + * @return array |
|
62 | + */ |
|
63 | + public function process_payment( $invoice, $submission_data, $submission ) { |
|
64 | 64 | |
65 | 65 | // Add a transaction id. |
66 | 66 | $invoice->set_transaction_id( $invoice->generate_key('trans_') ); |
@@ -81,66 +81,66 @@ discard block |
||
81 | 81 | } |
82 | 82 | |
83 | 83 | /** |
84 | - * Output for the order received page. |
|
85 | - * |
|
86 | - * @param WPInv_Invoice $invoice Invoice. |
|
87 | - */ |
|
88 | - public function thankyou_page( $invoice ) { |
|
84 | + * Output for the order received page. |
|
85 | + * |
|
86 | + * @param WPInv_Invoice $invoice Invoice. |
|
87 | + */ |
|
88 | + public function thankyou_page( $invoice ) { |
|
89 | 89 | |
90 | 90 | if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
91 | 91 | |
92 | - echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL; |
|
92 | + echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL; |
|
93 | 93 | |
94 | 94 | if ( ! empty( $this->instructions ) ) { |
95 | 95 | echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) ); |
96 | - } |
|
96 | + } |
|
97 | 97 | |
98 | - $this->bank_details( $invoice ); |
|
98 | + $this->bank_details( $invoice ); |
|
99 | 99 | |
100 | - echo '</div>'; |
|
100 | + echo '</div>'; |
|
101 | 101 | |
102 | 102 | } |
103 | 103 | |
104 | - } |
|
104 | + } |
|
105 | 105 | |
106 | 106 | /** |
107 | - * Add content to the WPI emails. |
|
108 | - * |
|
109 | - * @param WPInv_Invoice $invoice Invoice. |
|
110 | - * @param string $email_type Email format: plain text or HTML. |
|
111 | - * @param bool $sent_to_admin Sent to admin. |
|
112 | - */ |
|
113 | - public function email_instructions( $invoice, $email_type, $sent_to_admin ) { |
|
107 | + * Add content to the WPI emails. |
|
108 | + * |
|
109 | + * @param WPInv_Invoice $invoice Invoice. |
|
110 | + * @param string $email_type Email format: plain text or HTML. |
|
111 | + * @param bool $sent_to_admin Sent to admin. |
|
112 | + */ |
|
113 | + public function email_instructions( $invoice, $email_type, $sent_to_admin ) { |
|
114 | 114 | |
115 | - if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
115 | + if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
116 | 116 | |
117 | - echo '<div class="wpi-email-row getpaid-bank-transfer-details">'; |
|
117 | + echo '<div class="wpi-email-row getpaid-bank-transfer-details">'; |
|
118 | 118 | |
119 | - if ( $this->instructions ) { |
|
120 | - echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); |
|
119 | + if ( $this->instructions ) { |
|
120 | + echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); |
|
121 | 121 | } |
122 | 122 | |
123 | - $this->bank_details( $invoice ); |
|
123 | + $this->bank_details( $invoice ); |
|
124 | 124 | |
125 | - echo '</div>'; |
|
125 | + echo '</div>'; |
|
126 | 126 | |
127 | - } |
|
127 | + } |
|
128 | 128 | |
129 | 129 | } |
130 | 130 | |
131 | 131 | /** |
132 | - * Get bank details and place into a list format. |
|
133 | - * |
|
134 | - * @param WPInv_Invoice $invoice Invoice. |
|
135 | - */ |
|
136 | - protected function bank_details( $invoice ) { |
|
132 | + * Get bank details and place into a list format. |
|
133 | + * |
|
134 | + * @param WPInv_Invoice $invoice Invoice. |
|
135 | + */ |
|
136 | + protected function bank_details( $invoice ) { |
|
137 | 137 | |
138 | - // Get the invoice country and country $locale. |
|
139 | - $country = $invoice->get_country(); |
|
140 | - $locale = $this->get_country_locale(); |
|
138 | + // Get the invoice country and country $locale. |
|
139 | + $country = $invoice->get_country(); |
|
140 | + $locale = $this->get_country_locale(); |
|
141 | 141 | |
142 | - // Get sortcode label in the $locale array and use appropriate one. |
|
143 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
142 | + // Get sortcode label in the $locale array and use appropriate one. |
|
143 | + $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
144 | 144 | |
145 | 145 | $bank_fields = array( |
146 | 146 | 'ac_name' => __( 'Account Name', 'invoicing' ), |
@@ -169,144 +169,144 @@ discard block |
||
169 | 169 | return; |
170 | 170 | } |
171 | 171 | |
172 | - echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
172 | + echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
173 | 173 | |
174 | - echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
174 | + echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
175 | 175 | |
176 | - foreach ( $bank_info as $key => $data ) { |
|
176 | + foreach ( $bank_info as $key => $data ) { |
|
177 | 177 | |
178 | - $key = sanitize_html_class( $key ); |
|
179 | - $label = wp_kses_post( $data['label'] ); |
|
180 | - $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
178 | + $key = sanitize_html_class( $key ); |
|
179 | + $label = wp_kses_post( $data['label'] ); |
|
180 | + $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
181 | 181 | |
182 | - echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL; |
|
183 | - } |
|
182 | + echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL; |
|
183 | + } |
|
184 | 184 | |
185 | - echo '</table>'; |
|
185 | + echo '</table>'; |
|
186 | 186 | |
187 | 187 | } |
188 | 188 | |
189 | 189 | /** |
190 | - * Get country locale if localized. |
|
191 | - * |
|
192 | - * @return array |
|
193 | - */ |
|
194 | - public function get_country_locale() { |
|
195 | - |
|
196 | - if ( empty( $this->locale ) ) { |
|
197 | - |
|
198 | - // Locale information to be used - only those that are not 'Sort Code'. |
|
199 | - $this->locale = apply_filters( |
|
200 | - 'getpaid_get_bank_transfer_locale', |
|
201 | - array( |
|
202 | - 'AU' => array( |
|
203 | - 'sortcode' => array( |
|
204 | - 'label' => __( 'BSB', 'invoicing' ), |
|
205 | - ), |
|
206 | - ), |
|
207 | - 'CA' => array( |
|
208 | - 'sortcode' => array( |
|
209 | - 'label' => __( 'Bank transit number', 'invoicing' ), |
|
210 | - ), |
|
211 | - ), |
|
212 | - 'IN' => array( |
|
213 | - 'sortcode' => array( |
|
214 | - 'label' => __( 'IFSC', 'invoicing' ), |
|
215 | - ), |
|
216 | - ), |
|
217 | - 'IT' => array( |
|
218 | - 'sortcode' => array( |
|
219 | - 'label' => __( 'Branch sort', 'invoicing' ), |
|
220 | - ), |
|
221 | - ), |
|
222 | - 'NZ' => array( |
|
223 | - 'sortcode' => array( |
|
224 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
225 | - ), |
|
226 | - ), |
|
227 | - 'SE' => array( |
|
228 | - 'sortcode' => array( |
|
229 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
230 | - ), |
|
231 | - ), |
|
232 | - 'US' => array( |
|
233 | - 'sortcode' => array( |
|
234 | - 'label' => __( 'Routing number', 'invoicing' ), |
|
235 | - ), |
|
236 | - ), |
|
237 | - 'ZA' => array( |
|
238 | - 'sortcode' => array( |
|
239 | - 'label' => __( 'Branch code', 'invoicing' ), |
|
240 | - ), |
|
241 | - ), |
|
242 | - ) |
|
243 | - ); |
|
244 | - |
|
245 | - } |
|
246 | - |
|
247 | - return $this->locale; |
|
248 | - |
|
249 | - } |
|
250 | - |
|
251 | - /** |
|
252 | - * Filters the gateway settings. |
|
253 | - * |
|
254 | - * @param array $admin_settings |
|
255 | - */ |
|
256 | - public function admin_settings( $admin_settings ) { |
|
190 | + * Get country locale if localized. |
|
191 | + * |
|
192 | + * @return array |
|
193 | + */ |
|
194 | + public function get_country_locale() { |
|
195 | + |
|
196 | + if ( empty( $this->locale ) ) { |
|
197 | + |
|
198 | + // Locale information to be used - only those that are not 'Sort Code'. |
|
199 | + $this->locale = apply_filters( |
|
200 | + 'getpaid_get_bank_transfer_locale', |
|
201 | + array( |
|
202 | + 'AU' => array( |
|
203 | + 'sortcode' => array( |
|
204 | + 'label' => __( 'BSB', 'invoicing' ), |
|
205 | + ), |
|
206 | + ), |
|
207 | + 'CA' => array( |
|
208 | + 'sortcode' => array( |
|
209 | + 'label' => __( 'Bank transit number', 'invoicing' ), |
|
210 | + ), |
|
211 | + ), |
|
212 | + 'IN' => array( |
|
213 | + 'sortcode' => array( |
|
214 | + 'label' => __( 'IFSC', 'invoicing' ), |
|
215 | + ), |
|
216 | + ), |
|
217 | + 'IT' => array( |
|
218 | + 'sortcode' => array( |
|
219 | + 'label' => __( 'Branch sort', 'invoicing' ), |
|
220 | + ), |
|
221 | + ), |
|
222 | + 'NZ' => array( |
|
223 | + 'sortcode' => array( |
|
224 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
225 | + ), |
|
226 | + ), |
|
227 | + 'SE' => array( |
|
228 | + 'sortcode' => array( |
|
229 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
230 | + ), |
|
231 | + ), |
|
232 | + 'US' => array( |
|
233 | + 'sortcode' => array( |
|
234 | + 'label' => __( 'Routing number', 'invoicing' ), |
|
235 | + ), |
|
236 | + ), |
|
237 | + 'ZA' => array( |
|
238 | + 'sortcode' => array( |
|
239 | + 'label' => __( 'Branch code', 'invoicing' ), |
|
240 | + ), |
|
241 | + ), |
|
242 | + ) |
|
243 | + ); |
|
244 | + |
|
245 | + } |
|
246 | + |
|
247 | + return $this->locale; |
|
248 | + |
|
249 | + } |
|
250 | + |
|
251 | + /** |
|
252 | + * Filters the gateway settings. |
|
253 | + * |
|
254 | + * @param array $admin_settings |
|
255 | + */ |
|
256 | + public function admin_settings( $admin_settings ) { |
|
257 | 257 | |
258 | 258 | $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' ); |
259 | - $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
259 | + $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
260 | 260 | |
261 | - $locale = $this->get_country_locale(); |
|
261 | + $locale = $this->get_country_locale(); |
|
262 | 262 | |
263 | - // Get sortcode label in the $locale array and use appropriate one. |
|
264 | - $country = wpinv_default_billing_country(); |
|
265 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
263 | + // Get sortcode label in the $locale array and use appropriate one. |
|
264 | + $country = wpinv_default_billing_country(); |
|
265 | + $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
266 | 266 | |
267 | - $admin_settings['bank_transfer_ac_name'] = array( |
|
267 | + $admin_settings['bank_transfer_ac_name'] = array( |
|
268 | 268 | 'type' => 'text', |
269 | 269 | 'id' => 'bank_transfer_ac_name', |
270 | 270 | 'name' => __( 'Account Name', 'invoicing' ), |
271 | - ); |
|
271 | + ); |
|
272 | 272 | |
273 | - $admin_settings['bank_transfer_ac_no'] = array( |
|
273 | + $admin_settings['bank_transfer_ac_no'] = array( |
|
274 | 274 | 'type' => 'text', |
275 | 275 | 'id' => 'bank_transfer_ac_no', |
276 | 276 | 'name' => __( 'Account Number', 'invoicing' ), |
277 | - ); |
|
277 | + ); |
|
278 | 278 | |
279 | - $admin_settings['bank_transfer_bank_name'] = array( |
|
279 | + $admin_settings['bank_transfer_bank_name'] = array( |
|
280 | 280 | 'type' => 'text', |
281 | 281 | 'id' => 'bank_transfer_bank_name', |
282 | 282 | 'name' => __( 'Bank Name', 'invoicing' ), |
283 | - ); |
|
283 | + ); |
|
284 | 284 | |
285 | - $admin_settings['bank_transfer_ifsc'] = array( |
|
285 | + $admin_settings['bank_transfer_ifsc'] = array( |
|
286 | 286 | 'type' => 'text', |
287 | 287 | 'id' => 'bank_transfer_ifsc', |
288 | 288 | 'name' => __( 'IFSC Code', 'invoicing' ), |
289 | - ); |
|
289 | + ); |
|
290 | 290 | |
291 | - $admin_settings['bank_transfer_iban'] = array( |
|
291 | + $admin_settings['bank_transfer_iban'] = array( |
|
292 | 292 | 'type' => 'text', |
293 | 293 | 'id' => 'bank_transfer_iban', |
294 | 294 | 'name' => __( 'IBAN', 'invoicing' ), |
295 | - ); |
|
295 | + ); |
|
296 | 296 | |
297 | - $admin_settings['bank_transfer_bic'] = array( |
|
297 | + $admin_settings['bank_transfer_bic'] = array( |
|
298 | 298 | 'type' => 'text', |
299 | 299 | 'id' => 'bank_transfer_bic', |
300 | 300 | 'name' => __( 'BIC/Swift Code', 'invoicing' ), |
301 | - ); |
|
301 | + ); |
|
302 | 302 | |
303 | - $admin_settings['bank_transfer_sort_code'] = array( |
|
304 | - 'type' => 'text', |
|
305 | - 'id' => 'bank_transfer_sort_code', |
|
306 | - 'name' => $sortcode, |
|
307 | - ); |
|
303 | + $admin_settings['bank_transfer_sort_code'] = array( |
|
304 | + 'type' => 'text', |
|
305 | + 'id' => 'bank_transfer_sort_code', |
|
306 | + 'name' => $sortcode, |
|
307 | + ); |
|
308 | 308 | |
309 | - $admin_settings['bank_transfer_info'] = array( |
|
309 | + $admin_settings['bank_transfer_info'] = array( |
|
310 | 310 | 'id' => 'bank_transfer_info', |
311 | 311 | 'name' => __( 'Instructions', 'invoicing' ), |
312 | 312 | 'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ), |
@@ -316,17 +316,17 @@ discard block |
||
316 | 316 | 'rows' => 5 |
317 | 317 | ); |
318 | 318 | |
319 | - return $admin_settings; |
|
320 | - } |
|
319 | + return $admin_settings; |
|
320 | + } |
|
321 | 321 | |
322 | - /** |
|
323 | - * Processes invoice addons. |
|
324 | - * |
|
325 | - * @param WPInv_Invoice $invoice |
|
326 | - * @param GetPaid_Form_Item[] $items |
|
327 | - * @return WPInv_Invoice |
|
328 | - */ |
|
329 | - public function process_addons( $invoice, $items ) { |
|
322 | + /** |
|
323 | + * Processes invoice addons. |
|
324 | + * |
|
325 | + * @param WPInv_Invoice $invoice |
|
326 | + * @param GetPaid_Form_Item[] $items |
|
327 | + * @return WPInv_Invoice |
|
328 | + */ |
|
329 | + public function process_addons( $invoice, $items ) { |
|
330 | 330 | |
331 | 331 | foreach ( $items as $item ) { |
332 | 332 | $invoice->add_item( $item ); |
@@ -334,6 +334,6 @@ discard block |
||
334 | 334 | |
335 | 335 | $invoice->recalculate_total(); |
336 | 336 | $invoice->save(); |
337 | - } |
|
337 | + } |
|
338 | 338 | |
339 | 339 | } |
@@ -24,64 +24,64 @@ discard block |
||
24 | 24 | |
25 | 25 | <?php |
26 | 26 | |
27 | - // Fires before printing a line item column. |
|
28 | - do_action( "getpaid_form_cart_item_before_$key", $item, $form ); |
|
27 | + // Fires before printing a line item column. |
|
28 | + do_action( "getpaid_form_cart_item_before_$key", $item, $form ); |
|
29 | 29 | |
30 | - // Item name. |
|
31 | - if ( 'name' == $key ) { |
|
30 | + // Item name. |
|
31 | + if ( 'name' == $key ) { |
|
32 | 32 | |
33 | - // Display the name. |
|
34 | - echo '<div class="mb-1">' . sanitize_text_field( $item->get_name() ) . '</div>'; |
|
33 | + // Display the name. |
|
34 | + echo '<div class="mb-1">' . sanitize_text_field( $item->get_name() ) . '</div>'; |
|
35 | 35 | |
36 | - // And an optional description. |
|
36 | + // And an optional description. |
|
37 | 37 | $description = $item->get_description(); |
38 | 38 | |
39 | 39 | if ( ! empty( $description ) ) { |
40 | 40 | $description = wp_kses_post( $description ); |
41 | 41 | echo "<small class='form-text text-muted pr-2 m-0'>$description</small>"; |
42 | - } |
|
42 | + } |
|
43 | 43 | |
44 | - // Price help text. |
|
44 | + // Price help text. |
|
45 | 45 | $description = getpaid_item_recurring_price_help_text( $item, $currency ); |
46 | 46 | if ( $description ) { |
47 | 47 | echo "<small class='getpaid-form-item-price-desc form-text text-muted pr-2 m-0'>$description</small>"; |
48 | - } |
|
48 | + } |
|
49 | 49 | |
50 | - } |
|
50 | + } |
|
51 | 51 | |
52 | - // Item price. |
|
53 | - if ( 'price' == $key ) { |
|
52 | + // Item price. |
|
53 | + if ( 'price' == $key ) { |
|
54 | 54 | |
55 | - // Set the currency position. |
|
56 | - $position = wpinv_currency_position(); |
|
55 | + // Set the currency position. |
|
56 | + $position = wpinv_currency_position(); |
|
57 | 57 | |
58 | - if ( $position == 'left_space' ) { |
|
59 | - $position = 'left'; |
|
60 | - } |
|
58 | + if ( $position == 'left_space' ) { |
|
59 | + $position = 'left'; |
|
60 | + } |
|
61 | 61 | |
62 | - if ( $position == 'right_space' ) { |
|
63 | - $position = 'right'; |
|
64 | - } |
|
62 | + if ( $position == 'right_space' ) { |
|
63 | + $position = 'right'; |
|
64 | + } |
|
65 | 65 | |
66 | - if ( $item->user_can_set_their_price() ) { |
|
67 | - $price = max( (float) $item->get_price(), (float) $item->get_minimum_price() ); |
|
68 | - $minimum = (float) $item->get_minimum_price(); |
|
69 | - $validate_minimum = ''; |
|
70 | - $class = ''; |
|
71 | - $data_minimum = ''; |
|
66 | + if ( $item->user_can_set_their_price() ) { |
|
67 | + $price = max( (float) $item->get_price(), (float) $item->get_minimum_price() ); |
|
68 | + $minimum = (float) $item->get_minimum_price(); |
|
69 | + $validate_minimum = ''; |
|
70 | + $class = ''; |
|
71 | + $data_minimum = ''; |
|
72 | 72 | |
73 | - if ( $minimum > 0 ) { |
|
74 | - $validate_minimum = sprintf( |
|
75 | - esc_attr__( 'The minimum allowed amount is %s', 'invoicing' ), |
|
76 | - sanitize_text_field( wpinv_price( $minimum, $currency ) ) |
|
77 | - ); |
|
73 | + if ( $minimum > 0 ) { |
|
74 | + $validate_minimum = sprintf( |
|
75 | + esc_attr__( 'The minimum allowed amount is %s', 'invoicing' ), |
|
76 | + sanitize_text_field( wpinv_price( $minimum, $currency ) ) |
|
77 | + ); |
|
78 | 78 | |
79 | - $class = 'getpaid-validate-minimum-amount'; |
|
79 | + $class = 'getpaid-validate-minimum-amount'; |
|
80 | 80 | |
81 | - $data_minimum = "data-minimum-amount='$minimum'"; |
|
82 | - } |
|
81 | + $data_minimum = "data-minimum-amount='$minimum'"; |
|
82 | + } |
|
83 | 83 | |
84 | - ?> |
|
84 | + ?> |
|
85 | 85 | <div class="input-group input-group-sm"> |
86 | 86 | <?php if( 'left' == $position ) : ?> |
87 | 87 | <div class="input-group-prepend"> |
@@ -105,37 +105,37 @@ discard block |
||
105 | 105 | </div> |
106 | 106 | |
107 | 107 | <?php |
108 | - } else { |
|
109 | - echo wpinv_price( $item->get_price(), $currency ); |
|
110 | - ?> |
|
108 | + } else { |
|
109 | + echo wpinv_price( $item->get_price(), $currency ); |
|
110 | + ?> |
|
111 | 111 | <input name='getpaid-items[<?php echo (int) $item->get_id(); ?>][price]' type='hidden' class='getpaid-item-price-input' value='<?php echo esc_attr( $item->get_price() ); ?>'> |
112 | 112 | <?php |
113 | - } |
|
114 | - } |
|
113 | + } |
|
114 | + } |
|
115 | 115 | |
116 | - // Item quantity. |
|
117 | - if ( 'quantity' == $key ) { |
|
116 | + // Item quantity. |
|
117 | + if ( 'quantity' == $key ) { |
|
118 | 118 | |
119 | - if ( $item->allows_quantities() ) { |
|
120 | - ?> |
|
119 | + if ( $item->allows_quantities() ) { |
|
120 | + ?> |
|
121 | 121 | <input name='getpaid-items[<?php echo (int) $item->get_id(); ?>][quantity]' type='text' style='width: 64px; line-height: 1; min-height: 35px;' class='getpaid-item-quantity-input p-1 align-middle font-weight-normal shadow-none m-0 rounded-0 text-center border' value='<?php echo (float) $item->get_quantity(); ?>' min='1' required> |
122 | 122 | <?php |
123 | - } else { |
|
124 | - echo (float) $item->get_quantity(); |
|
125 | - echo ' '; |
|
126 | - ?> |
|
123 | + } else { |
|
124 | + echo (float) $item->get_quantity(); |
|
125 | + echo ' '; |
|
126 | + ?> |
|
127 | 127 | <input type='hidden' name='getpaid-items[<?php echo (int) $item->get_id(); ?>][quantity]' class='getpaid-item-quantity-input' value='<?php echo (float) $item->get_quantity(); ?>'> |
128 | 128 | <?php |
129 | - } |
|
130 | - } |
|
129 | + } |
|
130 | + } |
|
131 | 131 | |
132 | - // Item sub total. |
|
133 | - if ( 'subtotal' == $key ) { |
|
134 | - echo wpinv_price( $item->get_sub_total(), $currency ); |
|
135 | - } |
|
132 | + // Item sub total. |
|
133 | + if ( 'subtotal' == $key ) { |
|
134 | + echo wpinv_price( $item->get_sub_total(), $currency ); |
|
135 | + } |
|
136 | 136 | |
137 | - do_action( "getpaid_payment_form_cart_item_$key", $item, $form ); |
|
138 | - ?> |
|
137 | + do_action( "getpaid_payment_form_cart_item_$key", $item, $form ); |
|
138 | + ?> |
|
139 | 139 | |
140 | 140 | </div> |
141 | 141 |
@@ -1,262 +1,262 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined( 'ABSPATH' ) ) { |
3 | - exit; |
|
3 | + exit; |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | if ( ! class_exists( 'WP_Super_Duper' ) ) { |
7 | 7 | |
8 | 8 | |
9 | - /** |
|
10 | - * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress. |
|
11 | - * |
|
12 | - * Should not be called direct but extended instead. |
|
13 | - * |
|
14 | - * Class WP_Super_Duper |
|
15 | - * @since 1.0.16 change log moved to file change-log.txt - CHANGED |
|
16 | - * @ver 1.0.19 |
|
17 | - */ |
|
18 | - class WP_Super_Duper extends WP_Widget { |
|
19 | - |
|
20 | - public $version = "1.0.24"; |
|
21 | - public $font_awesome_icon_version = "5.11.2"; |
|
22 | - public $block_code; |
|
23 | - public $options; |
|
24 | - public $base_id; |
|
25 | - public $settings_hash; |
|
26 | - public $arguments = array(); |
|
27 | - public $instance = array(); |
|
28 | - private $class_name; |
|
29 | - |
|
30 | - /** |
|
31 | - * The relative url to the current folder. |
|
32 | - * |
|
33 | - * @var string |
|
34 | - */ |
|
35 | - public $url = ''; |
|
36 | - |
|
37 | - /** |
|
38 | - * Take the array options and use them to build. |
|
39 | - */ |
|
40 | - public function __construct( $options ) { |
|
41 | - global $sd_widgets; |
|
42 | - |
|
43 | - $sd_widgets[ $options['base_id'] ] = array( |
|
44 | - 'name' => $options['name'], |
|
45 | - 'class_name' => $options['class_name'] |
|
46 | - ); |
|
47 | - $this->base_id = $options['base_id']; |
|
48 | - // lets filter the options before we do anything |
|
49 | - $options = apply_filters( "wp_super_duper_options", $options ); |
|
50 | - $options = apply_filters( "wp_super_duper_options_{$this->base_id}", $options ); |
|
51 | - $options = $this->add_name_from_key( $options ); |
|
52 | - $this->options = $options; |
|
53 | - |
|
54 | - $this->base_id = $options['base_id']; |
|
55 | - $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array(); |
|
56 | - |
|
57 | - // init parent |
|
58 | - parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] ); |
|
59 | - |
|
60 | - if ( isset( $options['class_name'] ) ) { |
|
61 | - // register widget |
|
62 | - $this->class_name = $options['class_name']; |
|
63 | - |
|
64 | - // register shortcode |
|
65 | - $this->register_shortcode(); |
|
66 | - |
|
67 | - // Fusion Builder (avada) support |
|
68 | - if ( function_exists( 'fusion_builder_map' ) ) { |
|
69 | - add_action( 'init', array( $this, 'register_fusion_element' ) ); |
|
70 | - } |
|
71 | - |
|
72 | - // register block |
|
73 | - add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) ); |
|
74 | - } |
|
75 | - |
|
76 | - // add the CSS and JS we need ONCE |
|
77 | - global $sd_widget_scripts; |
|
78 | - |
|
79 | - if ( ! $sd_widget_scripts ) { |
|
80 | - wp_add_inline_script( 'admin-widgets', $this->widget_js() ); |
|
81 | - wp_add_inline_script( 'customize-controls', $this->widget_js() ); |
|
82 | - wp_add_inline_style( 'widgets', $this->widget_css() ); |
|
83 | - |
|
84 | - // maybe add elementor editor styles |
|
85 | - add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) ); |
|
86 | - |
|
87 | - $sd_widget_scripts = true; |
|
88 | - |
|
89 | - // add shortcode insert button once |
|
90 | - add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) ); |
|
91 | - // generatepress theme sections compatibility |
|
92 | - if ( function_exists( 'generate_sections_sections_metabox' ) ) { |
|
93 | - add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) ); |
|
94 | - } |
|
95 | - if ( $this->is_preview() ) { |
|
96 | - add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) ); |
|
97 | - // this makes the insert button work for elementor |
|
98 | - add_action( 'elementor/editor/after_enqueue_scripts', array( |
|
99 | - $this, |
|
100 | - 'shortcode_insert_button_script' |
|
101 | - ) ); // for elementor |
|
102 | - } |
|
103 | - // this makes the insert button work for cornerstone |
|
104 | - add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) ); |
|
105 | - |
|
106 | - add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) ); |
|
107 | - add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) ); |
|
108 | - |
|
109 | - // add generator text to admin head |
|
110 | - add_action( 'admin_head', array( $this, 'generator' ) ); |
|
111 | - } |
|
112 | - |
|
113 | - do_action( 'wp_super_duper_widget_init', $options, $this ); |
|
114 | - } |
|
115 | - |
|
116 | - /** |
|
117 | - * Add our widget CSS to elementor editor. |
|
118 | - */ |
|
119 | - public function elementor_editor_styles() { |
|
120 | - wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) ); |
|
121 | - } |
|
122 | - |
|
123 | - public function register_fusion_element() { |
|
124 | - |
|
125 | - $options = $this->options; |
|
126 | - |
|
127 | - if ( $this->base_id ) { |
|
128 | - |
|
129 | - $params = $this->get_fusion_params(); |
|
130 | - |
|
131 | - $args = array( |
|
132 | - 'name' => $options['name'], |
|
133 | - 'shortcode' => $this->base_id, |
|
134 | - 'icon' => $options['block-icon'] ? $options['block-icon'] : 'far fa-square', |
|
135 | - 'allow_generator' => true, |
|
136 | - ); |
|
137 | - |
|
138 | - if ( ! empty( $params ) ) { |
|
139 | - $args['params'] = $params; |
|
140 | - } |
|
141 | - |
|
142 | - fusion_builder_map( $args ); |
|
143 | - } |
|
144 | - |
|
145 | - } |
|
146 | - |
|
147 | - public function get_fusion_params() { |
|
148 | - $params = array(); |
|
149 | - $arguments = $this->get_arguments(); |
|
150 | - |
|
151 | - if ( ! empty( $arguments ) ) { |
|
152 | - foreach ( $arguments as $key => $val ) { |
|
153 | - $param = array(); |
|
154 | - // type |
|
155 | - $param['type'] = str_replace( |
|
156 | - array( |
|
157 | - "text", |
|
158 | - "number", |
|
159 | - "email", |
|
160 | - "color", |
|
161 | - "checkbox" |
|
162 | - ), |
|
163 | - array( |
|
164 | - "textfield", |
|
165 | - "textfield", |
|
166 | - "textfield", |
|
167 | - "colorpicker", |
|
168 | - "select", |
|
169 | - |
|
170 | - ), |
|
171 | - $val['type'] ); |
|
172 | - |
|
173 | - // multiselect |
|
174 | - if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) { |
|
175 | - $param['type'] = 'multiple_select'; |
|
176 | - $param['multiple'] = true; |
|
177 | - } |
|
178 | - |
|
179 | - // heading |
|
180 | - $param['heading'] = $val['title']; |
|
181 | - |
|
182 | - // description |
|
183 | - $param['description'] = isset( $val['desc'] ) ? $val['desc'] : ''; |
|
184 | - |
|
185 | - // param_name |
|
186 | - $param['param_name'] = $key; |
|
187 | - |
|
188 | - // Default |
|
189 | - $param['default'] = isset( $val['default'] ) ? $val['default'] : ''; |
|
190 | - |
|
191 | - // Group |
|
192 | - if ( isset( $val['group'] ) ) { |
|
193 | - $param['group'] = $val['group']; |
|
194 | - } |
|
195 | - |
|
196 | - // value |
|
197 | - if ( $val['type'] == 'checkbox' ) { |
|
198 | - if ( isset( $val['default'] ) && $val['default'] == '0' ) { |
|
199 | - unset( $param['default'] ); |
|
200 | - } |
|
201 | - $param['value'] = array( '' => __( "No" ), '1' => __( "Yes" ) ); |
|
202 | - } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) { |
|
203 | - $param['value'] = isset( $val['options'] ) ? $val['options'] : array(); |
|
204 | - } else { |
|
205 | - $param['value'] = isset( $val['default'] ) ? $val['default'] : ''; |
|
206 | - } |
|
207 | - |
|
208 | - // setup the param |
|
209 | - $params[] = $param; |
|
210 | - |
|
211 | - } |
|
212 | - } |
|
213 | - |
|
214 | - |
|
215 | - return $params; |
|
216 | - } |
|
217 | - |
|
218 | - /** |
|
219 | - * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder |
|
220 | - */ |
|
221 | - public static function maybe_cornerstone_builder() { |
|
222 | - if ( did_action( 'cornerstone_before_boot_app' ) ) { |
|
223 | - self::shortcode_insert_button_script(); |
|
224 | - } |
|
225 | - } |
|
226 | - |
|
227 | - /** |
|
228 | - * A function to ge the shortcode builder picker html. |
|
229 | - * |
|
230 | - * @param string $editor_id |
|
231 | - * |
|
232 | - * @return string |
|
233 | - */ |
|
234 | - public static function get_picker( $editor_id = '' ) { |
|
235 | - |
|
236 | - ob_start(); |
|
237 | - if ( isset( $_POST['editor_id'] ) ) { |
|
238 | - $editor_id = esc_attr( $_POST['editor_id'] ); |
|
239 | - } elseif ( isset( $_REQUEST['et_fb'] ) ) { |
|
240 | - $editor_id = 'main_content_content_vb_tiny_mce'; |
|
241 | - } |
|
242 | - |
|
243 | - global $sd_widgets; |
|
244 | - ?> |
|
9 | + /** |
|
10 | + * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress. |
|
11 | + * |
|
12 | + * Should not be called direct but extended instead. |
|
13 | + * |
|
14 | + * Class WP_Super_Duper |
|
15 | + * @since 1.0.16 change log moved to file change-log.txt - CHANGED |
|
16 | + * @ver 1.0.19 |
|
17 | + */ |
|
18 | + class WP_Super_Duper extends WP_Widget { |
|
19 | + |
|
20 | + public $version = "1.0.24"; |
|
21 | + public $font_awesome_icon_version = "5.11.2"; |
|
22 | + public $block_code; |
|
23 | + public $options; |
|
24 | + public $base_id; |
|
25 | + public $settings_hash; |
|
26 | + public $arguments = array(); |
|
27 | + public $instance = array(); |
|
28 | + private $class_name; |
|
29 | + |
|
30 | + /** |
|
31 | + * The relative url to the current folder. |
|
32 | + * |
|
33 | + * @var string |
|
34 | + */ |
|
35 | + public $url = ''; |
|
36 | + |
|
37 | + /** |
|
38 | + * Take the array options and use them to build. |
|
39 | + */ |
|
40 | + public function __construct( $options ) { |
|
41 | + global $sd_widgets; |
|
42 | + |
|
43 | + $sd_widgets[ $options['base_id'] ] = array( |
|
44 | + 'name' => $options['name'], |
|
45 | + 'class_name' => $options['class_name'] |
|
46 | + ); |
|
47 | + $this->base_id = $options['base_id']; |
|
48 | + // lets filter the options before we do anything |
|
49 | + $options = apply_filters( "wp_super_duper_options", $options ); |
|
50 | + $options = apply_filters( "wp_super_duper_options_{$this->base_id}", $options ); |
|
51 | + $options = $this->add_name_from_key( $options ); |
|
52 | + $this->options = $options; |
|
53 | + |
|
54 | + $this->base_id = $options['base_id']; |
|
55 | + $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array(); |
|
56 | + |
|
57 | + // init parent |
|
58 | + parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] ); |
|
59 | + |
|
60 | + if ( isset( $options['class_name'] ) ) { |
|
61 | + // register widget |
|
62 | + $this->class_name = $options['class_name']; |
|
63 | + |
|
64 | + // register shortcode |
|
65 | + $this->register_shortcode(); |
|
66 | + |
|
67 | + // Fusion Builder (avada) support |
|
68 | + if ( function_exists( 'fusion_builder_map' ) ) { |
|
69 | + add_action( 'init', array( $this, 'register_fusion_element' ) ); |
|
70 | + } |
|
71 | + |
|
72 | + // register block |
|
73 | + add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) ); |
|
74 | + } |
|
75 | + |
|
76 | + // add the CSS and JS we need ONCE |
|
77 | + global $sd_widget_scripts; |
|
78 | + |
|
79 | + if ( ! $sd_widget_scripts ) { |
|
80 | + wp_add_inline_script( 'admin-widgets', $this->widget_js() ); |
|
81 | + wp_add_inline_script( 'customize-controls', $this->widget_js() ); |
|
82 | + wp_add_inline_style( 'widgets', $this->widget_css() ); |
|
83 | + |
|
84 | + // maybe add elementor editor styles |
|
85 | + add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) ); |
|
86 | + |
|
87 | + $sd_widget_scripts = true; |
|
88 | + |
|
89 | + // add shortcode insert button once |
|
90 | + add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) ); |
|
91 | + // generatepress theme sections compatibility |
|
92 | + if ( function_exists( 'generate_sections_sections_metabox' ) ) { |
|
93 | + add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) ); |
|
94 | + } |
|
95 | + if ( $this->is_preview() ) { |
|
96 | + add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) ); |
|
97 | + // this makes the insert button work for elementor |
|
98 | + add_action( 'elementor/editor/after_enqueue_scripts', array( |
|
99 | + $this, |
|
100 | + 'shortcode_insert_button_script' |
|
101 | + ) ); // for elementor |
|
102 | + } |
|
103 | + // this makes the insert button work for cornerstone |
|
104 | + add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) ); |
|
105 | + |
|
106 | + add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) ); |
|
107 | + add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) ); |
|
108 | + |
|
109 | + // add generator text to admin head |
|
110 | + add_action( 'admin_head', array( $this, 'generator' ) ); |
|
111 | + } |
|
112 | + |
|
113 | + do_action( 'wp_super_duper_widget_init', $options, $this ); |
|
114 | + } |
|
115 | + |
|
116 | + /** |
|
117 | + * Add our widget CSS to elementor editor. |
|
118 | + */ |
|
119 | + public function elementor_editor_styles() { |
|
120 | + wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) ); |
|
121 | + } |
|
122 | + |
|
123 | + public function register_fusion_element() { |
|
124 | + |
|
125 | + $options = $this->options; |
|
126 | + |
|
127 | + if ( $this->base_id ) { |
|
128 | + |
|
129 | + $params = $this->get_fusion_params(); |
|
130 | + |
|
131 | + $args = array( |
|
132 | + 'name' => $options['name'], |
|
133 | + 'shortcode' => $this->base_id, |
|
134 | + 'icon' => $options['block-icon'] ? $options['block-icon'] : 'far fa-square', |
|
135 | + 'allow_generator' => true, |
|
136 | + ); |
|
137 | + |
|
138 | + if ( ! empty( $params ) ) { |
|
139 | + $args['params'] = $params; |
|
140 | + } |
|
141 | + |
|
142 | + fusion_builder_map( $args ); |
|
143 | + } |
|
144 | + |
|
145 | + } |
|
146 | + |
|
147 | + public function get_fusion_params() { |
|
148 | + $params = array(); |
|
149 | + $arguments = $this->get_arguments(); |
|
150 | + |
|
151 | + if ( ! empty( $arguments ) ) { |
|
152 | + foreach ( $arguments as $key => $val ) { |
|
153 | + $param = array(); |
|
154 | + // type |
|
155 | + $param['type'] = str_replace( |
|
156 | + array( |
|
157 | + "text", |
|
158 | + "number", |
|
159 | + "email", |
|
160 | + "color", |
|
161 | + "checkbox" |
|
162 | + ), |
|
163 | + array( |
|
164 | + "textfield", |
|
165 | + "textfield", |
|
166 | + "textfield", |
|
167 | + "colorpicker", |
|
168 | + "select", |
|
169 | + |
|
170 | + ), |
|
171 | + $val['type'] ); |
|
172 | + |
|
173 | + // multiselect |
|
174 | + if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) { |
|
175 | + $param['type'] = 'multiple_select'; |
|
176 | + $param['multiple'] = true; |
|
177 | + } |
|
178 | + |
|
179 | + // heading |
|
180 | + $param['heading'] = $val['title']; |
|
181 | + |
|
182 | + // description |
|
183 | + $param['description'] = isset( $val['desc'] ) ? $val['desc'] : ''; |
|
184 | + |
|
185 | + // param_name |
|
186 | + $param['param_name'] = $key; |
|
187 | + |
|
188 | + // Default |
|
189 | + $param['default'] = isset( $val['default'] ) ? $val['default'] : ''; |
|
190 | + |
|
191 | + // Group |
|
192 | + if ( isset( $val['group'] ) ) { |
|
193 | + $param['group'] = $val['group']; |
|
194 | + } |
|
195 | + |
|
196 | + // value |
|
197 | + if ( $val['type'] == 'checkbox' ) { |
|
198 | + if ( isset( $val['default'] ) && $val['default'] == '0' ) { |
|
199 | + unset( $param['default'] ); |
|
200 | + } |
|
201 | + $param['value'] = array( '' => __( "No" ), '1' => __( "Yes" ) ); |
|
202 | + } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) { |
|
203 | + $param['value'] = isset( $val['options'] ) ? $val['options'] : array(); |
|
204 | + } else { |
|
205 | + $param['value'] = isset( $val['default'] ) ? $val['default'] : ''; |
|
206 | + } |
|
207 | + |
|
208 | + // setup the param |
|
209 | + $params[] = $param; |
|
210 | + |
|
211 | + } |
|
212 | + } |
|
213 | + |
|
214 | + |
|
215 | + return $params; |
|
216 | + } |
|
217 | + |
|
218 | + /** |
|
219 | + * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder |
|
220 | + */ |
|
221 | + public static function maybe_cornerstone_builder() { |
|
222 | + if ( did_action( 'cornerstone_before_boot_app' ) ) { |
|
223 | + self::shortcode_insert_button_script(); |
|
224 | + } |
|
225 | + } |
|
226 | + |
|
227 | + /** |
|
228 | + * A function to ge the shortcode builder picker html. |
|
229 | + * |
|
230 | + * @param string $editor_id |
|
231 | + * |
|
232 | + * @return string |
|
233 | + */ |
|
234 | + public static function get_picker( $editor_id = '' ) { |
|
235 | + |
|
236 | + ob_start(); |
|
237 | + if ( isset( $_POST['editor_id'] ) ) { |
|
238 | + $editor_id = esc_attr( $_POST['editor_id'] ); |
|
239 | + } elseif ( isset( $_REQUEST['et_fb'] ) ) { |
|
240 | + $editor_id = 'main_content_content_vb_tiny_mce'; |
|
241 | + } |
|
242 | + |
|
243 | + global $sd_widgets; |
|
244 | + ?> |
|
245 | 245 | |
246 | 246 | <div class="sd-shortcode-left-wrap"> |
247 | 247 | <?php |
248 | - ksort( $sd_widgets ); |
|
249 | - // print_r($sd_widgets);exit; |
|
250 | - if ( ! empty( $sd_widgets ) ) { |
|
251 | - echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">'; |
|
252 | - echo "<option>" . __( 'Select shortcode' ) . "</option>"; |
|
253 | - foreach ( $sd_widgets as $shortcode => $class ) { |
|
254 | - echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>"; |
|
255 | - } |
|
256 | - echo "</select>"; |
|
257 | - |
|
258 | - } |
|
259 | - ?> |
|
248 | + ksort( $sd_widgets ); |
|
249 | + // print_r($sd_widgets);exit; |
|
250 | + if ( ! empty( $sd_widgets ) ) { |
|
251 | + echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">'; |
|
252 | + echo "<option>" . __( 'Select shortcode' ) . "</option>"; |
|
253 | + foreach ( $sd_widgets as $shortcode => $class ) { |
|
254 | + echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>"; |
|
255 | + } |
|
256 | + echo "</select>"; |
|
257 | + |
|
258 | + } |
|
259 | + ?> |
|
260 | 260 | <div class="sd-shortcode-settings"></div> |
261 | 261 | |
262 | 262 | </div> |
@@ -267,8 +267,8 @@ discard block |
||
267 | 267 | <?php if ( $editor_id != '' ) { ?> |
268 | 268 | <button class="button sd-insert-shortcode-button" |
269 | 269 | onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) { |
270 | - echo "'" . $editor_id . "'"; |
|
271 | - } ?>)"><?php _e( 'Insert shortcode' ); ?></button> |
|
270 | + echo "'" . $editor_id . "'"; |
|
271 | + } ?>)"><?php _e( 'Insert shortcode' ); ?></button> |
|
272 | 272 | <?php } ?> |
273 | 273 | <button class="button" |
274 | 274 | onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button> |
@@ -276,134 +276,134 @@ discard block |
||
276 | 276 | </div> |
277 | 277 | <?php |
278 | 278 | |
279 | - $html = ob_get_clean(); |
|
280 | - |
|
281 | - if ( wp_doing_ajax() ) { |
|
282 | - echo $html; |
|
283 | - $should_die = true; |
|
284 | - |
|
285 | - // some builder get the editor via ajax so we should not die on those ocasions |
|
286 | - $dont_die = array( |
|
287 | - 'parent_tag',// WP Bakery |
|
288 | - 'avia_request' // enfold |
|
289 | - ); |
|
290 | - |
|
291 | - foreach ( $dont_die as $request ) { |
|
292 | - if ( isset( $_REQUEST[ $request ] ) ) { |
|
293 | - $should_die = false; |
|
294 | - } |
|
295 | - } |
|
296 | - |
|
297 | - if ( $should_die ) { |
|
298 | - wp_die(); |
|
299 | - } |
|
300 | - |
|
301 | - } else { |
|
302 | - return $html; |
|
303 | - } |
|
304 | - |
|
305 | - return ''; |
|
306 | - |
|
307 | - } |
|
308 | - |
|
309 | - /** |
|
310 | - * Output the version in the admin header. |
|
311 | - */ |
|
312 | - public function generator() { |
|
313 | - echo '<meta name="generator" content="WP Super Duper v' . $this->version . '" />'; |
|
314 | - } |
|
315 | - |
|
316 | - /** |
|
317 | - * Get widget settings. |
|
318 | - * |
|
319 | - * @since 1.0.0 |
|
320 | - */ |
|
321 | - public static function get_widget_settings() { |
|
322 | - global $sd_widgets; |
|
323 | - |
|
324 | - $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : ''; |
|
325 | - if ( ! $shortcode ) { |
|
326 | - wp_die(); |
|
327 | - } |
|
328 | - $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : ''; |
|
329 | - if ( ! $widget_args ) { |
|
330 | - wp_die(); |
|
331 | - } |
|
332 | - $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : ''; |
|
333 | - if ( ! $class_name ) { |
|
334 | - wp_die(); |
|
335 | - } |
|
336 | - |
|
337 | - // invoke an instance method |
|
338 | - $widget = new $class_name; |
|
339 | - |
|
340 | - ob_start(); |
|
341 | - $widget->form( array() ); |
|
342 | - $form = ob_get_clean(); |
|
343 | - echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>"; |
|
344 | - echo "<style>" . $widget->widget_css() . "</style>"; |
|
345 | - echo "<script>" . $widget->widget_js() . "</script>"; |
|
346 | - ?> |
|
279 | + $html = ob_get_clean(); |
|
280 | + |
|
281 | + if ( wp_doing_ajax() ) { |
|
282 | + echo $html; |
|
283 | + $should_die = true; |
|
284 | + |
|
285 | + // some builder get the editor via ajax so we should not die on those ocasions |
|
286 | + $dont_die = array( |
|
287 | + 'parent_tag',// WP Bakery |
|
288 | + 'avia_request' // enfold |
|
289 | + ); |
|
290 | + |
|
291 | + foreach ( $dont_die as $request ) { |
|
292 | + if ( isset( $_REQUEST[ $request ] ) ) { |
|
293 | + $should_die = false; |
|
294 | + } |
|
295 | + } |
|
296 | + |
|
297 | + if ( $should_die ) { |
|
298 | + wp_die(); |
|
299 | + } |
|
300 | + |
|
301 | + } else { |
|
302 | + return $html; |
|
303 | + } |
|
304 | + |
|
305 | + return ''; |
|
306 | + |
|
307 | + } |
|
308 | + |
|
309 | + /** |
|
310 | + * Output the version in the admin header. |
|
311 | + */ |
|
312 | + public function generator() { |
|
313 | + echo '<meta name="generator" content="WP Super Duper v' . $this->version . '" />'; |
|
314 | + } |
|
315 | + |
|
316 | + /** |
|
317 | + * Get widget settings. |
|
318 | + * |
|
319 | + * @since 1.0.0 |
|
320 | + */ |
|
321 | + public static function get_widget_settings() { |
|
322 | + global $sd_widgets; |
|
323 | + |
|
324 | + $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : ''; |
|
325 | + if ( ! $shortcode ) { |
|
326 | + wp_die(); |
|
327 | + } |
|
328 | + $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : ''; |
|
329 | + if ( ! $widget_args ) { |
|
330 | + wp_die(); |
|
331 | + } |
|
332 | + $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : ''; |
|
333 | + if ( ! $class_name ) { |
|
334 | + wp_die(); |
|
335 | + } |
|
336 | + |
|
337 | + // invoke an instance method |
|
338 | + $widget = new $class_name; |
|
339 | + |
|
340 | + ob_start(); |
|
341 | + $widget->form( array() ); |
|
342 | + $form = ob_get_clean(); |
|
343 | + echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>"; |
|
344 | + echo "<style>" . $widget->widget_css() . "</style>"; |
|
345 | + echo "<script>" . $widget->widget_js() . "</script>"; |
|
346 | + ?> |
|
347 | 347 | <?php |
348 | - wp_die(); |
|
349 | - } |
|
350 | - |
|
351 | - /** |
|
352 | - * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed). |
|
353 | - * |
|
354 | - * @since 1.0.0 |
|
355 | - * |
|
356 | - * @param string $editor_id Optional. Shortcode editor id. Default null. |
|
357 | - * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null. |
|
358 | - */ |
|
359 | - public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) { |
|
360 | - global $sd_widgets, $shortcode_insert_button_once; |
|
361 | - if ( $shortcode_insert_button_once ) { |
|
362 | - return; |
|
363 | - } |
|
364 | - add_thickbox(); |
|
365 | - |
|
366 | - |
|
367 | - /** |
|
368 | - * Cornerstone makes us play dirty tricks :/ |
|
369 | - * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed. |
|
370 | - */ |
|
371 | - if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) { |
|
372 | - echo '<span id="insert-media-button">'; |
|
373 | - } |
|
374 | - |
|
375 | - echo self::shortcode_button( 'this', 'true' ); |
|
376 | - |
|
377 | - // see opening note |
|
378 | - if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) { |
|
379 | - echo '</span>'; // end #insert-media-button |
|
380 | - } |
|
381 | - |
|
382 | - // Add separate script for generatepress theme sections |
|
383 | - if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) { |
|
384 | - } else { |
|
385 | - self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function ); |
|
386 | - } |
|
387 | - |
|
388 | - $shortcode_insert_button_once = true; |
|
389 | - } |
|
390 | - |
|
391 | - /** |
|
392 | - * Gets the shortcode insert button html. |
|
393 | - * |
|
394 | - * @param string $id |
|
395 | - * @param string $search_for_id |
|
396 | - * |
|
397 | - * @return mixed |
|
398 | - */ |
|
399 | - public static function shortcode_button( $id = '', $search_for_id = '' ) { |
|
400 | - ob_start(); |
|
401 | - ?> |
|
348 | + wp_die(); |
|
349 | + } |
|
350 | + |
|
351 | + /** |
|
352 | + * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed). |
|
353 | + * |
|
354 | + * @since 1.0.0 |
|
355 | + * |
|
356 | + * @param string $editor_id Optional. Shortcode editor id. Default null. |
|
357 | + * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null. |
|
358 | + */ |
|
359 | + public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) { |
|
360 | + global $sd_widgets, $shortcode_insert_button_once; |
|
361 | + if ( $shortcode_insert_button_once ) { |
|
362 | + return; |
|
363 | + } |
|
364 | + add_thickbox(); |
|
365 | + |
|
366 | + |
|
367 | + /** |
|
368 | + * Cornerstone makes us play dirty tricks :/ |
|
369 | + * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed. |
|
370 | + */ |
|
371 | + if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) { |
|
372 | + echo '<span id="insert-media-button">'; |
|
373 | + } |
|
374 | + |
|
375 | + echo self::shortcode_button( 'this', 'true' ); |
|
376 | + |
|
377 | + // see opening note |
|
378 | + if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) { |
|
379 | + echo '</span>'; // end #insert-media-button |
|
380 | + } |
|
381 | + |
|
382 | + // Add separate script for generatepress theme sections |
|
383 | + if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) { |
|
384 | + } else { |
|
385 | + self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function ); |
|
386 | + } |
|
387 | + |
|
388 | + $shortcode_insert_button_once = true; |
|
389 | + } |
|
390 | + |
|
391 | + /** |
|
392 | + * Gets the shortcode insert button html. |
|
393 | + * |
|
394 | + * @param string $id |
|
395 | + * @param string $search_for_id |
|
396 | + * |
|
397 | + * @return mixed |
|
398 | + */ |
|
399 | + public static function shortcode_button( $id = '', $search_for_id = '' ) { |
|
400 | + ob_start(); |
|
401 | + ?> |
|
402 | 402 | <span class="sd-lable-shortcode-inserter"> |
403 | 403 | <a onclick="sd_ajax_get_picker(<?php echo $id; |
404 | - if ( $search_for_id ) { |
|
405 | - echo "," . $search_for_id; |
|
406 | - } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed" |
|
404 | + if ( $search_for_id ) { |
|
405 | + echo "," . $search_for_id; |
|
406 | + } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed" |
|
407 | 407 | class="thickbox button super-duper-content-open" title="Add Shortcode"> |
408 | 408 | <span style="vertical-align: middle;line-height: 18px;font-size: 20px;" |
409 | 409 | class="dashicons dashicons-screenoptions"></span> |
@@ -414,21 +414,21 @@ discard block |
||
414 | 414 | </span> |
415 | 415 | |
416 | 416 | <?php |
417 | - $html = ob_get_clean(); |
|
418 | - |
|
419 | - // remove line breaks so we can use it in js |
|
420 | - return preg_replace( "/\r|\n/", "", trim( $html ) ); |
|
421 | - } |
|
422 | - |
|
423 | - /** |
|
424 | - * Makes SD work with the siteOrigin page builder. |
|
425 | - * |
|
426 | - * @since 1.0.6 |
|
427 | - * @return mixed |
|
428 | - */ |
|
429 | - public static function siteorigin_js() { |
|
430 | - ob_start(); |
|
431 | - ?> |
|
417 | + $html = ob_get_clean(); |
|
418 | + |
|
419 | + // remove line breaks so we can use it in js |
|
420 | + return preg_replace( "/\r|\n/", "", trim( $html ) ); |
|
421 | + } |
|
422 | + |
|
423 | + /** |
|
424 | + * Makes SD work with the siteOrigin page builder. |
|
425 | + * |
|
426 | + * @since 1.0.6 |
|
427 | + * @return mixed |
|
428 | + */ |
|
429 | + public static function siteorigin_js() { |
|
430 | + ob_start(); |
|
431 | + ?> |
|
432 | 432 | <script> |
433 | 433 | /** |
434 | 434 | * Check a form to see what items shoudl be shown or hidden. |
@@ -506,28 +506,28 @@ discard block |
||
506 | 506 | }); |
507 | 507 | </script> |
508 | 508 | <?php |
509 | - $output = ob_get_clean(); |
|
509 | + $output = ob_get_clean(); |
|
510 | 510 | |
511 | - /* |
|
511 | + /* |
|
512 | 512 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
513 | 513 | */ |
514 | 514 | |
515 | - return str_replace( array( |
|
516 | - '<script>', |
|
517 | - '</script>' |
|
518 | - ), '', $output ); |
|
519 | - } |
|
520 | - |
|
521 | - /** |
|
522 | - * Output the JS and CSS for the shortcode insert button. |
|
523 | - * |
|
524 | - * @since 1.0.6 |
|
525 | - * |
|
526 | - * @param string $editor_id |
|
527 | - * @param string $insert_shortcode_function |
|
528 | - */ |
|
529 | - public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) { |
|
530 | - ?> |
|
515 | + return str_replace( array( |
|
516 | + '<script>', |
|
517 | + '</script>' |
|
518 | + ), '', $output ); |
|
519 | + } |
|
520 | + |
|
521 | + /** |
|
522 | + * Output the JS and CSS for the shortcode insert button. |
|
523 | + * |
|
524 | + * @since 1.0.6 |
|
525 | + * |
|
526 | + * @param string $editor_id |
|
527 | + * @param string $insert_shortcode_function |
|
528 | + */ |
|
529 | + public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) { |
|
530 | + ?> |
|
531 | 531 | <style> |
532 | 532 | .sd-shortcode-left-wrap { |
533 | 533 | float: left; |
@@ -653,35 +653,35 @@ discard block |
||
653 | 653 | <?php } ?> |
654 | 654 | </style> |
655 | 655 | <?php |
656 | - if ( class_exists( 'SiteOrigin_Panels' ) ) { |
|
657 | - echo "<script>" . self::siteorigin_js() . "</script>"; |
|
658 | - } |
|
659 | - ?> |
|
656 | + if ( class_exists( 'SiteOrigin_Panels' ) ) { |
|
657 | + echo "<script>" . self::siteorigin_js() . "</script>"; |
|
658 | + } |
|
659 | + ?> |
|
660 | 660 | <script> |
661 | 661 | <?php |
662 | - if(! empty( $insert_shortcode_function )){ |
|
663 | - echo $insert_shortcode_function; |
|
664 | - }else{ |
|
665 | - |
|
666 | - /** |
|
667 | - * Function for super duper insert shortcode. |
|
668 | - * |
|
669 | - * @since 1.0.0 |
|
670 | - */ |
|
671 | - ?> |
|
662 | + if(! empty( $insert_shortcode_function )){ |
|
663 | + echo $insert_shortcode_function; |
|
664 | + }else{ |
|
665 | + |
|
666 | + /** |
|
667 | + * Function for super duper insert shortcode. |
|
668 | + * |
|
669 | + * @since 1.0.0 |
|
670 | + */ |
|
671 | + ?> |
|
672 | 672 | function sd_insert_shortcode($editor_id) { |
673 | 673 | $shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val(); |
674 | 674 | if ($shortcode) { |
675 | 675 | if (!$editor_id) { |
676 | 676 | <?php |
677 | - if ( isset( $_REQUEST['et_fb'] ) ) { |
|
678 | - echo '$editor_id = "#main_content_content_vb_tiny_mce";'; |
|
679 | - } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) { |
|
680 | - echo '$editor_id = "#elementor-controls .wp-editor-container textarea";'; |
|
681 | - } else { |
|
682 | - echo '$editor_id = "#wp-content-editor-container textarea";'; |
|
683 | - } |
|
684 | - ?> |
|
677 | + if ( isset( $_REQUEST['et_fb'] ) ) { |
|
678 | + echo '$editor_id = "#main_content_content_vb_tiny_mce";'; |
|
679 | + } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) { |
|
680 | + echo '$editor_id = "#elementor-controls .wp-editor-container textarea";'; |
|
681 | + } else { |
|
682 | + echo '$editor_id = "#wp-content-editor-container textarea";'; |
|
683 | + } |
|
684 | + ?> |
|
685 | 685 | } else { |
686 | 686 | $editor_id = '#' + $editor_id; |
687 | 687 | } |
@@ -1007,18 +1007,18 @@ discard block |
||
1007 | 1007 | |
1008 | 1008 | </script> |
1009 | 1009 | <?php |
1010 | - } |
|
1011 | - |
|
1012 | - /** |
|
1013 | - * Gets some CSS for the widgets screen. |
|
1014 | - * |
|
1015 | - * @param bool $advanced If we should include advanced CSS. |
|
1016 | - * |
|
1017 | - * @return mixed |
|
1018 | - */ |
|
1019 | - public function widget_css( $advanced = true ) { |
|
1020 | - ob_start(); |
|
1021 | - ?> |
|
1010 | + } |
|
1011 | + |
|
1012 | + /** |
|
1013 | + * Gets some CSS for the widgets screen. |
|
1014 | + * |
|
1015 | + * @param bool $advanced If we should include advanced CSS. |
|
1016 | + * |
|
1017 | + * @return mixed |
|
1018 | + */ |
|
1019 | + public function widget_css( $advanced = true ) { |
|
1020 | + ob_start(); |
|
1021 | + ?> |
|
1022 | 1022 | <style> |
1023 | 1023 | <?php if( $advanced ){ ?> |
1024 | 1024 | .sd-advanced-setting { |
@@ -1056,26 +1056,26 @@ discard block |
||
1056 | 1056 | } |
1057 | 1057 | </style> |
1058 | 1058 | <?php |
1059 | - $output = ob_get_clean(); |
|
1059 | + $output = ob_get_clean(); |
|
1060 | 1060 | |
1061 | - /* |
|
1061 | + /* |
|
1062 | 1062 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
1063 | 1063 | */ |
1064 | 1064 | |
1065 | - return str_replace( array( |
|
1066 | - '<style>', |
|
1067 | - '</style>' |
|
1068 | - ), '', $output ); |
|
1069 | - } |
|
1070 | - |
|
1071 | - /** |
|
1072 | - * Gets some JS for the widgets screen. |
|
1073 | - * |
|
1074 | - * @return mixed |
|
1075 | - */ |
|
1076 | - public function widget_js() { |
|
1077 | - ob_start(); |
|
1078 | - ?> |
|
1065 | + return str_replace( array( |
|
1066 | + '<style>', |
|
1067 | + '</style>' |
|
1068 | + ), '', $output ); |
|
1069 | + } |
|
1070 | + |
|
1071 | + /** |
|
1072 | + * Gets some JS for the widgets screen. |
|
1073 | + * |
|
1074 | + * @return mixed |
|
1075 | + */ |
|
1076 | + public function widget_js() { |
|
1077 | + ob_start(); |
|
1078 | + ?> |
|
1079 | 1079 | <script> |
1080 | 1080 | |
1081 | 1081 | /** |
@@ -1233,402 +1233,402 @@ discard block |
||
1233 | 1233 | <?php do_action( 'wp_super_duper_widget_js', $this ); ?> |
1234 | 1234 | </script> |
1235 | 1235 | <?php |
1236 | - $output = ob_get_clean(); |
|
1236 | + $output = ob_get_clean(); |
|
1237 | 1237 | |
1238 | - /* |
|
1238 | + /* |
|
1239 | 1239 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
1240 | 1240 | */ |
1241 | 1241 | |
1242 | - return str_replace( array( |
|
1243 | - '<script>', |
|
1244 | - '</script>' |
|
1245 | - ), '', $output ); |
|
1246 | - } |
|
1247 | - |
|
1248 | - |
|
1249 | - /** |
|
1250 | - * Set the name from the argument key. |
|
1251 | - * |
|
1252 | - * @param $options |
|
1253 | - * |
|
1254 | - * @return mixed |
|
1255 | - */ |
|
1256 | - private function add_name_from_key( $options, $arguments = false ) { |
|
1257 | - if ( ! empty( $options['arguments'] ) ) { |
|
1258 | - foreach ( $options['arguments'] as $key => $val ) { |
|
1259 | - $options['arguments'][ $key ]['name'] = $key; |
|
1260 | - } |
|
1261 | - } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) { |
|
1262 | - foreach ( $options as $key => $val ) { |
|
1263 | - $options[ $key ]['name'] = $key; |
|
1264 | - } |
|
1265 | - } |
|
1266 | - |
|
1267 | - return $options; |
|
1268 | - } |
|
1269 | - |
|
1270 | - /** |
|
1271 | - * Register the parent shortcode. |
|
1272 | - * |
|
1273 | - * @since 1.0.0 |
|
1274 | - */ |
|
1275 | - public function register_shortcode() { |
|
1276 | - add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) ); |
|
1277 | - add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) ); |
|
1278 | - } |
|
1279 | - |
|
1280 | - /** |
|
1281 | - * Render the shortcode via ajax so we can return it to Gutenberg. |
|
1282 | - * |
|
1283 | - * @since 1.0.0 |
|
1284 | - */ |
|
1285 | - public static function render_shortcode() { |
|
1286 | - |
|
1287 | - check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true ); |
|
1288 | - if ( ! current_user_can( 'manage_options' ) ) { |
|
1289 | - wp_die(); |
|
1290 | - } |
|
1291 | - |
|
1292 | - // we might need the $post value here so lets set it. |
|
1293 | - if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) { |
|
1294 | - $post_obj = get_post( absint( $_POST['post_id'] ) ); |
|
1295 | - if ( ! empty( $post_obj ) && empty( $post ) ) { |
|
1296 | - global $post; |
|
1297 | - $post = $post_obj; |
|
1298 | - } |
|
1299 | - } |
|
1300 | - |
|
1301 | - if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) { |
|
1302 | - $shortcode_name = sanitize_title_with_dashes( $_POST['shortcode'] ); |
|
1303 | - $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array(); |
|
1304 | - $attributes = ''; |
|
1305 | - if ( ! empty( $attributes_array ) ) { |
|
1306 | - foreach ( $attributes_array as $key => $value ) { |
|
1307 | - $attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' "; |
|
1308 | - } |
|
1309 | - } |
|
1310 | - |
|
1311 | - $shortcode = "[" . $shortcode_name . " " . $attributes . "]"; |
|
1312 | - |
|
1313 | - echo do_shortcode( $shortcode ); |
|
1314 | - |
|
1315 | - } |
|
1316 | - wp_die(); |
|
1317 | - } |
|
1318 | - |
|
1319 | - /** |
|
1320 | - * Output the shortcode. |
|
1321 | - * |
|
1322 | - * @param array $args |
|
1323 | - * @param string $content |
|
1324 | - * |
|
1325 | - * @return string |
|
1326 | - */ |
|
1327 | - public function shortcode_output( $args = array(), $content = '' ) { |
|
1328 | - $args = $this->argument_values( $args ); |
|
1329 | - |
|
1330 | - // add extra argument so we know its a output to gutenberg |
|
1331 | - //$args |
|
1332 | - $args = $this->string_to_bool( $args ); |
|
1333 | - |
|
1334 | - // if we have a enclosed shortcode we add it to the special `html` argument |
|
1335 | - if ( ! empty( $content ) ) { |
|
1336 | - $args['html'] = $content; |
|
1337 | - } |
|
1338 | - |
|
1339 | - $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : ''; |
|
1340 | - $class .= " sdel-".$this->get_instance_hash(); |
|
1341 | - |
|
1342 | - $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this ); |
|
1343 | - $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this ); |
|
1344 | - |
|
1345 | - $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this ); |
|
1346 | - $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); //@todo this does not seem right @kiran? |
|
1347 | - |
|
1348 | - $shortcode_args = array(); |
|
1349 | - $output = ''; |
|
1350 | - $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
1351 | - if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) { |
|
1352 | - $no_wrap = true; |
|
1353 | - } |
|
1354 | - $main_content = $this->output( $args, $shortcode_args, $content ); |
|
1355 | - if ( $main_content && ! $no_wrap ) { |
|
1356 | - // wrap the shortcode in a div with the same class as the widget |
|
1357 | - $output .= '<div class="' . $class . '" ' . $attrs . '>'; |
|
1358 | - if ( ! empty( $args['title'] ) ) { |
|
1359 | - // if its a shortcode and there is a title try to grab the title wrappers |
|
1360 | - $shortcode_args = array( 'before_title' => '', 'after_title' => '' ); |
|
1361 | - if ( empty( $instance ) ) { |
|
1362 | - global $wp_registered_sidebars; |
|
1363 | - if ( ! empty( $wp_registered_sidebars ) ) { |
|
1364 | - foreach ( $wp_registered_sidebars as $sidebar ) { |
|
1365 | - if ( ! empty( $sidebar['before_title'] ) ) { |
|
1366 | - $shortcode_args['before_title'] = $sidebar['before_title']; |
|
1367 | - $shortcode_args['after_title'] = $sidebar['after_title']; |
|
1368 | - break; |
|
1369 | - } |
|
1370 | - } |
|
1371 | - } |
|
1372 | - } |
|
1373 | - $output .= $this->output_title( $shortcode_args, $args ); |
|
1374 | - } |
|
1375 | - $output .= $main_content; |
|
1376 | - $output .= '</div>'; |
|
1377 | - } elseif ( $main_content && $no_wrap ) { |
|
1378 | - $output .= $main_content; |
|
1379 | - } |
|
1380 | - |
|
1381 | - // if preview show a placeholder if empty |
|
1382 | - if ( $this->is_preview() && $output == '' ) { |
|
1383 | - $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" ); |
|
1384 | - } |
|
1385 | - |
|
1386 | - return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this ); |
|
1387 | - } |
|
1388 | - |
|
1389 | - /** |
|
1390 | - * Placeholder text to show if output is empty and we are on a preview/builder page. |
|
1391 | - * |
|
1392 | - * @param string $name |
|
1393 | - * |
|
1394 | - * @return string |
|
1395 | - */ |
|
1396 | - public function preview_placeholder_text( $name = '' ) { |
|
1397 | - return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf( __( 'Placeholder for: %s' ), $name ) . "</div>"; |
|
1398 | - } |
|
1399 | - |
|
1400 | - /** |
|
1401 | - * Sometimes booleans values can be turned to strings, so we fix that. |
|
1402 | - * |
|
1403 | - * @param $options |
|
1404 | - * |
|
1405 | - * @return mixed |
|
1406 | - */ |
|
1407 | - public function string_to_bool( $options ) { |
|
1408 | - // convert bool strings to booleans |
|
1409 | - foreach ( $options as $key => $val ) { |
|
1410 | - if ( $val == 'false' ) { |
|
1411 | - $options[ $key ] = false; |
|
1412 | - } elseif ( $val == 'true' ) { |
|
1413 | - $options[ $key ] = true; |
|
1414 | - } |
|
1415 | - } |
|
1416 | - |
|
1417 | - return $options; |
|
1418 | - } |
|
1419 | - |
|
1420 | - /** |
|
1421 | - * Get the argument values that are also filterable. |
|
1422 | - * |
|
1423 | - * @param $instance |
|
1424 | - * |
|
1425 | - * @since 1.0.12 Don't set checkbox default value if the value is empty. |
|
1426 | - * |
|
1427 | - * @return array |
|
1428 | - */ |
|
1429 | - public function argument_values( $instance ) { |
|
1430 | - $argument_values = array(); |
|
1431 | - |
|
1432 | - // set widget instance |
|
1433 | - $this->instance = $instance; |
|
1434 | - |
|
1435 | - if ( empty( $this->arguments ) ) { |
|
1436 | - $this->arguments = $this->get_arguments(); |
|
1437 | - } |
|
1438 | - |
|
1439 | - if ( ! empty( $this->arguments ) ) { |
|
1440 | - foreach ( $this->arguments as $key => $args ) { |
|
1441 | - // set the input name from the key |
|
1442 | - $args['name'] = $key; |
|
1443 | - // |
|
1444 | - $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : ''; |
|
1445 | - if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) { |
|
1446 | - // don't set default for an empty checkbox |
|
1447 | - } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) { |
|
1448 | - $argument_values[ $key ] = $args['default']; |
|
1449 | - } |
|
1450 | - } |
|
1451 | - } |
|
1452 | - |
|
1453 | - return $argument_values; |
|
1454 | - } |
|
1455 | - |
|
1456 | - /** |
|
1457 | - * Set arguments in super duper. |
|
1458 | - * |
|
1459 | - * @since 1.0.0 |
|
1460 | - * |
|
1461 | - * @return array Set arguments. |
|
1462 | - */ |
|
1463 | - public function set_arguments() { |
|
1464 | - return $this->arguments; |
|
1465 | - } |
|
1466 | - |
|
1467 | - /** |
|
1468 | - * Get arguments in super duper. |
|
1469 | - * |
|
1470 | - * @since 1.0.0 |
|
1471 | - * |
|
1472 | - * @return array Get arguments. |
|
1473 | - */ |
|
1474 | - public function get_arguments() { |
|
1475 | - if ( empty( $this->arguments ) ) { |
|
1476 | - $this->arguments = $this->set_arguments(); |
|
1477 | - } |
|
1478 | - |
|
1479 | - $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance ); |
|
1480 | - $this->arguments = $this->add_name_from_key( $this->arguments, true ); |
|
1481 | - |
|
1482 | - return $this->arguments; |
|
1483 | - } |
|
1484 | - |
|
1485 | - /** |
|
1486 | - * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class. |
|
1487 | - * |
|
1488 | - * @param array $args |
|
1489 | - * @param array $widget_args |
|
1490 | - * @param string $content |
|
1491 | - */ |
|
1492 | - public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
1493 | - |
|
1494 | - } |
|
1495 | - |
|
1496 | - /** |
|
1497 | - * Add the dynamic block code inline when the wp-block in enqueued. |
|
1498 | - */ |
|
1499 | - public function register_block() { |
|
1500 | - wp_add_inline_script( 'wp-blocks', $this->block() ); |
|
1501 | - if ( class_exists( 'SiteOrigin_Panels' ) ) { |
|
1502 | - wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() ); |
|
1503 | - } |
|
1504 | - } |
|
1505 | - |
|
1506 | - /** |
|
1507 | - * Check if we need to show advanced options. |
|
1508 | - * |
|
1509 | - * @return bool |
|
1510 | - */ |
|
1511 | - public function block_show_advanced() { |
|
1512 | - |
|
1513 | - $show = false; |
|
1514 | - $arguments = $this->arguments; |
|
1515 | - |
|
1516 | - if ( empty( $arguments ) ) { |
|
1517 | - $arguments = $this->get_arguments(); |
|
1518 | - } |
|
1519 | - |
|
1520 | - if ( ! empty( $arguments ) ) { |
|
1521 | - foreach ( $arguments as $argument ) { |
|
1522 | - if ( isset( $argument['advanced'] ) && $argument['advanced'] ) { |
|
1523 | - $show = true; |
|
1524 | - break; // no need to continue if we know we have it |
|
1525 | - } |
|
1526 | - } |
|
1527 | - } |
|
1528 | - |
|
1529 | - return $show; |
|
1530 | - } |
|
1531 | - |
|
1532 | - /** |
|
1533 | - * Get the url path to the current folder. |
|
1534 | - * |
|
1535 | - * @return string |
|
1536 | - */ |
|
1537 | - public function get_url() { |
|
1538 | - |
|
1539 | - $url = $this->url; |
|
1540 | - |
|
1541 | - if ( ! $url ) { |
|
1542 | - // check if we are inside a plugin |
|
1543 | - $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) ); |
|
1544 | - |
|
1545 | - $dir_parts = explode( "/wp-content/", $file_dir ); |
|
1546 | - $url_parts = explode( "/wp-content/", plugins_url() ); |
|
1547 | - |
|
1548 | - if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) { |
|
1549 | - $url = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] ); |
|
1550 | - $this->url = $url; |
|
1551 | - } |
|
1552 | - } |
|
1553 | - |
|
1554 | - |
|
1555 | - return $url; |
|
1556 | - } |
|
1557 | - |
|
1558 | - /** |
|
1559 | - * Generate the block icon. |
|
1560 | - * |
|
1561 | - * Enables the use of Font Awesome icons. |
|
1562 | - * |
|
1563 | - * @note xlink:href is actually deprecated but href is not supported by all so we use both. |
|
1564 | - * |
|
1565 | - * @param $icon |
|
1566 | - * |
|
1567 | - * @since 1.1.0 |
|
1568 | - * @return string |
|
1569 | - */ |
|
1570 | - public function get_block_icon( $icon ) { |
|
1571 | - |
|
1572 | - // check if we have a Font Awesome icon |
|
1573 | - $fa_type = ''; |
|
1574 | - if ( substr( $icon, 0, 7 ) === "fas fa-" ) { |
|
1575 | - $fa_type = 'solid'; |
|
1576 | - } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) { |
|
1577 | - $fa_type = 'regular'; |
|
1578 | - } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) { |
|
1579 | - $fa_type = 'brands'; |
|
1580 | - } else { |
|
1581 | - $icon = "'" . $icon . "'"; |
|
1582 | - } |
|
1583 | - |
|
1584 | - // set the icon if we found one |
|
1585 | - if ( $fa_type ) { |
|
1586 | - $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon ); |
|
1587 | - $icon = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))"; |
|
1588 | - } |
|
1589 | - |
|
1590 | - return $icon; |
|
1591 | - } |
|
1592 | - |
|
1593 | - public function group_arguments( $arguments ) { |
|
1242 | + return str_replace( array( |
|
1243 | + '<script>', |
|
1244 | + '</script>' |
|
1245 | + ), '', $output ); |
|
1246 | + } |
|
1247 | + |
|
1248 | + |
|
1249 | + /** |
|
1250 | + * Set the name from the argument key. |
|
1251 | + * |
|
1252 | + * @param $options |
|
1253 | + * |
|
1254 | + * @return mixed |
|
1255 | + */ |
|
1256 | + private function add_name_from_key( $options, $arguments = false ) { |
|
1257 | + if ( ! empty( $options['arguments'] ) ) { |
|
1258 | + foreach ( $options['arguments'] as $key => $val ) { |
|
1259 | + $options['arguments'][ $key ]['name'] = $key; |
|
1260 | + } |
|
1261 | + } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) { |
|
1262 | + foreach ( $options as $key => $val ) { |
|
1263 | + $options[ $key ]['name'] = $key; |
|
1264 | + } |
|
1265 | + } |
|
1266 | + |
|
1267 | + return $options; |
|
1268 | + } |
|
1269 | + |
|
1270 | + /** |
|
1271 | + * Register the parent shortcode. |
|
1272 | + * |
|
1273 | + * @since 1.0.0 |
|
1274 | + */ |
|
1275 | + public function register_shortcode() { |
|
1276 | + add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) ); |
|
1277 | + add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) ); |
|
1278 | + } |
|
1279 | + |
|
1280 | + /** |
|
1281 | + * Render the shortcode via ajax so we can return it to Gutenberg. |
|
1282 | + * |
|
1283 | + * @since 1.0.0 |
|
1284 | + */ |
|
1285 | + public static function render_shortcode() { |
|
1286 | + |
|
1287 | + check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true ); |
|
1288 | + if ( ! current_user_can( 'manage_options' ) ) { |
|
1289 | + wp_die(); |
|
1290 | + } |
|
1291 | + |
|
1292 | + // we might need the $post value here so lets set it. |
|
1293 | + if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) { |
|
1294 | + $post_obj = get_post( absint( $_POST['post_id'] ) ); |
|
1295 | + if ( ! empty( $post_obj ) && empty( $post ) ) { |
|
1296 | + global $post; |
|
1297 | + $post = $post_obj; |
|
1298 | + } |
|
1299 | + } |
|
1300 | + |
|
1301 | + if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) { |
|
1302 | + $shortcode_name = sanitize_title_with_dashes( $_POST['shortcode'] ); |
|
1303 | + $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array(); |
|
1304 | + $attributes = ''; |
|
1305 | + if ( ! empty( $attributes_array ) ) { |
|
1306 | + foreach ( $attributes_array as $key => $value ) { |
|
1307 | + $attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' "; |
|
1308 | + } |
|
1309 | + } |
|
1310 | + |
|
1311 | + $shortcode = "[" . $shortcode_name . " " . $attributes . "]"; |
|
1312 | + |
|
1313 | + echo do_shortcode( $shortcode ); |
|
1314 | + |
|
1315 | + } |
|
1316 | + wp_die(); |
|
1317 | + } |
|
1318 | + |
|
1319 | + /** |
|
1320 | + * Output the shortcode. |
|
1321 | + * |
|
1322 | + * @param array $args |
|
1323 | + * @param string $content |
|
1324 | + * |
|
1325 | + * @return string |
|
1326 | + */ |
|
1327 | + public function shortcode_output( $args = array(), $content = '' ) { |
|
1328 | + $args = $this->argument_values( $args ); |
|
1329 | + |
|
1330 | + // add extra argument so we know its a output to gutenberg |
|
1331 | + //$args |
|
1332 | + $args = $this->string_to_bool( $args ); |
|
1333 | + |
|
1334 | + // if we have a enclosed shortcode we add it to the special `html` argument |
|
1335 | + if ( ! empty( $content ) ) { |
|
1336 | + $args['html'] = $content; |
|
1337 | + } |
|
1338 | + |
|
1339 | + $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : ''; |
|
1340 | + $class .= " sdel-".$this->get_instance_hash(); |
|
1341 | + |
|
1342 | + $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this ); |
|
1343 | + $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this ); |
|
1344 | + |
|
1345 | + $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this ); |
|
1346 | + $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); //@todo this does not seem right @kiran? |
|
1347 | + |
|
1348 | + $shortcode_args = array(); |
|
1349 | + $output = ''; |
|
1350 | + $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
1351 | + if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) { |
|
1352 | + $no_wrap = true; |
|
1353 | + } |
|
1354 | + $main_content = $this->output( $args, $shortcode_args, $content ); |
|
1355 | + if ( $main_content && ! $no_wrap ) { |
|
1356 | + // wrap the shortcode in a div with the same class as the widget |
|
1357 | + $output .= '<div class="' . $class . '" ' . $attrs . '>'; |
|
1358 | + if ( ! empty( $args['title'] ) ) { |
|
1359 | + // if its a shortcode and there is a title try to grab the title wrappers |
|
1360 | + $shortcode_args = array( 'before_title' => '', 'after_title' => '' ); |
|
1361 | + if ( empty( $instance ) ) { |
|
1362 | + global $wp_registered_sidebars; |
|
1363 | + if ( ! empty( $wp_registered_sidebars ) ) { |
|
1364 | + foreach ( $wp_registered_sidebars as $sidebar ) { |
|
1365 | + if ( ! empty( $sidebar['before_title'] ) ) { |
|
1366 | + $shortcode_args['before_title'] = $sidebar['before_title']; |
|
1367 | + $shortcode_args['after_title'] = $sidebar['after_title']; |
|
1368 | + break; |
|
1369 | + } |
|
1370 | + } |
|
1371 | + } |
|
1372 | + } |
|
1373 | + $output .= $this->output_title( $shortcode_args, $args ); |
|
1374 | + } |
|
1375 | + $output .= $main_content; |
|
1376 | + $output .= '</div>'; |
|
1377 | + } elseif ( $main_content && $no_wrap ) { |
|
1378 | + $output .= $main_content; |
|
1379 | + } |
|
1380 | + |
|
1381 | + // if preview show a placeholder if empty |
|
1382 | + if ( $this->is_preview() && $output == '' ) { |
|
1383 | + $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" ); |
|
1384 | + } |
|
1385 | + |
|
1386 | + return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this ); |
|
1387 | + } |
|
1388 | + |
|
1389 | + /** |
|
1390 | + * Placeholder text to show if output is empty and we are on a preview/builder page. |
|
1391 | + * |
|
1392 | + * @param string $name |
|
1393 | + * |
|
1394 | + * @return string |
|
1395 | + */ |
|
1396 | + public function preview_placeholder_text( $name = '' ) { |
|
1397 | + return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf( __( 'Placeholder for: %s' ), $name ) . "</div>"; |
|
1398 | + } |
|
1399 | + |
|
1400 | + /** |
|
1401 | + * Sometimes booleans values can be turned to strings, so we fix that. |
|
1402 | + * |
|
1403 | + * @param $options |
|
1404 | + * |
|
1405 | + * @return mixed |
|
1406 | + */ |
|
1407 | + public function string_to_bool( $options ) { |
|
1408 | + // convert bool strings to booleans |
|
1409 | + foreach ( $options as $key => $val ) { |
|
1410 | + if ( $val == 'false' ) { |
|
1411 | + $options[ $key ] = false; |
|
1412 | + } elseif ( $val == 'true' ) { |
|
1413 | + $options[ $key ] = true; |
|
1414 | + } |
|
1415 | + } |
|
1416 | + |
|
1417 | + return $options; |
|
1418 | + } |
|
1419 | + |
|
1420 | + /** |
|
1421 | + * Get the argument values that are also filterable. |
|
1422 | + * |
|
1423 | + * @param $instance |
|
1424 | + * |
|
1425 | + * @since 1.0.12 Don't set checkbox default value if the value is empty. |
|
1426 | + * |
|
1427 | + * @return array |
|
1428 | + */ |
|
1429 | + public function argument_values( $instance ) { |
|
1430 | + $argument_values = array(); |
|
1431 | + |
|
1432 | + // set widget instance |
|
1433 | + $this->instance = $instance; |
|
1434 | + |
|
1435 | + if ( empty( $this->arguments ) ) { |
|
1436 | + $this->arguments = $this->get_arguments(); |
|
1437 | + } |
|
1438 | + |
|
1439 | + if ( ! empty( $this->arguments ) ) { |
|
1440 | + foreach ( $this->arguments as $key => $args ) { |
|
1441 | + // set the input name from the key |
|
1442 | + $args['name'] = $key; |
|
1443 | + // |
|
1444 | + $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : ''; |
|
1445 | + if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) { |
|
1446 | + // don't set default for an empty checkbox |
|
1447 | + } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) { |
|
1448 | + $argument_values[ $key ] = $args['default']; |
|
1449 | + } |
|
1450 | + } |
|
1451 | + } |
|
1452 | + |
|
1453 | + return $argument_values; |
|
1454 | + } |
|
1455 | + |
|
1456 | + /** |
|
1457 | + * Set arguments in super duper. |
|
1458 | + * |
|
1459 | + * @since 1.0.0 |
|
1460 | + * |
|
1461 | + * @return array Set arguments. |
|
1462 | + */ |
|
1463 | + public function set_arguments() { |
|
1464 | + return $this->arguments; |
|
1465 | + } |
|
1466 | + |
|
1467 | + /** |
|
1468 | + * Get arguments in super duper. |
|
1469 | + * |
|
1470 | + * @since 1.0.0 |
|
1471 | + * |
|
1472 | + * @return array Get arguments. |
|
1473 | + */ |
|
1474 | + public function get_arguments() { |
|
1475 | + if ( empty( $this->arguments ) ) { |
|
1476 | + $this->arguments = $this->set_arguments(); |
|
1477 | + } |
|
1478 | + |
|
1479 | + $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance ); |
|
1480 | + $this->arguments = $this->add_name_from_key( $this->arguments, true ); |
|
1481 | + |
|
1482 | + return $this->arguments; |
|
1483 | + } |
|
1484 | + |
|
1485 | + /** |
|
1486 | + * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class. |
|
1487 | + * |
|
1488 | + * @param array $args |
|
1489 | + * @param array $widget_args |
|
1490 | + * @param string $content |
|
1491 | + */ |
|
1492 | + public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
1493 | + |
|
1494 | + } |
|
1495 | + |
|
1496 | + /** |
|
1497 | + * Add the dynamic block code inline when the wp-block in enqueued. |
|
1498 | + */ |
|
1499 | + public function register_block() { |
|
1500 | + wp_add_inline_script( 'wp-blocks', $this->block() ); |
|
1501 | + if ( class_exists( 'SiteOrigin_Panels' ) ) { |
|
1502 | + wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() ); |
|
1503 | + } |
|
1504 | + } |
|
1505 | + |
|
1506 | + /** |
|
1507 | + * Check if we need to show advanced options. |
|
1508 | + * |
|
1509 | + * @return bool |
|
1510 | + */ |
|
1511 | + public function block_show_advanced() { |
|
1512 | + |
|
1513 | + $show = false; |
|
1514 | + $arguments = $this->arguments; |
|
1515 | + |
|
1516 | + if ( empty( $arguments ) ) { |
|
1517 | + $arguments = $this->get_arguments(); |
|
1518 | + } |
|
1519 | + |
|
1520 | + if ( ! empty( $arguments ) ) { |
|
1521 | + foreach ( $arguments as $argument ) { |
|
1522 | + if ( isset( $argument['advanced'] ) && $argument['advanced'] ) { |
|
1523 | + $show = true; |
|
1524 | + break; // no need to continue if we know we have it |
|
1525 | + } |
|
1526 | + } |
|
1527 | + } |
|
1528 | + |
|
1529 | + return $show; |
|
1530 | + } |
|
1531 | + |
|
1532 | + /** |
|
1533 | + * Get the url path to the current folder. |
|
1534 | + * |
|
1535 | + * @return string |
|
1536 | + */ |
|
1537 | + public function get_url() { |
|
1538 | + |
|
1539 | + $url = $this->url; |
|
1540 | + |
|
1541 | + if ( ! $url ) { |
|
1542 | + // check if we are inside a plugin |
|
1543 | + $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) ); |
|
1544 | + |
|
1545 | + $dir_parts = explode( "/wp-content/", $file_dir ); |
|
1546 | + $url_parts = explode( "/wp-content/", plugins_url() ); |
|
1547 | + |
|
1548 | + if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) { |
|
1549 | + $url = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] ); |
|
1550 | + $this->url = $url; |
|
1551 | + } |
|
1552 | + } |
|
1553 | + |
|
1554 | + |
|
1555 | + return $url; |
|
1556 | + } |
|
1557 | + |
|
1558 | + /** |
|
1559 | + * Generate the block icon. |
|
1560 | + * |
|
1561 | + * Enables the use of Font Awesome icons. |
|
1562 | + * |
|
1563 | + * @note xlink:href is actually deprecated but href is not supported by all so we use both. |
|
1564 | + * |
|
1565 | + * @param $icon |
|
1566 | + * |
|
1567 | + * @since 1.1.0 |
|
1568 | + * @return string |
|
1569 | + */ |
|
1570 | + public function get_block_icon( $icon ) { |
|
1571 | + |
|
1572 | + // check if we have a Font Awesome icon |
|
1573 | + $fa_type = ''; |
|
1574 | + if ( substr( $icon, 0, 7 ) === "fas fa-" ) { |
|
1575 | + $fa_type = 'solid'; |
|
1576 | + } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) { |
|
1577 | + $fa_type = 'regular'; |
|
1578 | + } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) { |
|
1579 | + $fa_type = 'brands'; |
|
1580 | + } else { |
|
1581 | + $icon = "'" . $icon . "'"; |
|
1582 | + } |
|
1583 | + |
|
1584 | + // set the icon if we found one |
|
1585 | + if ( $fa_type ) { |
|
1586 | + $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon ); |
|
1587 | + $icon = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))"; |
|
1588 | + } |
|
1589 | + |
|
1590 | + return $icon; |
|
1591 | + } |
|
1592 | + |
|
1593 | + public function group_arguments( $arguments ) { |
|
1594 | 1594 | // echo '###';print_r($arguments); |
1595 | - if ( ! empty( $arguments ) ) { |
|
1596 | - $temp_arguments = array(); |
|
1597 | - $general = __( "General" ); |
|
1598 | - $add_sections = false; |
|
1599 | - foreach ( $arguments as $key => $args ) { |
|
1600 | - if ( isset( $args['group'] ) ) { |
|
1601 | - $temp_arguments[ $args['group'] ][ $key ] = $args; |
|
1602 | - $add_sections = true; |
|
1603 | - } else { |
|
1604 | - $temp_arguments[ $general ][ $key ] = $args; |
|
1605 | - } |
|
1606 | - } |
|
1607 | - |
|
1608 | - // only add sections if more than one |
|
1609 | - if ( $add_sections ) { |
|
1610 | - $arguments = $temp_arguments; |
|
1611 | - } |
|
1612 | - } |
|
1595 | + if ( ! empty( $arguments ) ) { |
|
1596 | + $temp_arguments = array(); |
|
1597 | + $general = __( "General" ); |
|
1598 | + $add_sections = false; |
|
1599 | + foreach ( $arguments as $key => $args ) { |
|
1600 | + if ( isset( $args['group'] ) ) { |
|
1601 | + $temp_arguments[ $args['group'] ][ $key ] = $args; |
|
1602 | + $add_sections = true; |
|
1603 | + } else { |
|
1604 | + $temp_arguments[ $general ][ $key ] = $args; |
|
1605 | + } |
|
1606 | + } |
|
1607 | + |
|
1608 | + // only add sections if more than one |
|
1609 | + if ( $add_sections ) { |
|
1610 | + $arguments = $temp_arguments; |
|
1611 | + } |
|
1612 | + } |
|
1613 | 1613 | |
1614 | 1614 | // echo '###';print_r($arguments); |
1615 | - return $arguments; |
|
1616 | - } |
|
1617 | - |
|
1618 | - |
|
1619 | - /** |
|
1620 | - * Output the JS for building the dynamic Guntenberg block. |
|
1621 | - * |
|
1622 | - * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap. |
|
1623 | - * @since 1.0.9 Save numbers as numbers and not strings. |
|
1624 | - * @since 1.1.0 Font Awesome classes can be used for icons. |
|
1625 | - * @return mixed |
|
1626 | - */ |
|
1627 | - public function block() { |
|
1628 | - ob_start(); |
|
1629 | - |
|
1630 | - $show_advanced = $this->block_show_advanced(); |
|
1631 | - ?> |
|
1615 | + return $arguments; |
|
1616 | + } |
|
1617 | + |
|
1618 | + |
|
1619 | + /** |
|
1620 | + * Output the JS for building the dynamic Guntenberg block. |
|
1621 | + * |
|
1622 | + * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap. |
|
1623 | + * @since 1.0.9 Save numbers as numbers and not strings. |
|
1624 | + * @since 1.1.0 Font Awesome classes can be used for icons. |
|
1625 | + * @return mixed |
|
1626 | + */ |
|
1627 | + public function block() { |
|
1628 | + ob_start(); |
|
1629 | + |
|
1630 | + $show_advanced = $this->block_show_advanced(); |
|
1631 | + ?> |
|
1632 | 1632 | <script> |
1633 | 1633 | /** |
1634 | 1634 | * BLOCK: Basic |
@@ -1672,97 +1672,97 @@ discard block |
||
1672 | 1672 | icon: <?php echo $this->get_block_icon( $this->options['block-icon'] );?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/. |
1673 | 1673 | supports: { |
1674 | 1674 | <?php |
1675 | - if ( isset( $this->options['block-supports'] ) ) { |
|
1676 | - echo $this->array_to_attributes( $this->options['block-supports'] ); |
|
1677 | - } |
|
1678 | - ?> |
|
1675 | + if ( isset( $this->options['block-supports'] ) ) { |
|
1676 | + echo $this->array_to_attributes( $this->options['block-supports'] ); |
|
1677 | + } |
|
1678 | + ?> |
|
1679 | 1679 | }, |
1680 | 1680 | category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed. |
1681 | 1681 | <?php if ( isset( $this->options['block-keywords'] ) ) { |
1682 | - echo "keywords : " . $this->options['block-keywords'] . ","; |
|
1683 | - }?> |
|
1682 | + echo "keywords : " . $this->options['block-keywords'] . ","; |
|
1683 | + }?> |
|
1684 | 1684 | |
1685 | 1685 | <?php |
1686 | 1686 | |
1687 | - // maybe set no_wrap |
|
1688 | - $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
1689 | - if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) { |
|
1690 | - $no_wrap = true; |
|
1691 | - } |
|
1692 | - if ( $no_wrap ) { |
|
1693 | - $this->options['block-wrap'] = ''; |
|
1694 | - } |
|
1687 | + // maybe set no_wrap |
|
1688 | + $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
1689 | + if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) { |
|
1690 | + $no_wrap = true; |
|
1691 | + } |
|
1692 | + if ( $no_wrap ) { |
|
1693 | + $this->options['block-wrap'] = ''; |
|
1694 | + } |
|
1695 | 1695 | |
1696 | 1696 | |
1697 | 1697 | |
1698 | - $show_alignment = false; |
|
1699 | - // align feature |
|
1700 | - /*echo "supports: {"; |
|
1698 | + $show_alignment = false; |
|
1699 | + // align feature |
|
1700 | + /*echo "supports: {"; |
|
1701 | 1701 | echo " align: true,"; |
1702 | 1702 | echo " html: false"; |
1703 | 1703 | echo "},";*/ |
1704 | 1704 | |
1705 | - if ( ! empty( $this->arguments ) ) { |
|
1706 | - echo "attributes : {"; |
|
1707 | - |
|
1708 | - if ( $show_advanced ) { |
|
1709 | - echo "show_advanced: {"; |
|
1710 | - echo " type: 'boolean',"; |
|
1711 | - echo " default: false,"; |
|
1712 | - echo "},"; |
|
1713 | - } |
|
1714 | - |
|
1715 | - // block wrap element |
|
1716 | - if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this? |
|
1717 | - echo "block_wrap: {"; |
|
1718 | - echo " type: 'string',"; |
|
1719 | - echo " default: '" . esc_attr( $this->options['block-wrap'] ) . "',"; |
|
1720 | - echo "},"; |
|
1721 | - } |
|
1722 | - |
|
1723 | - foreach ( $this->arguments as $key => $args ) { |
|
1724 | - |
|
1725 | - // set if we should show alignment |
|
1726 | - if ( $key == 'alignment' ) { |
|
1727 | - $show_alignment = true; |
|
1728 | - } |
|
1729 | - |
|
1730 | - $extra = ''; |
|
1731 | - |
|
1732 | - if ( $args['type'] == 'checkbox' ) { |
|
1733 | - $type = 'boolean'; |
|
1734 | - $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false'; |
|
1735 | - } elseif ( $args['type'] == 'number' ) { |
|
1736 | - $type = 'number'; |
|
1737 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1738 | - } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) { |
|
1739 | - $type = 'array'; |
|
1740 | - if ( is_array( $args['default'] ) ) { |
|
1741 | - $default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]"; |
|
1742 | - } else { |
|
1743 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1744 | - } |
|
1745 | - } elseif ( $args['type'] == 'multiselect' ) { |
|
1746 | - $type = 'array'; |
|
1747 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1748 | - } else { |
|
1749 | - $type = 'string'; |
|
1750 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1751 | - } |
|
1752 | - echo $key . " : {"; |
|
1753 | - echo "type : '$type',"; |
|
1754 | - echo "default : $default,"; |
|
1755 | - echo "},"; |
|
1756 | - } |
|
1757 | - |
|
1758 | - echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},"; |
|
1759 | - echo "className: { type: 'string', default: '' },"; |
|
1760 | - |
|
1761 | - echo "},"; |
|
1762 | - |
|
1763 | - } |
|
1764 | - |
|
1765 | - ?> |
|
1705 | + if ( ! empty( $this->arguments ) ) { |
|
1706 | + echo "attributes : {"; |
|
1707 | + |
|
1708 | + if ( $show_advanced ) { |
|
1709 | + echo "show_advanced: {"; |
|
1710 | + echo " type: 'boolean',"; |
|
1711 | + echo " default: false,"; |
|
1712 | + echo "},"; |
|
1713 | + } |
|
1714 | + |
|
1715 | + // block wrap element |
|
1716 | + if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this? |
|
1717 | + echo "block_wrap: {"; |
|
1718 | + echo " type: 'string',"; |
|
1719 | + echo " default: '" . esc_attr( $this->options['block-wrap'] ) . "',"; |
|
1720 | + echo "},"; |
|
1721 | + } |
|
1722 | + |
|
1723 | + foreach ( $this->arguments as $key => $args ) { |
|
1724 | + |
|
1725 | + // set if we should show alignment |
|
1726 | + if ( $key == 'alignment' ) { |
|
1727 | + $show_alignment = true; |
|
1728 | + } |
|
1729 | + |
|
1730 | + $extra = ''; |
|
1731 | + |
|
1732 | + if ( $args['type'] == 'checkbox' ) { |
|
1733 | + $type = 'boolean'; |
|
1734 | + $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false'; |
|
1735 | + } elseif ( $args['type'] == 'number' ) { |
|
1736 | + $type = 'number'; |
|
1737 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1738 | + } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) { |
|
1739 | + $type = 'array'; |
|
1740 | + if ( is_array( $args['default'] ) ) { |
|
1741 | + $default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]"; |
|
1742 | + } else { |
|
1743 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1744 | + } |
|
1745 | + } elseif ( $args['type'] == 'multiselect' ) { |
|
1746 | + $type = 'array'; |
|
1747 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1748 | + } else { |
|
1749 | + $type = 'string'; |
|
1750 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
1751 | + } |
|
1752 | + echo $key . " : {"; |
|
1753 | + echo "type : '$type',"; |
|
1754 | + echo "default : $default,"; |
|
1755 | + echo "},"; |
|
1756 | + } |
|
1757 | + |
|
1758 | + echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},"; |
|
1759 | + echo "className: { type: 'string', default: '' },"; |
|
1760 | + |
|
1761 | + echo "},"; |
|
1762 | + |
|
1763 | + } |
|
1764 | + |
|
1765 | + ?> |
|
1766 | 1766 | |
1767 | 1767 | // The "edit" property must be a valid function. |
1768 | 1768 | edit: function (props) { |
@@ -1770,9 +1770,9 @@ discard block |
||
1770 | 1770 | |
1771 | 1771 | var $value = ''; |
1772 | 1772 | <?php |
1773 | - // if we have a post_type and a category then link them |
|
1774 | - if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){ |
|
1775 | - ?> |
|
1773 | + // if we have a post_type and a category then link them |
|
1774 | + if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){ |
|
1775 | + ?> |
|
1776 | 1776 | if(typeof(prev_attributes[props.id]) != 'undefined' ){ |
1777 | 1777 | $pt = props.attributes.post_type; |
1778 | 1778 | if(post_type_rest_slugs.length){ |
@@ -1856,8 +1856,8 @@ discard block |
||
1856 | 1856 | 'shortcode': '<?php echo $this->options['base_id'];?>', |
1857 | 1857 | 'attributes': props.attributes, |
1858 | 1858 | 'post_id': <?php global $post; if ( isset( $post->ID ) ) { |
1859 | - echo $post->ID; |
|
1860 | - }else{echo '0';}?>, |
|
1859 | + echo $post->ID; |
|
1860 | + }else{echo '0';}?>, |
|
1861 | 1861 | '_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>' |
1862 | 1862 | }; |
1863 | 1863 | |
@@ -1909,10 +1909,10 @@ discard block |
||
1909 | 1909 | |
1910 | 1910 | <?php |
1911 | 1911 | |
1912 | - if(! empty( $this->arguments )){ |
|
1912 | + if(! empty( $this->arguments )){ |
|
1913 | 1913 | |
1914 | - if ( $show_advanced ) { |
|
1915 | - ?> |
|
1914 | + if ( $show_advanced ) { |
|
1915 | + ?> |
|
1916 | 1916 | el('div', { |
1917 | 1917 | style: {'padding-left': '16px','padding-right': '16px'} |
1918 | 1918 | }, |
@@ -1930,79 +1930,79 @@ discard block |
||
1930 | 1930 | , |
1931 | 1931 | <?php |
1932 | 1932 | |
1933 | - } |
|
1933 | + } |
|
1934 | 1934 | |
1935 | - $arguments = $this->group_arguments( $this->arguments ); |
|
1935 | + $arguments = $this->group_arguments( $this->arguments ); |
|
1936 | 1936 | |
1937 | - // Do we have sections? |
|
1938 | - $has_sections = $arguments == $this->arguments ? false : true; |
|
1937 | + // Do we have sections? |
|
1938 | + $has_sections = $arguments == $this->arguments ? false : true; |
|
1939 | 1939 | |
1940 | 1940 | |
1941 | - if($has_sections){ |
|
1942 | - $panel_count = 0; |
|
1943 | - foreach($arguments as $key => $args){ |
|
1944 | - ?> |
|
1941 | + if($has_sections){ |
|
1942 | + $panel_count = 0; |
|
1943 | + foreach($arguments as $key => $args){ |
|
1944 | + ?> |
|
1945 | 1945 | el(wp.components.PanelBody, { |
1946 | 1946 | title: '<?php esc_attr_e( $key ); ?>', |
1947 | 1947 | initialOpen: <?php if ( $panel_count ) { |
1948 | - echo "false"; |
|
1949 | - } else { |
|
1950 | - echo "true"; |
|
1951 | - }?> |
|
1948 | + echo "false"; |
|
1949 | + } else { |
|
1950 | + echo "true"; |
|
1951 | + }?> |
|
1952 | 1952 | }, |
1953 | 1953 | <?php |
1954 | 1954 | |
1955 | 1955 | |
1956 | 1956 | |
1957 | - foreach ( $args as $k => $a ) { |
|
1957 | + foreach ( $args as $k => $a ) { |
|
1958 | 1958 | |
1959 | - $this->block_row_start( $k, $a ); |
|
1960 | - $this->build_block_arguments( $k, $a ); |
|
1961 | - $this->block_row_end( $k, $a ); |
|
1962 | - } |
|
1963 | - ?> |
|
1959 | + $this->block_row_start( $k, $a ); |
|
1960 | + $this->build_block_arguments( $k, $a ); |
|
1961 | + $this->block_row_end( $k, $a ); |
|
1962 | + } |
|
1963 | + ?> |
|
1964 | 1964 | ), |
1965 | 1965 | <?php |
1966 | - $panel_count ++; |
|
1966 | + $panel_count ++; |
|
1967 | 1967 | |
1968 | - } |
|
1969 | - }else { |
|
1970 | - ?> |
|
1968 | + } |
|
1969 | + }else { |
|
1970 | + ?> |
|
1971 | 1971 | el(wp.components.PanelBody, { |
1972 | 1972 | title: '<?php esc_attr_e( "Settings" ); ?>', |
1973 | 1973 | initialOpen: true |
1974 | 1974 | }, |
1975 | 1975 | <?php |
1976 | - foreach ( $this->arguments as $key => $args ) { |
|
1977 | - $this->block_row_start( $key, $args ); |
|
1978 | - $this->build_block_arguments( $key, $args ); |
|
1979 | - $this->block_row_end( $key, $args ); |
|
1980 | - } |
|
1981 | - ?> |
|
1976 | + foreach ( $this->arguments as $key => $args ) { |
|
1977 | + $this->block_row_start( $key, $args ); |
|
1978 | + $this->build_block_arguments( $key, $args ); |
|
1979 | + $this->block_row_end( $key, $args ); |
|
1980 | + } |
|
1981 | + ?> |
|
1982 | 1982 | ), |
1983 | 1983 | <?php |
1984 | - } |
|
1984 | + } |
|
1985 | 1985 | |
1986 | - } |
|
1987 | - ?> |
|
1986 | + } |
|
1987 | + ?> |
|
1988 | 1988 | |
1989 | 1989 | ), |
1990 | 1990 | |
1991 | 1991 | <?php |
1992 | - // If the user sets block-output array then build it |
|
1993 | - if ( ! empty( $this->options['block-output'] ) ) { |
|
1994 | - $this->block_element( $this->options['block-output'] ); |
|
1995 | - }else{ |
|
1996 | - // if no block-output is set then we try and get the shortcode html output via ajax. |
|
1997 | - ?> |
|
1992 | + // If the user sets block-output array then build it |
|
1993 | + if ( ! empty( $this->options['block-output'] ) ) { |
|
1994 | + $this->block_element( $this->options['block-output'] ); |
|
1995 | + }else{ |
|
1996 | + // if no block-output is set then we try and get the shortcode html output via ajax. |
|
1997 | + ?> |
|
1998 | 1998 | el('div', { |
1999 | 1999 | dangerouslySetInnerHTML: {__html: onChangeContent()}, |
2000 | 2000 | className: props.className, |
2001 | 2001 | style: {'minHeight': '30px'} |
2002 | 2002 | }) |
2003 | 2003 | <?php |
2004 | - } |
|
2005 | - ?> |
|
2004 | + } |
|
2005 | + ?> |
|
2006 | 2006 | ]; // end return |
2007 | 2007 | }, |
2008 | 2008 | |
@@ -2020,10 +2020,10 @@ discard block |
||
2020 | 2020 | $html = ''; |
2021 | 2021 | <?php |
2022 | 2022 | |
2023 | - if(! empty( $this->arguments )){ |
|
2023 | + if(! empty( $this->arguments )){ |
|
2024 | 2024 | |
2025 | - foreach($this->arguments as $key => $args){ |
|
2026 | - ?> |
|
2025 | + foreach($this->arguments as $key => $args){ |
|
2026 | + ?> |
|
2027 | 2027 | if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) { |
2028 | 2028 | if ('<?php echo esc_attr( $key );?>' == 'html') { |
2029 | 2029 | $html = attr.<?php echo esc_attr( $key );?>; |
@@ -2032,10 +2032,10 @@ discard block |
||
2032 | 2032 | } |
2033 | 2033 | } |
2034 | 2034 | <?php |
2035 | - } |
|
2036 | - } |
|
2035 | + } |
|
2036 | + } |
|
2037 | 2037 | |
2038 | - ?> |
|
2038 | + ?> |
|
2039 | 2039 | content += "]"; |
2040 | 2040 | |
2041 | 2041 | // if has html element |
@@ -2058,20 +2058,20 @@ discard block |
||
2058 | 2058 | } |
2059 | 2059 | |
2060 | 2060 | <?php |
2061 | - if(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){ |
|
2062 | - ?> |
|
2061 | + if(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){ |
|
2062 | + ?> |
|
2063 | 2063 | return content; |
2064 | 2064 | <?php |
2065 | - }else{ |
|
2066 | - ?> |
|
2065 | + }else{ |
|
2066 | + ?> |
|
2067 | 2067 | var block_wrap = 'div'; |
2068 | 2068 | if (attr.hasOwnProperty("block_wrap")) { |
2069 | 2069 | block_wrap = attr.block_wrap; |
2070 | 2070 | } |
2071 | 2071 | return el(block_wrap, {dangerouslySetInnerHTML: {__html: content}, className: align}); |
2072 | 2072 | <?php |
2073 | - } |
|
2074 | - ?> |
|
2073 | + } |
|
2074 | + ?> |
|
2075 | 2075 | |
2076 | 2076 | |
2077 | 2077 | } |
@@ -2079,30 +2079,30 @@ discard block |
||
2079 | 2079 | })(); |
2080 | 2080 | </script> |
2081 | 2081 | <?php |
2082 | - $output = ob_get_clean(); |
|
2082 | + $output = ob_get_clean(); |
|
2083 | 2083 | |
2084 | - /* |
|
2084 | + /* |
|
2085 | 2085 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
2086 | 2086 | */ |
2087 | 2087 | |
2088 | - return str_replace( array( |
|
2089 | - '<script>', |
|
2090 | - '</script>' |
|
2091 | - ), '', $output ); |
|
2092 | - } |
|
2088 | + return str_replace( array( |
|
2089 | + '<script>', |
|
2090 | + '</script>' |
|
2091 | + ), '', $output ); |
|
2092 | + } |
|
2093 | 2093 | |
2094 | - public function block_row_start($key, $args){ |
|
2094 | + public function block_row_start($key, $args){ |
|
2095 | 2095 | |
2096 | - // check for row |
|
2097 | - if(!empty($args['row'])){ |
|
2096 | + // check for row |
|
2097 | + if(!empty($args['row'])){ |
|
2098 | 2098 | |
2099 | - if(!empty($args['row']['open'])){ |
|
2099 | + if(!empty($args['row']['open'])){ |
|
2100 | 2100 | |
2101 | - // element require |
|
2102 | - $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : ""; |
|
2103 | - echo $element_require; |
|
2101 | + // element require |
|
2102 | + $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : ""; |
|
2103 | + echo $element_require; |
|
2104 | 2104 | |
2105 | - if(false){?><script><?php }?> |
|
2105 | + if(false){?><script><?php }?> |
|
2106 | 2106 | el('div', { |
2107 | 2107 | className: 'bsui components-base-control', |
2108 | 2108 | }, |
@@ -2132,87 +2132,87 @@ discard block |
||
2132 | 2132 | }, |
2133 | 2133 | |
2134 | 2134 | <?php |
2135 | - if(false){?></script><?php } |
|
2136 | - }elseif(!empty($args['row']['close'])){ |
|
2137 | - if(false){?><script><?php }?> |
|
2135 | + if(false){?></script><?php } |
|
2136 | + }elseif(!empty($args['row']['close'])){ |
|
2137 | + if(false){?><script><?php }?> |
|
2138 | 2138 | el( |
2139 | 2139 | 'div', |
2140 | 2140 | { |
2141 | 2141 | className: 'col pl-0', |
2142 | 2142 | }, |
2143 | 2143 | <?php |
2144 | - if(false){?></script><?php } |
|
2145 | - }else{ |
|
2146 | - if(false){?><script><?php }?> |
|
2144 | + if(false){?></script><?php } |
|
2145 | + }else{ |
|
2146 | + if(false){?><script><?php }?> |
|
2147 | 2147 | el( |
2148 | 2148 | 'div', |
2149 | 2149 | { |
2150 | 2150 | className: 'col pl-0 pr-2', |
2151 | 2151 | }, |
2152 | 2152 | <?php |
2153 | - if(false){?></script><?php } |
|
2154 | - } |
|
2155 | - |
|
2156 | - } |
|
2157 | - |
|
2158 | - } |
|
2159 | - |
|
2160 | - public function block_row_end($key, $args){ |
|
2161 | - |
|
2162 | - if(!empty($args['row'])){ |
|
2163 | - // maybe close |
|
2164 | - if(!empty($args['row']['close'])){ |
|
2165 | - echo "))"; |
|
2166 | - } |
|
2167 | - |
|
2168 | - echo "),"; |
|
2169 | - } |
|
2170 | - } |
|
2171 | - |
|
2172 | - public function build_block_arguments( $key, $args ) { |
|
2173 | - $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : ''; |
|
2174 | - $options = ''; |
|
2175 | - $extra = ''; |
|
2176 | - $require = ''; |
|
2177 | - |
|
2178 | - // `content` is a protected and special argument |
|
2179 | - if ( $key == 'content' ) { |
|
2180 | - return; |
|
2181 | - } |
|
2182 | - |
|
2183 | - |
|
2184 | - // icon |
|
2185 | - $icon = ''; |
|
2186 | - if( !empty( $args['icon'] ) ){ |
|
2187 | - $icon .= "el('div', {"; |
|
2188 | - $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},"; |
|
2189 | - $icon .= "className: 'text-center',"; |
|
2190 | - $icon .= "title: '".addslashes( $args['title'] )."',"; |
|
2191 | - $icon .= "}),"; |
|
2192 | - |
|
2193 | - // blank title as its added to the icon. |
|
2194 | - $args['title'] = ''; |
|
2195 | - } |
|
2196 | - |
|
2197 | - // require advanced |
|
2198 | - $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : ""; |
|
2199 | - |
|
2200 | - // element require |
|
2201 | - $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : ""; |
|
2202 | - |
|
2203 | - |
|
2204 | - $onchange = "props.setAttributes({ $key: $key } )"; |
|
2205 | - $onchangecomplete = ""; |
|
2206 | - $value = "props.attributes.$key"; |
|
2207 | - $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx' ); |
|
2208 | - if ( in_array( $args['type'], $text_type ) ) { |
|
2209 | - $type = 'TextControl'; |
|
2210 | - // Save numbers as numbers and not strings |
|
2211 | - if ( $args['type'] == 'number' ) { |
|
2212 | - $onchange = "props.setAttributes({ $key: Number($key) } )"; |
|
2213 | - } |
|
2214 | - } |
|
2215 | - /* |
|
2153 | + if(false){?></script><?php } |
|
2154 | + } |
|
2155 | + |
|
2156 | + } |
|
2157 | + |
|
2158 | + } |
|
2159 | + |
|
2160 | + public function block_row_end($key, $args){ |
|
2161 | + |
|
2162 | + if(!empty($args['row'])){ |
|
2163 | + // maybe close |
|
2164 | + if(!empty($args['row']['close'])){ |
|
2165 | + echo "))"; |
|
2166 | + } |
|
2167 | + |
|
2168 | + echo "),"; |
|
2169 | + } |
|
2170 | + } |
|
2171 | + |
|
2172 | + public function build_block_arguments( $key, $args ) { |
|
2173 | + $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : ''; |
|
2174 | + $options = ''; |
|
2175 | + $extra = ''; |
|
2176 | + $require = ''; |
|
2177 | + |
|
2178 | + // `content` is a protected and special argument |
|
2179 | + if ( $key == 'content' ) { |
|
2180 | + return; |
|
2181 | + } |
|
2182 | + |
|
2183 | + |
|
2184 | + // icon |
|
2185 | + $icon = ''; |
|
2186 | + if( !empty( $args['icon'] ) ){ |
|
2187 | + $icon .= "el('div', {"; |
|
2188 | + $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},"; |
|
2189 | + $icon .= "className: 'text-center',"; |
|
2190 | + $icon .= "title: '".addslashes( $args['title'] )."',"; |
|
2191 | + $icon .= "}),"; |
|
2192 | + |
|
2193 | + // blank title as its added to the icon. |
|
2194 | + $args['title'] = ''; |
|
2195 | + } |
|
2196 | + |
|
2197 | + // require advanced |
|
2198 | + $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : ""; |
|
2199 | + |
|
2200 | + // element require |
|
2201 | + $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : ""; |
|
2202 | + |
|
2203 | + |
|
2204 | + $onchange = "props.setAttributes({ $key: $key } )"; |
|
2205 | + $onchangecomplete = ""; |
|
2206 | + $value = "props.attributes.$key"; |
|
2207 | + $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx' ); |
|
2208 | + if ( in_array( $args['type'], $text_type ) ) { |
|
2209 | + $type = 'TextControl'; |
|
2210 | + // Save numbers as numbers and not strings |
|
2211 | + if ( $args['type'] == 'number' ) { |
|
2212 | + $onchange = "props.setAttributes({ $key: Number($key) } )"; |
|
2213 | + } |
|
2214 | + } |
|
2215 | + /* |
|
2216 | 2216 | * https://www.wptricks.com/question/set-current-tab-on-a-gutenberg-tabpanel-component-from-outside-that-component/ es5 layout |
2217 | 2217 | elseif($args['type']=='tabs'){ |
2218 | 2218 | ?> |
@@ -2246,85 +2246,85 @@ discard block |
||
2246 | 2246 | return; |
2247 | 2247 | } |
2248 | 2248 | */ |
2249 | - elseif ( $args['type'] == 'color' ) { |
|
2250 | - $type = 'ColorPicker'; |
|
2251 | - $onchange = ""; |
|
2252 | - $extra = "color: $value,"; |
|
2253 | - if(!empty($args['disable_alpha'])){ |
|
2254 | - $extra .= "disableAlpha: true,"; |
|
2255 | - } |
|
2256 | - $onchangecomplete = "onChangeComplete: function($key) { |
|
2249 | + elseif ( $args['type'] == 'color' ) { |
|
2250 | + $type = 'ColorPicker'; |
|
2251 | + $onchange = ""; |
|
2252 | + $extra = "color: $value,"; |
|
2253 | + if(!empty($args['disable_alpha'])){ |
|
2254 | + $extra .= "disableAlpha: true,"; |
|
2255 | + } |
|
2256 | + $onchangecomplete = "onChangeComplete: function($key) { |
|
2257 | 2257 | value = $key.rgb.a && $key.rgb.a < 1 ? \"rgba(\"+$key.rgb.r+\",\"+$key.rgb.g+\",\"+$key.rgb.b+\",\"+$key.rgb.a+\")\" : $key.hex; |
2258 | 2258 | props.setAttributes({ |
2259 | 2259 | $key: value |
2260 | 2260 | }); |
2261 | 2261 | },"; |
2262 | - } |
|
2263 | - elseif ( $args['type'] == 'checkbox' ) { |
|
2264 | - $type = 'CheckboxControl'; |
|
2265 | - $extra .= "checked: props.attributes.$key,"; |
|
2266 | - $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )"; |
|
2267 | - } elseif ( $args['type'] == 'textarea' ) { |
|
2268 | - $type = 'TextareaControl'; |
|
2269 | - } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) { |
|
2270 | - $type = 'SelectControl'; |
|
2271 | - |
|
2272 | - if($args['name'] == 'category' && !empty($args['post_type_linked'])){ |
|
2273 | - $options .= "options: taxonomies_".str_replace("-","_", $this->id).","; |
|
2274 | - }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){ |
|
2275 | - $options .= "options: sort_by_".str_replace("-","_", $this->id).","; |
|
2276 | - }else { |
|
2277 | - |
|
2278 | - if ( ! empty( $args['options'] ) ) { |
|
2279 | - $options .= "options: ["; |
|
2280 | - foreach ( $args['options'] as $option_val => $option_label ) { |
|
2281 | - $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . addslashes( $option_label ) . "' },"; |
|
2282 | - } |
|
2283 | - $options .= "],"; |
|
2284 | - } |
|
2285 | - } |
|
2286 | - if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550 |
|
2287 | - $extra .= ' multiple: true, '; |
|
2288 | - } |
|
2289 | - } elseif ( $args['type'] == 'alignment' ) { |
|
2290 | - $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example |
|
2291 | - }elseif ( $args['type'] == 'margins' ) { |
|
2292 | - |
|
2293 | - } else { |
|
2294 | - return;// if we have not implemented the control then don't break the JS. |
|
2295 | - } |
|
2296 | - |
|
2297 | - |
|
2298 | - |
|
2299 | - // color input does not show the labels so we add them |
|
2300 | - if($args['type']=='color'){ |
|
2301 | - // add show only if advanced |
|
2302 | - echo $require_advanced; |
|
2303 | - // add setting require if defined |
|
2304 | - echo $element_require; |
|
2305 | - echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),"; |
|
2306 | - } |
|
2307 | - |
|
2308 | - // add show only if advanced |
|
2309 | - echo $require_advanced; |
|
2310 | - // add setting require if defined |
|
2311 | - echo $element_require; |
|
2312 | - |
|
2313 | - // icon |
|
2314 | - echo $icon; |
|
2315 | - ?> |
|
2262 | + } |
|
2263 | + elseif ( $args['type'] == 'checkbox' ) { |
|
2264 | + $type = 'CheckboxControl'; |
|
2265 | + $extra .= "checked: props.attributes.$key,"; |
|
2266 | + $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )"; |
|
2267 | + } elseif ( $args['type'] == 'textarea' ) { |
|
2268 | + $type = 'TextareaControl'; |
|
2269 | + } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) { |
|
2270 | + $type = 'SelectControl'; |
|
2271 | + |
|
2272 | + if($args['name'] == 'category' && !empty($args['post_type_linked'])){ |
|
2273 | + $options .= "options: taxonomies_".str_replace("-","_", $this->id).","; |
|
2274 | + }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){ |
|
2275 | + $options .= "options: sort_by_".str_replace("-","_", $this->id).","; |
|
2276 | + }else { |
|
2277 | + |
|
2278 | + if ( ! empty( $args['options'] ) ) { |
|
2279 | + $options .= "options: ["; |
|
2280 | + foreach ( $args['options'] as $option_val => $option_label ) { |
|
2281 | + $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . addslashes( $option_label ) . "' },"; |
|
2282 | + } |
|
2283 | + $options .= "],"; |
|
2284 | + } |
|
2285 | + } |
|
2286 | + if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550 |
|
2287 | + $extra .= ' multiple: true, '; |
|
2288 | + } |
|
2289 | + } elseif ( $args['type'] == 'alignment' ) { |
|
2290 | + $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example |
|
2291 | + }elseif ( $args['type'] == 'margins' ) { |
|
2292 | + |
|
2293 | + } else { |
|
2294 | + return;// if we have not implemented the control then don't break the JS. |
|
2295 | + } |
|
2296 | + |
|
2297 | + |
|
2298 | + |
|
2299 | + // color input does not show the labels so we add them |
|
2300 | + if($args['type']=='color'){ |
|
2301 | + // add show only if advanced |
|
2302 | + echo $require_advanced; |
|
2303 | + // add setting require if defined |
|
2304 | + echo $element_require; |
|
2305 | + echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),"; |
|
2306 | + } |
|
2307 | + |
|
2308 | + // add show only if advanced |
|
2309 | + echo $require_advanced; |
|
2310 | + // add setting require if defined |
|
2311 | + echo $element_require; |
|
2312 | + |
|
2313 | + // icon |
|
2314 | + echo $icon; |
|
2315 | + ?> |
|
2316 | 2316 | el( wp.components.<?php echo $type; ?>, { |
2317 | 2317 | label: '<?php echo addslashes( $args['title'] ); ?>', |
2318 | 2318 | help: '<?php if ( isset( $args['desc'] ) ) { |
2319 | - echo addslashes( $args['desc'] ); |
|
2320 | - } ?>', |
|
2319 | + echo addslashes( $args['desc'] ); |
|
2320 | + } ?>', |
|
2321 | 2321 | value: <?php echo $value; ?>, |
2322 | 2322 | <?php if ( $type == 'TextControl' && $args['type'] != 'text' ) { |
2323 | - echo "type: '" . addslashes( $args['type'] ) . "',"; |
|
2324 | - } ?> |
|
2323 | + echo "type: '" . addslashes( $args['type'] ) . "',"; |
|
2324 | + } ?> |
|
2325 | 2325 | <?php if ( ! empty( $args['placeholder'] ) ) { |
2326 | - echo "placeholder: '" . addslashes( $args['placeholder'] ) . "',"; |
|
2327 | - } ?> |
|
2326 | + echo "placeholder: '" . addslashes( $args['placeholder'] ) . "',"; |
|
2327 | + } ?> |
|
2328 | 2328 | <?php echo $options; ?> |
2329 | 2329 | <?php echo $extra; ?> |
2330 | 2330 | <?php echo $custom_attributes; ?> |
@@ -2336,601 +2336,601 @@ discard block |
||
2336 | 2336 | <?php |
2337 | 2337 | |
2338 | 2338 | |
2339 | - } |
|
2340 | - |
|
2341 | - /** |
|
2342 | - * Convert an array of attributes to block string. |
|
2343 | - * |
|
2344 | - * @todo there is prob a faster way to do this, also we could add some validation here. |
|
2345 | - * |
|
2346 | - * @param $custom_attributes |
|
2347 | - * |
|
2348 | - * @return string |
|
2349 | - */ |
|
2350 | - public function array_to_attributes( $custom_attributes, $html = false ) { |
|
2351 | - $attributes = ''; |
|
2352 | - if ( ! empty( $custom_attributes ) ) { |
|
2353 | - |
|
2354 | - if ( $html ) { |
|
2355 | - foreach ( $custom_attributes as $key => $val ) { |
|
2356 | - $attributes .= " $key='$val' "; |
|
2357 | - } |
|
2358 | - } else { |
|
2359 | - foreach ( $custom_attributes as $key => $val ) { |
|
2360 | - $attributes .= "'$key': '$val',"; |
|
2361 | - } |
|
2362 | - } |
|
2363 | - } |
|
2364 | - |
|
2365 | - return $attributes; |
|
2366 | - } |
|
2367 | - |
|
2368 | - /** |
|
2369 | - * A self looping function to create the output for JS block elements. |
|
2370 | - * |
|
2371 | - * This is what is output in the WP Editor visual view. |
|
2372 | - * |
|
2373 | - * @param $args |
|
2374 | - */ |
|
2375 | - public function block_element( $args ) { |
|
2376 | - |
|
2377 | - |
|
2378 | - if ( ! empty( $args ) ) { |
|
2379 | - foreach ( $args as $element => $new_args ) { |
|
2380 | - |
|
2381 | - if ( is_array( $new_args ) ) { // its an element |
|
2382 | - |
|
2383 | - |
|
2384 | - if ( isset( $new_args['element'] ) ) { |
|
2385 | - |
|
2386 | - if ( isset( $new_args['element_require'] ) ) { |
|
2387 | - echo str_replace( array( |
|
2388 | - "'+", |
|
2389 | - "+'" |
|
2390 | - ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " && "; |
|
2391 | - unset( $new_args['element_require'] ); |
|
2392 | - } |
|
2393 | - |
|
2394 | - echo "\n el( '" . $new_args['element'] . "', {"; |
|
2395 | - |
|
2396 | - // get the attributes |
|
2397 | - foreach ( $new_args as $new_key => $new_value ) { |
|
2398 | - |
|
2399 | - |
|
2400 | - if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) { |
|
2401 | - // do nothing |
|
2402 | - } else { |
|
2403 | - echo $this->block_element( array( $new_key => $new_value ) ); |
|
2404 | - } |
|
2405 | - } |
|
2406 | - |
|
2407 | - echo "},";// end attributes |
|
2408 | - |
|
2409 | - // get the content |
|
2410 | - $first_item = 0; |
|
2411 | - foreach ( $new_args as $new_key => $new_value ) { |
|
2412 | - if ( $new_key === 'content' || is_array( $new_value ) ) { |
|
2413 | - |
|
2414 | - if ( $new_key === 'content' ) { |
|
2415 | - echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'"; |
|
2416 | - } |
|
2417 | - |
|
2418 | - if ( is_array( $new_value ) ) { |
|
2419 | - |
|
2420 | - if ( isset( $new_value['element_require'] ) ) { |
|
2421 | - echo str_replace( array( |
|
2422 | - "'+", |
|
2423 | - "+'" |
|
2424 | - ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " && "; |
|
2425 | - unset( $new_value['element_require'] ); |
|
2426 | - } |
|
2427 | - |
|
2428 | - if ( isset( $new_value['element_repeat'] ) ) { |
|
2429 | - $x = 1; |
|
2430 | - while ( $x <= absint( $new_value['element_repeat'] ) ) { |
|
2431 | - $this->block_element( array( '' => $new_value ) ); |
|
2432 | - $x ++; |
|
2433 | - } |
|
2434 | - } else { |
|
2435 | - $this->block_element( array( '' => $new_value ) ); |
|
2436 | - } |
|
2437 | - } |
|
2438 | - $first_item ++; |
|
2439 | - } |
|
2440 | - } |
|
2441 | - |
|
2442 | - echo ")";// end content |
|
2443 | - |
|
2444 | - echo ", \n"; |
|
2445 | - |
|
2446 | - } |
|
2447 | - } else { |
|
2448 | - |
|
2449 | - if ( substr( $element, 0, 3 ) === "if_" ) { |
|
2450 | - echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ","; |
|
2451 | - } elseif ( $element == 'style' ) { |
|
2452 | - echo $element . ": " . $this->block_props_replace( $new_args ) . ","; |
|
2453 | - } else { |
|
2454 | - echo $element . ": '" . $this->block_props_replace( $new_args ) . "',"; |
|
2455 | - } |
|
2456 | - |
|
2457 | - } |
|
2458 | - } |
|
2459 | - } |
|
2460 | - } |
|
2461 | - |
|
2462 | - /** |
|
2463 | - * Replace block attributes placeholders with the proper naming. |
|
2464 | - * |
|
2465 | - * @param $string |
|
2466 | - * |
|
2467 | - * @return mixed |
|
2468 | - */ |
|
2469 | - public function block_props_replace( $string, $no_wrap = false ) { |
|
2470 | - |
|
2471 | - if ( $no_wrap ) { |
|
2472 | - $string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string ); |
|
2473 | - } else { |
|
2474 | - $string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string ); |
|
2475 | - } |
|
2476 | - |
|
2477 | - return $string; |
|
2478 | - } |
|
2479 | - |
|
2480 | - /** |
|
2481 | - * Outputs the content of the widget |
|
2482 | - * |
|
2483 | - * @param array $args |
|
2484 | - * @param array $instance |
|
2485 | - */ |
|
2486 | - public function widget( $args, $instance ) { |
|
2487 | - |
|
2488 | - // get the filtered values |
|
2489 | - $argument_values = $this->argument_values( $instance ); |
|
2490 | - $argument_values = $this->string_to_bool( $argument_values ); |
|
2491 | - $output = $this->output( $argument_values, $args ); |
|
2492 | - |
|
2493 | - $no_wrap = false; |
|
2494 | - if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) { |
|
2495 | - $no_wrap = true; |
|
2496 | - } |
|
2497 | - |
|
2498 | - ob_start(); |
|
2499 | - if ( $output && ! $no_wrap ) { |
|
2500 | - |
|
2501 | - $class_original = $this->options['widget_ops']['classname']; |
|
2502 | - $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash(); |
|
2503 | - |
|
2504 | - // Before widget |
|
2505 | - $before_widget = $args['before_widget']; |
|
2506 | - $before_widget = str_replace($class_original,$class,$before_widget); |
|
2507 | - $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this ); |
|
2508 | - $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this ); |
|
2509 | - |
|
2510 | - // After widget |
|
2511 | - $after_widget = $args['after_widget']; |
|
2512 | - $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this ); |
|
2513 | - $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this ); |
|
2514 | - |
|
2515 | - echo $before_widget; |
|
2516 | - // elementor strips the widget wrapping div so we check for and add it back if needed |
|
2517 | - if ( $this->is_elementor_widget_output() ) { |
|
2518 | - echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $class ) . "'>" : ''; |
|
2519 | - } |
|
2520 | - echo $this->output_title( $args, $instance ); |
|
2521 | - echo $output; |
|
2522 | - if ( $this->is_elementor_widget_output() ) { |
|
2523 | - echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : ''; |
|
2524 | - } |
|
2525 | - echo $after_widget; |
|
2526 | - } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty |
|
2527 | - $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" ); |
|
2528 | - echo $output; |
|
2529 | - } elseif ( $output && $no_wrap ) { |
|
2530 | - echo $output; |
|
2531 | - } |
|
2532 | - $output = ob_get_clean(); |
|
2533 | - |
|
2534 | - $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this ); |
|
2535 | - |
|
2536 | - echo $output; |
|
2537 | - } |
|
2538 | - |
|
2539 | - /** |
|
2540 | - * Tests if the current output is inside a elementor container. |
|
2541 | - * |
|
2542 | - * @since 1.0.4 |
|
2543 | - * @return bool |
|
2544 | - */ |
|
2545 | - public function is_elementor_widget_output() { |
|
2546 | - $result = false; |
|
2547 | - if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) { |
|
2548 | - $result = true; |
|
2549 | - } |
|
2550 | - |
|
2551 | - return $result; |
|
2552 | - } |
|
2553 | - |
|
2554 | - /** |
|
2555 | - * Tests if the current output is inside a elementor preview. |
|
2556 | - * |
|
2557 | - * @since 1.0.4 |
|
2558 | - * @return bool |
|
2559 | - */ |
|
2560 | - public function is_elementor_preview() { |
|
2561 | - $result = false; |
|
2562 | - if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) { |
|
2563 | - $result = true; |
|
2564 | - } |
|
2565 | - |
|
2566 | - return $result; |
|
2567 | - } |
|
2568 | - |
|
2569 | - /** |
|
2570 | - * Tests if the current output is inside a Divi preview. |
|
2571 | - * |
|
2572 | - * @since 1.0.6 |
|
2573 | - * @return bool |
|
2574 | - */ |
|
2575 | - public function is_divi_preview() { |
|
2576 | - $result = false; |
|
2577 | - if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) { |
|
2578 | - $result = true; |
|
2579 | - } |
|
2580 | - |
|
2581 | - return $result; |
|
2582 | - } |
|
2583 | - |
|
2584 | - /** |
|
2585 | - * Tests if the current output is inside a Beaver builder preview. |
|
2586 | - * |
|
2587 | - * @since 1.0.6 |
|
2588 | - * @return bool |
|
2589 | - */ |
|
2590 | - public function is_beaver_preview() { |
|
2591 | - $result = false; |
|
2592 | - if ( isset( $_REQUEST['fl_builder'] ) ) { |
|
2593 | - $result = true; |
|
2594 | - } |
|
2595 | - |
|
2596 | - return $result; |
|
2597 | - } |
|
2598 | - |
|
2599 | - /** |
|
2600 | - * Tests if the current output is inside a siteorigin builder preview. |
|
2601 | - * |
|
2602 | - * @since 1.0.6 |
|
2603 | - * @return bool |
|
2604 | - */ |
|
2605 | - public function is_siteorigin_preview() { |
|
2606 | - $result = false; |
|
2607 | - if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) { |
|
2608 | - $result = true; |
|
2609 | - } |
|
2610 | - |
|
2611 | - return $result; |
|
2612 | - } |
|
2613 | - |
|
2614 | - /** |
|
2615 | - * Tests if the current output is inside a cornerstone builder preview. |
|
2616 | - * |
|
2617 | - * @since 1.0.8 |
|
2618 | - * @return bool |
|
2619 | - */ |
|
2620 | - public function is_cornerstone_preview() { |
|
2621 | - $result = false; |
|
2622 | - if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) { |
|
2623 | - $result = true; |
|
2624 | - } |
|
2625 | - |
|
2626 | - return $result; |
|
2627 | - } |
|
2628 | - |
|
2629 | - /** |
|
2630 | - * Tests if the current output is inside a fusion builder preview. |
|
2631 | - * |
|
2632 | - * @since 1.1.0 |
|
2633 | - * @return bool |
|
2634 | - */ |
|
2635 | - public function is_fusion_preview() { |
|
2636 | - $result = false; |
|
2637 | - if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) { |
|
2638 | - $result = true; |
|
2639 | - } |
|
2640 | - |
|
2641 | - return $result; |
|
2642 | - } |
|
2643 | - |
|
2644 | - /** |
|
2645 | - * Tests if the current output is inside a Oxygen builder preview. |
|
2646 | - * |
|
2647 | - * @since 1.0.18 |
|
2648 | - * @return bool |
|
2649 | - */ |
|
2650 | - public function is_oxygen_preview() { |
|
2651 | - $result = false; |
|
2652 | - if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) { |
|
2653 | - $result = true; |
|
2654 | - } |
|
2655 | - |
|
2656 | - return $result; |
|
2657 | - } |
|
2658 | - |
|
2659 | - /** |
|
2660 | - * General function to check if we are in a preview situation. |
|
2661 | - * |
|
2662 | - * @since 1.0.6 |
|
2663 | - * @return bool |
|
2664 | - */ |
|
2665 | - public function is_preview() { |
|
2666 | - $preview = false; |
|
2667 | - if ( $this->is_divi_preview() ) { |
|
2668 | - $preview = true; |
|
2669 | - } elseif ( $this->is_elementor_preview() ) { |
|
2670 | - $preview = true; |
|
2671 | - } elseif ( $this->is_beaver_preview() ) { |
|
2672 | - $preview = true; |
|
2673 | - } elseif ( $this->is_siteorigin_preview() ) { |
|
2674 | - $preview = true; |
|
2675 | - } elseif ( $this->is_cornerstone_preview() ) { |
|
2676 | - $preview = true; |
|
2677 | - } elseif ( $this->is_fusion_preview() ) { |
|
2678 | - $preview = true; |
|
2679 | - } elseif ( $this->is_oxygen_preview() ) { |
|
2680 | - $preview = true; |
|
2681 | - } elseif( $this->is_block_content_call() ) { |
|
2682 | - $preview = true; |
|
2683 | - } |
|
2684 | - |
|
2685 | - return $preview; |
|
2686 | - } |
|
2687 | - |
|
2688 | - /** |
|
2689 | - * Output the super title. |
|
2690 | - * |
|
2691 | - * @param $args |
|
2692 | - * @param array $instance |
|
2693 | - * |
|
2694 | - * @return string |
|
2695 | - */ |
|
2696 | - public function output_title( $args, $instance = array() ) { |
|
2697 | - $output = ''; |
|
2698 | - if ( ! empty( $instance['title'] ) ) { |
|
2699 | - /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ |
|
2700 | - $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); |
|
2701 | - |
|
2702 | - if(empty($instance['widget_title_tag'])){ |
|
2703 | - $output = $args['before_title'] . $title . $args['after_title']; |
|
2704 | - }else{ |
|
2705 | - $title_tag = esc_attr( $instance['widget_title_tag'] ); |
|
2706 | - |
|
2707 | - // classes |
|
2708 | - $title_classes = array(); |
|
2709 | - $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : ''; |
|
2710 | - $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : ''; |
|
2711 | - $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : ''; |
|
2712 | - $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : ''; |
|
2713 | - $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : ''; |
|
2714 | - $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : ''; |
|
2715 | - $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : ''; |
|
2716 | - $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : ''; |
|
2717 | - $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : ''; |
|
2718 | - $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : ''; |
|
2719 | - $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : ''; |
|
2720 | - $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : ''; |
|
2721 | - $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : ''; |
|
2722 | - |
|
2723 | - $class = !empty( $title_classes ) ? implode(" ",$title_classes) : ''; |
|
2724 | - $output = "<$title_tag class='$class' >$title</$title_tag>"; |
|
2725 | - } |
|
2726 | - |
|
2727 | - } |
|
2728 | - |
|
2729 | - return $output; |
|
2730 | - } |
|
2731 | - |
|
2732 | - /** |
|
2733 | - * Outputs the options form inputs for the widget. |
|
2734 | - * |
|
2735 | - * @param array $instance The widget options. |
|
2736 | - */ |
|
2737 | - public function form( $instance ) { |
|
2738 | - |
|
2739 | - // set widget instance |
|
2740 | - $this->instance = $instance; |
|
2741 | - |
|
2742 | - // set it as a SD widget |
|
2743 | - echo $this->widget_advanced_toggle(); |
|
2744 | - |
|
2745 | - echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>"; |
|
2746 | - $arguments_raw = $this->get_arguments(); |
|
2747 | - |
|
2748 | - if ( is_array( $arguments_raw ) ) { |
|
2749 | - |
|
2750 | - $arguments = $this->group_arguments( $arguments_raw ); |
|
2751 | - |
|
2752 | - // Do we have sections? |
|
2753 | - $has_sections = $arguments == $arguments_raw ? false : true; |
|
2754 | - |
|
2755 | - |
|
2756 | - if ( $has_sections ) { |
|
2757 | - $panel_count = 0; |
|
2758 | - foreach ( $arguments as $key => $args ) { |
|
2759 | - |
|
2760 | - ?> |
|
2339 | + } |
|
2340 | + |
|
2341 | + /** |
|
2342 | + * Convert an array of attributes to block string. |
|
2343 | + * |
|
2344 | + * @todo there is prob a faster way to do this, also we could add some validation here. |
|
2345 | + * |
|
2346 | + * @param $custom_attributes |
|
2347 | + * |
|
2348 | + * @return string |
|
2349 | + */ |
|
2350 | + public function array_to_attributes( $custom_attributes, $html = false ) { |
|
2351 | + $attributes = ''; |
|
2352 | + if ( ! empty( $custom_attributes ) ) { |
|
2353 | + |
|
2354 | + if ( $html ) { |
|
2355 | + foreach ( $custom_attributes as $key => $val ) { |
|
2356 | + $attributes .= " $key='$val' "; |
|
2357 | + } |
|
2358 | + } else { |
|
2359 | + foreach ( $custom_attributes as $key => $val ) { |
|
2360 | + $attributes .= "'$key': '$val',"; |
|
2361 | + } |
|
2362 | + } |
|
2363 | + } |
|
2364 | + |
|
2365 | + return $attributes; |
|
2366 | + } |
|
2367 | + |
|
2368 | + /** |
|
2369 | + * A self looping function to create the output for JS block elements. |
|
2370 | + * |
|
2371 | + * This is what is output in the WP Editor visual view. |
|
2372 | + * |
|
2373 | + * @param $args |
|
2374 | + */ |
|
2375 | + public function block_element( $args ) { |
|
2376 | + |
|
2377 | + |
|
2378 | + if ( ! empty( $args ) ) { |
|
2379 | + foreach ( $args as $element => $new_args ) { |
|
2380 | + |
|
2381 | + if ( is_array( $new_args ) ) { // its an element |
|
2382 | + |
|
2383 | + |
|
2384 | + if ( isset( $new_args['element'] ) ) { |
|
2385 | + |
|
2386 | + if ( isset( $new_args['element_require'] ) ) { |
|
2387 | + echo str_replace( array( |
|
2388 | + "'+", |
|
2389 | + "+'" |
|
2390 | + ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " && "; |
|
2391 | + unset( $new_args['element_require'] ); |
|
2392 | + } |
|
2393 | + |
|
2394 | + echo "\n el( '" . $new_args['element'] . "', {"; |
|
2395 | + |
|
2396 | + // get the attributes |
|
2397 | + foreach ( $new_args as $new_key => $new_value ) { |
|
2398 | + |
|
2399 | + |
|
2400 | + if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) { |
|
2401 | + // do nothing |
|
2402 | + } else { |
|
2403 | + echo $this->block_element( array( $new_key => $new_value ) ); |
|
2404 | + } |
|
2405 | + } |
|
2406 | + |
|
2407 | + echo "},";// end attributes |
|
2408 | + |
|
2409 | + // get the content |
|
2410 | + $first_item = 0; |
|
2411 | + foreach ( $new_args as $new_key => $new_value ) { |
|
2412 | + if ( $new_key === 'content' || is_array( $new_value ) ) { |
|
2413 | + |
|
2414 | + if ( $new_key === 'content' ) { |
|
2415 | + echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'"; |
|
2416 | + } |
|
2417 | + |
|
2418 | + if ( is_array( $new_value ) ) { |
|
2419 | + |
|
2420 | + if ( isset( $new_value['element_require'] ) ) { |
|
2421 | + echo str_replace( array( |
|
2422 | + "'+", |
|
2423 | + "+'" |
|
2424 | + ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " && "; |
|
2425 | + unset( $new_value['element_require'] ); |
|
2426 | + } |
|
2427 | + |
|
2428 | + if ( isset( $new_value['element_repeat'] ) ) { |
|
2429 | + $x = 1; |
|
2430 | + while ( $x <= absint( $new_value['element_repeat'] ) ) { |
|
2431 | + $this->block_element( array( '' => $new_value ) ); |
|
2432 | + $x ++; |
|
2433 | + } |
|
2434 | + } else { |
|
2435 | + $this->block_element( array( '' => $new_value ) ); |
|
2436 | + } |
|
2437 | + } |
|
2438 | + $first_item ++; |
|
2439 | + } |
|
2440 | + } |
|
2441 | + |
|
2442 | + echo ")";// end content |
|
2443 | + |
|
2444 | + echo ", \n"; |
|
2445 | + |
|
2446 | + } |
|
2447 | + } else { |
|
2448 | + |
|
2449 | + if ( substr( $element, 0, 3 ) === "if_" ) { |
|
2450 | + echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ","; |
|
2451 | + } elseif ( $element == 'style' ) { |
|
2452 | + echo $element . ": " . $this->block_props_replace( $new_args ) . ","; |
|
2453 | + } else { |
|
2454 | + echo $element . ": '" . $this->block_props_replace( $new_args ) . "',"; |
|
2455 | + } |
|
2456 | + |
|
2457 | + } |
|
2458 | + } |
|
2459 | + } |
|
2460 | + } |
|
2461 | + |
|
2462 | + /** |
|
2463 | + * Replace block attributes placeholders with the proper naming. |
|
2464 | + * |
|
2465 | + * @param $string |
|
2466 | + * |
|
2467 | + * @return mixed |
|
2468 | + */ |
|
2469 | + public function block_props_replace( $string, $no_wrap = false ) { |
|
2470 | + |
|
2471 | + if ( $no_wrap ) { |
|
2472 | + $string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string ); |
|
2473 | + } else { |
|
2474 | + $string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string ); |
|
2475 | + } |
|
2476 | + |
|
2477 | + return $string; |
|
2478 | + } |
|
2479 | + |
|
2480 | + /** |
|
2481 | + * Outputs the content of the widget |
|
2482 | + * |
|
2483 | + * @param array $args |
|
2484 | + * @param array $instance |
|
2485 | + */ |
|
2486 | + public function widget( $args, $instance ) { |
|
2487 | + |
|
2488 | + // get the filtered values |
|
2489 | + $argument_values = $this->argument_values( $instance ); |
|
2490 | + $argument_values = $this->string_to_bool( $argument_values ); |
|
2491 | + $output = $this->output( $argument_values, $args ); |
|
2492 | + |
|
2493 | + $no_wrap = false; |
|
2494 | + if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) { |
|
2495 | + $no_wrap = true; |
|
2496 | + } |
|
2497 | + |
|
2498 | + ob_start(); |
|
2499 | + if ( $output && ! $no_wrap ) { |
|
2500 | + |
|
2501 | + $class_original = $this->options['widget_ops']['classname']; |
|
2502 | + $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash(); |
|
2503 | + |
|
2504 | + // Before widget |
|
2505 | + $before_widget = $args['before_widget']; |
|
2506 | + $before_widget = str_replace($class_original,$class,$before_widget); |
|
2507 | + $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this ); |
|
2508 | + $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this ); |
|
2509 | + |
|
2510 | + // After widget |
|
2511 | + $after_widget = $args['after_widget']; |
|
2512 | + $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this ); |
|
2513 | + $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this ); |
|
2514 | + |
|
2515 | + echo $before_widget; |
|
2516 | + // elementor strips the widget wrapping div so we check for and add it back if needed |
|
2517 | + if ( $this->is_elementor_widget_output() ) { |
|
2518 | + echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $class ) . "'>" : ''; |
|
2519 | + } |
|
2520 | + echo $this->output_title( $args, $instance ); |
|
2521 | + echo $output; |
|
2522 | + if ( $this->is_elementor_widget_output() ) { |
|
2523 | + echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : ''; |
|
2524 | + } |
|
2525 | + echo $after_widget; |
|
2526 | + } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty |
|
2527 | + $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" ); |
|
2528 | + echo $output; |
|
2529 | + } elseif ( $output && $no_wrap ) { |
|
2530 | + echo $output; |
|
2531 | + } |
|
2532 | + $output = ob_get_clean(); |
|
2533 | + |
|
2534 | + $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this ); |
|
2535 | + |
|
2536 | + echo $output; |
|
2537 | + } |
|
2538 | + |
|
2539 | + /** |
|
2540 | + * Tests if the current output is inside a elementor container. |
|
2541 | + * |
|
2542 | + * @since 1.0.4 |
|
2543 | + * @return bool |
|
2544 | + */ |
|
2545 | + public function is_elementor_widget_output() { |
|
2546 | + $result = false; |
|
2547 | + if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) { |
|
2548 | + $result = true; |
|
2549 | + } |
|
2550 | + |
|
2551 | + return $result; |
|
2552 | + } |
|
2553 | + |
|
2554 | + /** |
|
2555 | + * Tests if the current output is inside a elementor preview. |
|
2556 | + * |
|
2557 | + * @since 1.0.4 |
|
2558 | + * @return bool |
|
2559 | + */ |
|
2560 | + public function is_elementor_preview() { |
|
2561 | + $result = false; |
|
2562 | + if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) { |
|
2563 | + $result = true; |
|
2564 | + } |
|
2565 | + |
|
2566 | + return $result; |
|
2567 | + } |
|
2568 | + |
|
2569 | + /** |
|
2570 | + * Tests if the current output is inside a Divi preview. |
|
2571 | + * |
|
2572 | + * @since 1.0.6 |
|
2573 | + * @return bool |
|
2574 | + */ |
|
2575 | + public function is_divi_preview() { |
|
2576 | + $result = false; |
|
2577 | + if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) { |
|
2578 | + $result = true; |
|
2579 | + } |
|
2580 | + |
|
2581 | + return $result; |
|
2582 | + } |
|
2583 | + |
|
2584 | + /** |
|
2585 | + * Tests if the current output is inside a Beaver builder preview. |
|
2586 | + * |
|
2587 | + * @since 1.0.6 |
|
2588 | + * @return bool |
|
2589 | + */ |
|
2590 | + public function is_beaver_preview() { |
|
2591 | + $result = false; |
|
2592 | + if ( isset( $_REQUEST['fl_builder'] ) ) { |
|
2593 | + $result = true; |
|
2594 | + } |
|
2595 | + |
|
2596 | + return $result; |
|
2597 | + } |
|
2598 | + |
|
2599 | + /** |
|
2600 | + * Tests if the current output is inside a siteorigin builder preview. |
|
2601 | + * |
|
2602 | + * @since 1.0.6 |
|
2603 | + * @return bool |
|
2604 | + */ |
|
2605 | + public function is_siteorigin_preview() { |
|
2606 | + $result = false; |
|
2607 | + if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) { |
|
2608 | + $result = true; |
|
2609 | + } |
|
2610 | + |
|
2611 | + return $result; |
|
2612 | + } |
|
2613 | + |
|
2614 | + /** |
|
2615 | + * Tests if the current output is inside a cornerstone builder preview. |
|
2616 | + * |
|
2617 | + * @since 1.0.8 |
|
2618 | + * @return bool |
|
2619 | + */ |
|
2620 | + public function is_cornerstone_preview() { |
|
2621 | + $result = false; |
|
2622 | + if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) { |
|
2623 | + $result = true; |
|
2624 | + } |
|
2625 | + |
|
2626 | + return $result; |
|
2627 | + } |
|
2628 | + |
|
2629 | + /** |
|
2630 | + * Tests if the current output is inside a fusion builder preview. |
|
2631 | + * |
|
2632 | + * @since 1.1.0 |
|
2633 | + * @return bool |
|
2634 | + */ |
|
2635 | + public function is_fusion_preview() { |
|
2636 | + $result = false; |
|
2637 | + if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) { |
|
2638 | + $result = true; |
|
2639 | + } |
|
2640 | + |
|
2641 | + return $result; |
|
2642 | + } |
|
2643 | + |
|
2644 | + /** |
|
2645 | + * Tests if the current output is inside a Oxygen builder preview. |
|
2646 | + * |
|
2647 | + * @since 1.0.18 |
|
2648 | + * @return bool |
|
2649 | + */ |
|
2650 | + public function is_oxygen_preview() { |
|
2651 | + $result = false; |
|
2652 | + if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) { |
|
2653 | + $result = true; |
|
2654 | + } |
|
2655 | + |
|
2656 | + return $result; |
|
2657 | + } |
|
2658 | + |
|
2659 | + /** |
|
2660 | + * General function to check if we are in a preview situation. |
|
2661 | + * |
|
2662 | + * @since 1.0.6 |
|
2663 | + * @return bool |
|
2664 | + */ |
|
2665 | + public function is_preview() { |
|
2666 | + $preview = false; |
|
2667 | + if ( $this->is_divi_preview() ) { |
|
2668 | + $preview = true; |
|
2669 | + } elseif ( $this->is_elementor_preview() ) { |
|
2670 | + $preview = true; |
|
2671 | + } elseif ( $this->is_beaver_preview() ) { |
|
2672 | + $preview = true; |
|
2673 | + } elseif ( $this->is_siteorigin_preview() ) { |
|
2674 | + $preview = true; |
|
2675 | + } elseif ( $this->is_cornerstone_preview() ) { |
|
2676 | + $preview = true; |
|
2677 | + } elseif ( $this->is_fusion_preview() ) { |
|
2678 | + $preview = true; |
|
2679 | + } elseif ( $this->is_oxygen_preview() ) { |
|
2680 | + $preview = true; |
|
2681 | + } elseif( $this->is_block_content_call() ) { |
|
2682 | + $preview = true; |
|
2683 | + } |
|
2684 | + |
|
2685 | + return $preview; |
|
2686 | + } |
|
2687 | + |
|
2688 | + /** |
|
2689 | + * Output the super title. |
|
2690 | + * |
|
2691 | + * @param $args |
|
2692 | + * @param array $instance |
|
2693 | + * |
|
2694 | + * @return string |
|
2695 | + */ |
|
2696 | + public function output_title( $args, $instance = array() ) { |
|
2697 | + $output = ''; |
|
2698 | + if ( ! empty( $instance['title'] ) ) { |
|
2699 | + /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ |
|
2700 | + $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); |
|
2701 | + |
|
2702 | + if(empty($instance['widget_title_tag'])){ |
|
2703 | + $output = $args['before_title'] . $title . $args['after_title']; |
|
2704 | + }else{ |
|
2705 | + $title_tag = esc_attr( $instance['widget_title_tag'] ); |
|
2706 | + |
|
2707 | + // classes |
|
2708 | + $title_classes = array(); |
|
2709 | + $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : ''; |
|
2710 | + $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : ''; |
|
2711 | + $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : ''; |
|
2712 | + $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : ''; |
|
2713 | + $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : ''; |
|
2714 | + $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : ''; |
|
2715 | + $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : ''; |
|
2716 | + $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : ''; |
|
2717 | + $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : ''; |
|
2718 | + $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : ''; |
|
2719 | + $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : ''; |
|
2720 | + $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : ''; |
|
2721 | + $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : ''; |
|
2722 | + |
|
2723 | + $class = !empty( $title_classes ) ? implode(" ",$title_classes) : ''; |
|
2724 | + $output = "<$title_tag class='$class' >$title</$title_tag>"; |
|
2725 | + } |
|
2726 | + |
|
2727 | + } |
|
2728 | + |
|
2729 | + return $output; |
|
2730 | + } |
|
2731 | + |
|
2732 | + /** |
|
2733 | + * Outputs the options form inputs for the widget. |
|
2734 | + * |
|
2735 | + * @param array $instance The widget options. |
|
2736 | + */ |
|
2737 | + public function form( $instance ) { |
|
2738 | + |
|
2739 | + // set widget instance |
|
2740 | + $this->instance = $instance; |
|
2741 | + |
|
2742 | + // set it as a SD widget |
|
2743 | + echo $this->widget_advanced_toggle(); |
|
2744 | + |
|
2745 | + echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>"; |
|
2746 | + $arguments_raw = $this->get_arguments(); |
|
2747 | + |
|
2748 | + if ( is_array( $arguments_raw ) ) { |
|
2749 | + |
|
2750 | + $arguments = $this->group_arguments( $arguments_raw ); |
|
2751 | + |
|
2752 | + // Do we have sections? |
|
2753 | + $has_sections = $arguments == $arguments_raw ? false : true; |
|
2754 | + |
|
2755 | + |
|
2756 | + if ( $has_sections ) { |
|
2757 | + $panel_count = 0; |
|
2758 | + foreach ( $arguments as $key => $args ) { |
|
2759 | + |
|
2760 | + ?> |
|
2761 | 2761 | <script> |
2762 | 2762 | // jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle(); |
2763 | 2763 | </script> |
2764 | 2764 | <?php |
2765 | 2765 | |
2766 | - $hide = $panel_count ? ' style="display:none;" ' : ''; |
|
2767 | - $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down'; |
|
2768 | - echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>"; |
|
2769 | - echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>"; |
|
2766 | + $hide = $panel_count ? ' style="display:none;" ' : ''; |
|
2767 | + $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down'; |
|
2768 | + echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>"; |
|
2769 | + echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>"; |
|
2770 | 2770 | |
2771 | - foreach ( $args as $k => $a ) { |
|
2771 | + foreach ( $args as $k => $a ) { |
|
2772 | 2772 | |
2773 | - $this->widget_inputs_row_start($k, $a); |
|
2774 | - $this->widget_inputs( $a, $instance ); |
|
2775 | - $this->widget_inputs_row_end($k, $a); |
|
2773 | + $this->widget_inputs_row_start($k, $a); |
|
2774 | + $this->widget_inputs( $a, $instance ); |
|
2775 | + $this->widget_inputs_row_end($k, $a); |
|
2776 | 2776 | |
2777 | - } |
|
2777 | + } |
|
2778 | 2778 | |
2779 | - echo "</div>"; |
|
2779 | + echo "</div>"; |
|
2780 | 2780 | |
2781 | - $panel_count ++; |
|
2781 | + $panel_count ++; |
|
2782 | 2782 | |
2783 | - } |
|
2784 | - } else { |
|
2785 | - foreach ( $arguments as $key => $args ) { |
|
2786 | - $this->widget_inputs_row_start($key, $args); |
|
2787 | - $this->widget_inputs( $args, $instance ); |
|
2788 | - $this->widget_inputs_row_end($key, $args); |
|
2789 | - } |
|
2790 | - } |
|
2783 | + } |
|
2784 | + } else { |
|
2785 | + foreach ( $arguments as $key => $args ) { |
|
2786 | + $this->widget_inputs_row_start($key, $args); |
|
2787 | + $this->widget_inputs( $args, $instance ); |
|
2788 | + $this->widget_inputs_row_end($key, $args); |
|
2789 | + } |
|
2790 | + } |
|
2791 | 2791 | |
2792 | - } |
|
2793 | - } |
|
2792 | + } |
|
2793 | + } |
|
2794 | 2794 | |
2795 | - public function widget_inputs_row_start($key, $args){ |
|
2796 | - if(!empty($args['row'])){ |
|
2797 | - // maybe open |
|
2798 | - if(!empty($args['row']['open'])){ |
|
2799 | - ?> |
|
2795 | + public function widget_inputs_row_start($key, $args){ |
|
2796 | + if(!empty($args['row'])){ |
|
2797 | + // maybe open |
|
2798 | + if(!empty($args['row']['open'])){ |
|
2799 | + ?> |
|
2800 | 2800 | <div class='bsui sd-argument ' data-argument='<?php echo esc_attr( $args['row']['key'] ); ?>' data-element_require='<?php if ( !empty($args['row']['element_require'])) { |
2801 | - echo $this->convert_element_require( $args['row']['element_require'] ); |
|
2802 | - } ?>'> |
|
2801 | + echo $this->convert_element_require( $args['row']['element_require'] ); |
|
2802 | + } ?>'> |
|
2803 | 2803 | <?php if(!empty($args['row']['title'])){ ?> |
2804 | 2804 | <label class="mb-0 "><?php echo esc_attr( $args['row']['title'] ); ?><?php echo $this->widget_field_desc( $args['row'] ); ?></label> |
2805 | 2805 | <?php }?> |
2806 | 2806 | <div class='row <?php if(!empty($args['row']['class'])){ echo esc_attr($args['row']['class']);} ?>'> |
2807 | 2807 | <div class='col pr-2'> |
2808 | 2808 | <?php |
2809 | - }elseif(!empty($args['row']['close'])){ |
|
2810 | - echo "<div class='col pl-0'>"; |
|
2811 | - }else{ |
|
2812 | - echo "<div class='col pl-0 pr-2'>"; |
|
2813 | - } |
|
2814 | - } |
|
2815 | - } |
|
2816 | - |
|
2817 | - public function widget_inputs_row_end($key, $args){ |
|
2818 | - |
|
2819 | - if(!empty($args['row'])){ |
|
2820 | - // maybe close |
|
2821 | - if(!empty($args['row']['close'])){ |
|
2822 | - echo "</div></div>"; |
|
2823 | - } |
|
2824 | - |
|
2825 | - echo "</div>"; |
|
2826 | - } |
|
2827 | - } |
|
2828 | - |
|
2829 | - /** |
|
2830 | - * Get the hidden input that when added makes the advanced button show on widget settings. |
|
2831 | - * |
|
2832 | - * @return string |
|
2833 | - */ |
|
2834 | - public function widget_advanced_toggle() { |
|
2835 | - |
|
2836 | - $output = ''; |
|
2837 | - if ( $this->block_show_advanced() ) { |
|
2838 | - $val = 1; |
|
2839 | - } else { |
|
2840 | - $val = 0; |
|
2841 | - } |
|
2842 | - |
|
2843 | - $output .= "<input type='hidden' class='sd-show-advanced' value='$val' />"; |
|
2844 | - |
|
2845 | - return $output; |
|
2846 | - } |
|
2847 | - |
|
2848 | - /** |
|
2849 | - * Convert require element. |
|
2850 | - * |
|
2851 | - * @since 1.0.0 |
|
2852 | - * |
|
2853 | - * @param string $input Input element. |
|
2854 | - * |
|
2855 | - * @return string $output |
|
2856 | - */ |
|
2857 | - public function convert_element_require( $input ) { |
|
2858 | - |
|
2859 | - $input = str_replace( "'", '"', $input );// we only want double quotes |
|
2860 | - |
|
2861 | - $output = esc_attr( str_replace( array( "[%", "%]" ), array( |
|
2862 | - "jQuery(form).find('[data-argument=\"", |
|
2863 | - "\"]').find('input,select,textarea').val()" |
|
2864 | - ), $input ) ); |
|
2865 | - |
|
2866 | - return $output; |
|
2867 | - } |
|
2868 | - |
|
2869 | - /** |
|
2870 | - * Builds the inputs for the widget options. |
|
2871 | - * |
|
2872 | - * @param $args |
|
2873 | - * @param $instance |
|
2874 | - */ |
|
2875 | - public function widget_inputs( $args, $instance ) { |
|
2876 | - |
|
2877 | - $class = ""; |
|
2878 | - $element_require = ""; |
|
2879 | - $custom_attributes = ""; |
|
2880 | - |
|
2881 | - // get value |
|
2882 | - if ( isset( $instance[ $args['name'] ] ) ) { |
|
2883 | - $value = $instance[ $args['name'] ]; |
|
2884 | - } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) { |
|
2885 | - $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] ); |
|
2886 | - } else { |
|
2887 | - $value = ''; |
|
2888 | - } |
|
2889 | - |
|
2890 | - // get placeholder |
|
2891 | - if ( ! empty( $args['placeholder'] ) ) { |
|
2892 | - $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'"; |
|
2893 | - } else { |
|
2894 | - $placeholder = ''; |
|
2895 | - } |
|
2896 | - |
|
2897 | - // get if advanced |
|
2898 | - if ( isset( $args['advanced'] ) && $args['advanced'] ) { |
|
2899 | - $class .= " sd-advanced-setting "; |
|
2900 | - } |
|
2901 | - |
|
2902 | - // element_require |
|
2903 | - if ( isset( $args['element_require'] ) && $args['element_require'] ) { |
|
2904 | - $element_require = $args['element_require']; |
|
2905 | - } |
|
2906 | - |
|
2907 | - // custom_attributes |
|
2908 | - if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) { |
|
2909 | - $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true ); |
|
2910 | - } |
|
2911 | - |
|
2912 | - |
|
2913 | - // before wrapper |
|
2914 | - ?> |
|
2809 | + }elseif(!empty($args['row']['close'])){ |
|
2810 | + echo "<div class='col pl-0'>"; |
|
2811 | + }else{ |
|
2812 | + echo "<div class='col pl-0 pr-2'>"; |
|
2813 | + } |
|
2814 | + } |
|
2815 | + } |
|
2816 | + |
|
2817 | + public function widget_inputs_row_end($key, $args){ |
|
2818 | + |
|
2819 | + if(!empty($args['row'])){ |
|
2820 | + // maybe close |
|
2821 | + if(!empty($args['row']['close'])){ |
|
2822 | + echo "</div></div>"; |
|
2823 | + } |
|
2824 | + |
|
2825 | + echo "</div>"; |
|
2826 | + } |
|
2827 | + } |
|
2828 | + |
|
2829 | + /** |
|
2830 | + * Get the hidden input that when added makes the advanced button show on widget settings. |
|
2831 | + * |
|
2832 | + * @return string |
|
2833 | + */ |
|
2834 | + public function widget_advanced_toggle() { |
|
2835 | + |
|
2836 | + $output = ''; |
|
2837 | + if ( $this->block_show_advanced() ) { |
|
2838 | + $val = 1; |
|
2839 | + } else { |
|
2840 | + $val = 0; |
|
2841 | + } |
|
2842 | + |
|
2843 | + $output .= "<input type='hidden' class='sd-show-advanced' value='$val' />"; |
|
2844 | + |
|
2845 | + return $output; |
|
2846 | + } |
|
2847 | + |
|
2848 | + /** |
|
2849 | + * Convert require element. |
|
2850 | + * |
|
2851 | + * @since 1.0.0 |
|
2852 | + * |
|
2853 | + * @param string $input Input element. |
|
2854 | + * |
|
2855 | + * @return string $output |
|
2856 | + */ |
|
2857 | + public function convert_element_require( $input ) { |
|
2858 | + |
|
2859 | + $input = str_replace( "'", '"', $input );// we only want double quotes |
|
2860 | + |
|
2861 | + $output = esc_attr( str_replace( array( "[%", "%]" ), array( |
|
2862 | + "jQuery(form).find('[data-argument=\"", |
|
2863 | + "\"]').find('input,select,textarea').val()" |
|
2864 | + ), $input ) ); |
|
2865 | + |
|
2866 | + return $output; |
|
2867 | + } |
|
2868 | + |
|
2869 | + /** |
|
2870 | + * Builds the inputs for the widget options. |
|
2871 | + * |
|
2872 | + * @param $args |
|
2873 | + * @param $instance |
|
2874 | + */ |
|
2875 | + public function widget_inputs( $args, $instance ) { |
|
2876 | + |
|
2877 | + $class = ""; |
|
2878 | + $element_require = ""; |
|
2879 | + $custom_attributes = ""; |
|
2880 | + |
|
2881 | + // get value |
|
2882 | + if ( isset( $instance[ $args['name'] ] ) ) { |
|
2883 | + $value = $instance[ $args['name'] ]; |
|
2884 | + } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) { |
|
2885 | + $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] ); |
|
2886 | + } else { |
|
2887 | + $value = ''; |
|
2888 | + } |
|
2889 | + |
|
2890 | + // get placeholder |
|
2891 | + if ( ! empty( $args['placeholder'] ) ) { |
|
2892 | + $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'"; |
|
2893 | + } else { |
|
2894 | + $placeholder = ''; |
|
2895 | + } |
|
2896 | + |
|
2897 | + // get if advanced |
|
2898 | + if ( isset( $args['advanced'] ) && $args['advanced'] ) { |
|
2899 | + $class .= " sd-advanced-setting "; |
|
2900 | + } |
|
2901 | + |
|
2902 | + // element_require |
|
2903 | + if ( isset( $args['element_require'] ) && $args['element_require'] ) { |
|
2904 | + $element_require = $args['element_require']; |
|
2905 | + } |
|
2906 | + |
|
2907 | + // custom_attributes |
|
2908 | + if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) { |
|
2909 | + $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true ); |
|
2910 | + } |
|
2911 | + |
|
2912 | + |
|
2913 | + // before wrapper |
|
2914 | + ?> |
|
2915 | 2915 | <p class="sd-argument <?php echo esc_attr( $class ); ?>" |
2916 | 2916 | data-argument='<?php echo esc_attr( $args['name'] ); ?>' |
2917 | 2917 | data-element_require='<?php if ( $element_require ) { |
2918 | - echo $this->convert_element_require( $element_require ); |
|
2919 | - } ?>' |
|
2918 | + echo $this->convert_element_require( $element_require ); |
|
2919 | + } ?>' |
|
2920 | 2920 | > |
2921 | 2921 | <?php |
2922 | 2922 | |
2923 | 2923 | |
2924 | - switch ( $args['type'] ) { |
|
2925 | - //array('text','password','number','email','tel','url','color') |
|
2926 | - case "text": |
|
2927 | - case "password": |
|
2928 | - case "number": |
|
2929 | - case "email": |
|
2930 | - case "tel": |
|
2931 | - case "url": |
|
2932 | - case "color": |
|
2933 | - ?> |
|
2924 | + switch ( $args['type'] ) { |
|
2925 | + //array('text','password','number','email','tel','url','color') |
|
2926 | + case "text": |
|
2927 | + case "password": |
|
2928 | + case "number": |
|
2929 | + case "email": |
|
2930 | + case "tel": |
|
2931 | + case "url": |
|
2932 | + case "color": |
|
2933 | + ?> |
|
2934 | 2934 | <label |
2935 | 2935 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label> |
2936 | 2936 | <input <?php echo $placeholder; ?> class="widefat" |
@@ -2941,47 +2941,47 @@ discard block |
||
2941 | 2941 | value="<?php echo esc_attr( $value ); ?>"> |
2942 | 2942 | <?php |
2943 | 2943 | |
2944 | - break; |
|
2945 | - case "select": |
|
2946 | - $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false; |
|
2947 | - if ( $multiple ) { |
|
2948 | - if ( empty( $value ) ) { |
|
2949 | - $value = array(); |
|
2950 | - } |
|
2951 | - } |
|
2952 | - ?> |
|
2944 | + break; |
|
2945 | + case "select": |
|
2946 | + $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false; |
|
2947 | + if ( $multiple ) { |
|
2948 | + if ( empty( $value ) ) { |
|
2949 | + $value = array(); |
|
2950 | + } |
|
2951 | + } |
|
2952 | + ?> |
|
2953 | 2953 | <label |
2954 | 2954 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label> |
2955 | 2955 | <select <?php echo $placeholder; ?> class="widefat" |
2956 | 2956 | <?php echo $custom_attributes; ?> |
2957 | 2957 | id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" |
2958 | 2958 | name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); |
2959 | - if ( $multiple ) { |
|
2960 | - echo "[]"; |
|
2961 | - } ?>" |
|
2959 | + if ( $multiple ) { |
|
2960 | + echo "[]"; |
|
2961 | + } ?>" |
|
2962 | 2962 | <?php if ( $multiple ) { |
2963 | - echo "multiple"; |
|
2964 | - } //@todo not implemented yet due to gutenberg not supporting it |
|
2965 | - ?> |
|
2963 | + echo "multiple"; |
|
2964 | + } //@todo not implemented yet due to gutenberg not supporting it |
|
2965 | + ?> |
|
2966 | 2966 | > |
2967 | 2967 | <?php |
2968 | 2968 | |
2969 | - if ( ! empty( $args['options'] ) ) { |
|
2970 | - foreach ( $args['options'] as $val => $label ) { |
|
2971 | - if ( $multiple ) { |
|
2972 | - $selected = in_array( $val, $value ) ? 'selected="selected"' : ''; |
|
2973 | - } else { |
|
2974 | - $selected = selected( $value, $val, false ); |
|
2975 | - } |
|
2976 | - echo "<option value='$val' " . $selected . ">$label</option>"; |
|
2977 | - } |
|
2978 | - } |
|
2979 | - ?> |
|
2969 | + if ( ! empty( $args['options'] ) ) { |
|
2970 | + foreach ( $args['options'] as $val => $label ) { |
|
2971 | + if ( $multiple ) { |
|
2972 | + $selected = in_array( $val, $value ) ? 'selected="selected"' : ''; |
|
2973 | + } else { |
|
2974 | + $selected = selected( $value, $val, false ); |
|
2975 | + } |
|
2976 | + echo "<option value='$val' " . $selected . ">$label</option>"; |
|
2977 | + } |
|
2978 | + } |
|
2979 | + ?> |
|
2980 | 2980 | </select> |
2981 | 2981 | <?php |
2982 | - break; |
|
2983 | - case "checkbox": |
|
2984 | - ?> |
|
2982 | + break; |
|
2983 | + case "checkbox": |
|
2984 | + ?> |
|
2985 | 2985 | <input <?php echo $placeholder; ?> |
2986 | 2986 | <?php checked( 1, $value, true ) ?> |
2987 | 2987 | <?php echo $custom_attributes; ?> |
@@ -2991,9 +2991,9 @@ discard block |
||
2991 | 2991 | <label |
2992 | 2992 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label> |
2993 | 2993 | <?php |
2994 | - break; |
|
2995 | - case "textarea": |
|
2996 | - ?> |
|
2994 | + break; |
|
2995 | + case "textarea": |
|
2996 | + ?> |
|
2997 | 2997 | <label |
2998 | 2998 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label> |
2999 | 2999 | <textarea <?php echo $placeholder; ?> class="widefat" |
@@ -3003,207 +3003,207 @@ discard block |
||
3003 | 3003 | ><?php echo esc_attr( $value ); ?></textarea> |
3004 | 3004 | <?php |
3005 | 3005 | |
3006 | - break; |
|
3007 | - case "hidden": |
|
3008 | - ?> |
|
3006 | + break; |
|
3007 | + case "hidden": |
|
3008 | + ?> |
|
3009 | 3009 | <input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" |
3010 | 3010 | name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden" |
3011 | 3011 | value="<?php echo esc_attr( $value ); ?>"> |
3012 | 3012 | <?php |
3013 | - break; |
|
3014 | - default: |
|
3015 | - echo "No input type found!"; // @todo we need to add more input types. |
|
3016 | - } |
|
3013 | + break; |
|
3014 | + default: |
|
3015 | + echo "No input type found!"; // @todo we need to add more input types. |
|
3016 | + } |
|
3017 | 3017 | |
3018 | - // after wrapper |
|
3019 | - ?> |
|
3018 | + // after wrapper |
|
3019 | + ?> |
|
3020 | 3020 | </p> |
3021 | 3021 | <?php |
3022 | 3022 | |
3023 | 3023 | |
3024 | - } |
|
3025 | - |
|
3026 | - public function get_widget_icon($icon = 'box-top', $title = ''){ |
|
3027 | - if($icon=='box-top'){ |
|
3028 | - return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>'; |
|
3029 | - }elseif($icon=='box-right'){ |
|
3030 | - return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>'; |
|
3031 | - }elseif($icon=='box-bottom'){ |
|
3032 | - return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>'; |
|
3033 | - }elseif($icon=='box-left'){ |
|
3034 | - return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>'; |
|
3035 | - } |
|
3036 | - } |
|
3037 | - |
|
3038 | - /** |
|
3039 | - * Get the widget input description html. |
|
3040 | - * |
|
3041 | - * @param $args |
|
3042 | - * |
|
3043 | - * @return string |
|
3044 | - * @todo, need to make its own tooltip script |
|
3045 | - */ |
|
3046 | - public function widget_field_desc( $args ) { |
|
3047 | - |
|
3048 | - $description = ''; |
|
3049 | - if ( isset( $args['desc'] ) && $args['desc'] ) { |
|
3050 | - if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) { |
|
3051 | - $description = $this->desc_tip( $args['desc'] ); |
|
3052 | - } else { |
|
3053 | - $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>'; |
|
3054 | - } |
|
3055 | - } |
|
3056 | - |
|
3057 | - return $description; |
|
3058 | - } |
|
3059 | - |
|
3060 | - /** |
|
3061 | - * Get the widget input title html. |
|
3062 | - * |
|
3063 | - * @param $args |
|
3064 | - * |
|
3065 | - * @return string |
|
3066 | - */ |
|
3067 | - public function widget_field_title( $args ) { |
|
3068 | - |
|
3069 | - $title = ''; |
|
3070 | - if ( isset( $args['title'] ) && $args['title'] ) { |
|
3071 | - if ( isset( $args['icon'] ) && $args['icon'] ) { |
|
3072 | - $title = self::get_widget_icon( $args['icon'], $args['title'] ); |
|
3073 | - } else { |
|
3074 | - $title = esc_attr($args['title']); |
|
3075 | - } |
|
3076 | - } |
|
3077 | - |
|
3078 | - return $title; |
|
3079 | - } |
|
3080 | - |
|
3081 | - /** |
|
3082 | - * Get the tool tip html. |
|
3083 | - * |
|
3084 | - * @param $tip |
|
3085 | - * @param bool $allow_html |
|
3086 | - * |
|
3087 | - * @return string |
|
3088 | - */ |
|
3089 | - function desc_tip( $tip, $allow_html = false ) { |
|
3090 | - if ( $allow_html ) { |
|
3091 | - $tip = $this->sanitize_tooltip( $tip ); |
|
3092 | - } else { |
|
3093 | - $tip = esc_attr( $tip ); |
|
3094 | - } |
|
3095 | - |
|
3096 | - return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>'; |
|
3097 | - } |
|
3098 | - |
|
3099 | - /** |
|
3100 | - * Sanitize a string destined to be a tooltip. |
|
3101 | - * |
|
3102 | - * @param string $var |
|
3103 | - * |
|
3104 | - * @return string |
|
3105 | - */ |
|
3106 | - public function sanitize_tooltip( $var ) { |
|
3107 | - return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( |
|
3108 | - 'br' => array(), |
|
3109 | - 'em' => array(), |
|
3110 | - 'strong' => array(), |
|
3111 | - 'small' => array(), |
|
3112 | - 'span' => array(), |
|
3113 | - 'ul' => array(), |
|
3114 | - 'li' => array(), |
|
3115 | - 'ol' => array(), |
|
3116 | - 'p' => array(), |
|
3117 | - ) ) ); |
|
3118 | - } |
|
3119 | - |
|
3120 | - /** |
|
3121 | - * Processing widget options on save |
|
3122 | - * |
|
3123 | - * @param array $new_instance The new options |
|
3124 | - * @param array $old_instance The previous options |
|
3125 | - * |
|
3126 | - * @return array |
|
3127 | - * @todo we should add some sanitation here. |
|
3128 | - */ |
|
3129 | - public function update( $new_instance, $old_instance ) { |
|
3130 | - |
|
3131 | - //save the widget |
|
3132 | - $instance = array_merge( (array) $old_instance, (array) $new_instance ); |
|
3133 | - |
|
3134 | - // set widget instance |
|
3135 | - $this->instance = $instance; |
|
3136 | - |
|
3137 | - if ( empty( $this->arguments ) ) { |
|
3138 | - $this->get_arguments(); |
|
3139 | - } |
|
3140 | - |
|
3141 | - // check for checkboxes |
|
3142 | - if ( ! empty( $this->arguments ) ) { |
|
3143 | - foreach ( $this->arguments as $argument ) { |
|
3144 | - if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) { |
|
3145 | - $instance[ $argument['name'] ] = '0'; |
|
3146 | - } |
|
3147 | - } |
|
3148 | - } |
|
3149 | - |
|
3150 | - return $instance; |
|
3151 | - } |
|
3152 | - |
|
3153 | - /** |
|
3154 | - * Checks if the current call is a ajax call to get the block content. |
|
3155 | - * |
|
3156 | - * This can be used in your widget to return different content as the block content. |
|
3157 | - * |
|
3158 | - * @since 1.0.3 |
|
3159 | - * @return bool |
|
3160 | - */ |
|
3161 | - public function is_block_content_call() { |
|
3162 | - $result = false; |
|
3163 | - if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) { |
|
3164 | - $result = true; |
|
3165 | - } |
|
3166 | - |
|
3167 | - return $result; |
|
3168 | - } |
|
3169 | - |
|
3170 | - /** |
|
3171 | - * Get an instance hash that will be unique to the type and settings. |
|
3172 | - * |
|
3173 | - * @since 1.0.20 |
|
3174 | - * @return string |
|
3175 | - */ |
|
3176 | - public function get_instance_hash(){ |
|
3177 | - $instance_string = $this->base_id.serialize($this->instance); |
|
3178 | - return hash('crc32b',$instance_string); |
|
3179 | - } |
|
3180 | - |
|
3181 | - /** |
|
3182 | - * Generate and return inline styles from CSS rules that will match the unique class of the instance. |
|
3183 | - * |
|
3184 | - * @param array $rules |
|
3185 | - * |
|
3186 | - * @since 1.0.20 |
|
3187 | - * @return string |
|
3188 | - */ |
|
3189 | - public function get_instance_style($rules = array()){ |
|
3190 | - $css = ''; |
|
3191 | - |
|
3192 | - if(!empty($rules)){ |
|
3193 | - $rules = array_unique($rules); |
|
3194 | - $instance_hash = $this->get_instance_hash(); |
|
3195 | - $css .= "<style>"; |
|
3196 | - foreach($rules as $rule){ |
|
3197 | - $css .= ".sdel-$instance_hash $rule"; |
|
3198 | - } |
|
3199 | - $css .= "</style>"; |
|
3200 | - } |
|
3201 | - |
|
3202 | - |
|
3203 | - return $css; |
|
3204 | - |
|
3205 | - } |
|
3206 | - |
|
3207 | - } |
|
3024 | + } |
|
3025 | + |
|
3026 | + public function get_widget_icon($icon = 'box-top', $title = ''){ |
|
3027 | + if($icon=='box-top'){ |
|
3028 | + return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>'; |
|
3029 | + }elseif($icon=='box-right'){ |
|
3030 | + return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>'; |
|
3031 | + }elseif($icon=='box-bottom'){ |
|
3032 | + return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>'; |
|
3033 | + }elseif($icon=='box-left'){ |
|
3034 | + return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>'; |
|
3035 | + } |
|
3036 | + } |
|
3037 | + |
|
3038 | + /** |
|
3039 | + * Get the widget input description html. |
|
3040 | + * |
|
3041 | + * @param $args |
|
3042 | + * |
|
3043 | + * @return string |
|
3044 | + * @todo, need to make its own tooltip script |
|
3045 | + */ |
|
3046 | + public function widget_field_desc( $args ) { |
|
3047 | + |
|
3048 | + $description = ''; |
|
3049 | + if ( isset( $args['desc'] ) && $args['desc'] ) { |
|
3050 | + if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) { |
|
3051 | + $description = $this->desc_tip( $args['desc'] ); |
|
3052 | + } else { |
|
3053 | + $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>'; |
|
3054 | + } |
|
3055 | + } |
|
3056 | + |
|
3057 | + return $description; |
|
3058 | + } |
|
3059 | + |
|
3060 | + /** |
|
3061 | + * Get the widget input title html. |
|
3062 | + * |
|
3063 | + * @param $args |
|
3064 | + * |
|
3065 | + * @return string |
|
3066 | + */ |
|
3067 | + public function widget_field_title( $args ) { |
|
3068 | + |
|
3069 | + $title = ''; |
|
3070 | + if ( isset( $args['title'] ) && $args['title'] ) { |
|
3071 | + if ( isset( $args['icon'] ) && $args['icon'] ) { |
|
3072 | + $title = self::get_widget_icon( $args['icon'], $args['title'] ); |
|
3073 | + } else { |
|
3074 | + $title = esc_attr($args['title']); |
|
3075 | + } |
|
3076 | + } |
|
3077 | + |
|
3078 | + return $title; |
|
3079 | + } |
|
3080 | + |
|
3081 | + /** |
|
3082 | + * Get the tool tip html. |
|
3083 | + * |
|
3084 | + * @param $tip |
|
3085 | + * @param bool $allow_html |
|
3086 | + * |
|
3087 | + * @return string |
|
3088 | + */ |
|
3089 | + function desc_tip( $tip, $allow_html = false ) { |
|
3090 | + if ( $allow_html ) { |
|
3091 | + $tip = $this->sanitize_tooltip( $tip ); |
|
3092 | + } else { |
|
3093 | + $tip = esc_attr( $tip ); |
|
3094 | + } |
|
3095 | + |
|
3096 | + return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>'; |
|
3097 | + } |
|
3098 | + |
|
3099 | + /** |
|
3100 | + * Sanitize a string destined to be a tooltip. |
|
3101 | + * |
|
3102 | + * @param string $var |
|
3103 | + * |
|
3104 | + * @return string |
|
3105 | + */ |
|
3106 | + public function sanitize_tooltip( $var ) { |
|
3107 | + return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( |
|
3108 | + 'br' => array(), |
|
3109 | + 'em' => array(), |
|
3110 | + 'strong' => array(), |
|
3111 | + 'small' => array(), |
|
3112 | + 'span' => array(), |
|
3113 | + 'ul' => array(), |
|
3114 | + 'li' => array(), |
|
3115 | + 'ol' => array(), |
|
3116 | + 'p' => array(), |
|
3117 | + ) ) ); |
|
3118 | + } |
|
3119 | + |
|
3120 | + /** |
|
3121 | + * Processing widget options on save |
|
3122 | + * |
|
3123 | + * @param array $new_instance The new options |
|
3124 | + * @param array $old_instance The previous options |
|
3125 | + * |
|
3126 | + * @return array |
|
3127 | + * @todo we should add some sanitation here. |
|
3128 | + */ |
|
3129 | + public function update( $new_instance, $old_instance ) { |
|
3130 | + |
|
3131 | + //save the widget |
|
3132 | + $instance = array_merge( (array) $old_instance, (array) $new_instance ); |
|
3133 | + |
|
3134 | + // set widget instance |
|
3135 | + $this->instance = $instance; |
|
3136 | + |
|
3137 | + if ( empty( $this->arguments ) ) { |
|
3138 | + $this->get_arguments(); |
|
3139 | + } |
|
3140 | + |
|
3141 | + // check for checkboxes |
|
3142 | + if ( ! empty( $this->arguments ) ) { |
|
3143 | + foreach ( $this->arguments as $argument ) { |
|
3144 | + if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) { |
|
3145 | + $instance[ $argument['name'] ] = '0'; |
|
3146 | + } |
|
3147 | + } |
|
3148 | + } |
|
3149 | + |
|
3150 | + return $instance; |
|
3151 | + } |
|
3152 | + |
|
3153 | + /** |
|
3154 | + * Checks if the current call is a ajax call to get the block content. |
|
3155 | + * |
|
3156 | + * This can be used in your widget to return different content as the block content. |
|
3157 | + * |
|
3158 | + * @since 1.0.3 |
|
3159 | + * @return bool |
|
3160 | + */ |
|
3161 | + public function is_block_content_call() { |
|
3162 | + $result = false; |
|
3163 | + if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) { |
|
3164 | + $result = true; |
|
3165 | + } |
|
3166 | + |
|
3167 | + return $result; |
|
3168 | + } |
|
3169 | + |
|
3170 | + /** |
|
3171 | + * Get an instance hash that will be unique to the type and settings. |
|
3172 | + * |
|
3173 | + * @since 1.0.20 |
|
3174 | + * @return string |
|
3175 | + */ |
|
3176 | + public function get_instance_hash(){ |
|
3177 | + $instance_string = $this->base_id.serialize($this->instance); |
|
3178 | + return hash('crc32b',$instance_string); |
|
3179 | + } |
|
3180 | + |
|
3181 | + /** |
|
3182 | + * Generate and return inline styles from CSS rules that will match the unique class of the instance. |
|
3183 | + * |
|
3184 | + * @param array $rules |
|
3185 | + * |
|
3186 | + * @since 1.0.20 |
|
3187 | + * @return string |
|
3188 | + */ |
|
3189 | + public function get_instance_style($rules = array()){ |
|
3190 | + $css = ''; |
|
3191 | + |
|
3192 | + if(!empty($rules)){ |
|
3193 | + $rules = array_unique($rules); |
|
3194 | + $instance_hash = $this->get_instance_hash(); |
|
3195 | + $css .= "<style>"; |
|
3196 | + foreach($rules as $rule){ |
|
3197 | + $css .= ".sdel-$instance_hash $rule"; |
|
3198 | + } |
|
3199 | + $css .= "</style>"; |
|
3200 | + } |
|
3201 | + |
|
3202 | + |
|
3203 | + return $css; |
|
3204 | + |
|
3205 | + } |
|
3206 | + |
|
3207 | + } |
|
3208 | 3208 | |
3209 | 3209 | } |
@@ -17,45 +17,45 @@ discard block |
||
17 | 17 | */ |
18 | 18 | class BP_GetPaid_Component extends BP_Component { |
19 | 19 | |
20 | - /** |
|
21 | - * Start the component setup process. |
|
22 | - * |
|
23 | - * @since 2.1.5 |
|
24 | - */ |
|
25 | - public function __construct() { |
|
26 | - parent::start( |
|
27 | - 'getpaid', |
|
28 | - 'GetPaid', |
|
29 | - buddypress()->plugin_dir, |
|
30 | - array( |
|
31 | - 'adminbar_myaccount_order' => 30, |
|
32 | - ) |
|
33 | - ); |
|
34 | - } |
|
20 | + /** |
|
21 | + * Start the component setup process. |
|
22 | + * |
|
23 | + * @since 2.1.5 |
|
24 | + */ |
|
25 | + public function __construct() { |
|
26 | + parent::start( |
|
27 | + 'getpaid', |
|
28 | + 'GetPaid', |
|
29 | + buddypress()->plugin_dir, |
|
30 | + array( |
|
31 | + 'adminbar_myaccount_order' => 30, |
|
32 | + ) |
|
33 | + ); |
|
34 | + } |
|
35 | 35 | |
36 | 36 | /** |
37 | - * Set up component global variables. |
|
38 | - * |
|
39 | - * @since 2.1.5 |
|
40 | - * |
|
41 | - * |
|
42 | - * @param array $args { |
|
43 | - * All values are optional. |
|
44 | - * @type string $slug The component slug. Used to construct certain URLs, such as 'friends' in |
|
45 | - * http://example.com/members/joe/friends/. Default: the value of $this->id. |
|
46 | - * @type string $root_slug The component root slug. Note that this value is generally unused if the |
|
47 | - * component has a root directory (the slug will be overridden by the |
|
48 | - * post_name of the directory page). Default: the slug of the directory page |
|
49 | - * if one is found, otherwise an empty string. |
|
50 | - * @type bool $has_directory Set to true if the component requires an associated WordPress page. |
|
51 | - * @type callable $notification_callback Optional. The callable function that formats the component's notifications. |
|
52 | - * @type string $search_term Optional. The placeholder text in the component directory search box. Eg, |
|
53 | - * 'Search Groups...'. |
|
54 | - * @type array $global_tables Optional. An array of database table names. |
|
55 | - * @type array $meta_tables Optional. An array of metadata table names. |
|
56 | - * } |
|
57 | - */ |
|
58 | - public function setup_globals( $args = array() ) { |
|
37 | + * Set up component global variables. |
|
38 | + * |
|
39 | + * @since 2.1.5 |
|
40 | + * |
|
41 | + * |
|
42 | + * @param array $args { |
|
43 | + * All values are optional. |
|
44 | + * @type string $slug The component slug. Used to construct certain URLs, such as 'friends' in |
|
45 | + * http://example.com/members/joe/friends/. Default: the value of $this->id. |
|
46 | + * @type string $root_slug The component root slug. Note that this value is generally unused if the |
|
47 | + * component has a root directory (the slug will be overridden by the |
|
48 | + * post_name of the directory page). Default: the slug of the directory page |
|
49 | + * if one is found, otherwise an empty string. |
|
50 | + * @type bool $has_directory Set to true if the component requires an associated WordPress page. |
|
51 | + * @type callable $notification_callback Optional. The callable function that formats the component's notifications. |
|
52 | + * @type string $search_term Optional. The placeholder text in the component directory search box. Eg, |
|
53 | + * 'Search Groups...'. |
|
54 | + * @type array $global_tables Optional. An array of database table names. |
|
55 | + * @type array $meta_tables Optional. An array of metadata table names. |
|
56 | + * } |
|
57 | + */ |
|
58 | + public function setup_globals( $args = array() ) { |
|
59 | 59 | parent::setup_globals( |
60 | 60 | array( |
61 | 61 | 'id' => 'getpaid', |
@@ -64,21 +64,21 @@ discard block |
||
64 | 64 | 'has_directory' => false |
65 | 65 | ) |
66 | 66 | ); |
67 | - } |
|
68 | - |
|
69 | - /** |
|
70 | - * Set up component navigation. |
|
71 | - * |
|
72 | - * @since 2.1.5 |
|
73 | - * |
|
74 | - * @see BP_Component::setup_nav() for a description of arguments. |
|
75 | - * |
|
76 | - * @param array $main_nav Optional. See BP_Component::setup_nav() for description. |
|
77 | - * @param array $sub_nav Optional. See BP_Component::setup_nav() for description. |
|
78 | - */ |
|
79 | - public function setup_nav( $main_nav = array(), $sub_nav = array() ) { |
|
80 | - |
|
81 | - // Abort if the integration is inactive. |
|
67 | + } |
|
68 | + |
|
69 | + /** |
|
70 | + * Set up component navigation. |
|
71 | + * |
|
72 | + * @since 2.1.5 |
|
73 | + * |
|
74 | + * @see BP_Component::setup_nav() for a description of arguments. |
|
75 | + * |
|
76 | + * @param array $main_nav Optional. See BP_Component::setup_nav() for description. |
|
77 | + * @param array $sub_nav Optional. See BP_Component::setup_nav() for description. |
|
78 | + */ |
|
79 | + public function setup_nav( $main_nav = array(), $sub_nav = array() ) { |
|
80 | + |
|
81 | + // Abort if the integration is inactive. |
|
82 | 82 | if ( ! getpaid_is_buddypress_integration_active() || ! is_user_logged_in() ) { |
83 | 83 | return; |
84 | 84 | } |
@@ -88,25 +88,25 @@ discard block |
||
88 | 88 | return; |
89 | 89 | } |
90 | 90 | |
91 | - // Determine user to use. |
|
92 | - $user_domain = bp_loggedin_user_domain(); |
|
93 | - $slug = 'getpaid'; |
|
94 | - $payments_link = trailingslashit( $user_domain . $slug ); |
|
95 | - |
|
96 | - // Add 'Payments' to the main navigation. |
|
97 | - $main_nav = array( |
|
98 | - 'name' => _x( 'Billing', 'BuddyPress profile payments screen nav', 'invoicing' ), |
|
99 | - 'slug' => $slug, |
|
100 | - 'position' => apply_filters( 'wpinv_bp_nav_position', wpinv_get_option( 'wpinv_menu_position', 91 ), $slug ), |
|
101 | - 'screen_function' => array( $this, 'display_current_tab' ), |
|
102 | - 'default_subnav_slug' => 'gp-edit-address', |
|
91 | + // Determine user to use. |
|
92 | + $user_domain = bp_loggedin_user_domain(); |
|
93 | + $slug = 'getpaid'; |
|
94 | + $payments_link = trailingslashit( $user_domain . $slug ); |
|
95 | + |
|
96 | + // Add 'Payments' to the main navigation. |
|
97 | + $main_nav = array( |
|
98 | + 'name' => _x( 'Billing', 'BuddyPress profile payments screen nav', 'invoicing' ), |
|
99 | + 'slug' => $slug, |
|
100 | + 'position' => apply_filters( 'wpinv_bp_nav_position', wpinv_get_option( 'wpinv_menu_position', 91 ), $slug ), |
|
101 | + 'screen_function' => array( $this, 'display_current_tab' ), |
|
102 | + 'default_subnav_slug' => 'gp-edit-address', |
|
103 | 103 | 'show_for_displayed_user' => false, |
104 | - 'item_css_id' => $this->id, |
|
105 | - 'parent_url' => $user_domain, |
|
106 | - 'parent_slug' => buddypress()->slug, |
|
107 | - ); |
|
104 | + 'item_css_id' => $this->id, |
|
105 | + 'parent_url' => $user_domain, |
|
106 | + 'parent_slug' => buddypress()->slug, |
|
107 | + ); |
|
108 | 108 | |
109 | - // Add the subnav items to the payments nav item if we are using a theme that supports this. |
|
109 | + // Add the subnav items to the payments nav item if we are using a theme that supports this. |
|
110 | 110 | foreach ( getpaid_get_user_content_tabs() as $_slug => $tab ) { |
111 | 111 | |
112 | 112 | $sub_nav[] = array( |
@@ -116,8 +116,8 @@ discard block |
||
116 | 116 | 'parent_slug' => $slug, |
117 | 117 | 'position' => 10, |
118 | 118 | 'screen_function' => function() use ( $tab ) { |
119 | - $GLOBALS['getpaid_bp_current_tab'] = $tab; |
|
120 | - $this->display_current_tab(); |
|
119 | + $GLOBALS['getpaid_bp_current_tab'] = $tab; |
|
120 | + $this->display_current_tab(); |
|
121 | 121 | }, |
122 | 122 | 'show_for_displayed_user' => false, |
123 | 123 | 'item_css_id' => "getpaid-bp-$_slug", |
@@ -125,27 +125,27 @@ discard block |
||
125 | 125 | |
126 | 126 | } |
127 | 127 | |
128 | - parent::setup_nav( $main_nav, $sub_nav ); |
|
129 | - } |
|
130 | - |
|
131 | - /** |
|
132 | - * Set up the component entries in the WordPress Admin Bar. |
|
133 | - * |
|
134 | - * @since 2.1.5 |
|
135 | - * |
|
136 | - * @see BP_Component::setup_nav() for a description of the $wp_admin_nav |
|
137 | - * parameter array. |
|
138 | - * |
|
139 | - * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a |
|
140 | - * description. |
|
141 | - */ |
|
142 | - public function setup_admin_bar( $wp_admin_nav = array() ) { |
|
143 | - |
|
144 | - // Menus for logged in user. |
|
145 | - if ( is_user_logged_in() ) { |
|
128 | + parent::setup_nav( $main_nav, $sub_nav ); |
|
129 | + } |
|
146 | 130 | |
147 | - // Setup the logged in user variables. |
|
148 | - $payments_link = trailingslashit( bp_loggedin_user_domain() . 'getpaid/' ); |
|
131 | + /** |
|
132 | + * Set up the component entries in the WordPress Admin Bar. |
|
133 | + * |
|
134 | + * @since 2.1.5 |
|
135 | + * |
|
136 | + * @see BP_Component::setup_nav() for a description of the $wp_admin_nav |
|
137 | + * parameter array. |
|
138 | + * |
|
139 | + * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a |
|
140 | + * description. |
|
141 | + */ |
|
142 | + public function setup_admin_bar( $wp_admin_nav = array() ) { |
|
143 | + |
|
144 | + // Menus for logged in user. |
|
145 | + if ( is_user_logged_in() ) { |
|
146 | + |
|
147 | + // Setup the logged in user variables. |
|
148 | + $payments_link = trailingslashit( bp_loggedin_user_domain() . 'getpaid/' ); |
|
149 | 149 | |
150 | 150 | // Add the "Payments" sub menu. |
151 | 151 | $wp_admin_nav[] = array( |
@@ -167,50 +167,50 @@ discard block |
||
167 | 167 | |
168 | 168 | } |
169 | 169 | |
170 | - } |
|
171 | - |
|
172 | - parent::setup_admin_bar( $wp_admin_nav ); |
|
173 | - } |
|
170 | + } |
|
174 | 171 | |
175 | - /** |
|
176 | - * Retrieves the current tab. |
|
177 | - * |
|
178 | - * @since 2.1.5 |
|
179 | - */ |
|
180 | - public function get_current_tab() { |
|
181 | - global $getpaid_bp_current_tab; |
|
172 | + parent::setup_admin_bar( $wp_admin_nav ); |
|
173 | + } |
|
182 | 174 | |
183 | - if ( empty( $getpaid_bp_current_tab ) ) { |
|
184 | - return array( |
|
185 | - 'label' => __( 'Invoices', 'invoicing' ), |
|
186 | - 'content' => '[wpinv_history]', |
|
187 | - 'icon' => 'fas fa-file-invoice', |
|
188 | - ); |
|
189 | - } |
|
175 | + /** |
|
176 | + * Retrieves the current tab. |
|
177 | + * |
|
178 | + * @since 2.1.5 |
|
179 | + */ |
|
180 | + public function get_current_tab() { |
|
181 | + global $getpaid_bp_current_tab; |
|
182 | + |
|
183 | + if ( empty( $getpaid_bp_current_tab ) ) { |
|
184 | + return array( |
|
185 | + 'label' => __( 'Invoices', 'invoicing' ), |
|
186 | + 'content' => '[wpinv_history]', |
|
187 | + 'icon' => 'fas fa-file-invoice', |
|
188 | + ); |
|
189 | + } |
|
190 | 190 | |
191 | - return $getpaid_bp_current_tab; |
|
192 | - } |
|
191 | + return $getpaid_bp_current_tab; |
|
192 | + } |
|
193 | 193 | |
194 | - /** |
|
195 | - * Displays the current tab. |
|
196 | - * |
|
197 | - * @since 2.1.5 |
|
198 | - */ |
|
199 | - public function display_current_tab() { |
|
194 | + /** |
|
195 | + * Displays the current tab. |
|
196 | + * |
|
197 | + * @since 2.1.5 |
|
198 | + */ |
|
199 | + public function display_current_tab() { |
|
200 | 200 | |
201 | - add_action( 'bp_template_content', array( $this, 'handle_display_current_tab' ) ); |
|
202 | - $template = apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ); |
|
201 | + add_action( 'bp_template_content', array( $this, 'handle_display_current_tab' ) ); |
|
202 | + $template = apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ); |
|
203 | 203 | |
204 | 204 | bp_core_load_template( apply_filters( 'wpinv_bp_core_template_plugin', $template ) ); |
205 | - } |
|
206 | - |
|
207 | - /** |
|
208 | - * Handles the actual display of the current tab. |
|
209 | - * |
|
210 | - * @since 2.1.5 |
|
211 | - */ |
|
212 | - public function handle_display_current_tab() { |
|
213 | - echo getpaid_prepare_user_content_tab( $this->get_current_tab() ); |
|
214 | - } |
|
205 | + } |
|
206 | + |
|
207 | + /** |
|
208 | + * Handles the actual display of the current tab. |
|
209 | + * |
|
210 | + * @since 2.1.5 |
|
211 | + */ |
|
212 | + public function handle_display_current_tab() { |
|
213 | + echo getpaid_prepare_user_content_tab( $this->get_current_tab() ); |
|
214 | + } |
|
215 | 215 | |
216 | 216 | } |
@@ -6,7 +6,7 @@ discard block |
||
6 | 6 | if ( ! defined( 'ABSPATH' ) ) exit; |
7 | 7 | |
8 | 8 | if ( ! class_exists( 'WP_List_Table' ) ) { |
9 | - include_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; |
|
9 | + include_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; |
|
10 | 10 | } |
11 | 11 | |
12 | 12 | /** |
@@ -14,387 +14,387 @@ discard block |
||
14 | 14 | */ |
15 | 15 | class WPInv_Subscriptions_List_Table extends WP_List_Table { |
16 | 16 | |
17 | - /** |
|
18 | - * URL of this page |
|
19 | - * |
|
20 | - * @var string |
|
21 | - * @since 1.0.19 |
|
22 | - */ |
|
23 | - public $base_url; |
|
24 | - |
|
25 | - /** |
|
26 | - * Query |
|
27 | - * |
|
28 | - * @var GetPaid_Subscriptions_Query |
|
29 | - * @since 1.0.19 |
|
30 | - */ |
|
31 | - public $query; |
|
32 | - |
|
33 | - /** |
|
34 | - * Total subscriptions |
|
35 | - * |
|
36 | - * @var string |
|
37 | - * @since 1.0.0 |
|
38 | - */ |
|
39 | - public $total_count; |
|
40 | - |
|
41 | - /** |
|
42 | - * Current status subscriptions |
|
43 | - * |
|
44 | - * @var string |
|
45 | - * @since 1.0.0 |
|
46 | - */ |
|
47 | - public $current_total_count; |
|
48 | - |
|
49 | - /** |
|
50 | - * Status counts |
|
51 | - * |
|
52 | - * @var array |
|
53 | - * @since 1.0.19 |
|
54 | - */ |
|
55 | - public $status_counts; |
|
56 | - |
|
57 | - /** |
|
58 | - * Number of results to show per page |
|
59 | - * |
|
60 | - * @var int |
|
61 | - * @since 1.0.0 |
|
62 | - */ |
|
63 | - public $per_page = 10; |
|
64 | - |
|
65 | - /** |
|
66 | - * Constructor function. |
|
67 | - */ |
|
68 | - public function __construct() { |
|
69 | - |
|
70 | - parent::__construct( |
|
71 | - array( |
|
72 | - 'singular' => 'subscription', |
|
73 | - 'plural' => 'subscriptions', |
|
74 | - ) |
|
75 | - ); |
|
76 | - |
|
77 | - $this->process_bulk_action(); |
|
78 | - |
|
79 | - $this->prepare_query(); |
|
80 | - |
|
81 | - $this->base_url = remove_query_arg( 'status' ); |
|
82 | - |
|
83 | - } |
|
84 | - |
|
85 | - /** |
|
86 | - * Prepares the display query |
|
87 | - */ |
|
88 | - public function prepare_query() { |
|
89 | - |
|
90 | - // Prepare query args. |
|
91 | - $query = array( |
|
92 | - 'number' => $this->per_page, |
|
93 | - 'paged' => $this->get_paged(), |
|
94 | - 'status' => ( isset( $_GET['status'] ) && array_key_exists( $_GET['status'], getpaid_get_subscription_statuses() ) ) ? $_GET['status'] : 'all', |
|
95 | - 'orderby' => ( isset( $_GET['orderby'] ) ) ? $_GET['orderby'] : 'id', |
|
96 | - 'order' => ( isset( $_GET['order'] ) ) ? $_GET['order'] : 'DESC', |
|
97 | - ); |
|
98 | - |
|
99 | - // Prepare class properties. |
|
100 | - $this->query = new GetPaid_Subscriptions_Query( $query ); |
|
101 | - $this->total_count = $this->query->get_total(); |
|
102 | - $this->current_total_count = $this->query->get_total(); |
|
103 | - $this->items = $this->query->get_results(); |
|
104 | - $this->status_counts = getpaid_get_subscription_status_counts( $query ); |
|
105 | - |
|
106 | - if ( 'all' != $query['status'] ) { |
|
107 | - unset( $query['status'] ); |
|
108 | - $this->total_count = getpaid_get_subscriptions( $query, 'count' ); |
|
109 | - } |
|
110 | - |
|
111 | - } |
|
112 | - |
|
113 | - /** |
|
114 | - * Gets the list of views available on this table. |
|
115 | - * |
|
116 | - * The format is an associative array: |
|
117 | - * - `'id' => 'link'` |
|
118 | - * |
|
119 | - * @since 1.0.0 |
|
120 | - * |
|
121 | - * @return array |
|
122 | - */ |
|
123 | - public function get_views() { |
|
124 | - |
|
125 | - $current = isset( $_GET['status'] ) ? $_GET['status'] : 'all'; |
|
126 | - $views = array( |
|
127 | - |
|
128 | - 'all' => sprintf( |
|
129 | - '<a href="%s" %s>%s <span class="count">(%d)</span></a>', |
|
130 | - esc_url( add_query_arg( 'status', false, $this->base_url ) ), |
|
131 | - $current === 'all' ? ' class="current"' : '', |
|
132 | - __('All','invoicing' ), |
|
133 | - $this->total_count |
|
134 | - ) |
|
135 | - |
|
136 | - ); |
|
137 | - |
|
138 | - foreach ( array_filter( $this->status_counts ) as $status => $count ) { |
|
139 | - |
|
140 | - $views[ $status ] = sprintf( |
|
141 | - '<a href="%s" %s>%s <span class="count">(%d)</span></a>', |
|
142 | - esc_url( add_query_arg( 'status', urlencode( $status ), $this->base_url ) ), |
|
143 | - $current === $status ? ' class="current"' : '', |
|
144 | - sanitize_text_field( getpaid_get_subscription_status_label( $status ) ), |
|
145 | - $count |
|
146 | - ); |
|
147 | - |
|
148 | - } |
|
149 | - |
|
150 | - return $views; |
|
151 | - |
|
152 | - } |
|
153 | - |
|
154 | - /** |
|
155 | - * Render most columns |
|
156 | - * |
|
157 | - * @access private |
|
158 | - * @since 1.0.0 |
|
159 | - * @return string |
|
160 | - */ |
|
161 | - public function column_default( $item, $column_name ) { |
|
162 | - return apply_filters( "getpaid_subscriptions_table_column_$column_name", $item->$column_name ); |
|
163 | - } |
|
164 | - |
|
165 | - /** |
|
166 | - * This is how checkbox column renders. |
|
167 | - * |
|
168 | - * @param WPInv_Subscription $item |
|
169 | - * @return string |
|
170 | - */ |
|
171 | - public function column_cb( $item ) { |
|
172 | - return sprintf( '<input type="checkbox" name="id[]" value="%s" />', esc_html( $item->get_id() ) ); |
|
173 | - } |
|
174 | - |
|
175 | - /** |
|
176 | - * Status column |
|
177 | - * |
|
178 | - * @param WPInv_Subscription $item |
|
179 | - * @since 1.0.0 |
|
180 | - * @return string |
|
181 | - */ |
|
182 | - public function column_status( $item ) { |
|
183 | - return $item->get_status_label_html(); |
|
184 | - } |
|
185 | - |
|
186 | - /** |
|
187 | - * Subscription column |
|
188 | - * |
|
189 | - * @param WPInv_Subscription $item |
|
190 | - * @since 1.0.0 |
|
191 | - * @return string |
|
192 | - */ |
|
193 | - public function column_subscription( $item ) { |
|
194 | - |
|
195 | - $username = __( '(Missing User)', 'invoicing' ); |
|
196 | - |
|
197 | - $user = get_userdata( $item->get_customer_id() ); |
|
198 | - if ( $user ) { |
|
199 | - |
|
200 | - $username = sprintf( |
|
201 | - '<a href="user-edit.php?user_id=%s">%s</a>', |
|
202 | - absint( $user->ID ), |
|
203 | - ! empty( $user->display_name ) ? sanitize_text_field( $user->display_name ) : sanitize_email( $user->user_email ) |
|
204 | - ); |
|
205 | - |
|
206 | - } |
|
207 | - |
|
208 | - // translators: $1: is opening link, $2: is subscription id number, $3: is closing link tag, $4: is user's name |
|
209 | - $column_content = sprintf( |
|
210 | - _x( '%1$s#%2$s%3$s for %4$s', 'Subscription title on admin table. (e.g.: #211 for John Doe)', 'invoicing' ), |
|
211 | - '<a href="' . esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $item->get_id() ) ) ) . '">', |
|
212 | - '<strong>' . esc_attr( $item->get_id() ) . '</strong>', '</a>', |
|
213 | - $username |
|
214 | - ); |
|
215 | - |
|
216 | - $row_actions = array(); |
|
217 | - |
|
218 | - // View subscription. |
|
219 | - $view_url = esc_url( add_query_arg( 'id', $item->get_id(), admin_url( 'admin.php?page=wpinv-subscriptions' ) )); |
|
220 | - $row_actions['view'] = '<a href="' . $view_url . '">' . __( 'View Subscription', 'invoicing' ) . '</a>'; |
|
221 | - |
|
222 | - // View invoice. |
|
223 | - $invoice = get_post( $item->get_parent_invoice_id() ); |
|
224 | - |
|
225 | - if ( ! empty( $invoice ) ) { |
|
226 | - $invoice_url = get_edit_post_link( $invoice ); |
|
227 | - $row_actions['invoice'] = '<a href="' . $invoice_url . '">' . __( 'View Invoice', 'invoicing' ) . '</a>'; |
|
228 | - } |
|
229 | - |
|
230 | - $delete_url = esc_url( |
|
231 | - wp_nonce_url( |
|
232 | - add_query_arg( |
|
233 | - array( |
|
234 | - 'getpaid-admin-action' => 'subscription_manual_delete', |
|
235 | - 'id' => $item->get_id(), |
|
236 | - ) |
|
237 | - ), |
|
238 | - 'getpaid-nonce', |
|
239 | - 'getpaid-nonce' |
|
240 | - ) |
|
241 | - ); |
|
242 | - $row_actions['delete'] = '<a class="text-danger" href="' . $delete_url . '">' . __( 'Delete Subscription', 'invoicing' ) . '</a>'; |
|
243 | - |
|
244 | - $row_actions = $this->row_actions( apply_filters( 'getpaid_subscription_table_row_actions', $row_actions, $item ) ); |
|
245 | - |
|
246 | - return "<strong>$column_content</strong>" . $this->column_amount( $item ) . $row_actions; |
|
247 | - } |
|
248 | - |
|
249 | - /** |
|
250 | - * Renewal date column |
|
251 | - * |
|
252 | - * @param WPInv_Subscription $item |
|
253 | - * @since 1.0.0 |
|
254 | - * @return string |
|
255 | - */ |
|
256 | - public function column_renewal_date( $item ) { |
|
257 | - return getpaid_format_date_value( $item->get_expiration() ); |
|
258 | - } |
|
259 | - |
|
260 | - /** |
|
261 | - * Start date column |
|
262 | - * |
|
263 | - * @param WPInv_Subscription $item |
|
264 | - * @since 1.0.0 |
|
265 | - * @return string |
|
266 | - */ |
|
267 | - public function column_start_date( $item ) { |
|
268 | - return getpaid_format_date_value( $item->get_date_created() ); |
|
269 | - } |
|
270 | - |
|
271 | - /** |
|
272 | - * Amount column |
|
273 | - * |
|
274 | - * @param WPInv_Subscription $item |
|
275 | - * @since 1.0.19 |
|
276 | - * @return string |
|
277 | - */ |
|
278 | - public function column_amount( $item ) { |
|
279 | - $amount = getpaid_get_formatted_subscription_amount( $item ); |
|
280 | - return "<span class='text-muted form-text mt-2 mb-2'>$amount</span>"; |
|
281 | - } |
|
282 | - |
|
283 | - /** |
|
284 | - * Billing Times column |
|
285 | - * |
|
286 | - * @param WPInv_Subscription $item |
|
287 | - * @since 1.0.0 |
|
288 | - * @return string |
|
289 | - */ |
|
290 | - public function column_renewals( $item ) { |
|
291 | - $max_bills = $item->get_bill_times(); |
|
292 | - return $item->get_times_billed() . ' / ' . ( empty( $max_bills ) ? "∞" : $max_bills ); |
|
293 | - } |
|
294 | - |
|
295 | - /** |
|
296 | - * Product ID column |
|
297 | - * |
|
298 | - * @param WPInv_Subscription $item |
|
299 | - * @since 1.0.0 |
|
300 | - * @return string |
|
301 | - */ |
|
302 | - public function column_item( $item ) { |
|
303 | - $_item = get_post( $item->get_product_id() ); |
|
304 | - |
|
305 | - if ( ! empty( $_item ) ) { |
|
306 | - $link = get_edit_post_link( $_item ); |
|
307 | - $link = esc_url( $link ); |
|
308 | - $name = esc_html( get_the_title( $_item ) ); |
|
309 | - return "<a href='$link'>$name</a>"; |
|
310 | - } else { |
|
311 | - return sprintf( __( 'Item #%s', 'invoicing' ), $item->get_product_id() ); |
|
312 | - } |
|
313 | - |
|
314 | - } |
|
315 | - |
|
316 | - /** |
|
317 | - * Retrieve the current page number |
|
318 | - * |
|
319 | - * @return int |
|
320 | - */ |
|
321 | - public function get_paged() { |
|
322 | - return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1; |
|
323 | - } |
|
324 | - |
|
325 | - /** |
|
326 | - * Setup the final data for the table |
|
327 | - * |
|
328 | - */ |
|
329 | - public function prepare_items() { |
|
330 | - |
|
331 | - $columns = $this->get_columns(); |
|
332 | - $hidden = array(); |
|
333 | - $sortable = $this->get_sortable_columns(); |
|
334 | - |
|
335 | - $this->_column_headers = array( $columns, $hidden, $sortable ); |
|
336 | - |
|
337 | - $this->set_pagination_args( |
|
338 | - array( |
|
339 | - 'total_items' => $this->current_total_count, |
|
340 | - 'per_page' => $this->per_page, |
|
341 | - 'total_pages' => ceil( $this->current_total_count / $this->per_page ) |
|
342 | - ) |
|
343 | - ); |
|
344 | - } |
|
345 | - |
|
346 | - /** |
|
347 | - * Table columns |
|
348 | - * |
|
349 | - * @return array |
|
350 | - */ |
|
351 | - public function get_columns(){ |
|
352 | - $columns = array( |
|
353 | - 'cb' => '<input type="checkbox" />', |
|
354 | - 'subscription' => __( 'Subscription', 'invoicing' ), |
|
355 | - 'start_date' => __( 'Start Date', 'invoicing' ), |
|
356 | - 'renewal_date' => __( 'Next Payment', 'invoicing' ), |
|
357 | - 'renewals' => __( 'Payments', 'invoicing' ), |
|
358 | - 'item' => __( 'Item', 'invoicing' ), |
|
359 | - 'status' => __( 'Status', 'invoicing' ), |
|
360 | - ); |
|
361 | - |
|
362 | - return apply_filters( 'manage_getpaid_subscriptions_table_columns', $columns ); |
|
363 | - } |
|
364 | - |
|
365 | - /** |
|
366 | - * Sortable table columns. |
|
367 | - * |
|
368 | - * @return array |
|
369 | - */ |
|
370 | - public function get_sortable_columns() { |
|
371 | - $sortable = array( |
|
372 | - 'subscription' => array( 'id', true ), |
|
373 | - 'start_date' => array( 'created', true ), |
|
374 | - 'renewal_date' => array( 'expiration', true ), |
|
375 | - 'renewals' => array( 'bill_times', true ), |
|
376 | - 'item' => array( 'product_id', true ), |
|
377 | - 'status' => array( 'status', true ), |
|
378 | - ); |
|
379 | - |
|
380 | - return apply_filters( 'manage_getpaid_subscriptions_sortable_table_columns', $sortable ); |
|
381 | - } |
|
382 | - |
|
383 | - /** |
|
384 | - * Whether the table has items to display or not |
|
385 | - * |
|
386 | - * @return bool |
|
387 | - */ |
|
388 | - public function has_items() { |
|
389 | - return ! empty( $this->current_total_count ); |
|
390 | - } |
|
391 | - |
|
392 | - /** |
|
393 | - * Processes bulk actions. |
|
394 | - * |
|
395 | - */ |
|
396 | - public function process_bulk_action() { |
|
397 | - |
|
398 | - } |
|
17 | + /** |
|
18 | + * URL of this page |
|
19 | + * |
|
20 | + * @var string |
|
21 | + * @since 1.0.19 |
|
22 | + */ |
|
23 | + public $base_url; |
|
24 | + |
|
25 | + /** |
|
26 | + * Query |
|
27 | + * |
|
28 | + * @var GetPaid_Subscriptions_Query |
|
29 | + * @since 1.0.19 |
|
30 | + */ |
|
31 | + public $query; |
|
32 | + |
|
33 | + /** |
|
34 | + * Total subscriptions |
|
35 | + * |
|
36 | + * @var string |
|
37 | + * @since 1.0.0 |
|
38 | + */ |
|
39 | + public $total_count; |
|
40 | + |
|
41 | + /** |
|
42 | + * Current status subscriptions |
|
43 | + * |
|
44 | + * @var string |
|
45 | + * @since 1.0.0 |
|
46 | + */ |
|
47 | + public $current_total_count; |
|
48 | + |
|
49 | + /** |
|
50 | + * Status counts |
|
51 | + * |
|
52 | + * @var array |
|
53 | + * @since 1.0.19 |
|
54 | + */ |
|
55 | + public $status_counts; |
|
56 | + |
|
57 | + /** |
|
58 | + * Number of results to show per page |
|
59 | + * |
|
60 | + * @var int |
|
61 | + * @since 1.0.0 |
|
62 | + */ |
|
63 | + public $per_page = 10; |
|
64 | + |
|
65 | + /** |
|
66 | + * Constructor function. |
|
67 | + */ |
|
68 | + public function __construct() { |
|
69 | + |
|
70 | + parent::__construct( |
|
71 | + array( |
|
72 | + 'singular' => 'subscription', |
|
73 | + 'plural' => 'subscriptions', |
|
74 | + ) |
|
75 | + ); |
|
76 | + |
|
77 | + $this->process_bulk_action(); |
|
78 | + |
|
79 | + $this->prepare_query(); |
|
80 | + |
|
81 | + $this->base_url = remove_query_arg( 'status' ); |
|
82 | + |
|
83 | + } |
|
84 | + |
|
85 | + /** |
|
86 | + * Prepares the display query |
|
87 | + */ |
|
88 | + public function prepare_query() { |
|
89 | + |
|
90 | + // Prepare query args. |
|
91 | + $query = array( |
|
92 | + 'number' => $this->per_page, |
|
93 | + 'paged' => $this->get_paged(), |
|
94 | + 'status' => ( isset( $_GET['status'] ) && array_key_exists( $_GET['status'], getpaid_get_subscription_statuses() ) ) ? $_GET['status'] : 'all', |
|
95 | + 'orderby' => ( isset( $_GET['orderby'] ) ) ? $_GET['orderby'] : 'id', |
|
96 | + 'order' => ( isset( $_GET['order'] ) ) ? $_GET['order'] : 'DESC', |
|
97 | + ); |
|
98 | + |
|
99 | + // Prepare class properties. |
|
100 | + $this->query = new GetPaid_Subscriptions_Query( $query ); |
|
101 | + $this->total_count = $this->query->get_total(); |
|
102 | + $this->current_total_count = $this->query->get_total(); |
|
103 | + $this->items = $this->query->get_results(); |
|
104 | + $this->status_counts = getpaid_get_subscription_status_counts( $query ); |
|
105 | + |
|
106 | + if ( 'all' != $query['status'] ) { |
|
107 | + unset( $query['status'] ); |
|
108 | + $this->total_count = getpaid_get_subscriptions( $query, 'count' ); |
|
109 | + } |
|
110 | + |
|
111 | + } |
|
112 | + |
|
113 | + /** |
|
114 | + * Gets the list of views available on this table. |
|
115 | + * |
|
116 | + * The format is an associative array: |
|
117 | + * - `'id' => 'link'` |
|
118 | + * |
|
119 | + * @since 1.0.0 |
|
120 | + * |
|
121 | + * @return array |
|
122 | + */ |
|
123 | + public function get_views() { |
|
124 | + |
|
125 | + $current = isset( $_GET['status'] ) ? $_GET['status'] : 'all'; |
|
126 | + $views = array( |
|
127 | + |
|
128 | + 'all' => sprintf( |
|
129 | + '<a href="%s" %s>%s <span class="count">(%d)</span></a>', |
|
130 | + esc_url( add_query_arg( 'status', false, $this->base_url ) ), |
|
131 | + $current === 'all' ? ' class="current"' : '', |
|
132 | + __('All','invoicing' ), |
|
133 | + $this->total_count |
|
134 | + ) |
|
135 | + |
|
136 | + ); |
|
137 | + |
|
138 | + foreach ( array_filter( $this->status_counts ) as $status => $count ) { |
|
139 | + |
|
140 | + $views[ $status ] = sprintf( |
|
141 | + '<a href="%s" %s>%s <span class="count">(%d)</span></a>', |
|
142 | + esc_url( add_query_arg( 'status', urlencode( $status ), $this->base_url ) ), |
|
143 | + $current === $status ? ' class="current"' : '', |
|
144 | + sanitize_text_field( getpaid_get_subscription_status_label( $status ) ), |
|
145 | + $count |
|
146 | + ); |
|
147 | + |
|
148 | + } |
|
149 | + |
|
150 | + return $views; |
|
151 | + |
|
152 | + } |
|
153 | + |
|
154 | + /** |
|
155 | + * Render most columns |
|
156 | + * |
|
157 | + * @access private |
|
158 | + * @since 1.0.0 |
|
159 | + * @return string |
|
160 | + */ |
|
161 | + public function column_default( $item, $column_name ) { |
|
162 | + return apply_filters( "getpaid_subscriptions_table_column_$column_name", $item->$column_name ); |
|
163 | + } |
|
164 | + |
|
165 | + /** |
|
166 | + * This is how checkbox column renders. |
|
167 | + * |
|
168 | + * @param WPInv_Subscription $item |
|
169 | + * @return string |
|
170 | + */ |
|
171 | + public function column_cb( $item ) { |
|
172 | + return sprintf( '<input type="checkbox" name="id[]" value="%s" />', esc_html( $item->get_id() ) ); |
|
173 | + } |
|
174 | + |
|
175 | + /** |
|
176 | + * Status column |
|
177 | + * |
|
178 | + * @param WPInv_Subscription $item |
|
179 | + * @since 1.0.0 |
|
180 | + * @return string |
|
181 | + */ |
|
182 | + public function column_status( $item ) { |
|
183 | + return $item->get_status_label_html(); |
|
184 | + } |
|
185 | + |
|
186 | + /** |
|
187 | + * Subscription column |
|
188 | + * |
|
189 | + * @param WPInv_Subscription $item |
|
190 | + * @since 1.0.0 |
|
191 | + * @return string |
|
192 | + */ |
|
193 | + public function column_subscription( $item ) { |
|
194 | + |
|
195 | + $username = __( '(Missing User)', 'invoicing' ); |
|
196 | + |
|
197 | + $user = get_userdata( $item->get_customer_id() ); |
|
198 | + if ( $user ) { |
|
199 | + |
|
200 | + $username = sprintf( |
|
201 | + '<a href="user-edit.php?user_id=%s">%s</a>', |
|
202 | + absint( $user->ID ), |
|
203 | + ! empty( $user->display_name ) ? sanitize_text_field( $user->display_name ) : sanitize_email( $user->user_email ) |
|
204 | + ); |
|
205 | + |
|
206 | + } |
|
207 | + |
|
208 | + // translators: $1: is opening link, $2: is subscription id number, $3: is closing link tag, $4: is user's name |
|
209 | + $column_content = sprintf( |
|
210 | + _x( '%1$s#%2$s%3$s for %4$s', 'Subscription title on admin table. (e.g.: #211 for John Doe)', 'invoicing' ), |
|
211 | + '<a href="' . esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $item->get_id() ) ) ) . '">', |
|
212 | + '<strong>' . esc_attr( $item->get_id() ) . '</strong>', '</a>', |
|
213 | + $username |
|
214 | + ); |
|
215 | + |
|
216 | + $row_actions = array(); |
|
217 | + |
|
218 | + // View subscription. |
|
219 | + $view_url = esc_url( add_query_arg( 'id', $item->get_id(), admin_url( 'admin.php?page=wpinv-subscriptions' ) )); |
|
220 | + $row_actions['view'] = '<a href="' . $view_url . '">' . __( 'View Subscription', 'invoicing' ) . '</a>'; |
|
221 | + |
|
222 | + // View invoice. |
|
223 | + $invoice = get_post( $item->get_parent_invoice_id() ); |
|
224 | + |
|
225 | + if ( ! empty( $invoice ) ) { |
|
226 | + $invoice_url = get_edit_post_link( $invoice ); |
|
227 | + $row_actions['invoice'] = '<a href="' . $invoice_url . '">' . __( 'View Invoice', 'invoicing' ) . '</a>'; |
|
228 | + } |
|
229 | + |
|
230 | + $delete_url = esc_url( |
|
231 | + wp_nonce_url( |
|
232 | + add_query_arg( |
|
233 | + array( |
|
234 | + 'getpaid-admin-action' => 'subscription_manual_delete', |
|
235 | + 'id' => $item->get_id(), |
|
236 | + ) |
|
237 | + ), |
|
238 | + 'getpaid-nonce', |
|
239 | + 'getpaid-nonce' |
|
240 | + ) |
|
241 | + ); |
|
242 | + $row_actions['delete'] = '<a class="text-danger" href="' . $delete_url . '">' . __( 'Delete Subscription', 'invoicing' ) . '</a>'; |
|
243 | + |
|
244 | + $row_actions = $this->row_actions( apply_filters( 'getpaid_subscription_table_row_actions', $row_actions, $item ) ); |
|
245 | + |
|
246 | + return "<strong>$column_content</strong>" . $this->column_amount( $item ) . $row_actions; |
|
247 | + } |
|
248 | + |
|
249 | + /** |
|
250 | + * Renewal date column |
|
251 | + * |
|
252 | + * @param WPInv_Subscription $item |
|
253 | + * @since 1.0.0 |
|
254 | + * @return string |
|
255 | + */ |
|
256 | + public function column_renewal_date( $item ) { |
|
257 | + return getpaid_format_date_value( $item->get_expiration() ); |
|
258 | + } |
|
259 | + |
|
260 | + /** |
|
261 | + * Start date column |
|
262 | + * |
|
263 | + * @param WPInv_Subscription $item |
|
264 | + * @since 1.0.0 |
|
265 | + * @return string |
|
266 | + */ |
|
267 | + public function column_start_date( $item ) { |
|
268 | + return getpaid_format_date_value( $item->get_date_created() ); |
|
269 | + } |
|
270 | + |
|
271 | + /** |
|
272 | + * Amount column |
|
273 | + * |
|
274 | + * @param WPInv_Subscription $item |
|
275 | + * @since 1.0.19 |
|
276 | + * @return string |
|
277 | + */ |
|
278 | + public function column_amount( $item ) { |
|
279 | + $amount = getpaid_get_formatted_subscription_amount( $item ); |
|
280 | + return "<span class='text-muted form-text mt-2 mb-2'>$amount</span>"; |
|
281 | + } |
|
282 | + |
|
283 | + /** |
|
284 | + * Billing Times column |
|
285 | + * |
|
286 | + * @param WPInv_Subscription $item |
|
287 | + * @since 1.0.0 |
|
288 | + * @return string |
|
289 | + */ |
|
290 | + public function column_renewals( $item ) { |
|
291 | + $max_bills = $item->get_bill_times(); |
|
292 | + return $item->get_times_billed() . ' / ' . ( empty( $max_bills ) ? "∞" : $max_bills ); |
|
293 | + } |
|
294 | + |
|
295 | + /** |
|
296 | + * Product ID column |
|
297 | + * |
|
298 | + * @param WPInv_Subscription $item |
|
299 | + * @since 1.0.0 |
|
300 | + * @return string |
|
301 | + */ |
|
302 | + public function column_item( $item ) { |
|
303 | + $_item = get_post( $item->get_product_id() ); |
|
304 | + |
|
305 | + if ( ! empty( $_item ) ) { |
|
306 | + $link = get_edit_post_link( $_item ); |
|
307 | + $link = esc_url( $link ); |
|
308 | + $name = esc_html( get_the_title( $_item ) ); |
|
309 | + return "<a href='$link'>$name</a>"; |
|
310 | + } else { |
|
311 | + return sprintf( __( 'Item #%s', 'invoicing' ), $item->get_product_id() ); |
|
312 | + } |
|
313 | + |
|
314 | + } |
|
315 | + |
|
316 | + /** |
|
317 | + * Retrieve the current page number |
|
318 | + * |
|
319 | + * @return int |
|
320 | + */ |
|
321 | + public function get_paged() { |
|
322 | + return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1; |
|
323 | + } |
|
324 | + |
|
325 | + /** |
|
326 | + * Setup the final data for the table |
|
327 | + * |
|
328 | + */ |
|
329 | + public function prepare_items() { |
|
330 | + |
|
331 | + $columns = $this->get_columns(); |
|
332 | + $hidden = array(); |
|
333 | + $sortable = $this->get_sortable_columns(); |
|
334 | + |
|
335 | + $this->_column_headers = array( $columns, $hidden, $sortable ); |
|
336 | + |
|
337 | + $this->set_pagination_args( |
|
338 | + array( |
|
339 | + 'total_items' => $this->current_total_count, |
|
340 | + 'per_page' => $this->per_page, |
|
341 | + 'total_pages' => ceil( $this->current_total_count / $this->per_page ) |
|
342 | + ) |
|
343 | + ); |
|
344 | + } |
|
345 | + |
|
346 | + /** |
|
347 | + * Table columns |
|
348 | + * |
|
349 | + * @return array |
|
350 | + */ |
|
351 | + public function get_columns(){ |
|
352 | + $columns = array( |
|
353 | + 'cb' => '<input type="checkbox" />', |
|
354 | + 'subscription' => __( 'Subscription', 'invoicing' ), |
|
355 | + 'start_date' => __( 'Start Date', 'invoicing' ), |
|
356 | + 'renewal_date' => __( 'Next Payment', 'invoicing' ), |
|
357 | + 'renewals' => __( 'Payments', 'invoicing' ), |
|
358 | + 'item' => __( 'Item', 'invoicing' ), |
|
359 | + 'status' => __( 'Status', 'invoicing' ), |
|
360 | + ); |
|
361 | + |
|
362 | + return apply_filters( 'manage_getpaid_subscriptions_table_columns', $columns ); |
|
363 | + } |
|
364 | + |
|
365 | + /** |
|
366 | + * Sortable table columns. |
|
367 | + * |
|
368 | + * @return array |
|
369 | + */ |
|
370 | + public function get_sortable_columns() { |
|
371 | + $sortable = array( |
|
372 | + 'subscription' => array( 'id', true ), |
|
373 | + 'start_date' => array( 'created', true ), |
|
374 | + 'renewal_date' => array( 'expiration', true ), |
|
375 | + 'renewals' => array( 'bill_times', true ), |
|
376 | + 'item' => array( 'product_id', true ), |
|
377 | + 'status' => array( 'status', true ), |
|
378 | + ); |
|
379 | + |
|
380 | + return apply_filters( 'manage_getpaid_subscriptions_sortable_table_columns', $sortable ); |
|
381 | + } |
|
382 | + |
|
383 | + /** |
|
384 | + * Whether the table has items to display or not |
|
385 | + * |
|
386 | + * @return bool |
|
387 | + */ |
|
388 | + public function has_items() { |
|
389 | + return ! empty( $this->current_total_count ); |
|
390 | + } |
|
391 | + |
|
392 | + /** |
|
393 | + * Processes bulk actions. |
|
394 | + * |
|
395 | + */ |
|
396 | + public function process_bulk_action() { |
|
397 | + |
|
398 | + } |
|
399 | 399 | |
400 | 400 | } |
@@ -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 ( ! empty( $subscription->id ) ) { |
|
80 | - $this->set_id( $subscription->id ); |
|
81 | - } elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_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 ( ! empty( $subscription->id ) ) { |
|
80 | + $this->set_id( $subscription->id ); |
|
81 | + } elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_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', '' ); |
|
696 | + $old_status = $this->get_status(); |
|
697 | + $this->set_prop( 'status', $new_status ); |
|
632 | 698 | |
633 | - } |
|
699 | + if ( true === $this->object_read && $old_status !== $new_status ) { |
|
700 | + $this->status_transition = array( |
|
701 | + 'from' => ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $old_status, |
|
702 | + 'to' => $new_status, |
|
703 | + ); |
|
704 | + } |
|
634 | 705 | |
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 ); |
|
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 | - $old_status = $this->get_status(); |
|
697 | - $this->set_prop( 'status', $new_status ); |
|
698 | - |
|
699 | - if ( true === $this->object_read && $old_status !== $new_status ) { |
|
700 | - $this->status_transition = array( |
|
701 | - 'from' => ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $old_status, |
|
702 | - 'to' => $new_status, |
|
703 | - ); |
|
704 | - } |
|
705 | - |
|
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,16 +836,16 @@ discard block |
||
836 | 836 | * @return int |
837 | 837 | */ |
838 | 838 | public function get_total_payments() { |
839 | - global $wpdb; |
|
839 | + global $wpdb; |
|
840 | 840 | |
841 | - $count = (int) $wpdb->get_var( |
|
842 | - $wpdb->prepare( |
|
843 | - "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_parent=%d AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )", |
|
844 | - $this->get_parent_invoice_id() |
|
845 | - ) |
|
846 | - ); |
|
841 | + $count = (int) $wpdb->get_var( |
|
842 | + $wpdb->prepare( |
|
843 | + "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_parent=%d AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )", |
|
844 | + $this->get_parent_invoice_id() |
|
845 | + ) |
|
846 | + ); |
|
847 | 847 | |
848 | - // Maybe include parent invoice. |
|
848 | + // Maybe include parent invoice. |
|
849 | 849 | if ( $this->get_parent_payment()->is_paid() ) { |
850 | 850 | $count++; |
851 | 851 | } |
@@ -874,57 +874,57 @@ discard block |
||
874 | 874 | * |
875 | 875 | * @since 2.4 |
876 | 876 | * @param array $args Array of values for the payment, including amount and transaction ID |
877 | - * @param WPInv_Invoice $invoice If adding an existing invoice. |
|
877 | + * @param WPInv_Invoice $invoice If adding an existing invoice. |
|
878 | 878 | * @return bool |
879 | 879 | */ |
880 | 880 | public function add_payment( $args = array(), $invoice = false ) { |
881 | 881 | |
882 | - // Process each payment once. |
|
882 | + // Process each payment once. |
|
883 | 883 | if ( ! empty( $args['transaction_id'] ) && $this->payment_exists( $args['transaction_id'] ) ) { |
884 | 884 | return false; |
885 | 885 | } |
886 | 886 | |
887 | - // Are we creating a new invoice? |
|
888 | - if ( empty( $invoice ) ) { |
|
889 | - $invoice = $this->create_payment(); |
|
887 | + // Are we creating a new invoice? |
|
888 | + if ( empty( $invoice ) ) { |
|
889 | + $invoice = $this->create_payment(); |
|
890 | 890 | |
891 | - if ( empty( $invoice ) ) { |
|
892 | - return false; |
|
893 | - } |
|
891 | + if ( empty( $invoice ) ) { |
|
892 | + return false; |
|
893 | + } |
|
894 | 894 | |
895 | - } |
|
895 | + } |
|
896 | 896 | |
897 | - $invoice->set_status( 'wpi-renewal' ); |
|
897 | + $invoice->set_status( 'wpi-renewal' ); |
|
898 | 898 | |
899 | - // Maybe set a transaction id. |
|
900 | - if ( ! empty( $args['transaction_id'] ) ) { |
|
901 | - $invoice->set_transaction_id( $args['transaction_id'] ); |
|
902 | - } |
|
899 | + // Maybe set a transaction id. |
|
900 | + if ( ! empty( $args['transaction_id'] ) ) { |
|
901 | + $invoice->set_transaction_id( $args['transaction_id'] ); |
|
902 | + } |
|
903 | 903 | |
904 | - // Set the completed date. |
|
905 | - $invoice->set_completed_date( current_time( 'mysql' ) ); |
|
904 | + // Set the completed date. |
|
905 | + $invoice->set_completed_date( current_time( 'mysql' ) ); |
|
906 | 906 | |
907 | - // And the gateway. |
|
908 | - if ( ! empty( $args['gateway'] ) ) { |
|
909 | - $invoice->set_gateway( $args['gateway'] ); |
|
910 | - } |
|
907 | + // And the gateway. |
|
908 | + if ( ! empty( $args['gateway'] ) ) { |
|
909 | + $invoice->set_gateway( $args['gateway'] ); |
|
910 | + } |
|
911 | 911 | |
912 | - $invoice->save(); |
|
912 | + $invoice->save(); |
|
913 | 913 | |
914 | - if ( ! $invoice->exists() ) { |
|
915 | - return false; |
|
916 | - } |
|
914 | + if ( ! $invoice->exists() ) { |
|
915 | + return false; |
|
916 | + } |
|
917 | 917 | |
918 | - do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this ); |
|
919 | - do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this ); |
|
918 | + do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this ); |
|
919 | + do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this ); |
|
920 | 920 | do_action( 'wpinv_recurring_record_payment', $invoice->get_id(), $this->get_parent_invoice_id(), $invoice->get_recurring_total(), $invoice->get_transaction_id() ); |
921 | 921 | |
922 | 922 | update_post_meta( $invoice->get_id(), '_wpinv_subscription_id', $this->id ); |
923 | 923 | |
924 | 924 | return $invoice->get_id(); |
925 | - } |
|
925 | + } |
|
926 | 926 | |
927 | - /** |
|
927 | + /** |
|
928 | 928 | * Creates a new invoice and returns it. |
929 | 929 | * |
930 | 930 | * @since 1.0.19 |
@@ -932,105 +932,105 @@ discard block |
||
932 | 932 | */ |
933 | 933 | public function create_payment() { |
934 | 934 | |
935 | - $parent_invoice = $this->get_parent_payment(); |
|
936 | - |
|
937 | - if ( ! $parent_invoice->exists() ) { |
|
938 | - return false; |
|
939 | - } |
|
940 | - |
|
941 | - // Duplicate the parent invoice. |
|
942 | - $invoice = getpaid_duplicate_invoice( $parent_invoice ); |
|
943 | - $invoice->set_parent_id( $parent_invoice->get_id() ); |
|
944 | - |
|
945 | - // Maybe recalculate discount (Pre-GetPaid Fix). |
|
946 | - $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
947 | - if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) { |
|
948 | - $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
949 | - } |
|
950 | - |
|
951 | - $invoice->recalculate_total(); |
|
952 | - $invoice->set_status( 'wpi-pending' ); |
|
953 | - $invoice->save(); |
|
954 | - |
|
955 | - return $invoice->exists() ? $invoice : false; |
|
956 | - } |
|
957 | - |
|
958 | - /** |
|
959 | - * Renews or completes a subscription |
|
960 | - * |
|
961 | - * @since 1.0.0 |
|
962 | - * @return int The subscription's id |
|
963 | - */ |
|
964 | - public function renew() { |
|
965 | - |
|
966 | - // Complete subscription if applicable |
|
967 | - if ( $this->is_last_renewal() ) { |
|
968 | - return $this->complete(); |
|
969 | - } |
|
970 | - |
|
971 | - // Calculate new expiration |
|
972 | - $frequency = $this->get_frequency(); |
|
973 | - $period = $this->get_period(); |
|
974 | - $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() ); |
|
975 | - |
|
976 | - $this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) ); |
|
977 | - $this->set_status( 'active' ); |
|
978 | - $this->save(); |
|
979 | - |
|
980 | - do_action( 'getpaid_subscription_renewed', $this ); |
|
981 | - |
|
982 | - return $this->get_id(); |
|
983 | - } |
|
984 | - |
|
985 | - /** |
|
986 | - * Marks a subscription as completed |
|
987 | - * |
|
988 | - * Subscription is completed when the number of payments matches the billing_times field |
|
989 | - * |
|
990 | - * @since 1.0.0 |
|
991 | - * @return int|bool Subscription id or false if the subscription is cancelled. |
|
992 | - */ |
|
993 | - public function complete() { |
|
994 | - |
|
995 | - // Only mark a subscription as complete if it's not already cancelled. |
|
996 | - if ( $this->has_status( 'cancelled' ) ) { |
|
997 | - return false; |
|
998 | - } |
|
999 | - |
|
1000 | - $this->set_status( 'completed' ); |
|
1001 | - return $this->save(); |
|
1002 | - |
|
1003 | - } |
|
1004 | - |
|
1005 | - /** |
|
1006 | - * Marks a subscription as expired |
|
1007 | - * |
|
1008 | - * @since 1.0.0 |
|
1009 | - * @param bool $check_expiration |
|
1010 | - * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future. |
|
1011 | - */ |
|
1012 | - public function expire( $check_expiration = false ) { |
|
1013 | - |
|
1014 | - if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) { |
|
1015 | - // Do not mark as expired since real expiration date is in the future |
|
1016 | - return false; |
|
1017 | - } |
|
1018 | - |
|
1019 | - $this->set_status( 'expired' ); |
|
1020 | - return $this->save(); |
|
1021 | - |
|
1022 | - } |
|
1023 | - |
|
1024 | - /** |
|
1025 | - * Marks a subscription as failing |
|
1026 | - * |
|
1027 | - * @since 2.4.2 |
|
1028 | - * @return int Subscription id. |
|
1029 | - */ |
|
1030 | - public function failing() { |
|
1031 | - $this->set_status( 'failing' ); |
|
1032 | - return $this->save(); |
|
1033 | - } |
|
935 | + $parent_invoice = $this->get_parent_payment(); |
|
936 | + |
|
937 | + if ( ! $parent_invoice->exists() ) { |
|
938 | + return false; |
|
939 | + } |
|
940 | + |
|
941 | + // Duplicate the parent invoice. |
|
942 | + $invoice = getpaid_duplicate_invoice( $parent_invoice ); |
|
943 | + $invoice->set_parent_id( $parent_invoice->get_id() ); |
|
944 | + |
|
945 | + // Maybe recalculate discount (Pre-GetPaid Fix). |
|
946 | + $discount = new WPInv_Discount( $invoice->get_discount_code() ); |
|
947 | + if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) { |
|
948 | + $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) ); |
|
949 | + } |
|
950 | + |
|
951 | + $invoice->recalculate_total(); |
|
952 | + $invoice->set_status( 'wpi-pending' ); |
|
953 | + $invoice->save(); |
|
954 | + |
|
955 | + return $invoice->exists() ? $invoice : false; |
|
956 | + } |
|
957 | + |
|
958 | + /** |
|
959 | + * Renews or completes a subscription |
|
960 | + * |
|
961 | + * @since 1.0.0 |
|
962 | + * @return int The subscription's id |
|
963 | + */ |
|
964 | + public function renew() { |
|
965 | + |
|
966 | + // Complete subscription if applicable |
|
967 | + if ( $this->is_last_renewal() ) { |
|
968 | + return $this->complete(); |
|
969 | + } |
|
970 | + |
|
971 | + // Calculate new expiration |
|
972 | + $frequency = $this->get_frequency(); |
|
973 | + $period = $this->get_period(); |
|
974 | + $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() ); |
|
975 | + |
|
976 | + $this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) ); |
|
977 | + $this->set_status( 'active' ); |
|
978 | + $this->save(); |
|
979 | + |
|
980 | + do_action( 'getpaid_subscription_renewed', $this ); |
|
981 | + |
|
982 | + return $this->get_id(); |
|
983 | + } |
|
984 | + |
|
985 | + /** |
|
986 | + * Marks a subscription as completed |
|
987 | + * |
|
988 | + * Subscription is completed when the number of payments matches the billing_times field |
|
989 | + * |
|
990 | + * @since 1.0.0 |
|
991 | + * @return int|bool Subscription id or false if the subscription is cancelled. |
|
992 | + */ |
|
993 | + public function complete() { |
|
994 | + |
|
995 | + // Only mark a subscription as complete if it's not already cancelled. |
|
996 | + if ( $this->has_status( 'cancelled' ) ) { |
|
997 | + return false; |
|
998 | + } |
|
999 | + |
|
1000 | + $this->set_status( 'completed' ); |
|
1001 | + return $this->save(); |
|
1002 | + |
|
1003 | + } |
|
1004 | + |
|
1005 | + /** |
|
1006 | + * Marks a subscription as expired |
|
1007 | + * |
|
1008 | + * @since 1.0.0 |
|
1009 | + * @param bool $check_expiration |
|
1010 | + * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future. |
|
1011 | + */ |
|
1012 | + public function expire( $check_expiration = false ) { |
|
1013 | + |
|
1014 | + if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) { |
|
1015 | + // Do not mark as expired since real expiration date is in the future |
|
1016 | + return false; |
|
1017 | + } |
|
1018 | + |
|
1019 | + $this->set_status( 'expired' ); |
|
1020 | + return $this->save(); |
|
1021 | + |
|
1022 | + } |
|
1023 | + |
|
1024 | + /** |
|
1025 | + * Marks a subscription as failing |
|
1026 | + * |
|
1027 | + * @since 2.4.2 |
|
1028 | + * @return int Subscription id. |
|
1029 | + */ |
|
1030 | + public function failing() { |
|
1031 | + $this->set_status( 'failing' ); |
|
1032 | + return $this->save(); |
|
1033 | + } |
|
1034 | 1034 | |
1035 | 1035 | /** |
1036 | 1036 | * Marks a subscription as cancelled |
@@ -1039,19 +1039,19 @@ discard block |
||
1039 | 1039 | * @return int Subscription id. |
1040 | 1040 | */ |
1041 | 1041 | public function cancel() { |
1042 | - $this->set_status( 'cancelled' ); |
|
1043 | - return $this->save(); |
|
1042 | + $this->set_status( 'cancelled' ); |
|
1043 | + return $this->save(); |
|
1044 | 1044 | } |
1045 | 1045 | |
1046 | - /** |
|
1047 | - * Determines if a subscription can be cancelled both locally and with a payment processor. |
|
1048 | - * |
|
1049 | - * @since 1.0.0 |
|
1050 | - * @return bool |
|
1051 | - */ |
|
1052 | - public function can_cancel() { |
|
1053 | - return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this ); |
|
1054 | - } |
|
1046 | + /** |
|
1047 | + * Determines if a subscription can be cancelled both locally and with a payment processor. |
|
1048 | + * |
|
1049 | + * @since 1.0.0 |
|
1050 | + * @return bool |
|
1051 | + */ |
|
1052 | + public function can_cancel() { |
|
1053 | + return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this ); |
|
1054 | + } |
|
1055 | 1055 | |
1056 | 1056 | /** |
1057 | 1057 | * Returns an array of subscription statuses that can be cancelled |
@@ -1064,96 +1064,96 @@ discard block |
||
1064 | 1064 | return apply_filters( 'wpinv_recurring_cancellable_statuses', array( 'active', 'trialling', 'failing' ) ); |
1065 | 1065 | } |
1066 | 1066 | |
1067 | - /** |
|
1068 | - * Retrieves the URL to cancel subscription |
|
1069 | - * |
|
1070 | - * @since 1.0.0 |
|
1071 | - * @return string |
|
1072 | - */ |
|
1073 | - public function get_cancel_url() { |
|
1074 | - $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() ); |
|
1075 | - return apply_filters( 'wpinv_subscription_cancel_url', $url, $this ); |
|
1076 | - } |
|
1077 | - |
|
1078 | - /** |
|
1079 | - * Retrieves the URL to view a subscription |
|
1080 | - * |
|
1081 | - * @since 1.0.19 |
|
1082 | - * @return string |
|
1083 | - */ |
|
1084 | - public function get_view_url() { |
|
1085 | - |
|
1086 | - $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ); |
|
1087 | - $url = add_query_arg( 'subscription', $this->get_id(), $url ); |
|
1088 | - |
|
1089 | - return apply_filters( 'getpaid_get_subscription_view_url', $url, $this ); |
|
1090 | - } |
|
1091 | - |
|
1092 | - /** |
|
1093 | - * Determines if subscription can be manually renewed |
|
1094 | - * |
|
1095 | - * This method is filtered by payment gateways in order to return true on subscriptions |
|
1096 | - * that can be renewed manually |
|
1097 | - * |
|
1098 | - * @since 2.5 |
|
1099 | - * @return bool |
|
1100 | - */ |
|
1101 | - public function can_renew() { |
|
1102 | - return apply_filters( 'wpinv_subscription_can_renew', true, $this ); |
|
1103 | - } |
|
1104 | - |
|
1105 | - /** |
|
1106 | - * Retrieves the URL to renew a subscription |
|
1107 | - * |
|
1108 | - * @since 2.5 |
|
1109 | - * @return string |
|
1110 | - */ |
|
1111 | - public function get_renew_url() { |
|
1112 | - $url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' ); |
|
1113 | - return apply_filters( 'wpinv_subscription_renew_url', $url, $this ); |
|
1114 | - } |
|
1115 | - |
|
1116 | - /** |
|
1117 | - * Determines if subscription can have their payment method updated |
|
1118 | - * |
|
1119 | - * @since 1.0.0 |
|
1120 | - * @return bool |
|
1121 | - */ |
|
1122 | - public function can_update() { |
|
1123 | - return apply_filters( 'wpinv_subscription_can_update', false, $this ); |
|
1124 | - } |
|
1125 | - |
|
1126 | - /** |
|
1127 | - * Retrieves the URL to update subscription |
|
1128 | - * |
|
1129 | - * @since 1.0.0 |
|
1130 | - * @return string |
|
1131 | - */ |
|
1132 | - public function get_update_url() { |
|
1133 | - $url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) ); |
|
1134 | - return apply_filters( 'wpinv_subscription_update_url', $url, $this ); |
|
1135 | - } |
|
1136 | - |
|
1137 | - /** |
|
1138 | - * Retrieves the subscription status label |
|
1139 | - * |
|
1140 | - * @since 1.0.0 |
|
1141 | - * @return string |
|
1142 | - */ |
|
1143 | - public function get_status_label() { |
|
1144 | - return getpaid_get_subscription_status_label( $this->get_status() ); |
|
1145 | - } |
|
1146 | - |
|
1147 | - /** |
|
1148 | - * Retrieves the subscription status class |
|
1149 | - * |
|
1150 | - * @since 1.0.19 |
|
1151 | - * @return string |
|
1152 | - */ |
|
1153 | - public function get_status_class() { |
|
1154 | - $statuses = getpaid_get_subscription_status_classes(); |
|
1155 | - return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark'; |
|
1156 | - } |
|
1067 | + /** |
|
1068 | + * Retrieves the URL to cancel subscription |
|
1069 | + * |
|
1070 | + * @since 1.0.0 |
|
1071 | + * @return string |
|
1072 | + */ |
|
1073 | + public function get_cancel_url() { |
|
1074 | + $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() ); |
|
1075 | + return apply_filters( 'wpinv_subscription_cancel_url', $url, $this ); |
|
1076 | + } |
|
1077 | + |
|
1078 | + /** |
|
1079 | + * Retrieves the URL to view a subscription |
|
1080 | + * |
|
1081 | + * @since 1.0.19 |
|
1082 | + * @return string |
|
1083 | + */ |
|
1084 | + public function get_view_url() { |
|
1085 | + |
|
1086 | + $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ); |
|
1087 | + $url = add_query_arg( 'subscription', $this->get_id(), $url ); |
|
1088 | + |
|
1089 | + return apply_filters( 'getpaid_get_subscription_view_url', $url, $this ); |
|
1090 | + } |
|
1091 | + |
|
1092 | + /** |
|
1093 | + * Determines if subscription can be manually renewed |
|
1094 | + * |
|
1095 | + * This method is filtered by payment gateways in order to return true on subscriptions |
|
1096 | + * that can be renewed manually |
|
1097 | + * |
|
1098 | + * @since 2.5 |
|
1099 | + * @return bool |
|
1100 | + */ |
|
1101 | + public function can_renew() { |
|
1102 | + return apply_filters( 'wpinv_subscription_can_renew', true, $this ); |
|
1103 | + } |
|
1104 | + |
|
1105 | + /** |
|
1106 | + * Retrieves the URL to renew a subscription |
|
1107 | + * |
|
1108 | + * @since 2.5 |
|
1109 | + * @return string |
|
1110 | + */ |
|
1111 | + public function get_renew_url() { |
|
1112 | + $url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' ); |
|
1113 | + return apply_filters( 'wpinv_subscription_renew_url', $url, $this ); |
|
1114 | + } |
|
1115 | + |
|
1116 | + /** |
|
1117 | + * Determines if subscription can have their payment method updated |
|
1118 | + * |
|
1119 | + * @since 1.0.0 |
|
1120 | + * @return bool |
|
1121 | + */ |
|
1122 | + public function can_update() { |
|
1123 | + return apply_filters( 'wpinv_subscription_can_update', false, $this ); |
|
1124 | + } |
|
1125 | + |
|
1126 | + /** |
|
1127 | + * Retrieves the URL to update subscription |
|
1128 | + * |
|
1129 | + * @since 1.0.0 |
|
1130 | + * @return string |
|
1131 | + */ |
|
1132 | + public function get_update_url() { |
|
1133 | + $url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) ); |
|
1134 | + return apply_filters( 'wpinv_subscription_update_url', $url, $this ); |
|
1135 | + } |
|
1136 | + |
|
1137 | + /** |
|
1138 | + * Retrieves the subscription status label |
|
1139 | + * |
|
1140 | + * @since 1.0.0 |
|
1141 | + * @return string |
|
1142 | + */ |
|
1143 | + public function get_status_label() { |
|
1144 | + return getpaid_get_subscription_status_label( $this->get_status() ); |
|
1145 | + } |
|
1146 | + |
|
1147 | + /** |
|
1148 | + * Retrieves the subscription status class |
|
1149 | + * |
|
1150 | + * @since 1.0.19 |
|
1151 | + * @return string |
|
1152 | + */ |
|
1153 | + public function get_status_class() { |
|
1154 | + $statuses = getpaid_get_subscription_status_classes(); |
|
1155 | + return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark'; |
|
1156 | + } |
|
1157 | 1157 | |
1158 | 1158 | /** |
1159 | 1159 | * Retrieves the subscription status label |
@@ -1163,11 +1163,11 @@ discard block |
||
1163 | 1163 | */ |
1164 | 1164 | public function get_status_label_html() { |
1165 | 1165 | |
1166 | - $status_label = sanitize_text_field( $this->get_status_label() ); |
|
1167 | - $class = esc_attr( $this->get_status_class() ); |
|
1168 | - $status = sanitize_html_class( $this->get_status() ); |
|
1166 | + $status_label = sanitize_text_field( $this->get_status_label() ); |
|
1167 | + $class = esc_attr( $this->get_status_class() ); |
|
1168 | + $status = sanitize_html_class( $this->get_status() ); |
|
1169 | 1169 | |
1170 | - return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>"; |
|
1170 | + return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>"; |
|
1171 | 1171 | } |
1172 | 1172 | |
1173 | 1173 | /** |
@@ -1178,75 +1178,75 @@ discard block |
||
1178 | 1178 | * @return bool |
1179 | 1179 | */ |
1180 | 1180 | public function payment_exists( $txn_id = '' ) { |
1181 | - $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' ); |
|
1181 | + $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' ); |
|
1182 | 1182 | return ! empty( $invoice_id ); |
1183 | - } |
|
1184 | - |
|
1185 | - /** |
|
1186 | - * Handle the status transition. |
|
1187 | - */ |
|
1188 | - protected function status_transition() { |
|
1189 | - $status_transition = $this->status_transition; |
|
1190 | - |
|
1191 | - // Reset status transition variable. |
|
1192 | - $this->status_transition = false; |
|
1193 | - |
|
1194 | - if ( $status_transition ) { |
|
1195 | - try { |
|
1196 | - |
|
1197 | - // Fire a hook for the status change. |
|
1198 | - do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition ); |
|
1199 | - do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition ); |
|
1200 | - |
|
1201 | - if ( ! empty( $status_transition['from'] ) ) { |
|
1202 | - |
|
1203 | - /* translators: 1: old subscription status 2: new subscription status */ |
|
1204 | - $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'] ) ); |
|
1205 | - |
|
1206 | - // Note the transition occurred. |
|
1207 | - $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1208 | - |
|
1209 | - // Fire another hook. |
|
1210 | - do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this ); |
|
1211 | - do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] ); |
|
1212 | - |
|
1213 | - } else { |
|
1214 | - /* translators: %s: new invoice status */ |
|
1215 | - $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1216 | - |
|
1217 | - // Note the transition occurred. |
|
1218 | - $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1219 | - |
|
1220 | - } |
|
1221 | - } catch ( Exception $e ) { |
|
1222 | - $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() ); |
|
1223 | - } |
|
1224 | - } |
|
1225 | - |
|
1226 | - } |
|
1227 | - |
|
1228 | - /** |
|
1229 | - * Save data to the database. |
|
1230 | - * |
|
1231 | - * @since 1.0.19 |
|
1232 | - * @return int subscription ID |
|
1233 | - */ |
|
1234 | - public function save() { |
|
1235 | - parent::save(); |
|
1236 | - $this->status_transition(); |
|
1237 | - return $this->get_id(); |
|
1238 | - } |
|
1239 | - |
|
1240 | - /** |
|
1241 | - * Activates a subscription. |
|
1242 | - * |
|
1243 | - * @since 1.0.19 |
|
1244 | - * @return int subscription ID |
|
1245 | - */ |
|
1246 | - public function activate() { |
|
1247 | - $status = 'trialling' == $this->get_status() ? 'trialling' : 'active'; |
|
1248 | - $this->set_status( $status ); |
|
1249 | - return $this->save(); |
|
1250 | - } |
|
1183 | + } |
|
1184 | + |
|
1185 | + /** |
|
1186 | + * Handle the status transition. |
|
1187 | + */ |
|
1188 | + protected function status_transition() { |
|
1189 | + $status_transition = $this->status_transition; |
|
1190 | + |
|
1191 | + // Reset status transition variable. |
|
1192 | + $this->status_transition = false; |
|
1193 | + |
|
1194 | + if ( $status_transition ) { |
|
1195 | + try { |
|
1196 | + |
|
1197 | + // Fire a hook for the status change. |
|
1198 | + do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition ); |
|
1199 | + do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition ); |
|
1200 | + |
|
1201 | + if ( ! empty( $status_transition['from'] ) ) { |
|
1202 | + |
|
1203 | + /* translators: 1: old subscription status 2: new subscription status */ |
|
1204 | + $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'] ) ); |
|
1205 | + |
|
1206 | + // Note the transition occurred. |
|
1207 | + $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1208 | + |
|
1209 | + // Fire another hook. |
|
1210 | + do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this ); |
|
1211 | + do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] ); |
|
1212 | + |
|
1213 | + } else { |
|
1214 | + /* translators: %s: new invoice status */ |
|
1215 | + $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) ); |
|
1216 | + |
|
1217 | + // Note the transition occurred. |
|
1218 | + $this->get_parent_payment()->add_note( $transition_note, false, false, true ); |
|
1219 | + |
|
1220 | + } |
|
1221 | + } catch ( Exception $e ) { |
|
1222 | + $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() ); |
|
1223 | + } |
|
1224 | + } |
|
1225 | + |
|
1226 | + } |
|
1227 | + |
|
1228 | + /** |
|
1229 | + * Save data to the database. |
|
1230 | + * |
|
1231 | + * @since 1.0.19 |
|
1232 | + * @return int subscription ID |
|
1233 | + */ |
|
1234 | + public function save() { |
|
1235 | + parent::save(); |
|
1236 | + $this->status_transition(); |
|
1237 | + return $this->get_id(); |
|
1238 | + } |
|
1239 | + |
|
1240 | + /** |
|
1241 | + * Activates a subscription. |
|
1242 | + * |
|
1243 | + * @since 1.0.19 |
|
1244 | + * @return int subscription ID |
|
1245 | + */ |
|
1246 | + public function activate() { |
|
1247 | + $status = 'trialling' == $this->get_status() ? 'trialling' : 'active'; |
|
1248 | + $this->set_status( $status ); |
|
1249 | + return $this->save(); |
|
1250 | + } |
|
1251 | 1251 | |
1252 | 1252 | } |
@@ -8,7 +8,7 @@ discard block |
||
8 | 8 | */ |
9 | 9 | |
10 | 10 | if ( ! defined( 'ABSPATH' ) ) { |
11 | - exit; // Exit if accessed directly |
|
11 | + exit; // Exit if accessed directly |
|
12 | 12 | } |
13 | 13 | |
14 | 14 | /** |
@@ -17,10 +17,10 @@ discard block |
||
17 | 17 | class GetPaid_Meta_Box_Invoice_Address { |
18 | 18 | |
19 | 19 | /** |
20 | - * Output the metabox. |
|
21 | - * |
|
22 | - * @param WP_Post $post |
|
23 | - */ |
|
20 | + * Output the metabox. |
|
21 | + * |
|
22 | + * @param WP_Post $post |
|
23 | + */ |
|
24 | 24 | public static function output( $post ) { |
25 | 25 | |
26 | 26 | // Prepare the invoice. |
@@ -298,18 +298,18 @@ discard block |
||
298 | 298 | } |
299 | 299 | |
300 | 300 | /** |
301 | - * Save meta box data. |
|
302 | - * |
|
303 | - * @param int $post_id |
|
304 | - */ |
|
305 | - public static function save( $post_id ) { |
|
301 | + * Save meta box data. |
|
302 | + * |
|
303 | + * @param int $post_id |
|
304 | + */ |
|
305 | + public static function save( $post_id ) { |
|
306 | 306 | |
307 | 307 | // Prepare the invoice. |
308 | 308 | $invoice = new WPInv_Invoice( $post_id ); |
309 | 309 | |
310 | 310 | // Load new data. |
311 | 311 | $invoice->set_props( |
312 | - array( |
|
312 | + array( |
|
313 | 313 | 'template' => isset( $_POST['wpinv_template'] ) ? wpinv_clean( $_POST['wpinv_template'] ) : null, |
314 | 314 | 'email_cc' => isset( $_POST['wpinv_cc'] ) ? wpinv_clean( $_POST['wpinv_cc'] ) : null, |
315 | 315 | 'disable_taxes' => isset( $_POST['disable_taxes'] ), |
@@ -330,7 +330,7 @@ discard block |
||
330 | 330 | 'due_date' => isset( $_POST['wpinv_due_date'] ) ? wpinv_clean( $_POST['wpinv_due_date'] ) : null, |
331 | 331 | 'number' => isset( $_POST['wpinv_number'] ) ? wpinv_clean( $_POST['wpinv_number'] ) : null, |
332 | 332 | 'status' => isset( $_POST['wpinv_status'] ) ? wpinv_clean( $_POST['wpinv_status'] ) : null, |
333 | - ) |
|
333 | + ) |
|
334 | 334 | ); |
335 | 335 | |
336 | 336 | // Discount code. |
@@ -376,6 +376,6 @@ discard block |
||
376 | 376 | } |
377 | 377 | |
378 | 378 | // Fires after an invoice is saved. |
379 | - do_action( 'wpinv_invoice_metabox_saved', $invoice ); |
|
380 | - } |
|
379 | + do_action( 'wpinv_invoice_metabox_saved', $invoice ); |
|
380 | + } |
|
381 | 381 | } |
@@ -12,256 +12,256 @@ |
||
12 | 12 | defined( 'ABSPATH' ) || exit; |
13 | 13 | |
14 | 14 | return array( |
15 | - 'US' => __('United States', 'invoicing'), |
|
16 | - 'CA' => __('Canada', 'invoicing'), |
|
17 | - 'GB' => __('United Kingdom', 'invoicing'), |
|
18 | - 'AF' => __('Afghanistan', 'invoicing'), |
|
19 | - 'AX' => __('Aland Islands', 'invoicing'), |
|
20 | - 'AL' => __('Albania', 'invoicing'), |
|
21 | - 'DZ' => __('Algeria', 'invoicing'), |
|
22 | - 'AS' => __('American Samoa', 'invoicing'), |
|
23 | - 'AD' => __('Andorra', 'invoicing'), |
|
24 | - 'AO' => __('Angola', 'invoicing'), |
|
25 | - 'AI' => __('Anguilla', 'invoicing'), |
|
26 | - 'AQ' => __('Antarctica', 'invoicing'), |
|
27 | - 'AG' => __('Antigua and Barbuda', 'invoicing'), |
|
28 | - 'AR' => __('Argentina', 'invoicing'), |
|
29 | - 'AM' => __('Armenia', 'invoicing'), |
|
30 | - 'AW' => __('Aruba', 'invoicing'), |
|
31 | - 'AU' => __('Australia', 'invoicing'), |
|
32 | - 'AT' => __('Austria', 'invoicing'), |
|
33 | - 'AZ' => __('Azerbaijan', 'invoicing'), |
|
34 | - 'BS' => __('Bahamas', 'invoicing'), |
|
35 | - 'BH' => __('Bahrain', 'invoicing'), |
|
36 | - 'BD' => __('Bangladesh', 'invoicing'), |
|
37 | - 'BB' => __('Barbados', 'invoicing'), |
|
38 | - 'BY' => __('Belarus', 'invoicing'), |
|
39 | - 'BE' => __('Belgium', 'invoicing'), |
|
40 | - 'BZ' => __('Belize', 'invoicing'), |
|
41 | - 'BJ' => __('Benin', 'invoicing'), |
|
42 | - 'BM' => __('Bermuda', 'invoicing'), |
|
43 | - 'BT' => __('Bhutan', 'invoicing'), |
|
44 | - 'BO' => __('Bolivia', 'invoicing'), |
|
45 | - 'BQ' => __('Bonaire, Saint Eustatius and Saba', 'invoicing'), |
|
46 | - 'BA' => __('Bosnia and Herzegovina', 'invoicing'), |
|
47 | - 'BW' => __('Botswana', 'invoicing'), |
|
48 | - 'BV' => __('Bouvet Island', 'invoicing'), |
|
49 | - 'BR' => __('Brazil', 'invoicing'), |
|
50 | - 'IO' => __('British Indian Ocean Territory', 'invoicing'), |
|
51 | - 'BN' => __('Brunei Darrussalam', 'invoicing'), |
|
52 | - 'BG' => __('Bulgaria', 'invoicing'), |
|
53 | - 'BF' => __('Burkina Faso', 'invoicing'), |
|
54 | - 'BI' => __('Burundi', 'invoicing'), |
|
55 | - 'KH' => __('Cambodia', 'invoicing'), |
|
56 | - 'CM' => __('Cameroon', 'invoicing'), |
|
57 | - 'CV' => __('Cape Verde', 'invoicing'), |
|
58 | - 'KY' => __('Cayman Islands', 'invoicing'), |
|
59 | - 'CF' => __('Central African Republic', 'invoicing'), |
|
60 | - 'TD' => __('Chad', 'invoicing'), |
|
61 | - 'CL' => __('Chile', 'invoicing'), |
|
62 | - 'CN' => __('China', 'invoicing'), |
|
63 | - 'CX' => __('Christmas Island', 'invoicing'), |
|
64 | - 'CC' => __('Cocos Islands', 'invoicing'), |
|
65 | - 'CO' => __('Colombia', 'invoicing'), |
|
66 | - 'KM' => __('Comoros', 'invoicing'), |
|
67 | - 'CD' => __('Congo, Democratic People\'s Republic', 'invoicing'), |
|
68 | - 'CG' => __('Congo, Republic of', 'invoicing'), |
|
69 | - 'CK' => __('Cook Islands', 'invoicing'), |
|
70 | - 'CR' => __('Costa Rica', 'invoicing'), |
|
71 | - 'CI' => __('Cote d\'Ivoire', 'invoicing'), |
|
72 | - 'HR' => __('Croatia/Hrvatska', 'invoicing'), |
|
73 | - 'CU' => __('Cuba', 'invoicing'), |
|
74 | - 'CW' => __('CuraÇao', 'invoicing'), |
|
75 | - 'CY' => __('Cyprus', 'invoicing'), |
|
76 | - 'CZ' => __('Czech Republic', 'invoicing'), |
|
77 | - 'DK' => __('Denmark', 'invoicing'), |
|
78 | - 'DJ' => __('Djibouti', 'invoicing'), |
|
79 | - 'DM' => __('Dominica', 'invoicing'), |
|
80 | - 'DO' => __('Dominican Republic', 'invoicing'), |
|
81 | - 'TP' => __('East Timor', 'invoicing'), |
|
82 | - 'EC' => __('Ecuador', 'invoicing'), |
|
83 | - 'EG' => __('Egypt', 'invoicing'), |
|
84 | - 'GQ' => __('Equatorial Guinea', 'invoicing'), |
|
85 | - 'SV' => __('El Salvador', 'invoicing'), |
|
86 | - 'ER' => __('Eritrea', 'invoicing'), |
|
87 | - 'EE' => __('Estonia', 'invoicing'), |
|
88 | - 'ET' => __('Ethiopia', 'invoicing'), |
|
89 | - 'FK' => __('Falkland Islands', 'invoicing'), |
|
90 | - 'FO' => __('Faroe Islands', 'invoicing'), |
|
91 | - 'FJ' => __('Fiji', 'invoicing'), |
|
92 | - 'FI' => __('Finland', 'invoicing'), |
|
93 | - 'FR' => __('France', 'invoicing'), |
|
94 | - 'GF' => __('French Guiana', 'invoicing'), |
|
95 | - 'PF' => __('French Polynesia', 'invoicing'), |
|
96 | - 'TF' => __('French Southern Territories', 'invoicing'), |
|
97 | - 'GA' => __('Gabon', 'invoicing'), |
|
98 | - 'GM' => __('Gambia', 'invoicing'), |
|
99 | - 'GE' => __('Georgia', 'invoicing'), |
|
100 | - 'DE' => __('Germany', 'invoicing'), |
|
101 | - 'GR' => __('Greece', 'invoicing'), |
|
102 | - 'GH' => __('Ghana', 'invoicing'), |
|
103 | - 'GI' => __('Gibraltar', 'invoicing'), |
|
104 | - 'GL' => __('Greenland', 'invoicing'), |
|
105 | - 'GD' => __('Grenada', 'invoicing'), |
|
106 | - 'GP' => __('Guadeloupe', 'invoicing'), |
|
107 | - 'GU' => __('Guam', 'invoicing'), |
|
108 | - 'GT' => __('Guatemala', 'invoicing'), |
|
109 | - 'GG' => __('Guernsey', 'invoicing'), |
|
110 | - 'GN' => __('Guinea', 'invoicing'), |
|
111 | - 'GW' => __('Guinea-Bissau', 'invoicing'), |
|
112 | - 'GY' => __('Guyana', 'invoicing'), |
|
113 | - 'HT' => __('Haiti', 'invoicing'), |
|
114 | - 'HM' => __('Heard and McDonald Islands', 'invoicing'), |
|
115 | - 'VA' => __('Holy See (City Vatican State)', 'invoicing'), |
|
116 | - 'HN' => __('Honduras', 'invoicing'), |
|
117 | - 'HK' => __('Hong Kong', 'invoicing'), |
|
118 | - 'HU' => __('Hungary', 'invoicing'), |
|
119 | - 'IS' => __('Iceland', 'invoicing'), |
|
120 | - 'IN' => __('India', 'invoicing'), |
|
121 | - 'ID' => __('Indonesia', 'invoicing'), |
|
122 | - 'IR' => __('Iran', 'invoicing'), |
|
123 | - 'IQ' => __('Iraq', 'invoicing'), |
|
124 | - 'IE' => __('Ireland', 'invoicing'), |
|
125 | - 'IM' => __('Isle of Man', 'invoicing'), |
|
126 | - 'IL' => __('Israel', 'invoicing'), |
|
127 | - 'IT' => __('Italy', 'invoicing'), |
|
128 | - 'JM' => __('Jamaica', 'invoicing'), |
|
129 | - 'JP' => __('Japan', 'invoicing'), |
|
130 | - 'JE' => __('Jersey', 'invoicing'), |
|
131 | - 'JO' => __('Jordan', 'invoicing'), |
|
132 | - 'KZ' => __('Kazakhstan', 'invoicing'), |
|
133 | - 'KE' => __('Kenya', 'invoicing'), |
|
134 | - 'KI' => __('Kiribati', 'invoicing'), |
|
135 | - 'KW' => __('Kuwait', 'invoicing'), |
|
136 | - 'KG' => __('Kyrgyzstan', 'invoicing'), |
|
137 | - 'LA' => __('Lao People\'s Democratic Republic', 'invoicing'), |
|
138 | - 'LV' => __('Latvia', 'invoicing'), |
|
139 | - 'LB' => __('Lebanon', 'invoicing'), |
|
140 | - 'LS' => __('Lesotho', 'invoicing'), |
|
141 | - 'LR' => __('Liberia', 'invoicing'), |
|
142 | - 'LY' => __('Libyan Arab Jamahiriya', 'invoicing'), |
|
143 | - 'LI' => __('Liechtenstein', 'invoicing'), |
|
144 | - 'LT' => __('Lithuania', 'invoicing'), |
|
145 | - 'LU' => __('Luxembourg', 'invoicing'), |
|
146 | - 'MO' => __('Macau', 'invoicing'), |
|
147 | - 'MK' => __('Macedonia', 'invoicing'), |
|
148 | - 'MG' => __('Madagascar', 'invoicing'), |
|
149 | - 'MW' => __('Malawi', 'invoicing'), |
|
150 | - 'MY' => __('Malaysia', 'invoicing'), |
|
151 | - 'MV' => __('Maldives', 'invoicing'), |
|
152 | - 'ML' => __('Mali', 'invoicing'), |
|
153 | - 'MT' => __('Malta', 'invoicing'), |
|
154 | - 'MH' => __('Marshall Islands', 'invoicing'), |
|
155 | - 'MQ' => __('Martinique', 'invoicing'), |
|
156 | - 'MR' => __('Mauritania', 'invoicing'), |
|
157 | - 'MU' => __('Mauritius', 'invoicing'), |
|
158 | - 'YT' => __('Mayotte', 'invoicing'), |
|
159 | - 'MX' => __('Mexico', 'invoicing'), |
|
160 | - 'FM' => __('Micronesia', 'invoicing'), |
|
161 | - 'MD' => __('Moldova, Republic of', 'invoicing'), |
|
162 | - 'MC' => __('Monaco', 'invoicing'), |
|
163 | - 'MN' => __('Mongolia', 'invoicing'), |
|
164 | - 'ME' => __('Montenegro', 'invoicing'), |
|
165 | - 'MS' => __('Montserrat', 'invoicing'), |
|
166 | - 'MA' => __('Morocco', 'invoicing'), |
|
167 | - 'MZ' => __('Mozambique', 'invoicing'), |
|
168 | - 'MM' => __('Myanmar', 'invoicing'), |
|
169 | - 'NA' => __('Namibia', 'invoicing'), |
|
170 | - 'NR' => __('Nauru', 'invoicing'), |
|
171 | - 'NP' => __('Nepal', 'invoicing'), |
|
172 | - 'NL' => __('Netherlands', 'invoicing'), |
|
173 | - 'AN' => __('Netherlands Antilles', 'invoicing'), |
|
174 | - 'NC' => __('New Caledonia', 'invoicing'), |
|
175 | - 'NZ' => __('New Zealand', 'invoicing'), |
|
176 | - 'NI' => __('Nicaragua', 'invoicing'), |
|
177 | - 'NE' => __('Niger', 'invoicing'), |
|
178 | - 'NG' => __('Nigeria', 'invoicing'), |
|
179 | - 'NU' => __('Niue', 'invoicing'), |
|
180 | - 'NF' => __('Norfolk Island', 'invoicing'), |
|
181 | - 'KP' => __('North Korea', 'invoicing'), |
|
182 | - 'MP' => __('Northern Mariana Islands', 'invoicing'), |
|
183 | - 'NO' => __('Norway', 'invoicing'), |
|
184 | - 'OM' => __('Oman', 'invoicing'), |
|
185 | - 'PK' => __('Pakistan', 'invoicing'), |
|
186 | - 'PW' => __('Palau', 'invoicing'), |
|
187 | - 'PS' => __('Palestinian Territories', 'invoicing'), |
|
188 | - 'PA' => __('Panama', 'invoicing'), |
|
189 | - 'PG' => __('Papua New Guinea', 'invoicing'), |
|
190 | - 'PY' => __('Paraguay', 'invoicing'), |
|
191 | - 'PE' => __('Peru', 'invoicing'), |
|
192 | - 'PH' => __('Philippines', 'invoicing'), |
|
193 | - 'PN' => __('Pitcairn Island', 'invoicing'), |
|
194 | - 'PL' => __('Poland', 'invoicing'), |
|
195 | - 'PT' => __('Portugal', 'invoicing'), |
|
196 | - 'PR' => __('Puerto Rico', 'invoicing'), |
|
197 | - 'QA' => __('Qatar', 'invoicing'), |
|
198 | - 'XK' => __('Republic of Kosovo', 'invoicing'), |
|
199 | - 'RE' => __('Reunion Island', 'invoicing'), |
|
200 | - 'RO' => __('Romania', 'invoicing'), |
|
201 | - 'RU' => __('Russian Federation', 'invoicing'), |
|
202 | - 'RW' => __('Rwanda', 'invoicing'), |
|
203 | - 'BL' => __('Saint Barthélemy', 'invoicing'), |
|
204 | - 'SH' => __('Saint Helena', 'invoicing'), |
|
205 | - 'KN' => __('Saint Kitts and Nevis', 'invoicing'), |
|
206 | - 'LC' => __('Saint Lucia', 'invoicing'), |
|
207 | - 'MF' => __('Saint Martin (French)', 'invoicing'), |
|
208 | - 'SX' => __('Saint Martin (Dutch)', 'invoicing'), |
|
209 | - 'PM' => __('Saint Pierre and Miquelon', 'invoicing'), |
|
210 | - 'VC' => __('Saint Vincent and the Grenadines', 'invoicing'), |
|
211 | - 'SM' => __('San Marino', 'invoicing'), |
|
212 | - 'ST' => __('São Tomé and Príncipe', 'invoicing'), |
|
213 | - 'SA' => __('Saudi Arabia', 'invoicing'), |
|
214 | - 'SN' => __('Senegal', 'invoicing'), |
|
215 | - 'RS' => __('Serbia', 'invoicing'), |
|
216 | - 'SC' => __('Seychelles', 'invoicing'), |
|
217 | - 'SL' => __('Sierra Leone', 'invoicing'), |
|
218 | - 'SG' => __('Singapore', 'invoicing'), |
|
219 | - 'SK' => __('Slovak Republic', 'invoicing'), |
|
220 | - 'SI' => __('Slovenia', 'invoicing'), |
|
221 | - 'SB' => __('Solomon Islands', 'invoicing'), |
|
222 | - 'SO' => __('Somalia', 'invoicing'), |
|
223 | - 'ZA' => __('South Africa', 'invoicing'), |
|
224 | - 'GS' => __('South Georgia', 'invoicing'), |
|
225 | - 'KR' => __('South Korea', 'invoicing'), |
|
226 | - 'SS' => __('South Sudan', 'invoicing'), |
|
227 | - 'ES' => __('Spain', 'invoicing'), |
|
228 | - 'LK' => __('Sri Lanka', 'invoicing'), |
|
229 | - 'SD' => __('Sudan', 'invoicing'), |
|
230 | - 'SR' => __('Suriname', 'invoicing'), |
|
231 | - 'SJ' => __('Svalbard and Jan Mayen Islands', 'invoicing'), |
|
232 | - 'SZ' => __('Swaziland', 'invoicing'), |
|
233 | - 'SE' => __('Sweden', 'invoicing'), |
|
234 | - 'CH' => __('Switzerland', 'invoicing'), |
|
235 | - 'SY' => __('Syrian Arab Republic', 'invoicing'), |
|
236 | - 'TW' => __('Taiwan', 'invoicing'), |
|
237 | - 'TJ' => __('Tajikistan', 'invoicing'), |
|
238 | - 'TZ' => __('Tanzania', 'invoicing'), |
|
239 | - 'TH' => __('Thailand', 'invoicing'), |
|
240 | - 'TL' => __('Timor-Leste', 'invoicing'), |
|
241 | - 'TG' => __('Togo', 'invoicing'), |
|
242 | - 'TK' => __('Tokelau', 'invoicing'), |
|
243 | - 'TO' => __('Tonga', 'invoicing'), |
|
244 | - 'TT' => __('Trinidad and Tobago', 'invoicing'), |
|
245 | - 'TN' => __('Tunisia', 'invoicing'), |
|
246 | - 'TR' => __('Turkey', 'invoicing'), |
|
247 | - 'TM' => __('Turkmenistan', 'invoicing'), |
|
248 | - 'TC' => __('Turks and Caicos Islands', 'invoicing'), |
|
249 | - 'TV' => __('Tuvalu', 'invoicing'), |
|
250 | - 'UG' => __('Uganda', 'invoicing'), |
|
251 | - 'UA' => __('Ukraine', 'invoicing'), |
|
252 | - 'AE' => __('United Arab Emirates', 'invoicing'), |
|
253 | - 'UY' => __('Uruguay', 'invoicing'), |
|
254 | - 'UM' => __('US Minor Outlying Islands', 'invoicing'), |
|
255 | - 'UZ' => __('Uzbekistan', 'invoicing'), |
|
256 | - 'VU' => __('Vanuatu', 'invoicing'), |
|
257 | - 'VE' => __('Venezuela', 'invoicing'), |
|
258 | - 'VN' => __('Vietnam', 'invoicing'), |
|
259 | - 'VG' => __('Virgin Islands (British)', 'invoicing'), |
|
260 | - 'VI' => __('Virgin Islands (USA)', 'invoicing'), |
|
261 | - 'WF' => __('Wallis and Futuna Islands', 'invoicing'), |
|
262 | - 'EH' => __('Western Sahara', 'invoicing'), |
|
263 | - 'WS' => __('Western Samoa', 'invoicing'), |
|
264 | - 'YE' => __('Yemen', 'invoicing'), |
|
265 | - 'ZM' => __('Zambia', 'invoicing'), |
|
266 | - 'ZW' => __('Zimbabwe', 'invoicing'), |
|
15 | + 'US' => __('United States', 'invoicing'), |
|
16 | + 'CA' => __('Canada', 'invoicing'), |
|
17 | + 'GB' => __('United Kingdom', 'invoicing'), |
|
18 | + 'AF' => __('Afghanistan', 'invoicing'), |
|
19 | + 'AX' => __('Aland Islands', 'invoicing'), |
|
20 | + 'AL' => __('Albania', 'invoicing'), |
|
21 | + 'DZ' => __('Algeria', 'invoicing'), |
|
22 | + 'AS' => __('American Samoa', 'invoicing'), |
|
23 | + 'AD' => __('Andorra', 'invoicing'), |
|
24 | + 'AO' => __('Angola', 'invoicing'), |
|
25 | + 'AI' => __('Anguilla', 'invoicing'), |
|
26 | + 'AQ' => __('Antarctica', 'invoicing'), |
|
27 | + 'AG' => __('Antigua and Barbuda', 'invoicing'), |
|
28 | + 'AR' => __('Argentina', 'invoicing'), |
|
29 | + 'AM' => __('Armenia', 'invoicing'), |
|
30 | + 'AW' => __('Aruba', 'invoicing'), |
|
31 | + 'AU' => __('Australia', 'invoicing'), |
|
32 | + 'AT' => __('Austria', 'invoicing'), |
|
33 | + 'AZ' => __('Azerbaijan', 'invoicing'), |
|
34 | + 'BS' => __('Bahamas', 'invoicing'), |
|
35 | + 'BH' => __('Bahrain', 'invoicing'), |
|
36 | + 'BD' => __('Bangladesh', 'invoicing'), |
|
37 | + 'BB' => __('Barbados', 'invoicing'), |
|
38 | + 'BY' => __('Belarus', 'invoicing'), |
|
39 | + 'BE' => __('Belgium', 'invoicing'), |
|
40 | + 'BZ' => __('Belize', 'invoicing'), |
|
41 | + 'BJ' => __('Benin', 'invoicing'), |
|
42 | + 'BM' => __('Bermuda', 'invoicing'), |
|
43 | + 'BT' => __('Bhutan', 'invoicing'), |
|
44 | + 'BO' => __('Bolivia', 'invoicing'), |
|
45 | + 'BQ' => __('Bonaire, Saint Eustatius and Saba', 'invoicing'), |
|
46 | + 'BA' => __('Bosnia and Herzegovina', 'invoicing'), |
|
47 | + 'BW' => __('Botswana', 'invoicing'), |
|
48 | + 'BV' => __('Bouvet Island', 'invoicing'), |
|
49 | + 'BR' => __('Brazil', 'invoicing'), |
|
50 | + 'IO' => __('British Indian Ocean Territory', 'invoicing'), |
|
51 | + 'BN' => __('Brunei Darrussalam', 'invoicing'), |
|
52 | + 'BG' => __('Bulgaria', 'invoicing'), |
|
53 | + 'BF' => __('Burkina Faso', 'invoicing'), |
|
54 | + 'BI' => __('Burundi', 'invoicing'), |
|
55 | + 'KH' => __('Cambodia', 'invoicing'), |
|
56 | + 'CM' => __('Cameroon', 'invoicing'), |
|
57 | + 'CV' => __('Cape Verde', 'invoicing'), |
|
58 | + 'KY' => __('Cayman Islands', 'invoicing'), |
|
59 | + 'CF' => __('Central African Republic', 'invoicing'), |
|
60 | + 'TD' => __('Chad', 'invoicing'), |
|
61 | + 'CL' => __('Chile', 'invoicing'), |
|
62 | + 'CN' => __('China', 'invoicing'), |
|
63 | + 'CX' => __('Christmas Island', 'invoicing'), |
|
64 | + 'CC' => __('Cocos Islands', 'invoicing'), |
|
65 | + 'CO' => __('Colombia', 'invoicing'), |
|
66 | + 'KM' => __('Comoros', 'invoicing'), |
|
67 | + 'CD' => __('Congo, Democratic People\'s Republic', 'invoicing'), |
|
68 | + 'CG' => __('Congo, Republic of', 'invoicing'), |
|
69 | + 'CK' => __('Cook Islands', 'invoicing'), |
|
70 | + 'CR' => __('Costa Rica', 'invoicing'), |
|
71 | + 'CI' => __('Cote d\'Ivoire', 'invoicing'), |
|
72 | + 'HR' => __('Croatia/Hrvatska', 'invoicing'), |
|
73 | + 'CU' => __('Cuba', 'invoicing'), |
|
74 | + 'CW' => __('CuraÇao', 'invoicing'), |
|
75 | + 'CY' => __('Cyprus', 'invoicing'), |
|
76 | + 'CZ' => __('Czech Republic', 'invoicing'), |
|
77 | + 'DK' => __('Denmark', 'invoicing'), |
|
78 | + 'DJ' => __('Djibouti', 'invoicing'), |
|
79 | + 'DM' => __('Dominica', 'invoicing'), |
|
80 | + 'DO' => __('Dominican Republic', 'invoicing'), |
|
81 | + 'TP' => __('East Timor', 'invoicing'), |
|
82 | + 'EC' => __('Ecuador', 'invoicing'), |
|
83 | + 'EG' => __('Egypt', 'invoicing'), |
|
84 | + 'GQ' => __('Equatorial Guinea', 'invoicing'), |
|
85 | + 'SV' => __('El Salvador', 'invoicing'), |
|
86 | + 'ER' => __('Eritrea', 'invoicing'), |
|
87 | + 'EE' => __('Estonia', 'invoicing'), |
|
88 | + 'ET' => __('Ethiopia', 'invoicing'), |
|
89 | + 'FK' => __('Falkland Islands', 'invoicing'), |
|
90 | + 'FO' => __('Faroe Islands', 'invoicing'), |
|
91 | + 'FJ' => __('Fiji', 'invoicing'), |
|
92 | + 'FI' => __('Finland', 'invoicing'), |
|
93 | + 'FR' => __('France', 'invoicing'), |
|
94 | + 'GF' => __('French Guiana', 'invoicing'), |
|
95 | + 'PF' => __('French Polynesia', 'invoicing'), |
|
96 | + 'TF' => __('French Southern Territories', 'invoicing'), |
|
97 | + 'GA' => __('Gabon', 'invoicing'), |
|
98 | + 'GM' => __('Gambia', 'invoicing'), |
|
99 | + 'GE' => __('Georgia', 'invoicing'), |
|
100 | + 'DE' => __('Germany', 'invoicing'), |
|
101 | + 'GR' => __('Greece', 'invoicing'), |
|
102 | + 'GH' => __('Ghana', 'invoicing'), |
|
103 | + 'GI' => __('Gibraltar', 'invoicing'), |
|
104 | + 'GL' => __('Greenland', 'invoicing'), |
|
105 | + 'GD' => __('Grenada', 'invoicing'), |
|
106 | + 'GP' => __('Guadeloupe', 'invoicing'), |
|
107 | + 'GU' => __('Guam', 'invoicing'), |
|
108 | + 'GT' => __('Guatemala', 'invoicing'), |
|
109 | + 'GG' => __('Guernsey', 'invoicing'), |
|
110 | + 'GN' => __('Guinea', 'invoicing'), |
|
111 | + 'GW' => __('Guinea-Bissau', 'invoicing'), |
|
112 | + 'GY' => __('Guyana', 'invoicing'), |
|
113 | + 'HT' => __('Haiti', 'invoicing'), |
|
114 | + 'HM' => __('Heard and McDonald Islands', 'invoicing'), |
|
115 | + 'VA' => __('Holy See (City Vatican State)', 'invoicing'), |
|
116 | + 'HN' => __('Honduras', 'invoicing'), |
|
117 | + 'HK' => __('Hong Kong', 'invoicing'), |
|
118 | + 'HU' => __('Hungary', 'invoicing'), |
|
119 | + 'IS' => __('Iceland', 'invoicing'), |
|
120 | + 'IN' => __('India', 'invoicing'), |
|
121 | + 'ID' => __('Indonesia', 'invoicing'), |
|
122 | + 'IR' => __('Iran', 'invoicing'), |
|
123 | + 'IQ' => __('Iraq', 'invoicing'), |
|
124 | + 'IE' => __('Ireland', 'invoicing'), |
|
125 | + 'IM' => __('Isle of Man', 'invoicing'), |
|
126 | + 'IL' => __('Israel', 'invoicing'), |
|
127 | + 'IT' => __('Italy', 'invoicing'), |
|
128 | + 'JM' => __('Jamaica', 'invoicing'), |
|
129 | + 'JP' => __('Japan', 'invoicing'), |
|
130 | + 'JE' => __('Jersey', 'invoicing'), |
|
131 | + 'JO' => __('Jordan', 'invoicing'), |
|
132 | + 'KZ' => __('Kazakhstan', 'invoicing'), |
|
133 | + 'KE' => __('Kenya', 'invoicing'), |
|
134 | + 'KI' => __('Kiribati', 'invoicing'), |
|
135 | + 'KW' => __('Kuwait', 'invoicing'), |
|
136 | + 'KG' => __('Kyrgyzstan', 'invoicing'), |
|
137 | + 'LA' => __('Lao People\'s Democratic Republic', 'invoicing'), |
|
138 | + 'LV' => __('Latvia', 'invoicing'), |
|
139 | + 'LB' => __('Lebanon', 'invoicing'), |
|
140 | + 'LS' => __('Lesotho', 'invoicing'), |
|
141 | + 'LR' => __('Liberia', 'invoicing'), |
|
142 | + 'LY' => __('Libyan Arab Jamahiriya', 'invoicing'), |
|
143 | + 'LI' => __('Liechtenstein', 'invoicing'), |
|
144 | + 'LT' => __('Lithuania', 'invoicing'), |
|
145 | + 'LU' => __('Luxembourg', 'invoicing'), |
|
146 | + 'MO' => __('Macau', 'invoicing'), |
|
147 | + 'MK' => __('Macedonia', 'invoicing'), |
|
148 | + 'MG' => __('Madagascar', 'invoicing'), |
|
149 | + 'MW' => __('Malawi', 'invoicing'), |
|
150 | + 'MY' => __('Malaysia', 'invoicing'), |
|
151 | + 'MV' => __('Maldives', 'invoicing'), |
|
152 | + 'ML' => __('Mali', 'invoicing'), |
|
153 | + 'MT' => __('Malta', 'invoicing'), |
|
154 | + 'MH' => __('Marshall Islands', 'invoicing'), |
|
155 | + 'MQ' => __('Martinique', 'invoicing'), |
|
156 | + 'MR' => __('Mauritania', 'invoicing'), |
|
157 | + 'MU' => __('Mauritius', 'invoicing'), |
|
158 | + 'YT' => __('Mayotte', 'invoicing'), |
|
159 | + 'MX' => __('Mexico', 'invoicing'), |
|
160 | + 'FM' => __('Micronesia', 'invoicing'), |
|
161 | + 'MD' => __('Moldova, Republic of', 'invoicing'), |
|
162 | + 'MC' => __('Monaco', 'invoicing'), |
|
163 | + 'MN' => __('Mongolia', 'invoicing'), |
|
164 | + 'ME' => __('Montenegro', 'invoicing'), |
|
165 | + 'MS' => __('Montserrat', 'invoicing'), |
|
166 | + 'MA' => __('Morocco', 'invoicing'), |
|
167 | + 'MZ' => __('Mozambique', 'invoicing'), |
|
168 | + 'MM' => __('Myanmar', 'invoicing'), |
|
169 | + 'NA' => __('Namibia', 'invoicing'), |
|
170 | + 'NR' => __('Nauru', 'invoicing'), |
|
171 | + 'NP' => __('Nepal', 'invoicing'), |
|
172 | + 'NL' => __('Netherlands', 'invoicing'), |
|
173 | + 'AN' => __('Netherlands Antilles', 'invoicing'), |
|
174 | + 'NC' => __('New Caledonia', 'invoicing'), |
|
175 | + 'NZ' => __('New Zealand', 'invoicing'), |
|
176 | + 'NI' => __('Nicaragua', 'invoicing'), |
|
177 | + 'NE' => __('Niger', 'invoicing'), |
|
178 | + 'NG' => __('Nigeria', 'invoicing'), |
|
179 | + 'NU' => __('Niue', 'invoicing'), |
|
180 | + 'NF' => __('Norfolk Island', 'invoicing'), |
|
181 | + 'KP' => __('North Korea', 'invoicing'), |
|
182 | + 'MP' => __('Northern Mariana Islands', 'invoicing'), |
|
183 | + 'NO' => __('Norway', 'invoicing'), |
|
184 | + 'OM' => __('Oman', 'invoicing'), |
|
185 | + 'PK' => __('Pakistan', 'invoicing'), |
|
186 | + 'PW' => __('Palau', 'invoicing'), |
|
187 | + 'PS' => __('Palestinian Territories', 'invoicing'), |
|
188 | + 'PA' => __('Panama', 'invoicing'), |
|
189 | + 'PG' => __('Papua New Guinea', 'invoicing'), |
|
190 | + 'PY' => __('Paraguay', 'invoicing'), |
|
191 | + 'PE' => __('Peru', 'invoicing'), |
|
192 | + 'PH' => __('Philippines', 'invoicing'), |
|
193 | + 'PN' => __('Pitcairn Island', 'invoicing'), |
|
194 | + 'PL' => __('Poland', 'invoicing'), |
|
195 | + 'PT' => __('Portugal', 'invoicing'), |
|
196 | + 'PR' => __('Puerto Rico', 'invoicing'), |
|
197 | + 'QA' => __('Qatar', 'invoicing'), |
|
198 | + 'XK' => __('Republic of Kosovo', 'invoicing'), |
|
199 | + 'RE' => __('Reunion Island', 'invoicing'), |
|
200 | + 'RO' => __('Romania', 'invoicing'), |
|
201 | + 'RU' => __('Russian Federation', 'invoicing'), |
|
202 | + 'RW' => __('Rwanda', 'invoicing'), |
|
203 | + 'BL' => __('Saint Barthélemy', 'invoicing'), |
|
204 | + 'SH' => __('Saint Helena', 'invoicing'), |
|
205 | + 'KN' => __('Saint Kitts and Nevis', 'invoicing'), |
|
206 | + 'LC' => __('Saint Lucia', 'invoicing'), |
|
207 | + 'MF' => __('Saint Martin (French)', 'invoicing'), |
|
208 | + 'SX' => __('Saint Martin (Dutch)', 'invoicing'), |
|
209 | + 'PM' => __('Saint Pierre and Miquelon', 'invoicing'), |
|
210 | + 'VC' => __('Saint Vincent and the Grenadines', 'invoicing'), |
|
211 | + 'SM' => __('San Marino', 'invoicing'), |
|
212 | + 'ST' => __('São Tomé and Príncipe', 'invoicing'), |
|
213 | + 'SA' => __('Saudi Arabia', 'invoicing'), |
|
214 | + 'SN' => __('Senegal', 'invoicing'), |
|
215 | + 'RS' => __('Serbia', 'invoicing'), |
|
216 | + 'SC' => __('Seychelles', 'invoicing'), |
|
217 | + 'SL' => __('Sierra Leone', 'invoicing'), |
|
218 | + 'SG' => __('Singapore', 'invoicing'), |
|
219 | + 'SK' => __('Slovak Republic', 'invoicing'), |
|
220 | + 'SI' => __('Slovenia', 'invoicing'), |
|
221 | + 'SB' => __('Solomon Islands', 'invoicing'), |
|
222 | + 'SO' => __('Somalia', 'invoicing'), |
|
223 | + 'ZA' => __('South Africa', 'invoicing'), |
|
224 | + 'GS' => __('South Georgia', 'invoicing'), |
|
225 | + 'KR' => __('South Korea', 'invoicing'), |
|
226 | + 'SS' => __('South Sudan', 'invoicing'), |
|
227 | + 'ES' => __('Spain', 'invoicing'), |
|
228 | + 'LK' => __('Sri Lanka', 'invoicing'), |
|
229 | + 'SD' => __('Sudan', 'invoicing'), |
|
230 | + 'SR' => __('Suriname', 'invoicing'), |
|
231 | + 'SJ' => __('Svalbard and Jan Mayen Islands', 'invoicing'), |
|
232 | + 'SZ' => __('Swaziland', 'invoicing'), |
|
233 | + 'SE' => __('Sweden', 'invoicing'), |
|
234 | + 'CH' => __('Switzerland', 'invoicing'), |
|
235 | + 'SY' => __('Syrian Arab Republic', 'invoicing'), |
|
236 | + 'TW' => __('Taiwan', 'invoicing'), |
|
237 | + 'TJ' => __('Tajikistan', 'invoicing'), |
|
238 | + 'TZ' => __('Tanzania', 'invoicing'), |
|
239 | + 'TH' => __('Thailand', 'invoicing'), |
|
240 | + 'TL' => __('Timor-Leste', 'invoicing'), |
|
241 | + 'TG' => __('Togo', 'invoicing'), |
|
242 | + 'TK' => __('Tokelau', 'invoicing'), |
|
243 | + 'TO' => __('Tonga', 'invoicing'), |
|
244 | + 'TT' => __('Trinidad and Tobago', 'invoicing'), |
|
245 | + 'TN' => __('Tunisia', 'invoicing'), |
|
246 | + 'TR' => __('Turkey', 'invoicing'), |
|
247 | + 'TM' => __('Turkmenistan', 'invoicing'), |
|
248 | + 'TC' => __('Turks and Caicos Islands', 'invoicing'), |
|
249 | + 'TV' => __('Tuvalu', 'invoicing'), |
|
250 | + 'UG' => __('Uganda', 'invoicing'), |
|
251 | + 'UA' => __('Ukraine', 'invoicing'), |
|
252 | + 'AE' => __('United Arab Emirates', 'invoicing'), |
|
253 | + 'UY' => __('Uruguay', 'invoicing'), |
|
254 | + 'UM' => __('US Minor Outlying Islands', 'invoicing'), |
|
255 | + 'UZ' => __('Uzbekistan', 'invoicing'), |
|
256 | + 'VU' => __('Vanuatu', 'invoicing'), |
|
257 | + 'VE' => __('Venezuela', 'invoicing'), |
|
258 | + 'VN' => __('Vietnam', 'invoicing'), |
|
259 | + 'VG' => __('Virgin Islands (British)', 'invoicing'), |
|
260 | + 'VI' => __('Virgin Islands (USA)', 'invoicing'), |
|
261 | + 'WF' => __('Wallis and Futuna Islands', 'invoicing'), |
|
262 | + 'EH' => __('Western Sahara', 'invoicing'), |
|
263 | + 'WS' => __('Western Samoa', 'invoicing'), |
|
264 | + 'YE' => __('Yemen', 'invoicing'), |
|
265 | + 'ZM' => __('Zambia', 'invoicing'), |
|
266 | + 'ZW' => __('Zimbabwe', 'invoicing'), |
|
267 | 267 | ); |
@@ -10,7 +10,7 @@ discard block |
||
10 | 10 | defined( 'ABSPATH' ) || exit; |
11 | 11 | |
12 | 12 | if ( empty( $fields ) ) { |
13 | - return; |
|
13 | + return; |
|
14 | 14 | } |
15 | 15 | |
16 | 16 | // A prefix for all ids (so that a form can be included in the same page multiple times). |
@@ -18,12 +18,12 @@ discard block |
||
18 | 18 | |
19 | 19 | // Prepare the user's country. |
20 | 20 | if ( ! empty( $form->invoice ) ) { |
21 | - $country = $form->invoice->get_country(); |
|
21 | + $country = $form->invoice->get_country(); |
|
22 | 22 | } |
23 | 23 | |
24 | 24 | if ( empty( $country ) ) { |
25 | - $country = empty( $country ) ? getpaid_get_ip_country() : $country; |
|
26 | - $country = empty( $country ) ? wpinv_get_default_country() : $country; |
|
25 | + $country = empty( $country ) ? getpaid_get_ip_country() : $country; |
|
26 | + $country = empty( $country ) ? wpinv_get_default_country() : $country; |
|
27 | 27 | } |
28 | 28 | |
29 | 29 | // A prefix for all ids (so that a form can be included in the same page multiple times). |
@@ -55,10 +55,10 @@ discard block |
||
55 | 55 | <!-- Start Billing Address --> |
56 | 56 | <div class="getpaid-billing-address-wrapper"> |
57 | 57 | <?php |
58 | - $field_type = 'billing'; |
|
59 | - include plugin_dir_path( __FILE__ ) . 'address-fields.php'; |
|
60 | - do_action( 'getpaid_after_payment_form_billing_fields', $form ); |
|
61 | - ?> |
|
58 | + $field_type = 'billing'; |
|
59 | + include plugin_dir_path( __FILE__ ) . 'address-fields.php'; |
|
60 | + do_action( 'getpaid_after_payment_form_billing_fields', $form ); |
|
61 | + ?> |
|
62 | 62 | </div> |
63 | 63 | <!-- End Billing Address --> |
64 | 64 | |
@@ -70,20 +70,20 @@ discard block |
||
70 | 70 | |
71 | 71 | <?php |
72 | 72 | |
73 | - echo aui()->input( |
|
74 | - array( |
|
75 | - 'type' => 'checkbox', |
|
76 | - 'name' => 'same-shipping-address', |
|
77 | - 'id' => "shipping-toggle$uniqid", |
|
78 | - 'required' => false, |
|
79 | - 'label' => wp_kses_post( $shipping_address_toggle ), |
|
80 | - 'value' => 1, |
|
81 | - 'checked' => true, |
|
82 | - 'class' => 'w-auto', |
|
83 | - ) |
|
84 | - ); |
|
73 | + echo aui()->input( |
|
74 | + array( |
|
75 | + 'type' => 'checkbox', |
|
76 | + 'name' => 'same-shipping-address', |
|
77 | + 'id' => "shipping-toggle$uniqid", |
|
78 | + 'required' => false, |
|
79 | + 'label' => wp_kses_post( $shipping_address_toggle ), |
|
80 | + 'value' => 1, |
|
81 | + 'checked' => true, |
|
82 | + 'class' => 'w-auto', |
|
83 | + ) |
|
84 | + ); |
|
85 | 85 | |
86 | - ?> |
|
86 | + ?> |
|
87 | 87 | |
88 | 88 | |
89 | 89 | <!-- Start Shipping Address Title --> |
@@ -102,10 +102,10 @@ discard block |
||
102 | 102 | <!-- Start Shipping Address --> |
103 | 103 | <div class="getpaid-shipping-address-wrapper"> |
104 | 104 | <?php |
105 | - $field_type = 'shipping'; |
|
106 | - include plugin_dir_path( __FILE__ ) . 'address-fields.php'; |
|
107 | - do_action( 'getpaid_after_payment_form_shipping_fields', $form ); |
|
108 | - ?> |
|
105 | + $field_type = 'shipping'; |
|
106 | + include plugin_dir_path( __FILE__ ) . 'address-fields.php'; |
|
107 | + do_action( 'getpaid_after_payment_form_shipping_fields', $form ); |
|
108 | + ?> |
|
109 | 109 | </div> |
110 | 110 | <!-- End Shipping Address --> |
111 | 111 |