@@ -8,201 +8,201 @@ discard block |
||
8 | 8 | * @version 1.0.19 |
9 | 9 | */ |
10 | 10 | |
11 | -defined( 'ABSPATH' ) || exit; |
|
11 | +defined('ABSPATH') || exit; |
|
12 | 12 | |
13 | -$pages = wpinv_get_pages( true ); |
|
13 | +$pages = wpinv_get_pages(true); |
|
14 | 14 | |
15 | 15 | $currencies = wpinv_get_currencies(); |
16 | 16 | |
17 | 17 | $currency_code_options = array(); |
18 | -foreach ( $currencies as $code => $name ) { |
|
19 | - $currency_code_options[ $code ] = $code . ' - ' . $name . ' (' . wpinv_currency_symbol( $code ) . ')'; |
|
18 | +foreach ($currencies as $code => $name) { |
|
19 | + $currency_code_options[$code] = $code . ' - ' . $name . ' (' . wpinv_currency_symbol($code) . ')'; |
|
20 | 20 | } |
21 | 21 | |
22 | 22 | $due_payment_options = array(); |
23 | -$due_payment_options[0] = __( 'Now', 'invoicing' ); |
|
24 | -for ( $i = 1; $i <= 30; $i++ ) { |
|
23 | +$due_payment_options[0] = __('Now', 'invoicing'); |
|
24 | +for ($i = 1; $i <= 30; $i++) { |
|
25 | 25 | $due_payment_options[$i] = $i; |
26 | 26 | } |
27 | 27 | |
28 | 28 | $invoice_number_padd_options = array(); |
29 | -for ( $i = 0; $i <= 20; $i++ ) { |
|
29 | +for ($i = 0; $i <= 20; $i++) { |
|
30 | 30 | $invoice_number_padd_options[$i] = $i; |
31 | 31 | } |
32 | 32 | |
33 | 33 | $currency_symbol = wpinv_currency_symbol(); |
34 | 34 | |
35 | 35 | $last_number = $reset_number = ''; |
36 | -if ( $last_invoice_number = get_option( 'wpinv_last_invoice_number' ) ) { |
|
37 | - $last_invoice_number = preg_replace( '/[^0-9]/', '', $last_invoice_number ); |
|
36 | +if ($last_invoice_number = get_option('wpinv_last_invoice_number')) { |
|
37 | + $last_invoice_number = preg_replace('/[^0-9]/', '', $last_invoice_number); |
|
38 | 38 | |
39 | - if ( !empty( $last_invoice_number ) ) { |
|
40 | - $last_number = ' ' . wp_sprintf( __( "( Last Invoice's sequential number: <b>%s</b> )", 'invoicing' ), $last_invoice_number ); |
|
39 | + if (!empty($last_invoice_number)) { |
|
40 | + $last_number = ' ' . wp_sprintf(__("( Last Invoice's sequential number: <b>%s</b> )", 'invoicing'), $last_invoice_number); |
|
41 | 41 | } |
42 | 42 | |
43 | 43 | $nonce = wp_create_nonce('reset_invoice_count'); |
44 | - $reset_number = '<a href="'.add_query_arg(array('reset_invoice_count' => 1, '_nonce' => $nonce)).'" class="btn button">'.__('Force Reset Sequence', 'invoicing' ). '</a>'; |
|
44 | + $reset_number = '<a href="' . add_query_arg(array('reset_invoice_count' => 1, '_nonce' => $nonce)) . '" class="btn button">' . __('Force Reset Sequence', 'invoicing') . '</a>'; |
|
45 | 45 | } |
46 | 46 | |
47 | 47 | $alert_wrapper_start = '<p style="color: #F00">'; |
48 | 48 | $alert_wrapper_close = '</p>'; |
49 | 49 | |
50 | 50 | return array( |
51 | - 'general' => apply_filters( 'wpinv_settings_general', |
|
51 | + 'general' => apply_filters('wpinv_settings_general', |
|
52 | 52 | array( |
53 | 53 | 'main' => array( |
54 | 54 | 'location_settings' => array( |
55 | 55 | 'id' => 'location_settings', |
56 | - 'name' => '<h3>' . __( 'Default Location', 'invoicing' ) . '</h3>', |
|
56 | + 'name' => '<h3>' . __('Default Location', 'invoicing') . '</h3>', |
|
57 | 57 | 'desc' => '', |
58 | 58 | 'type' => 'header', |
59 | 59 | ), |
60 | 60 | 'default_country' => array( |
61 | 61 | 'id' => 'default_country', |
62 | - 'name' => __( 'Default Country', 'invoicing' ), |
|
63 | - 'desc' => __( 'Where does your store operate from?', 'invoicing' ), |
|
62 | + 'name' => __('Default Country', 'invoicing'), |
|
63 | + 'desc' => __('Where does your store operate from?', 'invoicing'), |
|
64 | 64 | 'type' => 'select', |
65 | 65 | 'options' => wpinv_get_country_list(), |
66 | 66 | 'std' => 'GB', |
67 | 67 | 'class' => 'wpi_select2', |
68 | - 'placeholder' => __( 'Select a country', 'invoicing' ), |
|
68 | + 'placeholder' => __('Select a country', 'invoicing'), |
|
69 | 69 | ), |
70 | 70 | 'default_state' => array( |
71 | 71 | 'id' => 'default_state', |
72 | - 'name' => __( 'Default State / Province', 'invoicing' ), |
|
73 | - 'desc' => __( 'What state / province does your store operate from?', 'invoicing' ), |
|
72 | + 'name' => __('Default State / Province', 'invoicing'), |
|
73 | + 'desc' => __('What state / province does your store operate from?', 'invoicing'), |
|
74 | 74 | 'type' => 'country_states', |
75 | 75 | 'class' => 'wpi_select2', |
76 | - 'placeholder' => __( 'Select a state', 'invoicing' ), |
|
76 | + 'placeholder' => __('Select a state', 'invoicing'), |
|
77 | 77 | ), |
78 | 78 | 'store_name' => array( |
79 | 79 | 'id' => 'store_name', |
80 | - 'name' => __( 'Store Name', 'invoicing' ), |
|
81 | - 'desc' => __( 'Store name to print on invoices.', 'invoicing' ), |
|
80 | + 'name' => __('Store Name', 'invoicing'), |
|
81 | + 'desc' => __('Store name to print on invoices.', 'invoicing'), |
|
82 | 82 | 'std' => get_option('blogname'), |
83 | 83 | 'type' => 'text', |
84 | 84 | ), |
85 | 85 | 'logo' => array( |
86 | 86 | 'id' => 'logo', |
87 | - 'name' => __( 'Logo URL', 'invoicing' ), |
|
88 | - 'desc' => __( 'Store logo to print on invoices.', 'invoicing' ), |
|
87 | + 'name' => __('Logo URL', 'invoicing'), |
|
88 | + 'desc' => __('Store logo to print on invoices.', 'invoicing'), |
|
89 | 89 | 'type' => 'text', |
90 | 90 | ), |
91 | 91 | 'store_address' => array( |
92 | 92 | 'id' => 'store_address', |
93 | - 'name' => __( 'Store Address', 'invoicing' ), |
|
94 | - 'desc' => __( 'Enter the store address to display on invoice', 'invoicing' ), |
|
93 | + 'name' => __('Store Address', 'invoicing'), |
|
94 | + 'desc' => __('Enter the store address to display on invoice', 'invoicing'), |
|
95 | 95 | 'type' => 'textarea', |
96 | 96 | ), |
97 | 97 | 'page_settings' => array( |
98 | 98 | 'id' => 'page_settings', |
99 | - 'name' => '<h3>' . __( 'Page Settings', 'invoicing' ) . '</h3>', |
|
99 | + 'name' => '<h3>' . __('Page Settings', 'invoicing') . '</h3>', |
|
100 | 100 | 'desc' => '', |
101 | 101 | 'type' => 'header', |
102 | 102 | ), |
103 | 103 | 'checkout_page' => array( |
104 | 104 | 'id' => 'checkout_page', |
105 | - 'name' => __( 'Checkout Page', 'invoicing' ), |
|
106 | - 'desc' => __( 'This is the checkout page where buyers will complete their payments. The <b>[wpinv_checkout]</b> short code must be on this page.', 'invoicing' ), |
|
105 | + 'name' => __('Checkout Page', 'invoicing'), |
|
106 | + 'desc' => __('This is the checkout page where buyers will complete their payments. The <b>[wpinv_checkout]</b> short code must be on this page.', 'invoicing'), |
|
107 | 107 | 'type' => 'select', |
108 | 108 | 'options' => $pages, |
109 | 109 | 'class' => 'wpi_select2', |
110 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
110 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
111 | 111 | ), |
112 | 112 | 'tandc_page' => array( |
113 | 113 | 'id' => 'tandc_page', |
114 | - 'name' => __( 'Terms & Conditions', 'invoicing' ), |
|
115 | - 'desc' => __( 'If you select a "Terms & Conditions" page here the customer will be asked to accept them on checkout.', 'invoicing' ), |
|
114 | + 'name' => __('Terms & Conditions', 'invoicing'), |
|
115 | + 'desc' => __('If you select a "Terms & Conditions" page here the customer will be asked to accept them on checkout.', 'invoicing'), |
|
116 | 116 | 'type' => 'select', |
117 | - 'options' => wpinv_get_pages( true, __( 'Select a page', 'invoicing' )), |
|
117 | + 'options' => wpinv_get_pages(true, __('Select a page', 'invoicing')), |
|
118 | 118 | 'class' => 'wpi_select2', |
119 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
119 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
120 | 120 | ), |
121 | 121 | 'success_page' => array( |
122 | 122 | 'id' => 'success_page', |
123 | - 'name' => __( 'Success Page', 'invoicing' ), |
|
124 | - 'desc' => __( 'This is the page buyers are sent to after completing their payments. The <b>[wpinv_receipt]</b> short code should be on this page.', 'invoicing' ), |
|
123 | + 'name' => __('Success Page', 'invoicing'), |
|
124 | + 'desc' => __('This is the page buyers are sent to after completing their payments. The <b>[wpinv_receipt]</b> short code should be on this page.', 'invoicing'), |
|
125 | 125 | 'type' => 'select', |
126 | 126 | 'options' => $pages, |
127 | 127 | 'class' => 'wpi_select2', |
128 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
128 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
129 | 129 | ), |
130 | 130 | 'failure_page' => array( |
131 | 131 | 'id' => 'failure_page', |
132 | - 'name' => __( 'Failed Transaction Page', 'invoicing' ), |
|
133 | - 'desc' => __( 'This is the page buyers are sent to if their transaction is cancelled or fails.', 'invoicing' ), |
|
132 | + 'name' => __('Failed Transaction Page', 'invoicing'), |
|
133 | + 'desc' => __('This is the page buyers are sent to if their transaction is cancelled or fails.', 'invoicing'), |
|
134 | 134 | 'type' => 'select', |
135 | 135 | 'options' => $pages, |
136 | 136 | 'class' => 'wpi_select2', |
137 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
137 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
138 | 138 | ), |
139 | 139 | 'invoice_history_page' => array( |
140 | 140 | 'id' => 'invoice_history_page', |
141 | - 'name' => __( 'Invoice History Page', 'invoicing' ), |
|
142 | - 'desc' => __( 'This page shows an invoice history for the current user. The <b>[wpinv_history]</b> short code should be on this page.', 'invoicing' ), |
|
141 | + 'name' => __('Invoice History Page', 'invoicing'), |
|
142 | + 'desc' => __('This page shows an invoice history for the current user. The <b>[wpinv_history]</b> short code should be on this page.', 'invoicing'), |
|
143 | 143 | 'type' => 'select', |
144 | 144 | 'options' => $pages, |
145 | 145 | 'class' => 'wpi_select2', |
146 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
146 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
147 | 147 | ), |
148 | 148 | 'invoice_subscription_page' => array( |
149 | 149 | 'id' => 'invoice_subscription_page', |
150 | - 'name' => __( 'Invoice Subscriptions Page', 'invoicing' ), |
|
151 | - 'desc' => __( 'This page shows subscriptions history for the current user. The <b>[wpinv_subscriptions]</b> short code should be on this page.', 'invoicing' ), |
|
150 | + 'name' => __('Invoice Subscriptions Page', 'invoicing'), |
|
151 | + 'desc' => __('This page shows subscriptions history for the current user. The <b>[wpinv_subscriptions]</b> short code should be on this page.', 'invoicing'), |
|
152 | 152 | 'type' => 'select', |
153 | 153 | 'options' => $pages, |
154 | 154 | 'class' => 'wpi_select2', |
155 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
155 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
156 | 156 | ), |
157 | 157 | ), |
158 | 158 | 'currency_section' => array( |
159 | 159 | 'currency_settings' => array( |
160 | 160 | 'id' => 'currency_settings', |
161 | - 'name' => '<h3>' . __( 'Currency Settings', 'invoicing' ) . '</h3>', |
|
161 | + 'name' => '<h3>' . __('Currency Settings', 'invoicing') . '</h3>', |
|
162 | 162 | 'desc' => '', |
163 | 163 | 'type' => 'header', |
164 | 164 | ), |
165 | 165 | 'currency' => array( |
166 | 166 | 'id' => 'currency', |
167 | - 'name' => __( 'Currency', 'invoicing' ), |
|
168 | - 'desc' => __( 'Choose your currency. Note that some payment gateways have currency restrictions.', 'invoicing' ), |
|
167 | + 'name' => __('Currency', 'invoicing'), |
|
168 | + 'desc' => __('Choose your currency. Note that some payment gateways have currency restrictions.', 'invoicing'), |
|
169 | 169 | 'type' => 'select', |
170 | 170 | 'class' => 'wpi_select2', |
171 | 171 | 'options' => $currency_code_options, |
172 | 172 | ), |
173 | 173 | 'currency_position' => array( |
174 | 174 | 'id' => 'currency_position', |
175 | - 'name' => __( 'Currency Position', 'invoicing' ), |
|
176 | - 'desc' => __( 'Choose the location of the currency sign.', 'invoicing' ), |
|
175 | + 'name' => __('Currency Position', 'invoicing'), |
|
176 | + 'desc' => __('Choose the location of the currency sign.', 'invoicing'), |
|
177 | 177 | 'type' => 'select', |
178 | 178 | 'class' => 'wpi_select2', |
179 | 179 | 'options' => array( |
180 | - 'left' => __( 'Left', 'invoicing' ) . ' (' . $currency_symbol . wpinv_format_amount( '99.99' ) . ')', |
|
181 | - 'right' => __( 'Right', 'invoicing' ) . ' ('. wpinv_format_amount( '99.99' ) . $currency_symbol . ')', |
|
182 | - 'left_space' => __( 'Left with space', 'invoicing' ) . ' (' . $currency_symbol . ' ' . wpinv_format_amount( '99.99' ) . ')', |
|
183 | - 'right_space' => __( 'Right with space', 'invoicing' ) . ' (' . wpinv_format_amount( '99.99' ) . ' ' . $currency_symbol . ')' |
|
180 | + 'left' => __('Left', 'invoicing') . ' (' . $currency_symbol . wpinv_format_amount('99.99') . ')', |
|
181 | + 'right' => __('Right', 'invoicing') . ' (' . wpinv_format_amount('99.99') . $currency_symbol . ')', |
|
182 | + 'left_space' => __('Left with space', 'invoicing') . ' (' . $currency_symbol . ' ' . wpinv_format_amount('99.99') . ')', |
|
183 | + 'right_space' => __('Right with space', 'invoicing') . ' (' . wpinv_format_amount('99.99') . ' ' . $currency_symbol . ')' |
|
184 | 184 | ) |
185 | 185 | ), |
186 | 186 | 'thousands_separator' => array( |
187 | 187 | 'id' => 'thousands_separator', |
188 | - 'name' => __( 'Thousands Separator', 'invoicing' ), |
|
189 | - 'desc' => __( 'The symbol (usually , or .) to separate thousands', 'invoicing' ), |
|
188 | + 'name' => __('Thousands Separator', 'invoicing'), |
|
189 | + 'desc' => __('The symbol (usually , or .) to separate thousands', 'invoicing'), |
|
190 | 190 | 'type' => 'text', |
191 | 191 | 'size' => 'small', |
192 | 192 | 'std' => ',', |
193 | 193 | ), |
194 | 194 | 'decimal_separator' => array( |
195 | 195 | 'id' => 'decimal_separator', |
196 | - 'name' => __( 'Decimal Separator', 'invoicing' ), |
|
197 | - 'desc' => __( 'The symbol (usually , or .) to separate decimal points', 'invoicing' ), |
|
196 | + 'name' => __('Decimal Separator', 'invoicing'), |
|
197 | + 'desc' => __('The symbol (usually , or .) to separate decimal points', 'invoicing'), |
|
198 | 198 | 'type' => 'text', |
199 | 199 | 'size' => 'small', |
200 | 200 | 'std' => '.', |
201 | 201 | ), |
202 | 202 | 'decimals' => array( |
203 | 203 | 'id' => 'decimals', |
204 | - 'name' => __( 'Number of Decimals', 'invoicing' ), |
|
205 | - 'desc' => __( 'This sets the number of decimal points shown in displayed prices.', 'invoicing' ), |
|
204 | + 'name' => __('Number of Decimals', 'invoicing'), |
|
205 | + 'desc' => __('This sets the number of decimal points shown in displayed prices.', 'invoicing'), |
|
206 | 206 | 'type' => 'number', |
207 | 207 | 'size' => 'small', |
208 | 208 | 'std' => '2', |
@@ -214,29 +214,29 @@ discard block |
||
214 | 214 | 'labels' => array( |
215 | 215 | 'labels' => array( |
216 | 216 | 'id' => 'labels_settings', |
217 | - 'name' => '<h3>' . __( 'Invoice Labels', 'invoicing' ) . '</h3>', |
|
217 | + 'name' => '<h3>' . __('Invoice Labels', 'invoicing') . '</h3>', |
|
218 | 218 | 'desc' => '', |
219 | 219 | 'type' => 'header', |
220 | 220 | ), |
221 | 221 | 'vat_name' => array( |
222 | 222 | 'id' => 'vat_name', |
223 | - 'name' => __( 'VAT Name', 'invoicing' ), |
|
224 | - 'desc' => __( 'Enter the VAT name', 'invoicing' ), |
|
223 | + 'name' => __('VAT Name', 'invoicing'), |
|
224 | + 'desc' => __('Enter the VAT name', 'invoicing'), |
|
225 | 225 | 'type' => 'text', |
226 | 226 | 'size' => 'regular', |
227 | - 'std' => __( 'VAT', 'invoicing' ), |
|
227 | + 'std' => __('VAT', 'invoicing'), |
|
228 | 228 | ), |
229 | 229 | 'vat_invoice_notice_label' => array( |
230 | 230 | 'id' => 'vat_invoice_notice_label', |
231 | - 'name' => __( 'Invoice Notice Label', 'invoicing' ), |
|
232 | - 'desc' => __( 'Use this to add an invoice notice section (label) to your invoices', 'invoicing' ), |
|
231 | + 'name' => __('Invoice Notice Label', 'invoicing'), |
|
232 | + 'desc' => __('Use this to add an invoice notice section (label) to your invoices', 'invoicing'), |
|
233 | 233 | 'type' => 'text', |
234 | 234 | 'size' => 'regular', |
235 | 235 | ), |
236 | 236 | 'vat_invoice_notice' => array( |
237 | 237 | 'id' => 'vat_invoice_notice', |
238 | - 'name' => __( 'Invoice notice', 'invoicing' ), |
|
239 | - 'desc' => __( 'Use this to add an invoice notice section (description) to your invoices', 'invoicing' ), |
|
238 | + 'name' => __('Invoice notice', 'invoicing'), |
|
239 | + 'desc' => __('Use this to add an invoice notice section (description) to your invoices', 'invoicing'), |
|
240 | 240 | 'type' => 'text', |
241 | 241 | 'size' => 'regular', |
242 | 242 | ), |
@@ -248,22 +248,22 @@ discard block |
||
248 | 248 | 'main' => array( |
249 | 249 | 'gateway_settings' => array( |
250 | 250 | 'id' => 'api_header', |
251 | - 'name' => '<h3>' . __( 'Gateway Settings', 'invoicing' ) . '</h3>', |
|
251 | + 'name' => '<h3>' . __('Gateway Settings', 'invoicing') . '</h3>', |
|
252 | 252 | 'desc' => '', |
253 | 253 | 'type' => 'header', |
254 | 254 | ), |
255 | 255 | 'gateways' => array( |
256 | 256 | 'id' => 'gateways', |
257 | - 'name' => __( 'Payment Gateways', 'invoicing' ), |
|
258 | - 'desc' => __( 'Choose the payment gateways you want to enable.', 'invoicing' ), |
|
257 | + 'name' => __('Payment Gateways', 'invoicing'), |
|
258 | + 'desc' => __('Choose the payment gateways you want to enable.', 'invoicing'), |
|
259 | 259 | 'type' => 'gateways', |
260 | 260 | 'std' => array('manual'=>1), |
261 | 261 | 'options' => wpinv_get_payment_gateways(), |
262 | 262 | ), |
263 | 263 | 'default_gateway' => array( |
264 | 264 | 'id' => 'default_gateway', |
265 | - 'name' => __( 'Default Gateway', 'invoicing' ), |
|
266 | - 'desc' => __( 'This gateway will be loaded automatically with the checkout page.', 'invoicing' ), |
|
265 | + 'name' => __('Default Gateway', 'invoicing'), |
|
266 | + 'desc' => __('This gateway will be loaded automatically with the checkout page.', 'invoicing'), |
|
267 | 267 | 'type' => 'gateway_select', |
268 | 268 | 'std' => 'manual', |
269 | 269 | 'class' => 'wpi_select2', |
@@ -278,19 +278,19 @@ discard block |
||
278 | 278 | 'main' => array( |
279 | 279 | 'tax_settings' => array( |
280 | 280 | 'id' => 'tax_settings', |
281 | - 'name' => '<h3>' . __( 'Tax Settings', 'invoicing' ) . '</h3>', |
|
281 | + 'name' => '<h3>' . __('Tax Settings', 'invoicing') . '</h3>', |
|
282 | 282 | 'type' => 'header', |
283 | 283 | ), |
284 | 284 | 'enable_taxes' => array( |
285 | 285 | 'id' => 'enable_taxes', |
286 | - 'name' => __( 'Enable Taxes', 'invoicing' ), |
|
287 | - 'desc' => __( 'Check this to enable taxes on invoices.', 'invoicing' ), |
|
286 | + 'name' => __('Enable Taxes', 'invoicing'), |
|
287 | + 'desc' => __('Check this to enable taxes on invoices.', 'invoicing'), |
|
288 | 288 | 'type' => 'checkbox', |
289 | 289 | ), |
290 | 290 | 'tax_rate' => array( |
291 | 291 | 'id' => 'tax_rate', |
292 | - 'name' => __( 'Fallback Tax Rate', 'invoicing' ), |
|
293 | - 'desc' => __( 'Enter a percentage, such as 6.5. Customers not in a specific rate will be charged this rate.', 'invoicing' ), |
|
292 | + 'name' => __('Fallback Tax Rate', 'invoicing'), |
|
293 | + 'desc' => __('Enter a percentage, such as 6.5. Customers not in a specific rate will be charged this rate.', 'invoicing'), |
|
294 | 294 | 'type' => 'number', |
295 | 295 | 'size' => 'small', |
296 | 296 | 'min' => '0', |
@@ -302,8 +302,8 @@ discard block |
||
302 | 302 | 'rates' => array( |
303 | 303 | 'tax_rates' => array( |
304 | 304 | 'id' => 'tax_rates', |
305 | - 'name' => '<h3>' . __( 'Tax Rates', 'invoicing' ) . '</h3>', |
|
306 | - 'desc' => __( 'Enter tax rates for specific regions.', 'invoicing' ), |
|
305 | + 'name' => '<h3>' . __('Tax Rates', 'invoicing') . '</h3>', |
|
306 | + 'desc' => __('Enter tax rates for specific regions.', 'invoicing'), |
|
307 | 307 | 'type' => 'tax_rates', |
308 | 308 | ), |
309 | 309 | ) |
@@ -315,68 +315,68 @@ discard block |
||
315 | 315 | 'main' => array( |
316 | 316 | 'email_settings_header' => array( |
317 | 317 | 'id' => 'email_settings_header', |
318 | - 'name' => '<h3>' . __( 'Email Sender Options', 'invoicing' ) . '</h3>', |
|
318 | + 'name' => '<h3>' . __('Email Sender Options', 'invoicing') . '</h3>', |
|
319 | 319 | 'type' => 'header', |
320 | 320 | ), |
321 | 321 | 'email_from_name' => array( |
322 | 322 | 'id' => 'email_from_name', |
323 | - 'name' => __( 'From Name', 'invoicing' ), |
|
324 | - 'desc' => __( 'Enter the sender\'s name appears in outgoing invoice emails. This should be your site name.', 'invoicing' ), |
|
325 | - 'std' => esc_attr( get_bloginfo( 'name', 'display' ) ), |
|
323 | + 'name' => __('From Name', 'invoicing'), |
|
324 | + 'desc' => __('Enter the sender\'s name appears in outgoing invoice emails. This should be your site name.', 'invoicing'), |
|
325 | + 'std' => esc_attr(get_bloginfo('name', 'display')), |
|
326 | 326 | 'type' => 'text', |
327 | 327 | ), |
328 | 328 | 'email_from' => array( |
329 | 329 | 'id' => 'email_from', |
330 | - 'name' => __( 'From Email', 'invoicing' ), |
|
331 | - 'desc' => sprintf (__( 'Email address to send invoice emails from. This will act as the "from" and "reply-to" address. %s If emails are not being sent it may be that your hosting prevents emails being sent if the email domains do not match.%s', 'invoicing' ), $alert_wrapper_start, $alert_wrapper_close), |
|
332 | - 'std' => get_option( 'admin_email' ), |
|
330 | + 'name' => __('From Email', 'invoicing'), |
|
331 | + 'desc' => sprintf(__('Email address to send invoice emails from. This will act as the "from" and "reply-to" address. %s If emails are not being sent it may be that your hosting prevents emails being sent if the email domains do not match.%s', 'invoicing'), $alert_wrapper_start, $alert_wrapper_close), |
|
332 | + 'std' => get_option('admin_email'), |
|
333 | 333 | 'type' => 'text', |
334 | 334 | ), |
335 | 335 | 'admin_email' => array( |
336 | 336 | 'id' => 'admin_email', |
337 | - 'name' => __( 'Admin Email', 'invoicing' ), |
|
338 | - 'desc' => __( 'Where should we send admin notifications?', 'invoicing' ), |
|
339 | - 'std' => get_option( 'admin_email' ), |
|
337 | + 'name' => __('Admin Email', 'invoicing'), |
|
338 | + 'desc' => __('Where should we send admin notifications?', 'invoicing'), |
|
339 | + 'std' => get_option('admin_email'), |
|
340 | 340 | 'type' => 'text', |
341 | 341 | ), |
342 | 342 | 'overdue_settings_header' => array( |
343 | 343 | 'id' => 'overdue_settings_header', |
344 | - 'name' => '<h3>' . __( 'Due Date Settings', 'invoicing' ) . '</h3>', |
|
344 | + 'name' => '<h3>' . __('Due Date Settings', 'invoicing') . '</h3>', |
|
345 | 345 | 'type' => 'header', |
346 | 346 | ), |
347 | 347 | 'overdue_active' => array( |
348 | 348 | 'id' => 'overdue_active', |
349 | - 'name' => __( 'Enable Due Date', 'invoicing' ), |
|
350 | - 'desc' => __( 'Check this to enable due date option for invoices.', 'invoicing' ), |
|
349 | + 'name' => __('Enable Due Date', 'invoicing'), |
|
350 | + 'desc' => __('Check this to enable due date option for invoices.', 'invoicing'), |
|
351 | 351 | 'type' => 'checkbox', |
352 | 352 | 'std' => false, |
353 | 353 | ), |
354 | 354 | 'overdue_days' => array( |
355 | 355 | 'id' => 'overdue_days', |
356 | - 'name' => __( 'Default Due Date', 'invoicing' ), |
|
357 | - 'desc' => __( 'Number of days each Invoice is due after the created date. This will automatically set the date in the "Due Date" field. Can be overridden on individual Invoices.', 'invoicing' ), |
|
356 | + 'name' => __('Default Due Date', 'invoicing'), |
|
357 | + 'desc' => __('Number of days each Invoice is due after the created date. This will automatically set the date in the "Due Date" field. Can be overridden on individual Invoices.', 'invoicing'), |
|
358 | 358 | 'type' => 'select', |
359 | 359 | 'options' => $due_payment_options, |
360 | 360 | 'std' => 0, |
361 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
361 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
362 | 362 | ), |
363 | 363 | 'email_template_header' => array( |
364 | 364 | 'id' => 'email_template_header', |
365 | - 'name' => '<h3>' . __( 'Email Template', 'invoicing' ) . '</h3>', |
|
365 | + 'name' => '<h3>' . __('Email Template', 'invoicing') . '</h3>', |
|
366 | 366 | 'type' => 'header', |
367 | 367 | ), |
368 | 368 | 'email_header_image' => array( |
369 | 369 | 'id' => 'email_header_image', |
370 | - 'name' => __( 'Header Image', 'invoicing' ), |
|
371 | - 'desc' => __( 'URL to an image you want to show in the email header. Upload images using the media uploader (Admin > Media).', 'invoicing' ), |
|
370 | + 'name' => __('Header Image', 'invoicing'), |
|
371 | + 'desc' => __('URL to an image you want to show in the email header. Upload images using the media uploader (Admin > Media).', 'invoicing'), |
|
372 | 372 | 'std' => '', |
373 | 373 | 'type' => 'text', |
374 | 374 | ), |
375 | 375 | 'email_footer_text' => array( |
376 | 376 | 'id' => 'email_footer_text', |
377 | - 'name' => __( 'Footer Text', 'invoicing' ), |
|
378 | - 'desc' => __( 'The text to appear in the footer of all invoice emails.', 'invoicing' ), |
|
379 | - 'std' => get_bloginfo( 'name', 'display' ) . ' - ' . __( 'Powered by GeoDirectory', 'invoicing' ), |
|
377 | + 'name' => __('Footer Text', 'invoicing'), |
|
378 | + 'desc' => __('The text to appear in the footer of all invoice emails.', 'invoicing'), |
|
379 | + 'std' => get_bloginfo('name', 'display') . ' - ' . __('Powered by GeoDirectory', 'invoicing'), |
|
380 | 380 | 'type' => 'textarea', |
381 | 381 | 'class' => 'regular-text', |
382 | 382 | 'rows' => 2, |
@@ -384,29 +384,29 @@ discard block |
||
384 | 384 | ), |
385 | 385 | 'email_base_color' => array( |
386 | 386 | 'id' => 'email_base_color', |
387 | - 'name' => __( 'Base Color', 'invoicing' ), |
|
388 | - 'desc' => __( 'The base color for invoice email template. Default <code>#557da2</code>.', 'invoicing' ), |
|
387 | + 'name' => __('Base Color', 'invoicing'), |
|
388 | + 'desc' => __('The base color for invoice email template. Default <code>#557da2</code>.', 'invoicing'), |
|
389 | 389 | 'std' => '#557da2', |
390 | 390 | 'type' => 'color', |
391 | 391 | ), |
392 | 392 | 'email_background_color' => array( |
393 | 393 | 'id' => 'email_background_color', |
394 | - 'name' => __( 'Background Color', 'invoicing' ), |
|
395 | - 'desc' => __( 'The background color of email template. Default <code>#f5f5f5</code>.', 'invoicing' ), |
|
394 | + 'name' => __('Background Color', 'invoicing'), |
|
395 | + 'desc' => __('The background color of email template. Default <code>#f5f5f5</code>.', 'invoicing'), |
|
396 | 396 | 'std' => '#f5f5f5', |
397 | 397 | 'type' => 'color', |
398 | 398 | ), |
399 | 399 | 'email_body_background_color' => array( |
400 | 400 | 'id' => 'email_body_background_color', |
401 | - 'name' => __( 'Body Background Color', 'invoicing' ), |
|
402 | - 'desc' => __( 'The main body background color of email template. Default <code>#fdfdfd</code>.', 'invoicing' ), |
|
401 | + 'name' => __('Body Background Color', 'invoicing'), |
|
402 | + 'desc' => __('The main body background color of email template. Default <code>#fdfdfd</code>.', 'invoicing'), |
|
403 | 403 | 'std' => '#fdfdfd', |
404 | 404 | 'type' => 'color', |
405 | 405 | ), |
406 | 406 | 'email_text_color' => array( |
407 | 407 | 'id' => 'email_text_color', |
408 | - 'name' => __( 'Body Text Color', 'invoicing' ), |
|
409 | - 'desc' => __( 'The main body text color. Default <code>#505050</code>.', 'invoicing' ), |
|
408 | + 'name' => __('Body Text Color', 'invoicing'), |
|
409 | + 'desc' => __('The main body text color. Default <code>#505050</code>.', 'invoicing'), |
|
410 | 410 | 'std' => '#505050', |
411 | 411 | 'type' => 'color', |
412 | 412 | ), |
@@ -425,17 +425,17 @@ discard block |
||
425 | 425 | 'main' => array( |
426 | 426 | 'invoicing_privacy_policy_settings' => array( |
427 | 427 | 'id' => 'invoicing_privacy_policy_settings', |
428 | - 'name' => '<h3>' . __( 'Privacy Policy', 'invoicing' ) . '</h3>', |
|
428 | + 'name' => '<h3>' . __('Privacy Policy', 'invoicing') . '</h3>', |
|
429 | 429 | 'type' => 'header', |
430 | 430 | ), |
431 | 431 | 'privacy_page' => array( |
432 | 432 | 'id' => 'privacy_page', |
433 | - 'name' => __( 'Privacy Page', 'invoicing' ), |
|
434 | - 'desc' => __( 'If no privacy policy page set in Settings->Privacy default settings, this page will be used on checkout page.', 'invoicing' ), |
|
433 | + 'name' => __('Privacy Page', 'invoicing'), |
|
434 | + 'desc' => __('If no privacy policy page set in Settings->Privacy default settings, this page will be used on checkout page.', 'invoicing'), |
|
435 | 435 | 'type' => 'select', |
436 | - 'options' => wpinv_get_pages( true, __( 'Select a page', 'invoicing' )), |
|
436 | + 'options' => wpinv_get_pages(true, __('Select a page', 'invoicing')), |
|
437 | 437 | 'class' => 'wpi_select2', |
438 | - 'placeholder' => __( 'Select a page', 'invoicing' ), |
|
438 | + 'placeholder' => __('Select a page', 'invoicing'), |
|
439 | 439 | ), |
440 | 440 | ), |
441 | 441 | ) |
@@ -446,19 +446,19 @@ discard block |
||
446 | 446 | 'main' => array( |
447 | 447 | 'invoice_number_format_settings' => array( |
448 | 448 | 'id' => 'invoice_number_format_settings', |
449 | - 'name' => '<h3>' . __( 'Invoice Number', 'invoicing' ) . '</h3>', |
|
449 | + 'name' => '<h3>' . __('Invoice Number', 'invoicing') . '</h3>', |
|
450 | 450 | 'type' => 'header', |
451 | 451 | ), |
452 | 452 | 'sequential_invoice_number' => array( |
453 | 453 | 'id' => 'sequential_invoice_number', |
454 | - 'name' => __( 'Sequential Invoice Numbers', 'invoicing' ), |
|
455 | - 'desc' => __('Check this box to enable sequential invoice numbers.', 'invoicing' ) . $reset_number, |
|
454 | + 'name' => __('Sequential Invoice Numbers', 'invoicing'), |
|
455 | + 'desc' => __('Check this box to enable sequential invoice numbers.', 'invoicing') . $reset_number, |
|
456 | 456 | 'type' => 'checkbox', |
457 | 457 | ), |
458 | 458 | 'invoice_sequence_start' => array( |
459 | 459 | 'id' => 'invoice_sequence_start', |
460 | - 'name' => __( 'Sequential Starting Number', 'invoicing' ), |
|
461 | - 'desc' => __( 'The number at which the invoice number sequence should begin.', 'invoicing' ) . $last_number, |
|
460 | + 'name' => __('Sequential Starting Number', 'invoicing'), |
|
461 | + 'desc' => __('The number at which the invoice number sequence should begin.', 'invoicing') . $last_number, |
|
462 | 462 | 'type' => 'number', |
463 | 463 | 'size' => 'small', |
464 | 464 | 'std' => '1', |
@@ -466,8 +466,8 @@ discard block |
||
466 | 466 | ), |
467 | 467 | 'invoice_number_padd' => array( |
468 | 468 | 'id' => 'invoice_number_padd', |
469 | - 'name' => __( 'Minimum Digits', 'invoicing' ), |
|
470 | - 'desc' => __( 'If the invoice number has less digits than this number, it is left padded with 0s. Ex: invoice number 108 will padded to 00108 if digits set to 5. The default 0 means no padding.', 'invoicing' ), |
|
469 | + 'name' => __('Minimum Digits', 'invoicing'), |
|
470 | + 'desc' => __('If the invoice number has less digits than this number, it is left padded with 0s. Ex: invoice number 108 will padded to 00108 if digits set to 5. The default 0 means no padding.', 'invoicing'), |
|
471 | 471 | 'type' => 'select', |
472 | 472 | 'options' => $invoice_number_padd_options, |
473 | 473 | 'std' => 5, |
@@ -475,8 +475,8 @@ discard block |
||
475 | 475 | ), |
476 | 476 | 'invoice_number_prefix' => array( |
477 | 477 | 'id' => 'invoice_number_prefix', |
478 | - 'name' => __( 'Invoice Number Prefix', 'invoicing' ), |
|
479 | - 'desc' => __( 'Prefix for all invoice numbers. Ex: INV-', 'invoicing' ), |
|
478 | + 'name' => __('Invoice Number Prefix', 'invoicing'), |
|
479 | + 'desc' => __('Prefix for all invoice numbers. Ex: INV-', 'invoicing'), |
|
480 | 480 | 'type' => 'text', |
481 | 481 | 'size' => 'regular', |
482 | 482 | 'std' => 'INV-', |
@@ -484,32 +484,32 @@ discard block |
||
484 | 484 | ), |
485 | 485 | 'invoice_number_postfix' => array( |
486 | 486 | 'id' => 'invoice_number_postfix', |
487 | - 'name' => __( 'Invoice Number Postfix', 'invoicing' ), |
|
488 | - 'desc' => __( 'Postfix for all invoice numbers.', 'invoicing' ), |
|
487 | + 'name' => __('Invoice Number Postfix', 'invoicing'), |
|
488 | + 'desc' => __('Postfix for all invoice numbers.', 'invoicing'), |
|
489 | 489 | 'type' => 'text', |
490 | 490 | 'size' => 'regular', |
491 | 491 | 'std' => '' |
492 | 492 | ), |
493 | 493 | 'checkout_settings' => array( |
494 | 494 | 'id' => 'checkout_settings', |
495 | - 'name' => '<h3>' . __( 'Checkout Settings', 'invoicing' ) . '</h3>', |
|
495 | + 'name' => '<h3>' . __('Checkout Settings', 'invoicing') . '</h3>', |
|
496 | 496 | 'type' => 'header', |
497 | 497 | ), |
498 | 498 | 'login_to_checkout' => array( |
499 | 499 | 'id' => 'login_to_checkout', |
500 | - 'name' => __( 'Require Login To Checkout', 'invoicing' ), |
|
501 | - 'desc' => __( 'If ticked then user needs to be logged in to view or pay invoice, can only view or pay their own invoice. If unticked then anyone can view or pay the invoice.', 'invoicing' ), |
|
500 | + 'name' => __('Require Login To Checkout', 'invoicing'), |
|
501 | + 'desc' => __('If ticked then user needs to be logged in to view or pay invoice, can only view or pay their own invoice. If unticked then anyone can view or pay the invoice.', 'invoicing'), |
|
502 | 502 | 'type' => 'checkbox', |
503 | 503 | ), |
504 | 504 | 'uninstall_settings' => array( |
505 | 505 | 'id' => 'uninstall_settings', |
506 | - 'name' => '<h3>' . __( 'Uninstall Settings', 'invoicing' ) . '</h3>', |
|
506 | + 'name' => '<h3>' . __('Uninstall Settings', 'invoicing') . '</h3>', |
|
507 | 507 | 'type' => 'header', |
508 | 508 | ), |
509 | 509 | 'remove_data_on_unistall' => array( |
510 | 510 | 'id' => 'remove_data_on_unistall', |
511 | - 'name' => __( 'Remove Data on Uninstall?', 'invoicing' ), |
|
512 | - 'desc' => __( 'Check this box if you would like Invoicing plugin to completely remove all of its data when the plugin is deleted/uninstalled.', 'invoicing' ), |
|
511 | + 'name' => __('Remove Data on Uninstall?', 'invoicing'), |
|
512 | + 'desc' => __('Check this box if you would like Invoicing plugin to completely remove all of its data when the plugin is deleted/uninstalled.', 'invoicing'), |
|
513 | 513 | 'type' => 'checkbox', |
514 | 514 | 'std' => '' |
515 | 515 | ), |
@@ -517,20 +517,20 @@ discard block |
||
517 | 517 | 'fields' => array( |
518 | 518 | 'address_autofill_settings' => array( |
519 | 519 | 'id' => 'address_autofill_settings', |
520 | - 'name' => '<h3>' . __( 'Google Address Auto Complete', 'invoicing' ) . '</h3>', |
|
520 | + 'name' => '<h3>' . __('Google Address Auto Complete', 'invoicing') . '</h3>', |
|
521 | 521 | 'type' => 'header', |
522 | 522 | ), |
523 | 523 | 'address_autofill_active' => array( |
524 | 524 | 'id' => 'address_autofill_active', |
525 | - 'name' => __( 'Enable/Disable', 'invoicing' ), |
|
526 | - 'desc' => __( 'Enable google address auto complete', 'invoicing' ), |
|
525 | + 'name' => __('Enable/Disable', 'invoicing'), |
|
526 | + 'desc' => __('Enable google address auto complete', 'invoicing'), |
|
527 | 527 | 'type' => 'checkbox', |
528 | 528 | 'std' => 0 |
529 | 529 | ), |
530 | 530 | 'address_autofill_api' => array( |
531 | 531 | 'id' => 'address_autofill_api', |
532 | - 'name' => __( 'Google Place API Key', 'invoicing' ), |
|
533 | - 'desc' => wp_sprintf(__( 'Enter google place API key. For more information go to google place API %sdocumenation%s', 'invoicing' ), '<a href="https://developers.google.com/maps/documentation/javascript/places-autocomplete" target="_blank">', '</a>' ), |
|
532 | + 'name' => __('Google Place API Key', 'invoicing'), |
|
533 | + 'desc' => wp_sprintf(__('Enter google place API key. For more information go to google place API %sdocumenation%s', 'invoicing'), '<a href="https://developers.google.com/maps/documentation/javascript/places-autocomplete" target="_blank">', '</a>'), |
|
534 | 534 | 'type' => 'text', |
535 | 535 | 'size' => 'regular', |
536 | 536 | 'std' => '' |
@@ -539,13 +539,13 @@ discard block |
||
539 | 539 | 'custom-css' => array( |
540 | 540 | 'css_settings' => array( |
541 | 541 | 'id' => 'css_settings', |
542 | - 'name' => '<h3>' . __( 'Custom CSS', 'invoicing' ) . '</h3>', |
|
542 | + 'name' => '<h3>' . __('Custom CSS', 'invoicing') . '</h3>', |
|
543 | 543 | 'type' => 'header', |
544 | 544 | ), |
545 | 545 | 'template_custom_css' => array( |
546 | 546 | 'id' => 'template_custom_css', |
547 | - 'name' => __( 'Invoice Template CSS', 'invoicing' ), |
|
548 | - 'desc' => __( 'Add CSS to modify appearance of the print invoice page.', 'invoicing' ), |
|
547 | + 'name' => __('Invoice Template CSS', 'invoicing'), |
|
548 | + 'desc' => __('Add CSS to modify appearance of the print invoice page.', 'invoicing'), |
|
549 | 549 | 'type' => 'textarea', |
550 | 550 | 'class'=> 'regular-text', |
551 | 551 | 'rows' => 10, |
@@ -559,8 +559,8 @@ discard block |
||
559 | 559 | 'main' => array( |
560 | 560 | 'tool_settings' => array( |
561 | 561 | 'id' => 'tool_settings', |
562 | - 'name' => '<h3>' . __( 'Diagnostic Tools', 'invoicing' ) . '</h3>', |
|
563 | - 'desc' => __( 'Invoicing diagnostic tools', 'invoicing' ), |
|
562 | + 'name' => '<h3>' . __('Diagnostic Tools', 'invoicing') . '</h3>', |
|
563 | + 'desc' => __('Invoicing diagnostic tools', 'invoicing'), |
|
564 | 564 | 'type' => 'tools', |
565 | 565 | ), |
566 | 566 | ), |
@@ -4,7 +4,7 @@ discard block |
||
4 | 4 | * GetPaid_Invoice_Data_Store class file. |
5 | 5 | * |
6 | 6 | */ |
7 | -if ( ! defined( 'ABSPATH' ) ) { |
|
7 | +if (!defined('ABSPATH')) { |
|
8 | 8 | exit; |
9 | 9 | } |
10 | 10 | |
@@ -106,61 +106,61 @@ discard block |
||
106 | 106 | * |
107 | 107 | * @param WPInv_Invoice $invoice Invoice object. |
108 | 108 | */ |
109 | - public function create( &$invoice ) { |
|
110 | - $invoice->set_version( WPINV_VERSION ); |
|
111 | - $invoice->set_date_created( current_time('mysql') ); |
|
109 | + public function create(&$invoice) { |
|
110 | + $invoice->set_version(WPINV_VERSION); |
|
111 | + $invoice->set_date_created(current_time('mysql')); |
|
112 | 112 | |
113 | 113 | // Create a new post. |
114 | 114 | $id = wp_insert_post( |
115 | 115 | apply_filters( |
116 | 116 | 'getpaid_new_invoice_data', |
117 | 117 | array( |
118 | - 'post_date' => $invoice->get_date_created( 'edit' ), |
|
119 | - 'post_type' => $invoice->get_post_type( 'edit' ), |
|
120 | - 'post_status' => $this->get_post_status( $invoice ), |
|
118 | + 'post_date' => $invoice->get_date_created('edit'), |
|
119 | + 'post_type' => $invoice->get_post_type('edit'), |
|
120 | + 'post_status' => $this->get_post_status($invoice), |
|
121 | 121 | 'ping_status' => 'closed', |
122 | - 'post_author' => $invoice->get_user_id( 'edit' ), |
|
123 | - 'post_title' => $invoice->get_title( 'edit' ), |
|
124 | - 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
125 | - 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
122 | + 'post_author' => $invoice->get_user_id('edit'), |
|
123 | + 'post_title' => $invoice->get_title('edit'), |
|
124 | + 'post_excerpt' => $invoice->get_description('edit'), |
|
125 | + 'post_parent' => $invoice->get_parent_id('edit'), |
|
126 | 126 | ) |
127 | 127 | ), |
128 | 128 | true |
129 | 129 | ); |
130 | 130 | |
131 | - if ( $id && ! is_wp_error( $id ) ) { |
|
131 | + if ($id && !is_wp_error($id)) { |
|
132 | 132 | |
133 | 133 | // Update the new id and regenerate a title. |
134 | - $invoice->set_id( $id ); |
|
134 | + $invoice->set_id($id); |
|
135 | 135 | |
136 | 136 | $invoice->maybe_set_number(); |
137 | 137 | |
138 | 138 | wp_update_post( |
139 | 139 | array( |
140 | 140 | 'ID' => $invoice->get_id(), |
141 | - 'post_title' => $invoice->get_number( 'edit' ), |
|
142 | - 'post_name' => $invoice->get_path( 'edit' ) |
|
141 | + 'post_title' => $invoice->get_number('edit'), |
|
142 | + 'post_name' => $invoice->get_path('edit') |
|
143 | 143 | ) |
144 | 144 | ); |
145 | 145 | |
146 | 146 | // Save special fields and items. |
147 | - $this->save_special_fields( $invoice ); |
|
148 | - $this->save_items( $invoice ); |
|
147 | + $this->save_special_fields($invoice); |
|
148 | + $this->save_items($invoice); |
|
149 | 149 | |
150 | 150 | // Update meta data. |
151 | - $this->update_post_meta( $invoice ); |
|
151 | + $this->update_post_meta($invoice); |
|
152 | 152 | $invoice->save_meta_data(); |
153 | 153 | |
154 | 154 | // Apply changes. |
155 | 155 | $invoice->apply_changes(); |
156 | - $this->clear_caches( $invoice ); |
|
156 | + $this->clear_caches($invoice); |
|
157 | 157 | |
158 | 158 | // Fires after a new invoice is created. |
159 | - do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
159 | + do_action('getpaid_new_' . $invoice->get_type(), $invoice); |
|
160 | 160 | return true; |
161 | 161 | } |
162 | 162 | |
163 | - if ( is_wp_error( $id ) ) { |
|
163 | + if (is_wp_error($id)) { |
|
164 | 164 | $invoice->last_error = $id->get_error_message(); |
165 | 165 | } |
166 | 166 | |
@@ -173,14 +173,14 @@ discard block |
||
173 | 173 | * @param WPInv_Invoice $invoice Invoice object. |
174 | 174 | * |
175 | 175 | */ |
176 | - public function read( &$invoice ) { |
|
176 | + public function read(&$invoice) { |
|
177 | 177 | |
178 | 178 | $invoice->set_defaults(); |
179 | - $invoice_object = get_post( $invoice->get_id() ); |
|
179 | + $invoice_object = get_post($invoice->get_id()); |
|
180 | 180 | |
181 | - if ( ! $invoice->get_id() || ! $invoice_object || ! getpaid_is_invoice_post_type( $invoice_object->post_type ) ) { |
|
182 | - $invoice->last_error = __( 'Invalid invoice.', 'invoicing' ); |
|
183 | - $invoice->set_id( 0 ); |
|
181 | + if (!$invoice->get_id() || !$invoice_object || !getpaid_is_invoice_post_type($invoice_object->post_type)) { |
|
182 | + $invoice->last_error = __('Invalid invoice.', 'invoicing'); |
|
183 | + $invoice->set_id(0); |
|
184 | 184 | return false; |
185 | 185 | } |
186 | 186 | |
@@ -198,14 +198,14 @@ discard block |
||
198 | 198 | ) |
199 | 199 | ); |
200 | 200 | |
201 | - $invoice->set_type( $invoice_object->post_type ); |
|
201 | + $invoice->set_type($invoice_object->post_type); |
|
202 | 202 | |
203 | - $this->read_object_data( $invoice, $invoice_object ); |
|
204 | - $this->add_special_fields( $invoice ); |
|
205 | - $this->add_items( $invoice ); |
|
203 | + $this->read_object_data($invoice, $invoice_object); |
|
204 | + $this->add_special_fields($invoice); |
|
205 | + $this->add_items($invoice); |
|
206 | 206 | $invoice->read_meta_data(); |
207 | - $invoice->set_object_read( true ); |
|
208 | - do_action( 'getpaid_read_' . $invoice->get_type(), $invoice ); |
|
207 | + $invoice->set_object_read(true); |
|
208 | + do_action('getpaid_read_' . $invoice->get_type(), $invoice); |
|
209 | 209 | |
210 | 210 | } |
211 | 211 | |
@@ -214,35 +214,35 @@ discard block |
||
214 | 214 | * |
215 | 215 | * @param WPInv_Invoice $invoice Invoice object. |
216 | 216 | */ |
217 | - public function update( &$invoice ) { |
|
217 | + public function update(&$invoice) { |
|
218 | 218 | $invoice->save_meta_data(); |
219 | - $invoice->set_version( WPINV_VERSION ); |
|
219 | + $invoice->set_version(WPINV_VERSION); |
|
220 | 220 | |
221 | - if ( null === $invoice->get_date_created( 'edit' ) ) { |
|
222 | - $invoice->set_date_created( current_time('mysql') ); |
|
221 | + if (null === $invoice->get_date_created('edit')) { |
|
222 | + $invoice->set_date_created(current_time('mysql')); |
|
223 | 223 | } |
224 | 224 | |
225 | 225 | // Ensure both the key and number are set. |
226 | 226 | $invoice->get_path(); |
227 | 227 | |
228 | 228 | // Grab the current status so we can compare. |
229 | - $previous_status = get_post_status( $invoice->get_id() ); |
|
229 | + $previous_status = get_post_status($invoice->get_id()); |
|
230 | 230 | |
231 | 231 | $changes = $invoice->get_changes(); |
232 | 232 | |
233 | 233 | // Only update the post when the post data changes. |
234 | - if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path' ), array_keys( $changes ) ) ) { |
|
234 | + if (array_intersect(array('date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path'), array_keys($changes))) { |
|
235 | 235 | $post_data = array( |
236 | - 'post_date' => $invoice->get_date_created( 'edit' ), |
|
237 | - 'post_date_gmt' => $invoice->get_date_created_gmt( 'edit' ), |
|
238 | - 'post_status' => $invoice->get_status( 'edit' ), |
|
239 | - 'post_title' => $invoice->get_name( 'edit' ), |
|
240 | - 'post_author' => $invoice->get_user_id( 'edit' ), |
|
241 | - 'post_modified' => $invoice->get_date_modified( 'edit' ), |
|
242 | - 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
243 | - 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
244 | - 'post_name' => $invoice->get_path( 'edit' ), |
|
245 | - 'post_type' => $invoice->get_post_type( 'edit' ), |
|
236 | + 'post_date' => $invoice->get_date_created('edit'), |
|
237 | + 'post_date_gmt' => $invoice->get_date_created_gmt('edit'), |
|
238 | + 'post_status' => $invoice->get_status('edit'), |
|
239 | + 'post_title' => $invoice->get_name('edit'), |
|
240 | + 'post_author' => $invoice->get_user_id('edit'), |
|
241 | + 'post_modified' => $invoice->get_date_modified('edit'), |
|
242 | + 'post_excerpt' => $invoice->get_description('edit'), |
|
243 | + 'post_parent' => $invoice->get_parent_id('edit'), |
|
244 | + 'post_name' => $invoice->get_path('edit'), |
|
245 | + 'post_type' => $invoice->get_post_type('edit'), |
|
246 | 246 | ); |
247 | 247 | |
248 | 248 | /** |
@@ -253,35 +253,35 @@ discard block |
||
253 | 253 | * This ensures hooks are fired by either WP itself (admin screen save), |
254 | 254 | * or an update purely from CRUD. |
255 | 255 | */ |
256 | - if ( doing_action( 'save_post' ) ) { |
|
257 | - $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $invoice->get_id() ) ); |
|
258 | - clean_post_cache( $invoice->get_id() ); |
|
256 | + if (doing_action('save_post')) { |
|
257 | + $GLOBALS['wpdb']->update($GLOBALS['wpdb']->posts, $post_data, array('ID' => $invoice->get_id())); |
|
258 | + clean_post_cache($invoice->get_id()); |
|
259 | 259 | } else { |
260 | - wp_update_post( array_merge( array( 'ID' => $invoice->get_id() ), $post_data ) ); |
|
260 | + wp_update_post(array_merge(array('ID' => $invoice->get_id()), $post_data)); |
|
261 | 261 | } |
262 | - $invoice->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook. |
|
262 | + $invoice->read_meta_data(true); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook. |
|
263 | 263 | } |
264 | 264 | |
265 | 265 | // Update meta data. |
266 | - $this->update_post_meta( $invoice ); |
|
266 | + $this->update_post_meta($invoice); |
|
267 | 267 | |
268 | 268 | // Save special fields and items. |
269 | - $this->save_special_fields( $invoice ); |
|
270 | - $this->save_items( $invoice ); |
|
269 | + $this->save_special_fields($invoice); |
|
270 | + $this->save_items($invoice); |
|
271 | 271 | |
272 | 272 | // Apply the changes. |
273 | 273 | $invoice->apply_changes(); |
274 | 274 | |
275 | 275 | // Clear caches. |
276 | - $this->clear_caches( $invoice ); |
|
276 | + $this->clear_caches($invoice); |
|
277 | 277 | |
278 | 278 | // Fire a hook depending on the status - this should be considered a creation if it was previously draft status. |
279 | - $new_status = $invoice->get_status( 'edit' ); |
|
279 | + $new_status = $invoice->get_status('edit'); |
|
280 | 280 | |
281 | - if ( $new_status !== $previous_status && in_array( $previous_status, array( 'new', 'auto-draft', 'draft' ), true ) ) { |
|
282 | - do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
281 | + if ($new_status !== $previous_status && in_array($previous_status, array('new', 'auto-draft', 'draft'), true)) { |
|
282 | + do_action('getpaid_new_' . $invoice->get_type(), $invoice); |
|
283 | 283 | } else { |
284 | - do_action( 'getpaid_update_' . $invoice->get_type(), $invoice ); |
|
284 | + do_action('getpaid_update_' . $invoice->get_type(), $invoice); |
|
285 | 285 | } |
286 | 286 | |
287 | 287 | } |
@@ -297,45 +297,45 @@ discard block |
||
297 | 297 | * |
298 | 298 | * @param WPInv_Invoice $invoice Invoice object. |
299 | 299 | */ |
300 | - public function add_special_fields( &$invoice ) { |
|
300 | + public function add_special_fields(&$invoice) { |
|
301 | 301 | global $wpdb; |
302 | 302 | |
303 | 303 | // Maybe retrieve from the cache. |
304 | - $data = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
304 | + $data = wp_cache_get($invoice->get_id(), 'getpaid_invoice_special_fields'); |
|
305 | 305 | |
306 | 306 | // If not found, retrieve from the db. |
307 | - if ( false === $data ) { |
|
308 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
307 | + if (false === $data) { |
|
308 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
309 | 309 | |
310 | 310 | $data = $wpdb->get_row( |
311 | - $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id() ), |
|
311 | + $wpdb->prepare("SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id()), |
|
312 | 312 | ARRAY_A |
313 | 313 | ); |
314 | 314 | |
315 | 315 | // Update the cache with our data |
316 | - wp_cache_set( $invoice->get_id(), $data, 'getpaid_invoice_special_fields' ); |
|
316 | + wp_cache_set($invoice->get_id(), $data, 'getpaid_invoice_special_fields'); |
|
317 | 317 | |
318 | 318 | } |
319 | 319 | |
320 | 320 | // Abort if the data does not exist. |
321 | - if ( empty( $data ) ) { |
|
322 | - $invoice->set_object_read( true ); |
|
323 | - $invoice->set_props( wpinv_get_user_address( $invoice->get_user_id() ) ); |
|
321 | + if (empty($data)) { |
|
322 | + $invoice->set_object_read(true); |
|
323 | + $invoice->set_props(wpinv_get_user_address($invoice->get_user_id())); |
|
324 | 324 | return; |
325 | 325 | } |
326 | 326 | |
327 | 327 | $props = array(); |
328 | 328 | |
329 | - foreach ( $this->database_fields_to_props as $db_field => $prop ) { |
|
329 | + foreach ($this->database_fields_to_props as $db_field => $prop) { |
|
330 | 330 | |
331 | - if ( $db_field == 'post_id' ) { |
|
331 | + if ($db_field == 'post_id') { |
|
332 | 332 | continue; |
333 | 333 | } |
334 | 334 | |
335 | - $props[ $prop ] = $data[ $db_field ]; |
|
335 | + $props[$prop] = $data[$db_field]; |
|
336 | 336 | } |
337 | 337 | |
338 | - $invoice->set_props( $props ); |
|
338 | + $invoice->set_props($props); |
|
339 | 339 | |
340 | 340 | } |
341 | 341 | |
@@ -346,14 +346,14 @@ discard block |
||
346 | 346 | * @param WPInv_Invoice $invoice The Invoice object. |
347 | 347 | * @return array A mapping of field keys => prop names, filtered by ones that should be updated. |
348 | 348 | */ |
349 | - protected function get_special_fields_to_update( $invoice ) { |
|
349 | + protected function get_special_fields_to_update($invoice) { |
|
350 | 350 | $fields_to_update = array(); |
351 | - $changed_props = $invoice->get_changes(); |
|
351 | + $changed_props = $invoice->get_changes(); |
|
352 | 352 | |
353 | 353 | // Props should be updated if they are a part of the $changed array or don't exist yet. |
354 | - foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
355 | - if ( array_key_exists( $prop, $changed_props ) ) { |
|
356 | - $fields_to_update[ $database_field ] = $prop; |
|
354 | + foreach ($this->database_fields_to_props as $database_field => $prop) { |
|
355 | + if (array_key_exists($prop, $changed_props)) { |
|
356 | + $fields_to_update[$database_field] = $prop; |
|
357 | 357 | } |
358 | 358 | } |
359 | 359 | |
@@ -366,25 +366,25 @@ discard block |
||
366 | 366 | * @param WPInv_Invoice $invoice WPInv_Invoice object. |
367 | 367 | * @since 1.0.19 |
368 | 368 | */ |
369 | - protected function update_special_fields( &$invoice ) { |
|
369 | + protected function update_special_fields(&$invoice) { |
|
370 | 370 | global $wpdb; |
371 | 371 | |
372 | 372 | $updated_props = array(); |
373 | - $fields_to_update = $this->get_special_fields_to_update( $invoice ); |
|
373 | + $fields_to_update = $this->get_special_fields_to_update($invoice); |
|
374 | 374 | |
375 | - foreach ( $fields_to_update as $database_field => $prop ) { |
|
376 | - $value = $invoice->{"get_$prop"}( 'edit' ); |
|
377 | - $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
378 | - $value = is_bool( $value ) ? ( int ) $value : $value; |
|
379 | - $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
375 | + foreach ($fields_to_update as $database_field => $prop) { |
|
376 | + $value = $invoice->{"get_$prop"}('edit'); |
|
377 | + $value = is_string($value) ? wp_slash($value) : $value; |
|
378 | + $value = is_bool($value) ? (int) $value : $value; |
|
379 | + $updated_props[$database_field] = maybe_serialize($value); |
|
380 | 380 | } |
381 | 381 | |
382 | - if ( ! empty( $updated_props ) ) { |
|
382 | + if (!empty($updated_props)) { |
|
383 | 383 | |
384 | 384 | $table = $wpdb->prefix . 'getpaid_invoices'; |
385 | - $wpdb->update( $table, $updated_props, array( 'post_id' => $invoice->get_id() ) ); |
|
386 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
387 | - do_action( "getpaid_invoice_update_database_fields", $invoice, $updated_props ); |
|
385 | + $wpdb->update($table, $updated_props, array('post_id' => $invoice->get_id())); |
|
386 | + wp_cache_delete($invoice->get_id(), 'getpaid_invoice_special_fields'); |
|
387 | + do_action("getpaid_invoice_update_database_fields", $invoice, $updated_props); |
|
388 | 388 | |
389 | 389 | } |
390 | 390 | |
@@ -396,22 +396,22 @@ discard block |
||
396 | 396 | * @param WPInv_Invoice $invoice WPInv_Invoice object. |
397 | 397 | * @since 1.0.19 |
398 | 398 | */ |
399 | - protected function insert_special_fields( &$invoice ) { |
|
399 | + protected function insert_special_fields(&$invoice) { |
|
400 | 400 | global $wpdb; |
401 | 401 | |
402 | - $updated_props = array(); |
|
402 | + $updated_props = array(); |
|
403 | 403 | |
404 | - foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
405 | - $value = $invoice->{"get_$prop"}( 'edit' ); |
|
406 | - $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
407 | - $value = is_bool( $value ) ? ( int ) $value : $value; |
|
408 | - $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
404 | + foreach ($this->database_fields_to_props as $database_field => $prop) { |
|
405 | + $value = $invoice->{"get_$prop"}('edit'); |
|
406 | + $value = is_string($value) ? wp_slash($value) : $value; |
|
407 | + $value = is_bool($value) ? (int) $value : $value; |
|
408 | + $updated_props[$database_field] = maybe_serialize($value); |
|
409 | 409 | } |
410 | 410 | |
411 | 411 | $table = $wpdb->prefix . 'getpaid_invoices'; |
412 | - $wpdb->insert( $table, $updated_props ); |
|
413 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
414 | - do_action( "getpaid_invoice_insert_database_fields", $invoice, $updated_props ); |
|
412 | + $wpdb->insert($table, $updated_props); |
|
413 | + wp_cache_delete($invoice->get_id(), 'getpaid_invoice_special_fields'); |
|
414 | + do_action("getpaid_invoice_insert_database_fields", $invoice, $updated_props); |
|
415 | 415 | |
416 | 416 | } |
417 | 417 | |
@@ -420,7 +420,7 @@ discard block |
||
420 | 420 | * |
421 | 421 | * @param WPInv_Invoice $invoice Invoice object. |
422 | 422 | */ |
423 | - public function save_special_fields( & $invoice ) { |
|
423 | + public function save_special_fields(& $invoice) { |
|
424 | 424 | global $wpdb; |
425 | 425 | |
426 | 426 | // The invoices table. |
@@ -428,13 +428,13 @@ discard block |
||
428 | 428 | $id = (int) $invoice->get_id(); |
429 | 429 | $invoice->maybe_set_key(); |
430 | 430 | |
431 | - if ( $wpdb->get_var( "SELECT `post_id` FROM $table WHERE `post_id`= $id" ) ) { |
|
431 | + if ($wpdb->get_var("SELECT `post_id` FROM $table WHERE `post_id`= $id")) { |
|
432 | 432 | |
433 | - $this->update_special_fields( $invoice ); |
|
433 | + $this->update_special_fields($invoice); |
|
434 | 434 | |
435 | 435 | } else { |
436 | 436 | |
437 | - $this->insert_special_fields( $invoice ); |
|
437 | + $this->insert_special_fields($invoice); |
|
438 | 438 | |
439 | 439 | } |
440 | 440 | |
@@ -445,43 +445,43 @@ discard block |
||
445 | 445 | * |
446 | 446 | * @param WPInv_Invoice $invoice Invoice object. |
447 | 447 | */ |
448 | - public function add_items( &$invoice ) { |
|
448 | + public function add_items(&$invoice) { |
|
449 | 449 | global $wpdb; |
450 | 450 | |
451 | 451 | // Maybe retrieve from the cache. |
452 | - $items = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
452 | + $items = wp_cache_get($invoice->get_id(), 'getpaid_invoice_cart_details'); |
|
453 | 453 | |
454 | 454 | // If not found, retrieve from the db. |
455 | - if ( false === $items ) { |
|
456 | - $table = $wpdb->prefix . 'getpaid_invoice_items'; |
|
455 | + if (false === $items) { |
|
456 | + $table = $wpdb->prefix . 'getpaid_invoice_items'; |
|
457 | 457 | |
458 | 458 | $items = $wpdb->get_results( |
459 | - $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id() ) |
|
459 | + $wpdb->prepare("SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id()) |
|
460 | 460 | ); |
461 | 461 | |
462 | 462 | // Update the cache with our data |
463 | - wp_cache_set( $invoice->get_id(), $items, 'getpaid_invoice_cart_details' ); |
|
463 | + wp_cache_set($invoice->get_id(), $items, 'getpaid_invoice_cart_details'); |
|
464 | 464 | |
465 | 465 | } |
466 | 466 | |
467 | 467 | // Abort if no items found. |
468 | - if ( empty( $items ) ) { |
|
468 | + if (empty($items)) { |
|
469 | 469 | return; |
470 | 470 | } |
471 | 471 | |
472 | - foreach ( $items as $item_data ) { |
|
473 | - $item = new GetPaid_Form_Item( $item_data->item_id ); |
|
472 | + foreach ($items as $item_data) { |
|
473 | + $item = new GetPaid_Form_Item($item_data->item_id); |
|
474 | 474 | |
475 | 475 | // Set item data. |
476 | - $item->item_tax = wpinv_sanitize_amount( $item_data->tax ); |
|
477 | - $item->item_discount = wpinv_sanitize_amount( $item_data->discount ); |
|
478 | - $item->set_name( $item_data->item_name ); |
|
479 | - $item->set_description( $item_data->item_description ); |
|
480 | - $item->set_price( $item_data->item_price ); |
|
481 | - $item->set_quantity( $item_data->quantity ); |
|
482 | - $item->set_item_meta( $item_data->meta ); |
|
483 | - |
|
484 | - $invoice->add_item( $item ); |
|
476 | + $item->item_tax = wpinv_sanitize_amount($item_data->tax); |
|
477 | + $item->item_discount = wpinv_sanitize_amount($item_data->discount); |
|
478 | + $item->set_name($item_data->item_name); |
|
479 | + $item->set_description($item_data->item_description); |
|
480 | + $item->set_price($item_data->item_price); |
|
481 | + $item->set_quantity($item_data->quantity); |
|
482 | + $item->set_item_meta($item_data->meta); |
|
483 | + |
|
484 | + $invoice->add_item($item); |
|
485 | 485 | } |
486 | 486 | |
487 | 487 | } |
@@ -491,20 +491,20 @@ discard block |
||
491 | 491 | * |
492 | 492 | * @param WPInv_Invoice $invoice Invoice object. |
493 | 493 | */ |
494 | - public function save_items( $invoice ) { |
|
494 | + public function save_items($invoice) { |
|
495 | 495 | |
496 | 496 | // Delete previously existing items. |
497 | - $this->delete_items( $invoice ); |
|
497 | + $this->delete_items($invoice); |
|
498 | 498 | |
499 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
499 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
500 | 500 | |
501 | - foreach ( $invoice->get_cart_details() as $item_data ) { |
|
502 | - $item_data = array_map( 'maybe_serialize', $item_data ); |
|
503 | - $GLOBALS['wpdb']->insert( $table, $item_data ); |
|
501 | + foreach ($invoice->get_cart_details() as $item_data) { |
|
502 | + $item_data = array_map('maybe_serialize', $item_data); |
|
503 | + $GLOBALS['wpdb']->insert($table, $item_data); |
|
504 | 504 | } |
505 | 505 | |
506 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
507 | - do_action( "getpaid_invoice_save_items", $invoice ); |
|
506 | + wp_cache_delete($invoice->get_id(), 'getpaid_invoice_cart_details'); |
|
507 | + do_action("getpaid_invoice_save_items", $invoice); |
|
508 | 508 | |
509 | 509 | } |
510 | 510 | |
@@ -513,9 +513,9 @@ discard block |
||
513 | 513 | * |
514 | 514 | * @param WPInv_Invoice $invoice Invoice object. |
515 | 515 | */ |
516 | - public function delete_items( $invoice ) { |
|
517 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
518 | - return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
516 | + public function delete_items($invoice) { |
|
517 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
518 | + return $GLOBALS['wpdb']->delete($table, array('post_id' => $invoice->get_id())); |
|
519 | 519 | } |
520 | 520 | |
521 | 521 | /** |
@@ -523,9 +523,9 @@ discard block |
||
523 | 523 | * |
524 | 524 | * @param WPInv_Invoice $invoice Invoice object. |
525 | 525 | */ |
526 | - public function delete_special_fields( $invoice ) { |
|
527 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoices'; |
|
528 | - return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
526 | + public function delete_special_fields($invoice) { |
|
527 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoices'; |
|
528 | + return $GLOBALS['wpdb']->delete($table, array('post_id' => $invoice->get_id())); |
|
529 | 529 | } |
530 | 530 | |
531 | 531 | } |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | * |
6 | 6 | */ |
7 | 7 | if ( ! defined( 'ABSPATH' ) ) { |
8 | - exit; |
|
8 | + exit; |
|
9 | 9 | } |
10 | 10 | |
11 | 11 | /** |
@@ -15,519 +15,519 @@ discard block |
||
15 | 15 | */ |
16 | 16 | class GetPaid_Invoice_Data_Store extends GetPaid_Data_Store_WP { |
17 | 17 | |
18 | - /** |
|
19 | - * Data stored in meta keys, but not considered "meta" for a discount. |
|
20 | - * |
|
21 | - * @since 1.0.19 |
|
22 | - * @var array |
|
23 | - */ |
|
24 | - protected $internal_meta_keys = array( |
|
25 | - '_wpinv_subscr_profile_id', |
|
26 | - '_wpinv_subscription_id', |
|
27 | - '_wpinv_taxes', |
|
28 | - '_wpinv_fees', |
|
29 | - '_wpinv_discounts', |
|
30 | - '_wpinv_submission_id', |
|
31 | - '_wpinv_payment_form', |
|
32 | - '_wpinv_is_viewed', |
|
33 | - 'wpinv_email_cc', |
|
34 | - 'wpinv_template', |
|
35 | - 'wpinv_created_via' |
|
36 | - ); |
|
37 | - |
|
38 | - /** |
|
39 | - * A map of meta keys to data props. |
|
40 | - * |
|
41 | - * @since 1.0.19 |
|
42 | - * |
|
43 | - * @var array |
|
44 | - */ |
|
45 | - protected $meta_key_to_props = array( |
|
46 | - '_wpinv_subscr_profile_id' => 'remote_subscription_id', |
|
47 | - '_wpinv_subscription_id' => 'subscription_id', |
|
48 | - '_wpinv_taxes' => 'taxes', |
|
49 | - '_wpinv_fees' => 'fees', |
|
50 | - '_wpinv_discounts' => 'discounts', |
|
51 | - '_wpinv_submission_id' => 'submission_id', |
|
52 | - '_wpinv_payment_form' => 'payment_form', |
|
53 | - '_wpinv_is_viewed' => 'is_viewed', |
|
54 | - 'wpinv_email_cc' => 'email_cc', |
|
55 | - 'wpinv_template' => 'template', |
|
56 | - 'wpinv_created_via' => 'created_via', |
|
57 | - ); |
|
58 | - |
|
59 | - /** |
|
60 | - * A map of database fields to data props. |
|
61 | - * |
|
62 | - * @since 1.0.19 |
|
63 | - * |
|
64 | - * @var array |
|
65 | - */ |
|
66 | - protected $database_fields_to_props = array( |
|
67 | - 'post_id' => 'id', |
|
68 | - 'number' => 'number', |
|
69 | - 'currency' => 'currency', |
|
70 | - 'key' => 'key', |
|
71 | - 'type' => 'type', |
|
72 | - 'mode' => 'mode', |
|
73 | - 'user_ip' => 'user_ip', |
|
74 | - 'first_name' => 'first_name', |
|
75 | - 'last_name' => 'last_name', |
|
76 | - 'address' => 'address', |
|
77 | - 'city' => 'city', |
|
78 | - 'state' => 'state', |
|
79 | - 'country' => 'country', |
|
80 | - 'zip' => 'zip', |
|
81 | - 'zip' => 'zip', |
|
82 | - 'adddress_confirmed' => 'address_confirmed', |
|
83 | - 'gateway' => 'gateway', |
|
84 | - 'transaction_id' => 'transaction_id', |
|
85 | - 'currency' => 'currency', |
|
86 | - 'subtotal' => 'subtotal', |
|
87 | - 'tax' => 'total_tax', |
|
88 | - 'fees_total' => 'total_fees', |
|
89 | - 'discount' => 'total_discount', |
|
90 | - 'total' => 'total', |
|
91 | - 'discount_code' => 'discount_code', |
|
92 | - 'disable_taxes' => 'disable_taxes', |
|
93 | - 'due_date' => 'due_date', |
|
94 | - 'completed_date' => 'completed_date', |
|
95 | - 'company' => 'company', |
|
96 | - 'vat_number' => 'vat_number', |
|
97 | - 'vat_rate' => 'vat_rate', |
|
98 | - ); |
|
99 | - |
|
100 | - /* |
|
18 | + /** |
|
19 | + * Data stored in meta keys, but not considered "meta" for a discount. |
|
20 | + * |
|
21 | + * @since 1.0.19 |
|
22 | + * @var array |
|
23 | + */ |
|
24 | + protected $internal_meta_keys = array( |
|
25 | + '_wpinv_subscr_profile_id', |
|
26 | + '_wpinv_subscription_id', |
|
27 | + '_wpinv_taxes', |
|
28 | + '_wpinv_fees', |
|
29 | + '_wpinv_discounts', |
|
30 | + '_wpinv_submission_id', |
|
31 | + '_wpinv_payment_form', |
|
32 | + '_wpinv_is_viewed', |
|
33 | + 'wpinv_email_cc', |
|
34 | + 'wpinv_template', |
|
35 | + 'wpinv_created_via' |
|
36 | + ); |
|
37 | + |
|
38 | + /** |
|
39 | + * A map of meta keys to data props. |
|
40 | + * |
|
41 | + * @since 1.0.19 |
|
42 | + * |
|
43 | + * @var array |
|
44 | + */ |
|
45 | + protected $meta_key_to_props = array( |
|
46 | + '_wpinv_subscr_profile_id' => 'remote_subscription_id', |
|
47 | + '_wpinv_subscription_id' => 'subscription_id', |
|
48 | + '_wpinv_taxes' => 'taxes', |
|
49 | + '_wpinv_fees' => 'fees', |
|
50 | + '_wpinv_discounts' => 'discounts', |
|
51 | + '_wpinv_submission_id' => 'submission_id', |
|
52 | + '_wpinv_payment_form' => 'payment_form', |
|
53 | + '_wpinv_is_viewed' => 'is_viewed', |
|
54 | + 'wpinv_email_cc' => 'email_cc', |
|
55 | + 'wpinv_template' => 'template', |
|
56 | + 'wpinv_created_via' => 'created_via', |
|
57 | + ); |
|
58 | + |
|
59 | + /** |
|
60 | + * A map of database fields to data props. |
|
61 | + * |
|
62 | + * @since 1.0.19 |
|
63 | + * |
|
64 | + * @var array |
|
65 | + */ |
|
66 | + protected $database_fields_to_props = array( |
|
67 | + 'post_id' => 'id', |
|
68 | + 'number' => 'number', |
|
69 | + 'currency' => 'currency', |
|
70 | + 'key' => 'key', |
|
71 | + 'type' => 'type', |
|
72 | + 'mode' => 'mode', |
|
73 | + 'user_ip' => 'user_ip', |
|
74 | + 'first_name' => 'first_name', |
|
75 | + 'last_name' => 'last_name', |
|
76 | + 'address' => 'address', |
|
77 | + 'city' => 'city', |
|
78 | + 'state' => 'state', |
|
79 | + 'country' => 'country', |
|
80 | + 'zip' => 'zip', |
|
81 | + 'zip' => 'zip', |
|
82 | + 'adddress_confirmed' => 'address_confirmed', |
|
83 | + 'gateway' => 'gateway', |
|
84 | + 'transaction_id' => 'transaction_id', |
|
85 | + 'currency' => 'currency', |
|
86 | + 'subtotal' => 'subtotal', |
|
87 | + 'tax' => 'total_tax', |
|
88 | + 'fees_total' => 'total_fees', |
|
89 | + 'discount' => 'total_discount', |
|
90 | + 'total' => 'total', |
|
91 | + 'discount_code' => 'discount_code', |
|
92 | + 'disable_taxes' => 'disable_taxes', |
|
93 | + 'due_date' => 'due_date', |
|
94 | + 'completed_date' => 'completed_date', |
|
95 | + 'company' => 'company', |
|
96 | + 'vat_number' => 'vat_number', |
|
97 | + 'vat_rate' => 'vat_rate', |
|
98 | + ); |
|
99 | + |
|
100 | + /* |
|
101 | 101 | |-------------------------------------------------------------------------- |
102 | 102 | | CRUD Methods |
103 | 103 | |-------------------------------------------------------------------------- |
104 | 104 | */ |
105 | 105 | |
106 | - /** |
|
107 | - * Method to create a new invoice in the database. |
|
108 | - * |
|
109 | - * @param WPInv_Invoice $invoice Invoice object. |
|
110 | - */ |
|
111 | - public function create( &$invoice ) { |
|
112 | - $invoice->set_version( WPINV_VERSION ); |
|
113 | - $invoice->set_date_created( current_time('mysql') ); |
|
114 | - |
|
115 | - // Create a new post. |
|
116 | - $id = wp_insert_post( |
|
117 | - apply_filters( |
|
118 | - 'getpaid_new_invoice_data', |
|
119 | - array( |
|
120 | - 'post_date' => $invoice->get_date_created( 'edit' ), |
|
121 | - 'post_type' => $invoice->get_post_type( 'edit' ), |
|
122 | - 'post_status' => $this->get_post_status( $invoice ), |
|
123 | - 'ping_status' => 'closed', |
|
124 | - 'post_author' => $invoice->get_user_id( 'edit' ), |
|
125 | - 'post_title' => $invoice->get_title( 'edit' ), |
|
126 | - 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
127 | - 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
128 | - ) |
|
129 | - ), |
|
130 | - true |
|
131 | - ); |
|
132 | - |
|
133 | - if ( $id && ! is_wp_error( $id ) ) { |
|
134 | - |
|
135 | - // Update the new id and regenerate a title. |
|
136 | - $invoice->set_id( $id ); |
|
137 | - |
|
138 | - $invoice->maybe_set_number(); |
|
139 | - |
|
140 | - wp_update_post( |
|
141 | - array( |
|
142 | - 'ID' => $invoice->get_id(), |
|
143 | - 'post_title' => $invoice->get_number( 'edit' ), |
|
144 | - 'post_name' => $invoice->get_path( 'edit' ) |
|
145 | - ) |
|
146 | - ); |
|
147 | - |
|
148 | - // Save special fields and items. |
|
149 | - $this->save_special_fields( $invoice ); |
|
150 | - $this->save_items( $invoice ); |
|
151 | - |
|
152 | - // Update meta data. |
|
153 | - $this->update_post_meta( $invoice ); |
|
154 | - $invoice->save_meta_data(); |
|
155 | - |
|
156 | - // Apply changes. |
|
157 | - $invoice->apply_changes(); |
|
158 | - $this->clear_caches( $invoice ); |
|
159 | - |
|
160 | - // Fires after a new invoice is created. |
|
161 | - do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
162 | - return true; |
|
163 | - } |
|
164 | - |
|
165 | - if ( is_wp_error( $id ) ) { |
|
166 | - $invoice->last_error = $id->get_error_message(); |
|
167 | - } |
|
168 | - |
|
169 | - return false; |
|
170 | - } |
|
171 | - |
|
172 | - /** |
|
173 | - * Method to read an invoice from the database. |
|
174 | - * |
|
175 | - * @param WPInv_Invoice $invoice Invoice object. |
|
176 | - * |
|
177 | - */ |
|
178 | - public function read( &$invoice ) { |
|
179 | - |
|
180 | - $invoice->set_defaults(); |
|
181 | - $invoice_object = get_post( $invoice->get_id() ); |
|
182 | - |
|
183 | - if ( ! $invoice->get_id() || ! $invoice_object || ! getpaid_is_invoice_post_type( $invoice_object->post_type ) ) { |
|
184 | - $invoice->last_error = __( 'Invalid invoice.', 'invoicing' ); |
|
185 | - $invoice->set_id( 0 ); |
|
186 | - return false; |
|
187 | - } |
|
188 | - |
|
189 | - $invoice->set_props( |
|
190 | - array( |
|
191 | - 'date_created' => 0 < $invoice_object->post_date ? $invoice_object->post_date : null, |
|
192 | - 'date_modified' => 0 < $invoice_object->post_modified ? $invoice_object->post_modified : null, |
|
193 | - 'status' => $invoice_object->post_status, |
|
194 | - 'author' => $invoice_object->post_author, |
|
195 | - 'description' => $invoice_object->post_excerpt, |
|
196 | - 'parent_id' => $invoice_object->post_parent, |
|
197 | - 'name' => $invoice_object->post_title, |
|
198 | - 'path' => $invoice_object->post_name, |
|
199 | - 'post_type' => $invoice_object->post_type, |
|
200 | - ) |
|
201 | - ); |
|
202 | - |
|
203 | - $invoice->set_type( $invoice_object->post_type ); |
|
204 | - |
|
205 | - $this->read_object_data( $invoice, $invoice_object ); |
|
206 | - $this->add_special_fields( $invoice ); |
|
207 | - $this->add_items( $invoice ); |
|
208 | - $invoice->read_meta_data(); |
|
209 | - $invoice->set_object_read( true ); |
|
210 | - do_action( 'getpaid_read_' . $invoice->get_type(), $invoice ); |
|
211 | - |
|
212 | - } |
|
213 | - |
|
214 | - /** |
|
215 | - * Method to update an invoice in the database. |
|
216 | - * |
|
217 | - * @param WPInv_Invoice $invoice Invoice object. |
|
218 | - */ |
|
219 | - public function update( &$invoice ) { |
|
220 | - $invoice->save_meta_data(); |
|
221 | - $invoice->set_version( WPINV_VERSION ); |
|
222 | - |
|
223 | - if ( null === $invoice->get_date_created( 'edit' ) ) { |
|
224 | - $invoice->set_date_created( current_time('mysql') ); |
|
225 | - } |
|
226 | - |
|
227 | - // Ensure both the key and number are set. |
|
228 | - $invoice->get_path(); |
|
229 | - |
|
230 | - // Grab the current status so we can compare. |
|
231 | - $previous_status = get_post_status( $invoice->get_id() ); |
|
232 | - |
|
233 | - $changes = $invoice->get_changes(); |
|
234 | - |
|
235 | - // Only update the post when the post data changes. |
|
236 | - if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path' ), array_keys( $changes ) ) ) { |
|
237 | - $post_data = array( |
|
238 | - 'post_date' => $invoice->get_date_created( 'edit' ), |
|
239 | - 'post_date_gmt' => $invoice->get_date_created_gmt( 'edit' ), |
|
240 | - 'post_status' => $invoice->get_status( 'edit' ), |
|
241 | - 'post_title' => $invoice->get_name( 'edit' ), |
|
242 | - 'post_author' => $invoice->get_user_id( 'edit' ), |
|
243 | - 'post_modified' => $invoice->get_date_modified( 'edit' ), |
|
244 | - 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
245 | - 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
246 | - 'post_name' => $invoice->get_path( 'edit' ), |
|
247 | - 'post_type' => $invoice->get_post_type( 'edit' ), |
|
248 | - ); |
|
249 | - |
|
250 | - /** |
|
251 | - * When updating this object, to prevent infinite loops, use $wpdb |
|
252 | - * to update data, since wp_update_post spawns more calls to the |
|
253 | - * save_post action. |
|
254 | - * |
|
255 | - * This ensures hooks are fired by either WP itself (admin screen save), |
|
256 | - * or an update purely from CRUD. |
|
257 | - */ |
|
258 | - if ( doing_action( 'save_post' ) ) { |
|
259 | - $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $invoice->get_id() ) ); |
|
260 | - clean_post_cache( $invoice->get_id() ); |
|
261 | - } else { |
|
262 | - wp_update_post( array_merge( array( 'ID' => $invoice->get_id() ), $post_data ) ); |
|
263 | - } |
|
264 | - $invoice->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook. |
|
265 | - } |
|
266 | - |
|
267 | - // Update meta data. |
|
268 | - $this->update_post_meta( $invoice ); |
|
269 | - |
|
270 | - // Save special fields and items. |
|
271 | - $this->save_special_fields( $invoice ); |
|
272 | - $this->save_items( $invoice ); |
|
273 | - |
|
274 | - // Apply the changes. |
|
275 | - $invoice->apply_changes(); |
|
276 | - |
|
277 | - // Clear caches. |
|
278 | - $this->clear_caches( $invoice ); |
|
279 | - |
|
280 | - // Fire a hook depending on the status - this should be considered a creation if it was previously draft status. |
|
281 | - $new_status = $invoice->get_status( 'edit' ); |
|
282 | - |
|
283 | - if ( $new_status !== $previous_status && in_array( $previous_status, array( 'new', 'auto-draft', 'draft' ), true ) ) { |
|
284 | - do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
285 | - } else { |
|
286 | - do_action( 'getpaid_update_' . $invoice->get_type(), $invoice ); |
|
287 | - } |
|
288 | - |
|
289 | - } |
|
290 | - |
|
291 | - /* |
|
106 | + /** |
|
107 | + * Method to create a new invoice in the database. |
|
108 | + * |
|
109 | + * @param WPInv_Invoice $invoice Invoice object. |
|
110 | + */ |
|
111 | + public function create( &$invoice ) { |
|
112 | + $invoice->set_version( WPINV_VERSION ); |
|
113 | + $invoice->set_date_created( current_time('mysql') ); |
|
114 | + |
|
115 | + // Create a new post. |
|
116 | + $id = wp_insert_post( |
|
117 | + apply_filters( |
|
118 | + 'getpaid_new_invoice_data', |
|
119 | + array( |
|
120 | + 'post_date' => $invoice->get_date_created( 'edit' ), |
|
121 | + 'post_type' => $invoice->get_post_type( 'edit' ), |
|
122 | + 'post_status' => $this->get_post_status( $invoice ), |
|
123 | + 'ping_status' => 'closed', |
|
124 | + 'post_author' => $invoice->get_user_id( 'edit' ), |
|
125 | + 'post_title' => $invoice->get_title( 'edit' ), |
|
126 | + 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
127 | + 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
128 | + ) |
|
129 | + ), |
|
130 | + true |
|
131 | + ); |
|
132 | + |
|
133 | + if ( $id && ! is_wp_error( $id ) ) { |
|
134 | + |
|
135 | + // Update the new id and regenerate a title. |
|
136 | + $invoice->set_id( $id ); |
|
137 | + |
|
138 | + $invoice->maybe_set_number(); |
|
139 | + |
|
140 | + wp_update_post( |
|
141 | + array( |
|
142 | + 'ID' => $invoice->get_id(), |
|
143 | + 'post_title' => $invoice->get_number( 'edit' ), |
|
144 | + 'post_name' => $invoice->get_path( 'edit' ) |
|
145 | + ) |
|
146 | + ); |
|
147 | + |
|
148 | + // Save special fields and items. |
|
149 | + $this->save_special_fields( $invoice ); |
|
150 | + $this->save_items( $invoice ); |
|
151 | + |
|
152 | + // Update meta data. |
|
153 | + $this->update_post_meta( $invoice ); |
|
154 | + $invoice->save_meta_data(); |
|
155 | + |
|
156 | + // Apply changes. |
|
157 | + $invoice->apply_changes(); |
|
158 | + $this->clear_caches( $invoice ); |
|
159 | + |
|
160 | + // Fires after a new invoice is created. |
|
161 | + do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
162 | + return true; |
|
163 | + } |
|
164 | + |
|
165 | + if ( is_wp_error( $id ) ) { |
|
166 | + $invoice->last_error = $id->get_error_message(); |
|
167 | + } |
|
168 | + |
|
169 | + return false; |
|
170 | + } |
|
171 | + |
|
172 | + /** |
|
173 | + * Method to read an invoice from the database. |
|
174 | + * |
|
175 | + * @param WPInv_Invoice $invoice Invoice object. |
|
176 | + * |
|
177 | + */ |
|
178 | + public function read( &$invoice ) { |
|
179 | + |
|
180 | + $invoice->set_defaults(); |
|
181 | + $invoice_object = get_post( $invoice->get_id() ); |
|
182 | + |
|
183 | + if ( ! $invoice->get_id() || ! $invoice_object || ! getpaid_is_invoice_post_type( $invoice_object->post_type ) ) { |
|
184 | + $invoice->last_error = __( 'Invalid invoice.', 'invoicing' ); |
|
185 | + $invoice->set_id( 0 ); |
|
186 | + return false; |
|
187 | + } |
|
188 | + |
|
189 | + $invoice->set_props( |
|
190 | + array( |
|
191 | + 'date_created' => 0 < $invoice_object->post_date ? $invoice_object->post_date : null, |
|
192 | + 'date_modified' => 0 < $invoice_object->post_modified ? $invoice_object->post_modified : null, |
|
193 | + 'status' => $invoice_object->post_status, |
|
194 | + 'author' => $invoice_object->post_author, |
|
195 | + 'description' => $invoice_object->post_excerpt, |
|
196 | + 'parent_id' => $invoice_object->post_parent, |
|
197 | + 'name' => $invoice_object->post_title, |
|
198 | + 'path' => $invoice_object->post_name, |
|
199 | + 'post_type' => $invoice_object->post_type, |
|
200 | + ) |
|
201 | + ); |
|
202 | + |
|
203 | + $invoice->set_type( $invoice_object->post_type ); |
|
204 | + |
|
205 | + $this->read_object_data( $invoice, $invoice_object ); |
|
206 | + $this->add_special_fields( $invoice ); |
|
207 | + $this->add_items( $invoice ); |
|
208 | + $invoice->read_meta_data(); |
|
209 | + $invoice->set_object_read( true ); |
|
210 | + do_action( 'getpaid_read_' . $invoice->get_type(), $invoice ); |
|
211 | + |
|
212 | + } |
|
213 | + |
|
214 | + /** |
|
215 | + * Method to update an invoice in the database. |
|
216 | + * |
|
217 | + * @param WPInv_Invoice $invoice Invoice object. |
|
218 | + */ |
|
219 | + public function update( &$invoice ) { |
|
220 | + $invoice->save_meta_data(); |
|
221 | + $invoice->set_version( WPINV_VERSION ); |
|
222 | + |
|
223 | + if ( null === $invoice->get_date_created( 'edit' ) ) { |
|
224 | + $invoice->set_date_created( current_time('mysql') ); |
|
225 | + } |
|
226 | + |
|
227 | + // Ensure both the key and number are set. |
|
228 | + $invoice->get_path(); |
|
229 | + |
|
230 | + // Grab the current status so we can compare. |
|
231 | + $previous_status = get_post_status( $invoice->get_id() ); |
|
232 | + |
|
233 | + $changes = $invoice->get_changes(); |
|
234 | + |
|
235 | + // Only update the post when the post data changes. |
|
236 | + if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path' ), array_keys( $changes ) ) ) { |
|
237 | + $post_data = array( |
|
238 | + 'post_date' => $invoice->get_date_created( 'edit' ), |
|
239 | + 'post_date_gmt' => $invoice->get_date_created_gmt( 'edit' ), |
|
240 | + 'post_status' => $invoice->get_status( 'edit' ), |
|
241 | + 'post_title' => $invoice->get_name( 'edit' ), |
|
242 | + 'post_author' => $invoice->get_user_id( 'edit' ), |
|
243 | + 'post_modified' => $invoice->get_date_modified( 'edit' ), |
|
244 | + 'post_excerpt' => $invoice->get_description( 'edit' ), |
|
245 | + 'post_parent' => $invoice->get_parent_id( 'edit' ), |
|
246 | + 'post_name' => $invoice->get_path( 'edit' ), |
|
247 | + 'post_type' => $invoice->get_post_type( 'edit' ), |
|
248 | + ); |
|
249 | + |
|
250 | + /** |
|
251 | + * When updating this object, to prevent infinite loops, use $wpdb |
|
252 | + * to update data, since wp_update_post spawns more calls to the |
|
253 | + * save_post action. |
|
254 | + * |
|
255 | + * This ensures hooks are fired by either WP itself (admin screen save), |
|
256 | + * or an update purely from CRUD. |
|
257 | + */ |
|
258 | + if ( doing_action( 'save_post' ) ) { |
|
259 | + $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $invoice->get_id() ) ); |
|
260 | + clean_post_cache( $invoice->get_id() ); |
|
261 | + } else { |
|
262 | + wp_update_post( array_merge( array( 'ID' => $invoice->get_id() ), $post_data ) ); |
|
263 | + } |
|
264 | + $invoice->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook. |
|
265 | + } |
|
266 | + |
|
267 | + // Update meta data. |
|
268 | + $this->update_post_meta( $invoice ); |
|
269 | + |
|
270 | + // Save special fields and items. |
|
271 | + $this->save_special_fields( $invoice ); |
|
272 | + $this->save_items( $invoice ); |
|
273 | + |
|
274 | + // Apply the changes. |
|
275 | + $invoice->apply_changes(); |
|
276 | + |
|
277 | + // Clear caches. |
|
278 | + $this->clear_caches( $invoice ); |
|
279 | + |
|
280 | + // Fire a hook depending on the status - this should be considered a creation if it was previously draft status. |
|
281 | + $new_status = $invoice->get_status( 'edit' ); |
|
282 | + |
|
283 | + if ( $new_status !== $previous_status && in_array( $previous_status, array( 'new', 'auto-draft', 'draft' ), true ) ) { |
|
284 | + do_action( 'getpaid_new_' . $invoice->get_type(), $invoice ); |
|
285 | + } else { |
|
286 | + do_action( 'getpaid_update_' . $invoice->get_type(), $invoice ); |
|
287 | + } |
|
288 | + |
|
289 | + } |
|
290 | + |
|
291 | + /* |
|
292 | 292 | |-------------------------------------------------------------------------- |
293 | 293 | | Additional Methods |
294 | 294 | |-------------------------------------------------------------------------- |
295 | 295 | */ |
296 | 296 | |
297 | - /** |
|
297 | + /** |
|
298 | 298 | * Retrieves special fields and adds to the invoice. |
299 | - * |
|
300 | - * @param WPInv_Invoice $invoice Invoice object. |
|
299 | + * |
|
300 | + * @param WPInv_Invoice $invoice Invoice object. |
|
301 | 301 | */ |
302 | 302 | public function add_special_fields( &$invoice ) { |
303 | - global $wpdb; |
|
303 | + global $wpdb; |
|
304 | 304 | |
305 | - // Maybe retrieve from the cache. |
|
306 | - $data = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
305 | + // Maybe retrieve from the cache. |
|
306 | + $data = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
307 | 307 | |
308 | - // If not found, retrieve from the db. |
|
309 | - if ( false === $data ) { |
|
310 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
308 | + // If not found, retrieve from the db. |
|
309 | + if ( false === $data ) { |
|
310 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
311 | 311 | |
312 | - $data = $wpdb->get_row( |
|
313 | - $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id() ), |
|
314 | - ARRAY_A |
|
315 | - ); |
|
312 | + $data = $wpdb->get_row( |
|
313 | + $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id() ), |
|
314 | + ARRAY_A |
|
315 | + ); |
|
316 | 316 | |
317 | - // Update the cache with our data |
|
318 | - wp_cache_set( $invoice->get_id(), $data, 'getpaid_invoice_special_fields' ); |
|
317 | + // Update the cache with our data |
|
318 | + wp_cache_set( $invoice->get_id(), $data, 'getpaid_invoice_special_fields' ); |
|
319 | 319 | |
320 | - } |
|
320 | + } |
|
321 | 321 | |
322 | - // Abort if the data does not exist. |
|
323 | - if ( empty( $data ) ) { |
|
324 | - $invoice->set_object_read( true ); |
|
325 | - $invoice->set_props( wpinv_get_user_address( $invoice->get_user_id() ) ); |
|
326 | - return; |
|
327 | - } |
|
322 | + // Abort if the data does not exist. |
|
323 | + if ( empty( $data ) ) { |
|
324 | + $invoice->set_object_read( true ); |
|
325 | + $invoice->set_props( wpinv_get_user_address( $invoice->get_user_id() ) ); |
|
326 | + return; |
|
327 | + } |
|
328 | 328 | |
329 | - $props = array(); |
|
329 | + $props = array(); |
|
330 | 330 | |
331 | - foreach ( $this->database_fields_to_props as $db_field => $prop ) { |
|
331 | + foreach ( $this->database_fields_to_props as $db_field => $prop ) { |
|
332 | 332 | |
333 | - if ( $db_field == 'post_id' ) { |
|
334 | - continue; |
|
335 | - } |
|
336 | - |
|
337 | - $props[ $prop ] = $data[ $db_field ]; |
|
338 | - } |
|
339 | - |
|
340 | - $invoice->set_props( $props ); |
|
341 | - |
|
342 | - } |
|
343 | - |
|
344 | - /** |
|
345 | - * Gets a list of special fields that need updated based on change state |
|
346 | - * or if they are present in the database or not. |
|
347 | - * |
|
348 | - * @param WPInv_Invoice $invoice The Invoice object. |
|
349 | - * @return array A mapping of field keys => prop names, filtered by ones that should be updated. |
|
350 | - */ |
|
351 | - protected function get_special_fields_to_update( $invoice ) { |
|
352 | - $fields_to_update = array(); |
|
353 | - $changed_props = $invoice->get_changes(); |
|
354 | - |
|
355 | - // Props should be updated if they are a part of the $changed array or don't exist yet. |
|
356 | - foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
357 | - if ( array_key_exists( $prop, $changed_props ) ) { |
|
358 | - $fields_to_update[ $database_field ] = $prop; |
|
359 | - } |
|
360 | - } |
|
361 | - |
|
362 | - return $fields_to_update; |
|
363 | - } |
|
364 | - |
|
365 | - /** |
|
366 | - * Helper method that updates all the database fields for an invoice based on it's settings in the WPInv_Invoice class. |
|
367 | - * |
|
368 | - * @param WPInv_Invoice $invoice WPInv_Invoice object. |
|
369 | - * @since 1.0.19 |
|
370 | - */ |
|
371 | - protected function update_special_fields( &$invoice ) { |
|
372 | - global $wpdb; |
|
373 | - |
|
374 | - $updated_props = array(); |
|
375 | - $fields_to_update = $this->get_special_fields_to_update( $invoice ); |
|
376 | - |
|
377 | - foreach ( $fields_to_update as $database_field => $prop ) { |
|
378 | - $value = $invoice->{"get_$prop"}( 'edit' ); |
|
379 | - $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
380 | - $value = is_bool( $value ) ? ( int ) $value : $value; |
|
381 | - $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
382 | - } |
|
383 | - |
|
384 | - if ( ! empty( $updated_props ) ) { |
|
385 | - |
|
386 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
387 | - $wpdb->update( $table, $updated_props, array( 'post_id' => $invoice->get_id() ) ); |
|
388 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
389 | - do_action( "getpaid_invoice_update_database_fields", $invoice, $updated_props ); |
|
390 | - |
|
391 | - } |
|
392 | - |
|
393 | - } |
|
394 | - |
|
395 | - /** |
|
396 | - * Helper method that inserts special fields to the database. |
|
397 | - * |
|
398 | - * @param WPInv_Invoice $invoice WPInv_Invoice object. |
|
399 | - * @since 1.0.19 |
|
400 | - */ |
|
401 | - protected function insert_special_fields( &$invoice ) { |
|
402 | - global $wpdb; |
|
403 | - |
|
404 | - $updated_props = array(); |
|
405 | - |
|
406 | - foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
407 | - $value = $invoice->{"get_$prop"}( 'edit' ); |
|
408 | - $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
409 | - $value = is_bool( $value ) ? ( int ) $value : $value; |
|
410 | - $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
411 | - } |
|
412 | - |
|
413 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
414 | - $wpdb->insert( $table, $updated_props ); |
|
415 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
416 | - do_action( "getpaid_invoice_insert_database_fields", $invoice, $updated_props ); |
|
417 | - |
|
418 | - } |
|
419 | - |
|
420 | - /** |
|
333 | + if ( $db_field == 'post_id' ) { |
|
334 | + continue; |
|
335 | + } |
|
336 | + |
|
337 | + $props[ $prop ] = $data[ $db_field ]; |
|
338 | + } |
|
339 | + |
|
340 | + $invoice->set_props( $props ); |
|
341 | + |
|
342 | + } |
|
343 | + |
|
344 | + /** |
|
345 | + * Gets a list of special fields that need updated based on change state |
|
346 | + * or if they are present in the database or not. |
|
347 | + * |
|
348 | + * @param WPInv_Invoice $invoice The Invoice object. |
|
349 | + * @return array A mapping of field keys => prop names, filtered by ones that should be updated. |
|
350 | + */ |
|
351 | + protected function get_special_fields_to_update( $invoice ) { |
|
352 | + $fields_to_update = array(); |
|
353 | + $changed_props = $invoice->get_changes(); |
|
354 | + |
|
355 | + // Props should be updated if they are a part of the $changed array or don't exist yet. |
|
356 | + foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
357 | + if ( array_key_exists( $prop, $changed_props ) ) { |
|
358 | + $fields_to_update[ $database_field ] = $prop; |
|
359 | + } |
|
360 | + } |
|
361 | + |
|
362 | + return $fields_to_update; |
|
363 | + } |
|
364 | + |
|
365 | + /** |
|
366 | + * Helper method that updates all the database fields for an invoice based on it's settings in the WPInv_Invoice class. |
|
367 | + * |
|
368 | + * @param WPInv_Invoice $invoice WPInv_Invoice object. |
|
369 | + * @since 1.0.19 |
|
370 | + */ |
|
371 | + protected function update_special_fields( &$invoice ) { |
|
372 | + global $wpdb; |
|
373 | + |
|
374 | + $updated_props = array(); |
|
375 | + $fields_to_update = $this->get_special_fields_to_update( $invoice ); |
|
376 | + |
|
377 | + foreach ( $fields_to_update as $database_field => $prop ) { |
|
378 | + $value = $invoice->{"get_$prop"}( 'edit' ); |
|
379 | + $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
380 | + $value = is_bool( $value ) ? ( int ) $value : $value; |
|
381 | + $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
382 | + } |
|
383 | + |
|
384 | + if ( ! empty( $updated_props ) ) { |
|
385 | + |
|
386 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
387 | + $wpdb->update( $table, $updated_props, array( 'post_id' => $invoice->get_id() ) ); |
|
388 | + wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
389 | + do_action( "getpaid_invoice_update_database_fields", $invoice, $updated_props ); |
|
390 | + |
|
391 | + } |
|
392 | + |
|
393 | + } |
|
394 | + |
|
395 | + /** |
|
396 | + * Helper method that inserts special fields to the database. |
|
397 | + * |
|
398 | + * @param WPInv_Invoice $invoice WPInv_Invoice object. |
|
399 | + * @since 1.0.19 |
|
400 | + */ |
|
401 | + protected function insert_special_fields( &$invoice ) { |
|
402 | + global $wpdb; |
|
403 | + |
|
404 | + $updated_props = array(); |
|
405 | + |
|
406 | + foreach ( $this->database_fields_to_props as $database_field => $prop ) { |
|
407 | + $value = $invoice->{"get_$prop"}( 'edit' ); |
|
408 | + $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
409 | + $value = is_bool( $value ) ? ( int ) $value : $value; |
|
410 | + $updated_props[ $database_field ] = maybe_serialize( $value ); |
|
411 | + } |
|
412 | + |
|
413 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
414 | + $wpdb->insert( $table, $updated_props ); |
|
415 | + wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' ); |
|
416 | + do_action( "getpaid_invoice_insert_database_fields", $invoice, $updated_props ); |
|
417 | + |
|
418 | + } |
|
419 | + |
|
420 | + /** |
|
421 | 421 | * Saves all special fields. |
422 | - * |
|
423 | - * @param WPInv_Invoice $invoice Invoice object. |
|
422 | + * |
|
423 | + * @param WPInv_Invoice $invoice Invoice object. |
|
424 | 424 | */ |
425 | 425 | public function save_special_fields( & $invoice ) { |
426 | - global $wpdb; |
|
426 | + global $wpdb; |
|
427 | 427 | |
428 | - // The invoices table. |
|
429 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
430 | - $id = (int) $invoice->get_id(); |
|
431 | - $invoice->maybe_set_key(); |
|
428 | + // The invoices table. |
|
429 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
430 | + $id = (int) $invoice->get_id(); |
|
431 | + $invoice->maybe_set_key(); |
|
432 | 432 | |
433 | - if ( $wpdb->get_var( "SELECT `post_id` FROM $table WHERE `post_id`= $id" ) ) { |
|
433 | + if ( $wpdb->get_var( "SELECT `post_id` FROM $table WHERE `post_id`= $id" ) ) { |
|
434 | 434 | |
435 | - $this->update_special_fields( $invoice ); |
|
435 | + $this->update_special_fields( $invoice ); |
|
436 | 436 | |
437 | - } else { |
|
437 | + } else { |
|
438 | 438 | |
439 | - $this->insert_special_fields( $invoice ); |
|
439 | + $this->insert_special_fields( $invoice ); |
|
440 | 440 | |
441 | - } |
|
441 | + } |
|
442 | 442 | |
443 | - } |
|
443 | + } |
|
444 | 444 | |
445 | - /** |
|
445 | + /** |
|
446 | 446 | * Set's up cart details. |
447 | - * |
|
448 | - * @param WPInv_Invoice $invoice Invoice object. |
|
447 | + * |
|
448 | + * @param WPInv_Invoice $invoice Invoice object. |
|
449 | 449 | */ |
450 | 450 | public function add_items( &$invoice ) { |
451 | - global $wpdb; |
|
451 | + global $wpdb; |
|
452 | 452 | |
453 | - // Maybe retrieve from the cache. |
|
454 | - $items = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
453 | + // Maybe retrieve from the cache. |
|
454 | + $items = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
455 | 455 | |
456 | - // If not found, retrieve from the db. |
|
457 | - if ( false === $items ) { |
|
458 | - $table = $wpdb->prefix . 'getpaid_invoice_items'; |
|
456 | + // If not found, retrieve from the db. |
|
457 | + if ( false === $items ) { |
|
458 | + $table = $wpdb->prefix . 'getpaid_invoice_items'; |
|
459 | 459 | |
460 | - $items = $wpdb->get_results( |
|
461 | - $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id() ) |
|
462 | - ); |
|
460 | + $items = $wpdb->get_results( |
|
461 | + $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id() ) |
|
462 | + ); |
|
463 | 463 | |
464 | - // Update the cache with our data |
|
465 | - wp_cache_set( $invoice->get_id(), $items, 'getpaid_invoice_cart_details' ); |
|
464 | + // Update the cache with our data |
|
465 | + wp_cache_set( $invoice->get_id(), $items, 'getpaid_invoice_cart_details' ); |
|
466 | 466 | |
467 | - } |
|
467 | + } |
|
468 | 468 | |
469 | - // Abort if no items found. |
|
469 | + // Abort if no items found. |
|
470 | 470 | if ( empty( $items ) ) { |
471 | 471 | return; |
472 | - } |
|
472 | + } |
|
473 | 473 | |
474 | - foreach ( $items as $item_data ) { |
|
475 | - $item = new GetPaid_Form_Item( $item_data->item_id ); |
|
474 | + foreach ( $items as $item_data ) { |
|
475 | + $item = new GetPaid_Form_Item( $item_data->item_id ); |
|
476 | 476 | |
477 | - // Set item data. |
|
478 | - $item->item_tax = wpinv_sanitize_amount( $item_data->tax ); |
|
479 | - $item->item_discount = wpinv_sanitize_amount( $item_data->discount ); |
|
480 | - $item->set_name( $item_data->item_name ); |
|
481 | - $item->set_description( $item_data->item_description ); |
|
482 | - $item->set_price( $item_data->item_price ); |
|
483 | - $item->set_quantity( $item_data->quantity ); |
|
484 | - $item->set_item_meta( $item_data->meta ); |
|
477 | + // Set item data. |
|
478 | + $item->item_tax = wpinv_sanitize_amount( $item_data->tax ); |
|
479 | + $item->item_discount = wpinv_sanitize_amount( $item_data->discount ); |
|
480 | + $item->set_name( $item_data->item_name ); |
|
481 | + $item->set_description( $item_data->item_description ); |
|
482 | + $item->set_price( $item_data->item_price ); |
|
483 | + $item->set_quantity( $item_data->quantity ); |
|
484 | + $item->set_item_meta( $item_data->meta ); |
|
485 | 485 | |
486 | - $invoice->add_item( $item ); |
|
487 | - } |
|
486 | + $invoice->add_item( $item ); |
|
487 | + } |
|
488 | 488 | |
489 | - } |
|
489 | + } |
|
490 | 490 | |
491 | - /** |
|
491 | + /** |
|
492 | 492 | * Saves cart details. |
493 | - * |
|
494 | - * @param WPInv_Invoice $invoice Invoice object. |
|
493 | + * |
|
494 | + * @param WPInv_Invoice $invoice Invoice object. |
|
495 | 495 | */ |
496 | 496 | public function save_items( $invoice ) { |
497 | 497 | |
498 | - // Delete previously existing items. |
|
499 | - $this->delete_items( $invoice ); |
|
498 | + // Delete previously existing items. |
|
499 | + $this->delete_items( $invoice ); |
|
500 | 500 | |
501 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
501 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
502 | 502 | |
503 | - foreach ( $invoice->get_cart_details() as $item_data ) { |
|
504 | - $item_data = array_map( 'maybe_serialize', $item_data ); |
|
505 | - $GLOBALS['wpdb']->insert( $table, $item_data ); |
|
506 | - } |
|
503 | + foreach ( $invoice->get_cart_details() as $item_data ) { |
|
504 | + $item_data = array_map( 'maybe_serialize', $item_data ); |
|
505 | + $GLOBALS['wpdb']->insert( $table, $item_data ); |
|
506 | + } |
|
507 | 507 | |
508 | - wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
509 | - do_action( "getpaid_invoice_save_items", $invoice ); |
|
508 | + wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_cart_details' ); |
|
509 | + do_action( "getpaid_invoice_save_items", $invoice ); |
|
510 | 510 | |
511 | - } |
|
511 | + } |
|
512 | 512 | |
513 | - /** |
|
513 | + /** |
|
514 | 514 | * Deletes an invoice's cart details from the database. |
515 | - * |
|
516 | - * @param WPInv_Invoice $invoice Invoice object. |
|
515 | + * |
|
516 | + * @param WPInv_Invoice $invoice Invoice object. |
|
517 | 517 | */ |
518 | 518 | public function delete_items( $invoice ) { |
519 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
520 | - return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
521 | - } |
|
519 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items'; |
|
520 | + return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
521 | + } |
|
522 | 522 | |
523 | - /** |
|
523 | + /** |
|
524 | 524 | * Deletes an invoice's special fields from the database. |
525 | - * |
|
526 | - * @param WPInv_Invoice $invoice Invoice object. |
|
525 | + * |
|
526 | + * @param WPInv_Invoice $invoice Invoice object. |
|
527 | 527 | */ |
528 | 528 | public function delete_special_fields( $invoice ) { |
529 | - $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoices'; |
|
530 | - return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
529 | + $table = $GLOBALS['wpdb']->prefix . 'getpaid_invoices'; |
|
530 | + return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) ); |
|
531 | 531 | } |
532 | 532 | |
533 | 533 | } |
@@ -9,7 +9,7 @@ discard block |
||
9 | 9 | */ |
10 | 10 | |
11 | 11 | if ( ! defined( 'ABSPATH' ) ) { |
12 | - exit; |
|
12 | + exit; |
|
13 | 13 | } |
14 | 14 | |
15 | 15 | /** |
@@ -21,356 +21,356 @@ discard block |
||
21 | 21 | */ |
22 | 22 | abstract class GetPaid_Data { |
23 | 23 | |
24 | - /** |
|
25 | - * ID for this object. |
|
26 | - * |
|
27 | - * @since 1.0.19 |
|
28 | - * @var int |
|
29 | - */ |
|
30 | - protected $id = 0; |
|
31 | - |
|
32 | - /** |
|
33 | - * Core data for this object. Name value pairs (name + default value). |
|
34 | - * |
|
35 | - * @since 1.0.19 |
|
36 | - * @var array |
|
37 | - */ |
|
38 | - protected $data = array(); |
|
39 | - |
|
40 | - /** |
|
41 | - * Core data changes for this object. |
|
42 | - * |
|
43 | - * @since 1.0.19 |
|
44 | - * @var array |
|
45 | - */ |
|
46 | - protected $changes = array(); |
|
47 | - |
|
48 | - /** |
|
49 | - * This is false until the object is read from the DB. |
|
50 | - * |
|
51 | - * @since 1.0.19 |
|
52 | - * @var bool |
|
53 | - */ |
|
54 | - protected $object_read = false; |
|
55 | - |
|
56 | - /** |
|
57 | - * This is the name of this object type. |
|
58 | - * |
|
59 | - * @since 1.0.19 |
|
60 | - * @var string |
|
61 | - */ |
|
62 | - protected $object_type = 'data'; |
|
63 | - |
|
64 | - /** |
|
65 | - * Extra data for this object. Name value pairs (name + default value). |
|
66 | - * Used as a standard way for sub classes (like item types) to add |
|
67 | - * additional information to an inherited class. |
|
68 | - * |
|
69 | - * @since 1.0.19 |
|
70 | - * @var array |
|
71 | - */ |
|
72 | - protected $extra_data = array(); |
|
73 | - |
|
74 | - /** |
|
75 | - * Set to _data on construct so we can track and reset data if needed. |
|
76 | - * |
|
77 | - * @since 1.0.19 |
|
78 | - * @var array |
|
79 | - */ |
|
80 | - protected $default_data = array(); |
|
81 | - |
|
82 | - /** |
|
83 | - * Contains a reference to the data store for this class. |
|
84 | - * |
|
85 | - * @since 1.0.19 |
|
86 | - * @var GetPaid_Data_Store |
|
87 | - */ |
|
88 | - protected $data_store; |
|
89 | - |
|
90 | - /** |
|
91 | - * Stores meta in cache for future reads. |
|
92 | - * A group must be set to to enable caching. |
|
93 | - * |
|
94 | - * @since 1.0.19 |
|
95 | - * @var string |
|
96 | - */ |
|
97 | - protected $cache_group = ''; |
|
98 | - |
|
99 | - /** |
|
100 | - * Stores the last error. |
|
101 | - * |
|
102 | - * @since 1.0.19 |
|
103 | - * @var string |
|
104 | - */ |
|
105 | - public $last_error = ''; |
|
106 | - |
|
107 | - /** |
|
108 | - * Stores additional meta data. |
|
109 | - * |
|
110 | - * @since 1.0.19 |
|
111 | - * @var array |
|
112 | - */ |
|
113 | - protected $meta_data = null; |
|
114 | - |
|
115 | - /** |
|
116 | - * Default constructor. |
|
117 | - * |
|
118 | - * @param int|object|array $read ID to load from the DB (optional) or already queried data. |
|
119 | - */ |
|
120 | - public function __construct( $read = 0 ) { |
|
121 | - $this->data = array_merge( $this->data, $this->extra_data ); |
|
122 | - $this->default_data = $this->data; |
|
123 | - } |
|
124 | - |
|
125 | - /** |
|
126 | - * Only store the object ID to avoid serializing the data object instance. |
|
127 | - * |
|
128 | - * @return array |
|
129 | - */ |
|
130 | - public function __sleep() { |
|
131 | - return array( 'id' ); |
|
132 | - } |
|
133 | - |
|
134 | - /** |
|
135 | - * Re-run the constructor with the object ID. |
|
136 | - * |
|
137 | - * If the object no longer exists, remove the ID. |
|
138 | - */ |
|
139 | - public function __wakeup() { |
|
140 | - $this->__construct( absint( $this->id ) ); |
|
141 | - |
|
142 | - if ( ! empty( $this->last_error ) ) { |
|
143 | - $this->set_id( 0 ); |
|
144 | - } |
|
145 | - |
|
146 | - } |
|
147 | - |
|
148 | - /** |
|
149 | - * When the object is cloned, make sure meta is duplicated correctly. |
|
150 | - * |
|
151 | - * @since 1.0.19 |
|
152 | - */ |
|
153 | - public function __clone() { |
|
154 | - $this->maybe_read_meta_data(); |
|
155 | - if ( ! empty( $this->meta_data ) ) { |
|
156 | - foreach ( $this->meta_data as $array_key => $meta ) { |
|
157 | - $this->meta_data[ $array_key ] = clone $meta; |
|
158 | - if ( ! empty( $meta->id ) ) { |
|
159 | - $this->meta_data[ $array_key ]->id = null; |
|
160 | - } |
|
161 | - } |
|
162 | - } |
|
163 | - } |
|
164 | - |
|
165 | - /** |
|
166 | - * Get the data store. |
|
167 | - * |
|
168 | - * @since 1.0.19 |
|
169 | - * @return object |
|
170 | - */ |
|
171 | - public function get_data_store() { |
|
172 | - return $this->data_store; |
|
173 | - } |
|
174 | - |
|
175 | - /** |
|
176 | - * Get the object type. |
|
177 | - * |
|
178 | - * @since 1.0.19 |
|
179 | - * @return string |
|
180 | - */ |
|
181 | - public function get_object_type() { |
|
182 | - return $this->object_type; |
|
183 | - } |
|
184 | - |
|
185 | - /** |
|
186 | - * Returns the unique ID for this object. |
|
187 | - * |
|
188 | - * @since 1.0.19 |
|
189 | - * @return int |
|
190 | - */ |
|
191 | - public function get_id() { |
|
192 | - return $this->id; |
|
193 | - } |
|
194 | - |
|
195 | - /** |
|
196 | - * Get form status. |
|
197 | - * |
|
198 | - * @since 1.0.19 |
|
199 | - * @param string $context View or edit context. |
|
200 | - * @return string |
|
201 | - */ |
|
202 | - public function get_status( $context = 'view' ) { |
|
203 | - return $this->get_prop( 'status', $context ); |
|
204 | - } |
|
205 | - |
|
206 | - /** |
|
207 | - * Delete an object, set the ID to 0, and return result. |
|
208 | - * |
|
209 | - * @since 1.0.19 |
|
210 | - * @param bool $force_delete Should the data be deleted permanently. |
|
211 | - * @return bool result |
|
212 | - */ |
|
213 | - public function delete( $force_delete = false ) { |
|
214 | - if ( $this->data_store && $this->get_id() ) { |
|
215 | - $this->data_store->delete( $this, array( 'force_delete' => $force_delete ) ); |
|
216 | - $this->set_id( 0 ); |
|
217 | - return true; |
|
218 | - } |
|
219 | - return false; |
|
220 | - } |
|
221 | - |
|
222 | - /** |
|
223 | - * Save should create or update based on object existence. |
|
224 | - * |
|
225 | - * @since 1.0.19 |
|
226 | - * @return int |
|
227 | - */ |
|
228 | - public function save() { |
|
229 | - if ( ! $this->data_store ) { |
|
230 | - return $this->get_id(); |
|
231 | - } |
|
232 | - |
|
233 | - /** |
|
234 | - * Trigger action before saving to the DB. Allows you to adjust object props before save. |
|
235 | - * |
|
236 | - * @param GetPaid_Data $this The object being saved. |
|
237 | - * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
|
238 | - */ |
|
239 | - do_action( 'getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
240 | - |
|
241 | - if ( $this->get_id() ) { |
|
242 | - $this->data_store->update( $this ); |
|
243 | - } else { |
|
244 | - $this->data_store->create( $this ); |
|
245 | - } |
|
246 | - |
|
247 | - /** |
|
248 | - * Trigger action after saving to the DB. |
|
249 | - * |
|
250 | - * @param GetPaid_Data $this The object being saved. |
|
251 | - * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
|
252 | - */ |
|
253 | - do_action( 'getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
254 | - |
|
255 | - return $this->get_id(); |
|
256 | - } |
|
257 | - |
|
258 | - /** |
|
259 | - * Change data to JSON format. |
|
260 | - * |
|
261 | - * @since 1.0.19 |
|
262 | - * @return string Data in JSON format. |
|
263 | - */ |
|
264 | - public function __toString() { |
|
265 | - return wp_json_encode( $this->get_data() ); |
|
266 | - } |
|
267 | - |
|
268 | - /** |
|
269 | - * Returns all data for this object. |
|
270 | - * |
|
271 | - * @since 1.0.19 |
|
272 | - * @return array |
|
273 | - */ |
|
274 | - public function get_data() { |
|
275 | - return array_merge( array( 'id' => $this->get_id() ), $this->data, array( 'meta_data' => $this->get_meta_data() ) ); |
|
276 | - } |
|
277 | - |
|
278 | - /** |
|
279 | - * Returns array of expected data keys for this object. |
|
280 | - * |
|
281 | - * @since 1.0.19 |
|
282 | - * @return array |
|
283 | - */ |
|
284 | - public function get_data_keys() { |
|
285 | - return array_keys( $this->data ); |
|
286 | - } |
|
287 | - |
|
288 | - /** |
|
289 | - * Returns all "extra" data keys for an object (for sub objects like item types). |
|
290 | - * |
|
291 | - * @since 1.0.19 |
|
292 | - * @return array |
|
293 | - */ |
|
294 | - public function get_extra_data_keys() { |
|
295 | - return array_keys( $this->extra_data ); |
|
296 | - } |
|
297 | - |
|
298 | - /** |
|
299 | - * Filter null meta values from array. |
|
300 | - * |
|
301 | - * @since 1.0.19 |
|
302 | - * @param mixed $meta Meta value to check. |
|
303 | - * @return bool |
|
304 | - */ |
|
305 | - protected function filter_null_meta( $meta ) { |
|
306 | - return ! is_null( $meta->value ); |
|
307 | - } |
|
308 | - |
|
309 | - /** |
|
310 | - * Get All Meta Data. |
|
311 | - * |
|
312 | - * @since 1.0.19 |
|
313 | - * @return array of objects. |
|
314 | - */ |
|
315 | - public function get_meta_data() { |
|
316 | - $this->maybe_read_meta_data(); |
|
317 | - return array_values( array_filter( $this->meta_data, array( $this, 'filter_null_meta' ) ) ); |
|
318 | - } |
|
319 | - |
|
320 | - /** |
|
321 | - * Check if the key is an internal one. |
|
322 | - * |
|
323 | - * @since 1.0.19 |
|
324 | - * @param string $key Key to check. |
|
325 | - * @return bool true if it's an internal key, false otherwise |
|
326 | - */ |
|
327 | - protected function is_internal_meta_key( $key ) { |
|
328 | - $internal_meta_key = ! empty( $key ) && $this->data_store && in_array( $key, $this->data_store->get_internal_meta_keys(), true ); |
|
329 | - |
|
330 | - if ( ! $internal_meta_key ) { |
|
331 | - return false; |
|
332 | - } |
|
333 | - |
|
334 | - $has_setter_or_getter = is_callable( array( $this, 'set_' . $key ) ) || is_callable( array( $this, 'get_' . $key ) ); |
|
335 | - |
|
336 | - if ( ! $has_setter_or_getter ) { |
|
337 | - return false; |
|
338 | - } |
|
339 | - |
|
340 | - /* translators: %s: $key Key to check */ |
|
341 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
342 | - |
|
343 | - return true; |
|
344 | - } |
|
345 | - |
|
346 | - /** |
|
347 | - * Magic method for setting data fields. |
|
348 | - * |
|
349 | - * This method does not update custom fields in the database. |
|
350 | - * |
|
351 | - * @since 1.0.19 |
|
352 | - * @access public |
|
353 | - * |
|
354 | - */ |
|
355 | - public function __set( $key, $value ) { |
|
356 | - |
|
357 | - if ( 'id' == strtolower( $key ) ) { |
|
358 | - return $this->set_id( $value ); |
|
359 | - } |
|
360 | - |
|
361 | - if ( method_exists( $this, "set_$key") ) { |
|
362 | - |
|
363 | - /* translators: %s: $key Key to set */ |
|
364 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
365 | - |
|
366 | - call_user_func( array( $this, "set_$key" ), $value ); |
|
367 | - } else { |
|
368 | - $this->set_prop( $key, $value ); |
|
369 | - } |
|
370 | - |
|
371 | - } |
|
372 | - |
|
373 | - /** |
|
24 | + /** |
|
25 | + * ID for this object. |
|
26 | + * |
|
27 | + * @since 1.0.19 |
|
28 | + * @var int |
|
29 | + */ |
|
30 | + protected $id = 0; |
|
31 | + |
|
32 | + /** |
|
33 | + * Core data for this object. Name value pairs (name + default value). |
|
34 | + * |
|
35 | + * @since 1.0.19 |
|
36 | + * @var array |
|
37 | + */ |
|
38 | + protected $data = array(); |
|
39 | + |
|
40 | + /** |
|
41 | + * Core data changes for this object. |
|
42 | + * |
|
43 | + * @since 1.0.19 |
|
44 | + * @var array |
|
45 | + */ |
|
46 | + protected $changes = array(); |
|
47 | + |
|
48 | + /** |
|
49 | + * This is false until the object is read from the DB. |
|
50 | + * |
|
51 | + * @since 1.0.19 |
|
52 | + * @var bool |
|
53 | + */ |
|
54 | + protected $object_read = false; |
|
55 | + |
|
56 | + /** |
|
57 | + * This is the name of this object type. |
|
58 | + * |
|
59 | + * @since 1.0.19 |
|
60 | + * @var string |
|
61 | + */ |
|
62 | + protected $object_type = 'data'; |
|
63 | + |
|
64 | + /** |
|
65 | + * Extra data for this object. Name value pairs (name + default value). |
|
66 | + * Used as a standard way for sub classes (like item types) to add |
|
67 | + * additional information to an inherited class. |
|
68 | + * |
|
69 | + * @since 1.0.19 |
|
70 | + * @var array |
|
71 | + */ |
|
72 | + protected $extra_data = array(); |
|
73 | + |
|
74 | + /** |
|
75 | + * Set to _data on construct so we can track and reset data if needed. |
|
76 | + * |
|
77 | + * @since 1.0.19 |
|
78 | + * @var array |
|
79 | + */ |
|
80 | + protected $default_data = array(); |
|
81 | + |
|
82 | + /** |
|
83 | + * Contains a reference to the data store for this class. |
|
84 | + * |
|
85 | + * @since 1.0.19 |
|
86 | + * @var GetPaid_Data_Store |
|
87 | + */ |
|
88 | + protected $data_store; |
|
89 | + |
|
90 | + /** |
|
91 | + * Stores meta in cache for future reads. |
|
92 | + * A group must be set to to enable caching. |
|
93 | + * |
|
94 | + * @since 1.0.19 |
|
95 | + * @var string |
|
96 | + */ |
|
97 | + protected $cache_group = ''; |
|
98 | + |
|
99 | + /** |
|
100 | + * Stores the last error. |
|
101 | + * |
|
102 | + * @since 1.0.19 |
|
103 | + * @var string |
|
104 | + */ |
|
105 | + public $last_error = ''; |
|
106 | + |
|
107 | + /** |
|
108 | + * Stores additional meta data. |
|
109 | + * |
|
110 | + * @since 1.0.19 |
|
111 | + * @var array |
|
112 | + */ |
|
113 | + protected $meta_data = null; |
|
114 | + |
|
115 | + /** |
|
116 | + * Default constructor. |
|
117 | + * |
|
118 | + * @param int|object|array $read ID to load from the DB (optional) or already queried data. |
|
119 | + */ |
|
120 | + public function __construct( $read = 0 ) { |
|
121 | + $this->data = array_merge( $this->data, $this->extra_data ); |
|
122 | + $this->default_data = $this->data; |
|
123 | + } |
|
124 | + |
|
125 | + /** |
|
126 | + * Only store the object ID to avoid serializing the data object instance. |
|
127 | + * |
|
128 | + * @return array |
|
129 | + */ |
|
130 | + public function __sleep() { |
|
131 | + return array( 'id' ); |
|
132 | + } |
|
133 | + |
|
134 | + /** |
|
135 | + * Re-run the constructor with the object ID. |
|
136 | + * |
|
137 | + * If the object no longer exists, remove the ID. |
|
138 | + */ |
|
139 | + public function __wakeup() { |
|
140 | + $this->__construct( absint( $this->id ) ); |
|
141 | + |
|
142 | + if ( ! empty( $this->last_error ) ) { |
|
143 | + $this->set_id( 0 ); |
|
144 | + } |
|
145 | + |
|
146 | + } |
|
147 | + |
|
148 | + /** |
|
149 | + * When the object is cloned, make sure meta is duplicated correctly. |
|
150 | + * |
|
151 | + * @since 1.0.19 |
|
152 | + */ |
|
153 | + public function __clone() { |
|
154 | + $this->maybe_read_meta_data(); |
|
155 | + if ( ! empty( $this->meta_data ) ) { |
|
156 | + foreach ( $this->meta_data as $array_key => $meta ) { |
|
157 | + $this->meta_data[ $array_key ] = clone $meta; |
|
158 | + if ( ! empty( $meta->id ) ) { |
|
159 | + $this->meta_data[ $array_key ]->id = null; |
|
160 | + } |
|
161 | + } |
|
162 | + } |
|
163 | + } |
|
164 | + |
|
165 | + /** |
|
166 | + * Get the data store. |
|
167 | + * |
|
168 | + * @since 1.0.19 |
|
169 | + * @return object |
|
170 | + */ |
|
171 | + public function get_data_store() { |
|
172 | + return $this->data_store; |
|
173 | + } |
|
174 | + |
|
175 | + /** |
|
176 | + * Get the object type. |
|
177 | + * |
|
178 | + * @since 1.0.19 |
|
179 | + * @return string |
|
180 | + */ |
|
181 | + public function get_object_type() { |
|
182 | + return $this->object_type; |
|
183 | + } |
|
184 | + |
|
185 | + /** |
|
186 | + * Returns the unique ID for this object. |
|
187 | + * |
|
188 | + * @since 1.0.19 |
|
189 | + * @return int |
|
190 | + */ |
|
191 | + public function get_id() { |
|
192 | + return $this->id; |
|
193 | + } |
|
194 | + |
|
195 | + /** |
|
196 | + * Get form status. |
|
197 | + * |
|
198 | + * @since 1.0.19 |
|
199 | + * @param string $context View or edit context. |
|
200 | + * @return string |
|
201 | + */ |
|
202 | + public function get_status( $context = 'view' ) { |
|
203 | + return $this->get_prop( 'status', $context ); |
|
204 | + } |
|
205 | + |
|
206 | + /** |
|
207 | + * Delete an object, set the ID to 0, and return result. |
|
208 | + * |
|
209 | + * @since 1.0.19 |
|
210 | + * @param bool $force_delete Should the data be deleted permanently. |
|
211 | + * @return bool result |
|
212 | + */ |
|
213 | + public function delete( $force_delete = false ) { |
|
214 | + if ( $this->data_store && $this->get_id() ) { |
|
215 | + $this->data_store->delete( $this, array( 'force_delete' => $force_delete ) ); |
|
216 | + $this->set_id( 0 ); |
|
217 | + return true; |
|
218 | + } |
|
219 | + return false; |
|
220 | + } |
|
221 | + |
|
222 | + /** |
|
223 | + * Save should create or update based on object existence. |
|
224 | + * |
|
225 | + * @since 1.0.19 |
|
226 | + * @return int |
|
227 | + */ |
|
228 | + public function save() { |
|
229 | + if ( ! $this->data_store ) { |
|
230 | + return $this->get_id(); |
|
231 | + } |
|
232 | + |
|
233 | + /** |
|
234 | + * Trigger action before saving to the DB. Allows you to adjust object props before save. |
|
235 | + * |
|
236 | + * @param GetPaid_Data $this The object being saved. |
|
237 | + * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
|
238 | + */ |
|
239 | + do_action( 'getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
240 | + |
|
241 | + if ( $this->get_id() ) { |
|
242 | + $this->data_store->update( $this ); |
|
243 | + } else { |
|
244 | + $this->data_store->create( $this ); |
|
245 | + } |
|
246 | + |
|
247 | + /** |
|
248 | + * Trigger action after saving to the DB. |
|
249 | + * |
|
250 | + * @param GetPaid_Data $this The object being saved. |
|
251 | + * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
|
252 | + */ |
|
253 | + do_action( 'getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
254 | + |
|
255 | + return $this->get_id(); |
|
256 | + } |
|
257 | + |
|
258 | + /** |
|
259 | + * Change data to JSON format. |
|
260 | + * |
|
261 | + * @since 1.0.19 |
|
262 | + * @return string Data in JSON format. |
|
263 | + */ |
|
264 | + public function __toString() { |
|
265 | + return wp_json_encode( $this->get_data() ); |
|
266 | + } |
|
267 | + |
|
268 | + /** |
|
269 | + * Returns all data for this object. |
|
270 | + * |
|
271 | + * @since 1.0.19 |
|
272 | + * @return array |
|
273 | + */ |
|
274 | + public function get_data() { |
|
275 | + return array_merge( array( 'id' => $this->get_id() ), $this->data, array( 'meta_data' => $this->get_meta_data() ) ); |
|
276 | + } |
|
277 | + |
|
278 | + /** |
|
279 | + * Returns array of expected data keys for this object. |
|
280 | + * |
|
281 | + * @since 1.0.19 |
|
282 | + * @return array |
|
283 | + */ |
|
284 | + public function get_data_keys() { |
|
285 | + return array_keys( $this->data ); |
|
286 | + } |
|
287 | + |
|
288 | + /** |
|
289 | + * Returns all "extra" data keys for an object (for sub objects like item types). |
|
290 | + * |
|
291 | + * @since 1.0.19 |
|
292 | + * @return array |
|
293 | + */ |
|
294 | + public function get_extra_data_keys() { |
|
295 | + return array_keys( $this->extra_data ); |
|
296 | + } |
|
297 | + |
|
298 | + /** |
|
299 | + * Filter null meta values from array. |
|
300 | + * |
|
301 | + * @since 1.0.19 |
|
302 | + * @param mixed $meta Meta value to check. |
|
303 | + * @return bool |
|
304 | + */ |
|
305 | + protected function filter_null_meta( $meta ) { |
|
306 | + return ! is_null( $meta->value ); |
|
307 | + } |
|
308 | + |
|
309 | + /** |
|
310 | + * Get All Meta Data. |
|
311 | + * |
|
312 | + * @since 1.0.19 |
|
313 | + * @return array of objects. |
|
314 | + */ |
|
315 | + public function get_meta_data() { |
|
316 | + $this->maybe_read_meta_data(); |
|
317 | + return array_values( array_filter( $this->meta_data, array( $this, 'filter_null_meta' ) ) ); |
|
318 | + } |
|
319 | + |
|
320 | + /** |
|
321 | + * Check if the key is an internal one. |
|
322 | + * |
|
323 | + * @since 1.0.19 |
|
324 | + * @param string $key Key to check. |
|
325 | + * @return bool true if it's an internal key, false otherwise |
|
326 | + */ |
|
327 | + protected function is_internal_meta_key( $key ) { |
|
328 | + $internal_meta_key = ! empty( $key ) && $this->data_store && in_array( $key, $this->data_store->get_internal_meta_keys(), true ); |
|
329 | + |
|
330 | + if ( ! $internal_meta_key ) { |
|
331 | + return false; |
|
332 | + } |
|
333 | + |
|
334 | + $has_setter_or_getter = is_callable( array( $this, 'set_' . $key ) ) || is_callable( array( $this, 'get_' . $key ) ); |
|
335 | + |
|
336 | + if ( ! $has_setter_or_getter ) { |
|
337 | + return false; |
|
338 | + } |
|
339 | + |
|
340 | + /* translators: %s: $key Key to check */ |
|
341 | + getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
342 | + |
|
343 | + return true; |
|
344 | + } |
|
345 | + |
|
346 | + /** |
|
347 | + * Magic method for setting data fields. |
|
348 | + * |
|
349 | + * This method does not update custom fields in the database. |
|
350 | + * |
|
351 | + * @since 1.0.19 |
|
352 | + * @access public |
|
353 | + * |
|
354 | + */ |
|
355 | + public function __set( $key, $value ) { |
|
356 | + |
|
357 | + if ( 'id' == strtolower( $key ) ) { |
|
358 | + return $this->set_id( $value ); |
|
359 | + } |
|
360 | + |
|
361 | + if ( method_exists( $this, "set_$key") ) { |
|
362 | + |
|
363 | + /* translators: %s: $key Key to set */ |
|
364 | + getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
365 | + |
|
366 | + call_user_func( array( $this, "set_$key" ), $value ); |
|
367 | + } else { |
|
368 | + $this->set_prop( $key, $value ); |
|
369 | + } |
|
370 | + |
|
371 | + } |
|
372 | + |
|
373 | + /** |
|
374 | 374 | * Margic method for retrieving a property. |
375 | 375 | */ |
376 | 376 | public function __get( $key ) { |
@@ -378,10 +378,10 @@ discard block |
||
378 | 378 | // Check if we have a helper method for that. |
379 | 379 | if ( method_exists( $this, 'get_' . $key ) ) { |
380 | 380 | |
381 | - if ( 'post_type' != $key ) { |
|
382 | - /* translators: %s: $key Key to set */ |
|
383 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
384 | - } |
|
381 | + if ( 'post_type' != $key ) { |
|
382 | + /* translators: %s: $key Key to set */ |
|
383 | + getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
384 | + } |
|
385 | 385 | |
386 | 386 | return call_user_func( array( $this, 'get_' . $key ) ); |
387 | 387 | } |
@@ -391,512 +391,512 @@ discard block |
||
391 | 391 | return $this->post->$key; |
392 | 392 | } |
393 | 393 | |
394 | - return $this->get_prop( $key ); |
|
395 | - |
|
396 | - } |
|
397 | - |
|
398 | - /** |
|
399 | - * Get Meta Data by Key. |
|
400 | - * |
|
401 | - * @since 1.0.19 |
|
402 | - * @param string $key Meta Key. |
|
403 | - * @param bool $single return first found meta with key, or all with $key. |
|
404 | - * @param string $context What the value is for. Valid values are view and edit. |
|
405 | - * @return mixed |
|
406 | - */ |
|
407 | - public function get_meta( $key = '', $single = true, $context = 'view' ) { |
|
408 | - |
|
409 | - // Check if this is an internal meta key. |
|
410 | - $_key = str_replace( '_wpinv', '', $key ); |
|
411 | - $_key = str_replace( 'wpinv', '', $_key ); |
|
412 | - if ( $this->is_internal_meta_key( $_key ) ) { |
|
413 | - $function = 'get_' . $_key; |
|
414 | - |
|
415 | - if ( is_callable( array( $this, $function ) ) ) { |
|
416 | - return $this->{$function}(); |
|
417 | - } |
|
418 | - } |
|
419 | - |
|
420 | - // Read the meta data if not yet read. |
|
421 | - $this->maybe_read_meta_data(); |
|
422 | - $meta_data = $this->get_meta_data(); |
|
423 | - $array_keys = array_keys( wp_list_pluck( $meta_data, 'key' ), $key, true ); |
|
424 | - $value = $single ? '' : array(); |
|
425 | - |
|
426 | - if ( ! empty( $array_keys ) ) { |
|
427 | - // We don't use the $this->meta_data property directly here because we don't want meta with a null value (i.e. meta which has been deleted via $this->delete_meta_data()). |
|
428 | - if ( $single ) { |
|
429 | - $value = $meta_data[ current( $array_keys ) ]->value; |
|
430 | - } else { |
|
431 | - $value = array_intersect_key( $meta_data, array_flip( $array_keys ) ); |
|
432 | - } |
|
433 | - } |
|
434 | - |
|
435 | - if ( 'view' === $context ) { |
|
436 | - $value = apply_filters( $this->get_hook_prefix() . $key, $value, $this ); |
|
437 | - } |
|
438 | - |
|
439 | - return $value; |
|
440 | - } |
|
441 | - |
|
442 | - /** |
|
443 | - * See if meta data exists, since get_meta always returns a '' or array(). |
|
444 | - * |
|
445 | - * @since 1.0.19 |
|
446 | - * @param string $key Meta Key. |
|
447 | - * @return boolean |
|
448 | - */ |
|
449 | - public function meta_exists( $key = '' ) { |
|
450 | - $this->maybe_read_meta_data(); |
|
451 | - $array_keys = wp_list_pluck( $this->get_meta_data(), 'key' ); |
|
452 | - return in_array( $key, $array_keys, true ); |
|
453 | - } |
|
454 | - |
|
455 | - /** |
|
456 | - * Set all meta data from array. |
|
457 | - * |
|
458 | - * @since 1.0.19 |
|
459 | - * @param array $data Key/Value pairs. |
|
460 | - */ |
|
461 | - public function set_meta_data( $data ) { |
|
462 | - if ( ! empty( $data ) && is_array( $data ) ) { |
|
463 | - $this->maybe_read_meta_data(); |
|
464 | - foreach ( $data as $meta ) { |
|
465 | - $meta = (array) $meta; |
|
466 | - if ( isset( $meta['key'], $meta['value'], $meta['id'] ) ) { |
|
467 | - $this->meta_data[] = new GetPaid_Meta_Data( |
|
468 | - array( |
|
469 | - 'id' => $meta['id'], |
|
470 | - 'key' => $meta['key'], |
|
471 | - 'value' => $meta['value'], |
|
472 | - ) |
|
473 | - ); |
|
474 | - } |
|
475 | - } |
|
476 | - } |
|
477 | - } |
|
478 | - |
|
479 | - /** |
|
480 | - * Add meta data. |
|
481 | - * |
|
482 | - * @since 1.0.19 |
|
483 | - * |
|
484 | - * @param string $key Meta key. |
|
485 | - * @param string|array $value Meta value. |
|
486 | - * @param bool $unique Should this be a unique key?. |
|
487 | - */ |
|
488 | - public function add_meta_data( $key, $value, $unique = false ) { |
|
489 | - if ( $this->is_internal_meta_key( $key ) ) { |
|
490 | - $function = 'set_' . $key; |
|
491 | - |
|
492 | - if ( is_callable( array( $this, $function ) ) ) { |
|
493 | - return $this->{$function}( $value ); |
|
494 | - } |
|
495 | - } |
|
496 | - |
|
497 | - $this->maybe_read_meta_data(); |
|
498 | - if ( $unique ) { |
|
499 | - $this->delete_meta_data( $key ); |
|
500 | - } |
|
501 | - $this->meta_data[] = new GetPaid_Meta_Data( |
|
502 | - array( |
|
503 | - 'key' => $key, |
|
504 | - 'value' => $value, |
|
505 | - ) |
|
506 | - ); |
|
507 | - } |
|
508 | - |
|
509 | - /** |
|
510 | - * Update meta data by key or ID, if provided. |
|
511 | - * |
|
512 | - * @since 1.0.19 |
|
513 | - * |
|
514 | - * @param string $key Meta key. |
|
515 | - * @param string|array $value Meta value. |
|
516 | - * @param int $meta_id Meta ID. |
|
517 | - */ |
|
518 | - public function update_meta_data( $key, $value, $meta_id = 0 ) { |
|
519 | - if ( $this->is_internal_meta_key( $key ) ) { |
|
520 | - $function = 'set_' . $key; |
|
521 | - |
|
522 | - if ( is_callable( array( $this, $function ) ) ) { |
|
523 | - return $this->{$function}( $value ); |
|
524 | - } |
|
525 | - } |
|
526 | - |
|
527 | - $this->maybe_read_meta_data(); |
|
528 | - |
|
529 | - $array_key = false; |
|
530 | - |
|
531 | - if ( $meta_id ) { |
|
532 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true ); |
|
533 | - $array_key = $array_keys ? current( $array_keys ) : false; |
|
534 | - } else { |
|
535 | - // Find matches by key. |
|
536 | - $matches = array(); |
|
537 | - foreach ( $this->meta_data as $meta_data_array_key => $meta ) { |
|
538 | - if ( $meta->key === $key ) { |
|
539 | - $matches[] = $meta_data_array_key; |
|
540 | - } |
|
541 | - } |
|
542 | - |
|
543 | - if ( ! empty( $matches ) ) { |
|
544 | - // Set matches to null so only one key gets the new value. |
|
545 | - foreach ( $matches as $meta_data_array_key ) { |
|
546 | - $this->meta_data[ $meta_data_array_key ]->value = null; |
|
547 | - } |
|
548 | - $array_key = current( $matches ); |
|
549 | - } |
|
550 | - } |
|
551 | - |
|
552 | - if ( false !== $array_key ) { |
|
553 | - $meta = $this->meta_data[ $array_key ]; |
|
554 | - $meta->key = $key; |
|
555 | - $meta->value = $value; |
|
556 | - } else { |
|
557 | - $this->add_meta_data( $key, $value, true ); |
|
558 | - } |
|
559 | - } |
|
560 | - |
|
561 | - /** |
|
562 | - * Delete meta data. |
|
563 | - * |
|
564 | - * @since 1.0.19 |
|
565 | - * @param string $key Meta key. |
|
566 | - */ |
|
567 | - public function delete_meta_data( $key ) { |
|
568 | - $this->maybe_read_meta_data(); |
|
569 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'key' ), $key, true ); |
|
570 | - |
|
571 | - if ( $array_keys ) { |
|
572 | - foreach ( $array_keys as $array_key ) { |
|
573 | - $this->meta_data[ $array_key ]->value = null; |
|
574 | - } |
|
575 | - } |
|
576 | - } |
|
577 | - |
|
578 | - /** |
|
579 | - * Delete meta data. |
|
580 | - * |
|
581 | - * @since 1.0.19 |
|
582 | - * @param int $mid Meta ID. |
|
583 | - */ |
|
584 | - public function delete_meta_data_by_mid( $mid ) { |
|
585 | - $this->maybe_read_meta_data(); |
|
586 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), (int) $mid, true ); |
|
587 | - |
|
588 | - if ( $array_keys ) { |
|
589 | - foreach ( $array_keys as $array_key ) { |
|
590 | - $this->meta_data[ $array_key ]->value = null; |
|
591 | - } |
|
592 | - } |
|
593 | - } |
|
594 | - |
|
595 | - /** |
|
596 | - * Read meta data if null. |
|
597 | - * |
|
598 | - * @since 1.0.19 |
|
599 | - */ |
|
600 | - protected function maybe_read_meta_data() { |
|
601 | - if ( is_null( $this->meta_data ) ) { |
|
602 | - $this->read_meta_data(); |
|
603 | - } |
|
604 | - } |
|
605 | - |
|
606 | - /** |
|
607 | - * Read Meta Data from the database. Ignore any internal properties. |
|
608 | - * Uses it's own caches because get_metadata does not provide meta_ids. |
|
609 | - * |
|
610 | - * @since 1.0.19 |
|
611 | - * @param bool $force_read True to force a new DB read (and update cache). |
|
612 | - */ |
|
613 | - public function read_meta_data( $force_read = false ) { |
|
614 | - |
|
615 | - // Reset meta data. |
|
616 | - $this->meta_data = array(); |
|
617 | - |
|
618 | - // Maybe abort early. |
|
619 | - if ( ! $this->get_id() || ! $this->data_store ) { |
|
620 | - return; |
|
621 | - } |
|
622 | - |
|
623 | - // Only read from cache if the cache key is set. |
|
624 | - $cache_key = null; |
|
625 | - if ( ! $force_read && ! empty( $this->cache_group ) ) { |
|
626 | - $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
627 | - $raw_meta_data = wp_cache_get( $cache_key, $this->cache_group ); |
|
628 | - } |
|
629 | - |
|
630 | - // Should we force read? |
|
631 | - if ( empty( $raw_meta_data ) ) { |
|
632 | - $raw_meta_data = $this->data_store->read_meta( $this ); |
|
633 | - |
|
634 | - if ( ! empty( $cache_key ) ) { |
|
635 | - wp_cache_set( $cache_key, $raw_meta_data, $this->cache_group ); |
|
636 | - } |
|
637 | - |
|
638 | - } |
|
639 | - |
|
640 | - // Set meta data. |
|
641 | - if ( is_array( $raw_meta_data ) ) { |
|
642 | - |
|
643 | - foreach ( $raw_meta_data as $meta ) { |
|
644 | - $this->meta_data[] = new GetPaid_Meta_Data( |
|
645 | - array( |
|
646 | - 'id' => (int) $meta->meta_id, |
|
647 | - 'key' => $meta->meta_key, |
|
648 | - 'value' => maybe_unserialize( $meta->meta_value ), |
|
649 | - ) |
|
650 | - ); |
|
651 | - } |
|
652 | - |
|
653 | - } |
|
654 | - |
|
655 | - } |
|
656 | - |
|
657 | - /** |
|
658 | - * Update Meta Data in the database. |
|
659 | - * |
|
660 | - * @since 1.0.19 |
|
661 | - */ |
|
662 | - public function save_meta_data() { |
|
663 | - if ( ! $this->data_store || is_null( $this->meta_data ) ) { |
|
664 | - return; |
|
665 | - } |
|
666 | - foreach ( $this->meta_data as $array_key => $meta ) { |
|
667 | - if ( is_null( $meta->value ) ) { |
|
668 | - if ( ! empty( $meta->id ) ) { |
|
669 | - $this->data_store->delete_meta( $this, $meta ); |
|
670 | - unset( $this->meta_data[ $array_key ] ); |
|
671 | - } |
|
672 | - } elseif ( empty( $meta->id ) ) { |
|
673 | - $meta->id = $this->data_store->add_meta( $this, $meta ); |
|
674 | - $meta->apply_changes(); |
|
675 | - } else { |
|
676 | - if ( $meta->get_changes() ) { |
|
677 | - $this->data_store->update_meta( $this, $meta ); |
|
678 | - $meta->apply_changes(); |
|
679 | - } |
|
680 | - } |
|
681 | - } |
|
682 | - if ( ! empty( $this->cache_group ) ) { |
|
683 | - $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
684 | - wp_cache_delete( $cache_key, $this->cache_group ); |
|
685 | - } |
|
686 | - } |
|
687 | - |
|
688 | - /** |
|
689 | - * Set ID. |
|
690 | - * |
|
691 | - * @since 1.0.19 |
|
692 | - * @param int $id ID. |
|
693 | - */ |
|
694 | - public function set_id( $id ) { |
|
695 | - $this->id = absint( $id ); |
|
696 | - } |
|
697 | - |
|
698 | - /** |
|
699 | - * Sets item status. |
|
700 | - * |
|
701 | - * @since 1.0.19 |
|
702 | - * @param string $status New status. |
|
703 | - * @return array details of change. |
|
704 | - */ |
|
705 | - public function set_status( $status ) { |
|
394 | + return $this->get_prop( $key ); |
|
395 | + |
|
396 | + } |
|
397 | + |
|
398 | + /** |
|
399 | + * Get Meta Data by Key. |
|
400 | + * |
|
401 | + * @since 1.0.19 |
|
402 | + * @param string $key Meta Key. |
|
403 | + * @param bool $single return first found meta with key, or all with $key. |
|
404 | + * @param string $context What the value is for. Valid values are view and edit. |
|
405 | + * @return mixed |
|
406 | + */ |
|
407 | + public function get_meta( $key = '', $single = true, $context = 'view' ) { |
|
408 | + |
|
409 | + // Check if this is an internal meta key. |
|
410 | + $_key = str_replace( '_wpinv', '', $key ); |
|
411 | + $_key = str_replace( 'wpinv', '', $_key ); |
|
412 | + if ( $this->is_internal_meta_key( $_key ) ) { |
|
413 | + $function = 'get_' . $_key; |
|
414 | + |
|
415 | + if ( is_callable( array( $this, $function ) ) ) { |
|
416 | + return $this->{$function}(); |
|
417 | + } |
|
418 | + } |
|
419 | + |
|
420 | + // Read the meta data if not yet read. |
|
421 | + $this->maybe_read_meta_data(); |
|
422 | + $meta_data = $this->get_meta_data(); |
|
423 | + $array_keys = array_keys( wp_list_pluck( $meta_data, 'key' ), $key, true ); |
|
424 | + $value = $single ? '' : array(); |
|
425 | + |
|
426 | + if ( ! empty( $array_keys ) ) { |
|
427 | + // We don't use the $this->meta_data property directly here because we don't want meta with a null value (i.e. meta which has been deleted via $this->delete_meta_data()). |
|
428 | + if ( $single ) { |
|
429 | + $value = $meta_data[ current( $array_keys ) ]->value; |
|
430 | + } else { |
|
431 | + $value = array_intersect_key( $meta_data, array_flip( $array_keys ) ); |
|
432 | + } |
|
433 | + } |
|
434 | + |
|
435 | + if ( 'view' === $context ) { |
|
436 | + $value = apply_filters( $this->get_hook_prefix() . $key, $value, $this ); |
|
437 | + } |
|
438 | + |
|
439 | + return $value; |
|
440 | + } |
|
441 | + |
|
442 | + /** |
|
443 | + * See if meta data exists, since get_meta always returns a '' or array(). |
|
444 | + * |
|
445 | + * @since 1.0.19 |
|
446 | + * @param string $key Meta Key. |
|
447 | + * @return boolean |
|
448 | + */ |
|
449 | + public function meta_exists( $key = '' ) { |
|
450 | + $this->maybe_read_meta_data(); |
|
451 | + $array_keys = wp_list_pluck( $this->get_meta_data(), 'key' ); |
|
452 | + return in_array( $key, $array_keys, true ); |
|
453 | + } |
|
454 | + |
|
455 | + /** |
|
456 | + * Set all meta data from array. |
|
457 | + * |
|
458 | + * @since 1.0.19 |
|
459 | + * @param array $data Key/Value pairs. |
|
460 | + */ |
|
461 | + public function set_meta_data( $data ) { |
|
462 | + if ( ! empty( $data ) && is_array( $data ) ) { |
|
463 | + $this->maybe_read_meta_data(); |
|
464 | + foreach ( $data as $meta ) { |
|
465 | + $meta = (array) $meta; |
|
466 | + if ( isset( $meta['key'], $meta['value'], $meta['id'] ) ) { |
|
467 | + $this->meta_data[] = new GetPaid_Meta_Data( |
|
468 | + array( |
|
469 | + 'id' => $meta['id'], |
|
470 | + 'key' => $meta['key'], |
|
471 | + 'value' => $meta['value'], |
|
472 | + ) |
|
473 | + ); |
|
474 | + } |
|
475 | + } |
|
476 | + } |
|
477 | + } |
|
478 | + |
|
479 | + /** |
|
480 | + * Add meta data. |
|
481 | + * |
|
482 | + * @since 1.0.19 |
|
483 | + * |
|
484 | + * @param string $key Meta key. |
|
485 | + * @param string|array $value Meta value. |
|
486 | + * @param bool $unique Should this be a unique key?. |
|
487 | + */ |
|
488 | + public function add_meta_data( $key, $value, $unique = false ) { |
|
489 | + if ( $this->is_internal_meta_key( $key ) ) { |
|
490 | + $function = 'set_' . $key; |
|
491 | + |
|
492 | + if ( is_callable( array( $this, $function ) ) ) { |
|
493 | + return $this->{$function}( $value ); |
|
494 | + } |
|
495 | + } |
|
496 | + |
|
497 | + $this->maybe_read_meta_data(); |
|
498 | + if ( $unique ) { |
|
499 | + $this->delete_meta_data( $key ); |
|
500 | + } |
|
501 | + $this->meta_data[] = new GetPaid_Meta_Data( |
|
502 | + array( |
|
503 | + 'key' => $key, |
|
504 | + 'value' => $value, |
|
505 | + ) |
|
506 | + ); |
|
507 | + } |
|
508 | + |
|
509 | + /** |
|
510 | + * Update meta data by key or ID, if provided. |
|
511 | + * |
|
512 | + * @since 1.0.19 |
|
513 | + * |
|
514 | + * @param string $key Meta key. |
|
515 | + * @param string|array $value Meta value. |
|
516 | + * @param int $meta_id Meta ID. |
|
517 | + */ |
|
518 | + public function update_meta_data( $key, $value, $meta_id = 0 ) { |
|
519 | + if ( $this->is_internal_meta_key( $key ) ) { |
|
520 | + $function = 'set_' . $key; |
|
521 | + |
|
522 | + if ( is_callable( array( $this, $function ) ) ) { |
|
523 | + return $this->{$function}( $value ); |
|
524 | + } |
|
525 | + } |
|
526 | + |
|
527 | + $this->maybe_read_meta_data(); |
|
528 | + |
|
529 | + $array_key = false; |
|
530 | + |
|
531 | + if ( $meta_id ) { |
|
532 | + $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true ); |
|
533 | + $array_key = $array_keys ? current( $array_keys ) : false; |
|
534 | + } else { |
|
535 | + // Find matches by key. |
|
536 | + $matches = array(); |
|
537 | + foreach ( $this->meta_data as $meta_data_array_key => $meta ) { |
|
538 | + if ( $meta->key === $key ) { |
|
539 | + $matches[] = $meta_data_array_key; |
|
540 | + } |
|
541 | + } |
|
542 | + |
|
543 | + if ( ! empty( $matches ) ) { |
|
544 | + // Set matches to null so only one key gets the new value. |
|
545 | + foreach ( $matches as $meta_data_array_key ) { |
|
546 | + $this->meta_data[ $meta_data_array_key ]->value = null; |
|
547 | + } |
|
548 | + $array_key = current( $matches ); |
|
549 | + } |
|
550 | + } |
|
551 | + |
|
552 | + if ( false !== $array_key ) { |
|
553 | + $meta = $this->meta_data[ $array_key ]; |
|
554 | + $meta->key = $key; |
|
555 | + $meta->value = $value; |
|
556 | + } else { |
|
557 | + $this->add_meta_data( $key, $value, true ); |
|
558 | + } |
|
559 | + } |
|
560 | + |
|
561 | + /** |
|
562 | + * Delete meta data. |
|
563 | + * |
|
564 | + * @since 1.0.19 |
|
565 | + * @param string $key Meta key. |
|
566 | + */ |
|
567 | + public function delete_meta_data( $key ) { |
|
568 | + $this->maybe_read_meta_data(); |
|
569 | + $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'key' ), $key, true ); |
|
570 | + |
|
571 | + if ( $array_keys ) { |
|
572 | + foreach ( $array_keys as $array_key ) { |
|
573 | + $this->meta_data[ $array_key ]->value = null; |
|
574 | + } |
|
575 | + } |
|
576 | + } |
|
577 | + |
|
578 | + /** |
|
579 | + * Delete meta data. |
|
580 | + * |
|
581 | + * @since 1.0.19 |
|
582 | + * @param int $mid Meta ID. |
|
583 | + */ |
|
584 | + public function delete_meta_data_by_mid( $mid ) { |
|
585 | + $this->maybe_read_meta_data(); |
|
586 | + $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), (int) $mid, true ); |
|
587 | + |
|
588 | + if ( $array_keys ) { |
|
589 | + foreach ( $array_keys as $array_key ) { |
|
590 | + $this->meta_data[ $array_key ]->value = null; |
|
591 | + } |
|
592 | + } |
|
593 | + } |
|
594 | + |
|
595 | + /** |
|
596 | + * Read meta data if null. |
|
597 | + * |
|
598 | + * @since 1.0.19 |
|
599 | + */ |
|
600 | + protected function maybe_read_meta_data() { |
|
601 | + if ( is_null( $this->meta_data ) ) { |
|
602 | + $this->read_meta_data(); |
|
603 | + } |
|
604 | + } |
|
605 | + |
|
606 | + /** |
|
607 | + * Read Meta Data from the database. Ignore any internal properties. |
|
608 | + * Uses it's own caches because get_metadata does not provide meta_ids. |
|
609 | + * |
|
610 | + * @since 1.0.19 |
|
611 | + * @param bool $force_read True to force a new DB read (and update cache). |
|
612 | + */ |
|
613 | + public function read_meta_data( $force_read = false ) { |
|
614 | + |
|
615 | + // Reset meta data. |
|
616 | + $this->meta_data = array(); |
|
617 | + |
|
618 | + // Maybe abort early. |
|
619 | + if ( ! $this->get_id() || ! $this->data_store ) { |
|
620 | + return; |
|
621 | + } |
|
622 | + |
|
623 | + // Only read from cache if the cache key is set. |
|
624 | + $cache_key = null; |
|
625 | + if ( ! $force_read && ! empty( $this->cache_group ) ) { |
|
626 | + $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
627 | + $raw_meta_data = wp_cache_get( $cache_key, $this->cache_group ); |
|
628 | + } |
|
629 | + |
|
630 | + // Should we force read? |
|
631 | + if ( empty( $raw_meta_data ) ) { |
|
632 | + $raw_meta_data = $this->data_store->read_meta( $this ); |
|
633 | + |
|
634 | + if ( ! empty( $cache_key ) ) { |
|
635 | + wp_cache_set( $cache_key, $raw_meta_data, $this->cache_group ); |
|
636 | + } |
|
637 | + |
|
638 | + } |
|
639 | + |
|
640 | + // Set meta data. |
|
641 | + if ( is_array( $raw_meta_data ) ) { |
|
642 | + |
|
643 | + foreach ( $raw_meta_data as $meta ) { |
|
644 | + $this->meta_data[] = new GetPaid_Meta_Data( |
|
645 | + array( |
|
646 | + 'id' => (int) $meta->meta_id, |
|
647 | + 'key' => $meta->meta_key, |
|
648 | + 'value' => maybe_unserialize( $meta->meta_value ), |
|
649 | + ) |
|
650 | + ); |
|
651 | + } |
|
652 | + |
|
653 | + } |
|
654 | + |
|
655 | + } |
|
656 | + |
|
657 | + /** |
|
658 | + * Update Meta Data in the database. |
|
659 | + * |
|
660 | + * @since 1.0.19 |
|
661 | + */ |
|
662 | + public function save_meta_data() { |
|
663 | + if ( ! $this->data_store || is_null( $this->meta_data ) ) { |
|
664 | + return; |
|
665 | + } |
|
666 | + foreach ( $this->meta_data as $array_key => $meta ) { |
|
667 | + if ( is_null( $meta->value ) ) { |
|
668 | + if ( ! empty( $meta->id ) ) { |
|
669 | + $this->data_store->delete_meta( $this, $meta ); |
|
670 | + unset( $this->meta_data[ $array_key ] ); |
|
671 | + } |
|
672 | + } elseif ( empty( $meta->id ) ) { |
|
673 | + $meta->id = $this->data_store->add_meta( $this, $meta ); |
|
674 | + $meta->apply_changes(); |
|
675 | + } else { |
|
676 | + if ( $meta->get_changes() ) { |
|
677 | + $this->data_store->update_meta( $this, $meta ); |
|
678 | + $meta->apply_changes(); |
|
679 | + } |
|
680 | + } |
|
681 | + } |
|
682 | + if ( ! empty( $this->cache_group ) ) { |
|
683 | + $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
684 | + wp_cache_delete( $cache_key, $this->cache_group ); |
|
685 | + } |
|
686 | + } |
|
687 | + |
|
688 | + /** |
|
689 | + * Set ID. |
|
690 | + * |
|
691 | + * @since 1.0.19 |
|
692 | + * @param int $id ID. |
|
693 | + */ |
|
694 | + public function set_id( $id ) { |
|
695 | + $this->id = absint( $id ); |
|
696 | + } |
|
697 | + |
|
698 | + /** |
|
699 | + * Sets item status. |
|
700 | + * |
|
701 | + * @since 1.0.19 |
|
702 | + * @param string $status New status. |
|
703 | + * @return array details of change. |
|
704 | + */ |
|
705 | + public function set_status( $status ) { |
|
706 | 706 | $old_status = $this->get_status(); |
707 | 707 | |
708 | - $this->set_prop( 'status', $status ); |
|
709 | - |
|
710 | - return array( |
|
711 | - 'from' => $old_status, |
|
712 | - 'to' => $status, |
|
713 | - ); |
|
714 | - } |
|
715 | - |
|
716 | - /** |
|
717 | - * Set all props to default values. |
|
718 | - * |
|
719 | - * @since 1.0.19 |
|
720 | - */ |
|
721 | - public function set_defaults() { |
|
722 | - $this->data = $this->default_data; |
|
723 | - $this->changes = array(); |
|
724 | - $this->set_object_read( false ); |
|
725 | - } |
|
726 | - |
|
727 | - /** |
|
728 | - * Set object read property. |
|
729 | - * |
|
730 | - * @since 1.0.19 |
|
731 | - * @param boolean $read Should read?. |
|
732 | - */ |
|
733 | - public function set_object_read( $read = true ) { |
|
734 | - $this->object_read = (bool) $read; |
|
735 | - } |
|
736 | - |
|
737 | - /** |
|
738 | - * Get object read property. |
|
739 | - * |
|
740 | - * @since 1.0.19 |
|
741 | - * @return boolean |
|
742 | - */ |
|
743 | - public function get_object_read() { |
|
744 | - return (bool) $this->object_read; |
|
745 | - } |
|
746 | - |
|
747 | - /** |
|
748 | - * Set a collection of props in one go, collect any errors, and return the result. |
|
749 | - * Only sets using public methods. |
|
750 | - * |
|
751 | - * @since 1.0.19 |
|
752 | - * |
|
753 | - * @param array $props Key value pairs to set. Key is the prop and should map to a setter function name. |
|
754 | - * @param string $context In what context to run this. |
|
755 | - * |
|
756 | - * @return bool|WP_Error |
|
757 | - */ |
|
758 | - public function set_props( $props, $context = 'set' ) { |
|
759 | - $errors = false; |
|
760 | - |
|
761 | - foreach ( $props as $prop => $value ) { |
|
762 | - try { |
|
763 | - /** |
|
764 | - * Checks if the prop being set is allowed, and the value is not null. |
|
765 | - */ |
|
766 | - if ( is_null( $value ) || in_array( $prop, array( 'prop', 'date_prop', 'meta_data' ), true ) ) { |
|
767 | - continue; |
|
768 | - } |
|
769 | - $setter = "set_$prop"; |
|
770 | - |
|
771 | - if ( is_callable( array( $this, $setter ) ) ) { |
|
772 | - $this->{$setter}( $value ); |
|
773 | - } |
|
774 | - } catch ( Exception $e ) { |
|
775 | - if ( ! $errors ) { |
|
776 | - $errors = new WP_Error(); |
|
777 | - } |
|
778 | - $errors->add( $e->getCode(), $e->getMessage() ); |
|
779 | - $this->last_error = $e->getMessage(); |
|
780 | - } |
|
781 | - } |
|
782 | - |
|
783 | - return $errors && count( $errors->get_error_codes() ) ? $errors : true; |
|
784 | - } |
|
785 | - |
|
786 | - /** |
|
787 | - * Sets a prop for a setter method. |
|
788 | - * |
|
789 | - * This stores changes in a special array so we can track what needs saving |
|
790 | - * the the DB later. |
|
791 | - * |
|
792 | - * @since 1.0.19 |
|
793 | - * @param string $prop Name of prop to set. |
|
794 | - * @param mixed $value Value of the prop. |
|
795 | - */ |
|
796 | - protected function set_prop( $prop, $value ) { |
|
797 | - if ( array_key_exists( $prop, $this->data ) ) { |
|
798 | - if ( true === $this->object_read ) { |
|
799 | - if ( $value !== $this->data[ $prop ] || array_key_exists( $prop, $this->changes ) ) { |
|
800 | - $this->changes[ $prop ] = $value; |
|
801 | - } |
|
802 | - } else { |
|
803 | - $this->data[ $prop ] = $value; |
|
804 | - } |
|
805 | - } |
|
806 | - } |
|
807 | - |
|
808 | - /** |
|
809 | - * Return data changes only. |
|
810 | - * |
|
811 | - * @since 1.0.19 |
|
812 | - * @return array |
|
813 | - */ |
|
814 | - public function get_changes() { |
|
815 | - return $this->changes; |
|
816 | - } |
|
817 | - |
|
818 | - /** |
|
819 | - * Merge changes with data and clear. |
|
820 | - * |
|
821 | - * @since 1.0.19 |
|
822 | - */ |
|
823 | - public function apply_changes() { |
|
824 | - $this->data = array_replace_recursive( $this->data, $this->changes ); |
|
825 | - $this->changes = array(); |
|
826 | - } |
|
827 | - |
|
828 | - /** |
|
829 | - * Prefix for action and filter hooks on data. |
|
830 | - * |
|
831 | - * @since 1.0.19 |
|
832 | - * @return string |
|
833 | - */ |
|
834 | - protected function get_hook_prefix() { |
|
835 | - return 'wpinv_get_' . $this->object_type . '_'; |
|
836 | - } |
|
837 | - |
|
838 | - /** |
|
839 | - * Gets a prop for a getter method. |
|
840 | - * |
|
841 | - * Gets the value from either current pending changes, or the data itself. |
|
842 | - * Context controls what happens to the value before it's returned. |
|
843 | - * |
|
844 | - * @since 1.0.19 |
|
845 | - * @param string $prop Name of prop to get. |
|
846 | - * @param string $context What the value is for. Valid values are view and edit. |
|
847 | - * @return mixed |
|
848 | - */ |
|
849 | - protected function get_prop( $prop, $context = 'view' ) { |
|
850 | - $value = null; |
|
851 | - |
|
852 | - if ( array_key_exists( $prop, $this->data ) ) { |
|
853 | - $value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ]; |
|
854 | - |
|
855 | - if ( 'view' === $context ) { |
|
856 | - $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this ); |
|
857 | - } |
|
858 | - } |
|
859 | - |
|
860 | - return $value; |
|
861 | - } |
|
862 | - |
|
863 | - /** |
|
864 | - * Sets a date prop whilst handling formatting and datetime objects. |
|
865 | - * |
|
866 | - * @since 1.0.19 |
|
867 | - * @param string $prop Name of prop to set. |
|
868 | - * @param string|integer $value Value of the prop. |
|
869 | - */ |
|
870 | - protected function set_date_prop( $prop, $value ) { |
|
871 | - |
|
872 | - if ( empty( $value ) ) { |
|
873 | - $this->set_prop( $prop, null ); |
|
874 | - return; |
|
875 | - } |
|
876 | - $this->set_prop( $prop, $value ); |
|
877 | - |
|
878 | - } |
|
879 | - |
|
880 | - /** |
|
881 | - * When invalid data is found, throw an exception unless reading from the DB. |
|
882 | - * |
|
883 | - * @since 1.0.19 |
|
884 | - * @param string $code Error code. |
|
885 | - * @param string $message Error message. |
|
886 | - */ |
|
887 | - protected function error( $code, $message ) { |
|
888 | - $this->last_error = $message; |
|
889 | - } |
|
890 | - |
|
891 | - /** |
|
892 | - * Checks if the object is saved in the database |
|
893 | - * |
|
894 | - * @since 1.0.19 |
|
895 | - * @return bool |
|
896 | - */ |
|
897 | - public function exists() { |
|
898 | - $id = $this->get_id(); |
|
899 | - return ! empty( $id ); |
|
900 | - } |
|
708 | + $this->set_prop( 'status', $status ); |
|
709 | + |
|
710 | + return array( |
|
711 | + 'from' => $old_status, |
|
712 | + 'to' => $status, |
|
713 | + ); |
|
714 | + } |
|
715 | + |
|
716 | + /** |
|
717 | + * Set all props to default values. |
|
718 | + * |
|
719 | + * @since 1.0.19 |
|
720 | + */ |
|
721 | + public function set_defaults() { |
|
722 | + $this->data = $this->default_data; |
|
723 | + $this->changes = array(); |
|
724 | + $this->set_object_read( false ); |
|
725 | + } |
|
726 | + |
|
727 | + /** |
|
728 | + * Set object read property. |
|
729 | + * |
|
730 | + * @since 1.0.19 |
|
731 | + * @param boolean $read Should read?. |
|
732 | + */ |
|
733 | + public function set_object_read( $read = true ) { |
|
734 | + $this->object_read = (bool) $read; |
|
735 | + } |
|
736 | + |
|
737 | + /** |
|
738 | + * Get object read property. |
|
739 | + * |
|
740 | + * @since 1.0.19 |
|
741 | + * @return boolean |
|
742 | + */ |
|
743 | + public function get_object_read() { |
|
744 | + return (bool) $this->object_read; |
|
745 | + } |
|
746 | + |
|
747 | + /** |
|
748 | + * Set a collection of props in one go, collect any errors, and return the result. |
|
749 | + * Only sets using public methods. |
|
750 | + * |
|
751 | + * @since 1.0.19 |
|
752 | + * |
|
753 | + * @param array $props Key value pairs to set. Key is the prop and should map to a setter function name. |
|
754 | + * @param string $context In what context to run this. |
|
755 | + * |
|
756 | + * @return bool|WP_Error |
|
757 | + */ |
|
758 | + public function set_props( $props, $context = 'set' ) { |
|
759 | + $errors = false; |
|
760 | + |
|
761 | + foreach ( $props as $prop => $value ) { |
|
762 | + try { |
|
763 | + /** |
|
764 | + * Checks if the prop being set is allowed, and the value is not null. |
|
765 | + */ |
|
766 | + if ( is_null( $value ) || in_array( $prop, array( 'prop', 'date_prop', 'meta_data' ), true ) ) { |
|
767 | + continue; |
|
768 | + } |
|
769 | + $setter = "set_$prop"; |
|
770 | + |
|
771 | + if ( is_callable( array( $this, $setter ) ) ) { |
|
772 | + $this->{$setter}( $value ); |
|
773 | + } |
|
774 | + } catch ( Exception $e ) { |
|
775 | + if ( ! $errors ) { |
|
776 | + $errors = new WP_Error(); |
|
777 | + } |
|
778 | + $errors->add( $e->getCode(), $e->getMessage() ); |
|
779 | + $this->last_error = $e->getMessage(); |
|
780 | + } |
|
781 | + } |
|
782 | + |
|
783 | + return $errors && count( $errors->get_error_codes() ) ? $errors : true; |
|
784 | + } |
|
785 | + |
|
786 | + /** |
|
787 | + * Sets a prop for a setter method. |
|
788 | + * |
|
789 | + * This stores changes in a special array so we can track what needs saving |
|
790 | + * the the DB later. |
|
791 | + * |
|
792 | + * @since 1.0.19 |
|
793 | + * @param string $prop Name of prop to set. |
|
794 | + * @param mixed $value Value of the prop. |
|
795 | + */ |
|
796 | + protected function set_prop( $prop, $value ) { |
|
797 | + if ( array_key_exists( $prop, $this->data ) ) { |
|
798 | + if ( true === $this->object_read ) { |
|
799 | + if ( $value !== $this->data[ $prop ] || array_key_exists( $prop, $this->changes ) ) { |
|
800 | + $this->changes[ $prop ] = $value; |
|
801 | + } |
|
802 | + } else { |
|
803 | + $this->data[ $prop ] = $value; |
|
804 | + } |
|
805 | + } |
|
806 | + } |
|
807 | + |
|
808 | + /** |
|
809 | + * Return data changes only. |
|
810 | + * |
|
811 | + * @since 1.0.19 |
|
812 | + * @return array |
|
813 | + */ |
|
814 | + public function get_changes() { |
|
815 | + return $this->changes; |
|
816 | + } |
|
817 | + |
|
818 | + /** |
|
819 | + * Merge changes with data and clear. |
|
820 | + * |
|
821 | + * @since 1.0.19 |
|
822 | + */ |
|
823 | + public function apply_changes() { |
|
824 | + $this->data = array_replace_recursive( $this->data, $this->changes ); |
|
825 | + $this->changes = array(); |
|
826 | + } |
|
827 | + |
|
828 | + /** |
|
829 | + * Prefix for action and filter hooks on data. |
|
830 | + * |
|
831 | + * @since 1.0.19 |
|
832 | + * @return string |
|
833 | + */ |
|
834 | + protected function get_hook_prefix() { |
|
835 | + return 'wpinv_get_' . $this->object_type . '_'; |
|
836 | + } |
|
837 | + |
|
838 | + /** |
|
839 | + * Gets a prop for a getter method. |
|
840 | + * |
|
841 | + * Gets the value from either current pending changes, or the data itself. |
|
842 | + * Context controls what happens to the value before it's returned. |
|
843 | + * |
|
844 | + * @since 1.0.19 |
|
845 | + * @param string $prop Name of prop to get. |
|
846 | + * @param string $context What the value is for. Valid values are view and edit. |
|
847 | + * @return mixed |
|
848 | + */ |
|
849 | + protected function get_prop( $prop, $context = 'view' ) { |
|
850 | + $value = null; |
|
851 | + |
|
852 | + if ( array_key_exists( $prop, $this->data ) ) { |
|
853 | + $value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ]; |
|
854 | + |
|
855 | + if ( 'view' === $context ) { |
|
856 | + $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this ); |
|
857 | + } |
|
858 | + } |
|
859 | + |
|
860 | + return $value; |
|
861 | + } |
|
862 | + |
|
863 | + /** |
|
864 | + * Sets a date prop whilst handling formatting and datetime objects. |
|
865 | + * |
|
866 | + * @since 1.0.19 |
|
867 | + * @param string $prop Name of prop to set. |
|
868 | + * @param string|integer $value Value of the prop. |
|
869 | + */ |
|
870 | + protected function set_date_prop( $prop, $value ) { |
|
871 | + |
|
872 | + if ( empty( $value ) ) { |
|
873 | + $this->set_prop( $prop, null ); |
|
874 | + return; |
|
875 | + } |
|
876 | + $this->set_prop( $prop, $value ); |
|
877 | + |
|
878 | + } |
|
879 | + |
|
880 | + /** |
|
881 | + * When invalid data is found, throw an exception unless reading from the DB. |
|
882 | + * |
|
883 | + * @since 1.0.19 |
|
884 | + * @param string $code Error code. |
|
885 | + * @param string $message Error message. |
|
886 | + */ |
|
887 | + protected function error( $code, $message ) { |
|
888 | + $this->last_error = $message; |
|
889 | + } |
|
890 | + |
|
891 | + /** |
|
892 | + * Checks if the object is saved in the database |
|
893 | + * |
|
894 | + * @since 1.0.19 |
|
895 | + * @return bool |
|
896 | + */ |
|
897 | + public function exists() { |
|
898 | + $id = $this->get_id(); |
|
899 | + return ! empty( $id ); |
|
900 | + } |
|
901 | 901 | |
902 | 902 | } |
@@ -8,7 +8,7 @@ discard block |
||
8 | 8 | * |
9 | 9 | */ |
10 | 10 | |
11 | -if ( ! defined( 'ABSPATH' ) ) { |
|
11 | +if (!defined('ABSPATH')) { |
|
12 | 12 | exit; |
13 | 13 | } |
14 | 14 | |
@@ -117,8 +117,8 @@ discard block |
||
117 | 117 | * |
118 | 118 | * @param int|object|array $read ID to load from the DB (optional) or already queried data. |
119 | 119 | */ |
120 | - public function __construct( $read = 0 ) { |
|
121 | - $this->data = array_merge( $this->data, $this->extra_data ); |
|
120 | + public function __construct($read = 0) { |
|
121 | + $this->data = array_merge($this->data, $this->extra_data); |
|
122 | 122 | $this->default_data = $this->data; |
123 | 123 | } |
124 | 124 | |
@@ -128,7 +128,7 @@ discard block |
||
128 | 128 | * @return array |
129 | 129 | */ |
130 | 130 | public function __sleep() { |
131 | - return array( 'id' ); |
|
131 | + return array('id'); |
|
132 | 132 | } |
133 | 133 | |
134 | 134 | /** |
@@ -137,10 +137,10 @@ discard block |
||
137 | 137 | * If the object no longer exists, remove the ID. |
138 | 138 | */ |
139 | 139 | public function __wakeup() { |
140 | - $this->__construct( absint( $this->id ) ); |
|
140 | + $this->__construct(absint($this->id)); |
|
141 | 141 | |
142 | - if ( ! empty( $this->last_error ) ) { |
|
143 | - $this->set_id( 0 ); |
|
142 | + if (!empty($this->last_error)) { |
|
143 | + $this->set_id(0); |
|
144 | 144 | } |
145 | 145 | |
146 | 146 | } |
@@ -152,11 +152,11 @@ discard block |
||
152 | 152 | */ |
153 | 153 | public function __clone() { |
154 | 154 | $this->maybe_read_meta_data(); |
155 | - if ( ! empty( $this->meta_data ) ) { |
|
156 | - foreach ( $this->meta_data as $array_key => $meta ) { |
|
157 | - $this->meta_data[ $array_key ] = clone $meta; |
|
158 | - if ( ! empty( $meta->id ) ) { |
|
159 | - $this->meta_data[ $array_key ]->id = null; |
|
155 | + if (!empty($this->meta_data)) { |
|
156 | + foreach ($this->meta_data as $array_key => $meta) { |
|
157 | + $this->meta_data[$array_key] = clone $meta; |
|
158 | + if (!empty($meta->id)) { |
|
159 | + $this->meta_data[$array_key]->id = null; |
|
160 | 160 | } |
161 | 161 | } |
162 | 162 | } |
@@ -199,8 +199,8 @@ discard block |
||
199 | 199 | * @param string $context View or edit context. |
200 | 200 | * @return string |
201 | 201 | */ |
202 | - public function get_status( $context = 'view' ) { |
|
203 | - return $this->get_prop( 'status', $context ); |
|
202 | + public function get_status($context = 'view') { |
|
203 | + return $this->get_prop('status', $context); |
|
204 | 204 | } |
205 | 205 | |
206 | 206 | /** |
@@ -210,10 +210,10 @@ discard block |
||
210 | 210 | * @param bool $force_delete Should the data be deleted permanently. |
211 | 211 | * @return bool result |
212 | 212 | */ |
213 | - public function delete( $force_delete = false ) { |
|
214 | - if ( $this->data_store && $this->get_id() ) { |
|
215 | - $this->data_store->delete( $this, array( 'force_delete' => $force_delete ) ); |
|
216 | - $this->set_id( 0 ); |
|
213 | + public function delete($force_delete = false) { |
|
214 | + if ($this->data_store && $this->get_id()) { |
|
215 | + $this->data_store->delete($this, array('force_delete' => $force_delete)); |
|
216 | + $this->set_id(0); |
|
217 | 217 | return true; |
218 | 218 | } |
219 | 219 | return false; |
@@ -226,7 +226,7 @@ discard block |
||
226 | 226 | * @return int |
227 | 227 | */ |
228 | 228 | public function save() { |
229 | - if ( ! $this->data_store ) { |
|
229 | + if (!$this->data_store) { |
|
230 | 230 | return $this->get_id(); |
231 | 231 | } |
232 | 232 | |
@@ -236,12 +236,12 @@ discard block |
||
236 | 236 | * @param GetPaid_Data $this The object being saved. |
237 | 237 | * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
238 | 238 | */ |
239 | - do_action( 'getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
239 | + do_action('getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store); |
|
240 | 240 | |
241 | - if ( $this->get_id() ) { |
|
242 | - $this->data_store->update( $this ); |
|
241 | + if ($this->get_id()) { |
|
242 | + $this->data_store->update($this); |
|
243 | 243 | } else { |
244 | - $this->data_store->create( $this ); |
|
244 | + $this->data_store->create($this); |
|
245 | 245 | } |
246 | 246 | |
247 | 247 | /** |
@@ -250,7 +250,7 @@ discard block |
||
250 | 250 | * @param GetPaid_Data $this The object being saved. |
251 | 251 | * @param GetPaid_Data_Store_WP $data_store The data store persisting the data. |
252 | 252 | */ |
253 | - do_action( 'getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store ); |
|
253 | + do_action('getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store); |
|
254 | 254 | |
255 | 255 | return $this->get_id(); |
256 | 256 | } |
@@ -262,7 +262,7 @@ discard block |
||
262 | 262 | * @return string Data in JSON format. |
263 | 263 | */ |
264 | 264 | public function __toString() { |
265 | - return wp_json_encode( $this->get_data() ); |
|
265 | + return wp_json_encode($this->get_data()); |
|
266 | 266 | } |
267 | 267 | |
268 | 268 | /** |
@@ -272,7 +272,7 @@ discard block |
||
272 | 272 | * @return array |
273 | 273 | */ |
274 | 274 | public function get_data() { |
275 | - return array_merge( array( 'id' => $this->get_id() ), $this->data, array( 'meta_data' => $this->get_meta_data() ) ); |
|
275 | + return array_merge(array('id' => $this->get_id()), $this->data, array('meta_data' => $this->get_meta_data())); |
|
276 | 276 | } |
277 | 277 | |
278 | 278 | /** |
@@ -282,7 +282,7 @@ discard block |
||
282 | 282 | * @return array |
283 | 283 | */ |
284 | 284 | public function get_data_keys() { |
285 | - return array_keys( $this->data ); |
|
285 | + return array_keys($this->data); |
|
286 | 286 | } |
287 | 287 | |
288 | 288 | /** |
@@ -292,7 +292,7 @@ discard block |
||
292 | 292 | * @return array |
293 | 293 | */ |
294 | 294 | public function get_extra_data_keys() { |
295 | - return array_keys( $this->extra_data ); |
|
295 | + return array_keys($this->extra_data); |
|
296 | 296 | } |
297 | 297 | |
298 | 298 | /** |
@@ -302,8 +302,8 @@ discard block |
||
302 | 302 | * @param mixed $meta Meta value to check. |
303 | 303 | * @return bool |
304 | 304 | */ |
305 | - protected function filter_null_meta( $meta ) { |
|
306 | - return ! is_null( $meta->value ); |
|
305 | + protected function filter_null_meta($meta) { |
|
306 | + return !is_null($meta->value); |
|
307 | 307 | } |
308 | 308 | |
309 | 309 | /** |
@@ -314,7 +314,7 @@ discard block |
||
314 | 314 | */ |
315 | 315 | public function get_meta_data() { |
316 | 316 | $this->maybe_read_meta_data(); |
317 | - return array_values( array_filter( $this->meta_data, array( $this, 'filter_null_meta' ) ) ); |
|
317 | + return array_values(array_filter($this->meta_data, array($this, 'filter_null_meta'))); |
|
318 | 318 | } |
319 | 319 | |
320 | 320 | /** |
@@ -324,21 +324,21 @@ discard block |
||
324 | 324 | * @param string $key Key to check. |
325 | 325 | * @return bool true if it's an internal key, false otherwise |
326 | 326 | */ |
327 | - protected function is_internal_meta_key( $key ) { |
|
328 | - $internal_meta_key = ! empty( $key ) && $this->data_store && in_array( $key, $this->data_store->get_internal_meta_keys(), true ); |
|
327 | + protected function is_internal_meta_key($key) { |
|
328 | + $internal_meta_key = !empty($key) && $this->data_store && in_array($key, $this->data_store->get_internal_meta_keys(), true); |
|
329 | 329 | |
330 | - if ( ! $internal_meta_key ) { |
|
330 | + if (!$internal_meta_key) { |
|
331 | 331 | return false; |
332 | 332 | } |
333 | 333 | |
334 | - $has_setter_or_getter = is_callable( array( $this, 'set_' . $key ) ) || is_callable( array( $this, 'get_' . $key ) ); |
|
334 | + $has_setter_or_getter = is_callable(array($this, 'set_' . $key)) || is_callable(array($this, 'get_' . $key)); |
|
335 | 335 | |
336 | - if ( ! $has_setter_or_getter ) { |
|
336 | + if (!$has_setter_or_getter) { |
|
337 | 337 | return false; |
338 | 338 | } |
339 | 339 | |
340 | 340 | /* translators: %s: $key Key to check */ |
341 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
341 | + getpaid_doing_it_wrong(__FUNCTION__, sprintf(__('Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid'), $key), '1.0.19'); |
|
342 | 342 | |
343 | 343 | return true; |
344 | 344 | } |
@@ -352,20 +352,20 @@ discard block |
||
352 | 352 | * @access public |
353 | 353 | * |
354 | 354 | */ |
355 | - public function __set( $key, $value ) { |
|
355 | + public function __set($key, $value) { |
|
356 | 356 | |
357 | - if ( 'id' == strtolower( $key ) ) { |
|
358 | - return $this->set_id( $value ); |
|
357 | + if ('id' == strtolower($key)) { |
|
358 | + return $this->set_id($value); |
|
359 | 359 | } |
360 | 360 | |
361 | - if ( method_exists( $this, "set_$key") ) { |
|
361 | + if (method_exists($this, "set_$key")) { |
|
362 | 362 | |
363 | 363 | /* translators: %s: $key Key to set */ |
364 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
364 | + getpaid_doing_it_wrong(__FUNCTION__, sprintf(__('Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid'), $key), '1.0.19'); |
|
365 | 365 | |
366 | - call_user_func( array( $this, "set_$key" ), $value ); |
|
366 | + call_user_func(array($this, "set_$key"), $value); |
|
367 | 367 | } else { |
368 | - $this->set_prop( $key, $value ); |
|
368 | + $this->set_prop($key, $value); |
|
369 | 369 | } |
370 | 370 | |
371 | 371 | } |
@@ -373,25 +373,25 @@ discard block |
||
373 | 373 | /** |
374 | 374 | * Margic method for retrieving a property. |
375 | 375 | */ |
376 | - public function __get( $key ) { |
|
376 | + public function __get($key) { |
|
377 | 377 | |
378 | 378 | // Check if we have a helper method for that. |
379 | - if ( method_exists( $this, 'get_' . $key ) ) { |
|
379 | + if (method_exists($this, 'get_' . $key)) { |
|
380 | 380 | |
381 | - if ( 'post_type' != $key ) { |
|
381 | + if ('post_type' != $key) { |
|
382 | 382 | /* translators: %s: $key Key to set */ |
383 | - getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid' ), $key ), '1.0.19' ); |
|
383 | + getpaid_doing_it_wrong(__FUNCTION__, sprintf(__('Object data such as "%s" should not be accessed directly. Use getters and setters.', 'getpaid'), $key), '1.0.19'); |
|
384 | 384 | } |
385 | 385 | |
386 | - return call_user_func( array( $this, 'get_' . $key ) ); |
|
386 | + return call_user_func(array($this, 'get_' . $key)); |
|
387 | 387 | } |
388 | 388 | |
389 | 389 | // Check if the key is in the associated $post object. |
390 | - if ( ! empty( $this->post ) && isset( $this->post->$key ) ) { |
|
390 | + if (!empty($this->post) && isset($this->post->$key)) { |
|
391 | 391 | return $this->post->$key; |
392 | 392 | } |
393 | 393 | |
394 | - return $this->get_prop( $key ); |
|
394 | + return $this->get_prop($key); |
|
395 | 395 | |
396 | 396 | } |
397 | 397 | |
@@ -404,15 +404,15 @@ discard block |
||
404 | 404 | * @param string $context What the value is for. Valid values are view and edit. |
405 | 405 | * @return mixed |
406 | 406 | */ |
407 | - public function get_meta( $key = '', $single = true, $context = 'view' ) { |
|
407 | + public function get_meta($key = '', $single = true, $context = 'view') { |
|
408 | 408 | |
409 | 409 | // Check if this is an internal meta key. |
410 | - $_key = str_replace( '_wpinv', '', $key ); |
|
411 | - $_key = str_replace( 'wpinv', '', $_key ); |
|
412 | - if ( $this->is_internal_meta_key( $_key ) ) { |
|
410 | + $_key = str_replace('_wpinv', '', $key); |
|
411 | + $_key = str_replace('wpinv', '', $_key); |
|
412 | + if ($this->is_internal_meta_key($_key)) { |
|
413 | 413 | $function = 'get_' . $_key; |
414 | 414 | |
415 | - if ( is_callable( array( $this, $function ) ) ) { |
|
415 | + if (is_callable(array($this, $function))) { |
|
416 | 416 | return $this->{$function}(); |
417 | 417 | } |
418 | 418 | } |
@@ -420,20 +420,20 @@ discard block |
||
420 | 420 | // Read the meta data if not yet read. |
421 | 421 | $this->maybe_read_meta_data(); |
422 | 422 | $meta_data = $this->get_meta_data(); |
423 | - $array_keys = array_keys( wp_list_pluck( $meta_data, 'key' ), $key, true ); |
|
423 | + $array_keys = array_keys(wp_list_pluck($meta_data, 'key'), $key, true); |
|
424 | 424 | $value = $single ? '' : array(); |
425 | 425 | |
426 | - if ( ! empty( $array_keys ) ) { |
|
426 | + if (!empty($array_keys)) { |
|
427 | 427 | // We don't use the $this->meta_data property directly here because we don't want meta with a null value (i.e. meta which has been deleted via $this->delete_meta_data()). |
428 | - if ( $single ) { |
|
429 | - $value = $meta_data[ current( $array_keys ) ]->value; |
|
428 | + if ($single) { |
|
429 | + $value = $meta_data[current($array_keys)]->value; |
|
430 | 430 | } else { |
431 | - $value = array_intersect_key( $meta_data, array_flip( $array_keys ) ); |
|
431 | + $value = array_intersect_key($meta_data, array_flip($array_keys)); |
|
432 | 432 | } |
433 | 433 | } |
434 | 434 | |
435 | - if ( 'view' === $context ) { |
|
436 | - $value = apply_filters( $this->get_hook_prefix() . $key, $value, $this ); |
|
435 | + if ('view' === $context) { |
|
436 | + $value = apply_filters($this->get_hook_prefix() . $key, $value, $this); |
|
437 | 437 | } |
438 | 438 | |
439 | 439 | return $value; |
@@ -446,10 +446,10 @@ discard block |
||
446 | 446 | * @param string $key Meta Key. |
447 | 447 | * @return boolean |
448 | 448 | */ |
449 | - public function meta_exists( $key = '' ) { |
|
449 | + public function meta_exists($key = '') { |
|
450 | 450 | $this->maybe_read_meta_data(); |
451 | - $array_keys = wp_list_pluck( $this->get_meta_data(), 'key' ); |
|
452 | - return in_array( $key, $array_keys, true ); |
|
451 | + $array_keys = wp_list_pluck($this->get_meta_data(), 'key'); |
|
452 | + return in_array($key, $array_keys, true); |
|
453 | 453 | } |
454 | 454 | |
455 | 455 | /** |
@@ -458,12 +458,12 @@ discard block |
||
458 | 458 | * @since 1.0.19 |
459 | 459 | * @param array $data Key/Value pairs. |
460 | 460 | */ |
461 | - public function set_meta_data( $data ) { |
|
462 | - if ( ! empty( $data ) && is_array( $data ) ) { |
|
461 | + public function set_meta_data($data) { |
|
462 | + if (!empty($data) && is_array($data)) { |
|
463 | 463 | $this->maybe_read_meta_data(); |
464 | - foreach ( $data as $meta ) { |
|
464 | + foreach ($data as $meta) { |
|
465 | 465 | $meta = (array) $meta; |
466 | - if ( isset( $meta['key'], $meta['value'], $meta['id'] ) ) { |
|
466 | + if (isset($meta['key'], $meta['value'], $meta['id'])) { |
|
467 | 467 | $this->meta_data[] = new GetPaid_Meta_Data( |
468 | 468 | array( |
469 | 469 | 'id' => $meta['id'], |
@@ -485,18 +485,18 @@ discard block |
||
485 | 485 | * @param string|array $value Meta value. |
486 | 486 | * @param bool $unique Should this be a unique key?. |
487 | 487 | */ |
488 | - public function add_meta_data( $key, $value, $unique = false ) { |
|
489 | - if ( $this->is_internal_meta_key( $key ) ) { |
|
488 | + public function add_meta_data($key, $value, $unique = false) { |
|
489 | + if ($this->is_internal_meta_key($key)) { |
|
490 | 490 | $function = 'set_' . $key; |
491 | 491 | |
492 | - if ( is_callable( array( $this, $function ) ) ) { |
|
493 | - return $this->{$function}( $value ); |
|
492 | + if (is_callable(array($this, $function))) { |
|
493 | + return $this->{$function}($value); |
|
494 | 494 | } |
495 | 495 | } |
496 | 496 | |
497 | 497 | $this->maybe_read_meta_data(); |
498 | - if ( $unique ) { |
|
499 | - $this->delete_meta_data( $key ); |
|
498 | + if ($unique) { |
|
499 | + $this->delete_meta_data($key); |
|
500 | 500 | } |
501 | 501 | $this->meta_data[] = new GetPaid_Meta_Data( |
502 | 502 | array( |
@@ -515,12 +515,12 @@ discard block |
||
515 | 515 | * @param string|array $value Meta value. |
516 | 516 | * @param int $meta_id Meta ID. |
517 | 517 | */ |
518 | - public function update_meta_data( $key, $value, $meta_id = 0 ) { |
|
519 | - if ( $this->is_internal_meta_key( $key ) ) { |
|
518 | + public function update_meta_data($key, $value, $meta_id = 0) { |
|
519 | + if ($this->is_internal_meta_key($key)) { |
|
520 | 520 | $function = 'set_' . $key; |
521 | 521 | |
522 | - if ( is_callable( array( $this, $function ) ) ) { |
|
523 | - return $this->{$function}( $value ); |
|
522 | + if (is_callable(array($this, $function))) { |
|
523 | + return $this->{$function}($value); |
|
524 | 524 | } |
525 | 525 | } |
526 | 526 | |
@@ -528,33 +528,33 @@ discard block |
||
528 | 528 | |
529 | 529 | $array_key = false; |
530 | 530 | |
531 | - if ( $meta_id ) { |
|
532 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true ); |
|
533 | - $array_key = $array_keys ? current( $array_keys ) : false; |
|
531 | + if ($meta_id) { |
|
532 | + $array_keys = array_keys(wp_list_pluck($this->meta_data, 'id'), $meta_id, true); |
|
533 | + $array_key = $array_keys ? current($array_keys) : false; |
|
534 | 534 | } else { |
535 | 535 | // Find matches by key. |
536 | 536 | $matches = array(); |
537 | - foreach ( $this->meta_data as $meta_data_array_key => $meta ) { |
|
538 | - if ( $meta->key === $key ) { |
|
537 | + foreach ($this->meta_data as $meta_data_array_key => $meta) { |
|
538 | + if ($meta->key === $key) { |
|
539 | 539 | $matches[] = $meta_data_array_key; |
540 | 540 | } |
541 | 541 | } |
542 | 542 | |
543 | - if ( ! empty( $matches ) ) { |
|
543 | + if (!empty($matches)) { |
|
544 | 544 | // Set matches to null so only one key gets the new value. |
545 | - foreach ( $matches as $meta_data_array_key ) { |
|
546 | - $this->meta_data[ $meta_data_array_key ]->value = null; |
|
545 | + foreach ($matches as $meta_data_array_key) { |
|
546 | + $this->meta_data[$meta_data_array_key]->value = null; |
|
547 | 547 | } |
548 | - $array_key = current( $matches ); |
|
548 | + $array_key = current($matches); |
|
549 | 549 | } |
550 | 550 | } |
551 | 551 | |
552 | - if ( false !== $array_key ) { |
|
553 | - $meta = $this->meta_data[ $array_key ]; |
|
552 | + if (false !== $array_key) { |
|
553 | + $meta = $this->meta_data[$array_key]; |
|
554 | 554 | $meta->key = $key; |
555 | 555 | $meta->value = $value; |
556 | 556 | } else { |
557 | - $this->add_meta_data( $key, $value, true ); |
|
557 | + $this->add_meta_data($key, $value, true); |
|
558 | 558 | } |
559 | 559 | } |
560 | 560 | |
@@ -564,13 +564,13 @@ discard block |
||
564 | 564 | * @since 1.0.19 |
565 | 565 | * @param string $key Meta key. |
566 | 566 | */ |
567 | - public function delete_meta_data( $key ) { |
|
567 | + public function delete_meta_data($key) { |
|
568 | 568 | $this->maybe_read_meta_data(); |
569 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'key' ), $key, true ); |
|
569 | + $array_keys = array_keys(wp_list_pluck($this->meta_data, 'key'), $key, true); |
|
570 | 570 | |
571 | - if ( $array_keys ) { |
|
572 | - foreach ( $array_keys as $array_key ) { |
|
573 | - $this->meta_data[ $array_key ]->value = null; |
|
571 | + if ($array_keys) { |
|
572 | + foreach ($array_keys as $array_key) { |
|
573 | + $this->meta_data[$array_key]->value = null; |
|
574 | 574 | } |
575 | 575 | } |
576 | 576 | } |
@@ -581,13 +581,13 @@ discard block |
||
581 | 581 | * @since 1.0.19 |
582 | 582 | * @param int $mid Meta ID. |
583 | 583 | */ |
584 | - public function delete_meta_data_by_mid( $mid ) { |
|
584 | + public function delete_meta_data_by_mid($mid) { |
|
585 | 585 | $this->maybe_read_meta_data(); |
586 | - $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), (int) $mid, true ); |
|
586 | + $array_keys = array_keys(wp_list_pluck($this->meta_data, 'id'), (int) $mid, true); |
|
587 | 587 | |
588 | - if ( $array_keys ) { |
|
589 | - foreach ( $array_keys as $array_key ) { |
|
590 | - $this->meta_data[ $array_key ]->value = null; |
|
588 | + if ($array_keys) { |
|
589 | + foreach ($array_keys as $array_key) { |
|
590 | + $this->meta_data[$array_key]->value = null; |
|
591 | 591 | } |
592 | 592 | } |
593 | 593 | } |
@@ -598,7 +598,7 @@ discard block |
||
598 | 598 | * @since 1.0.19 |
599 | 599 | */ |
600 | 600 | protected function maybe_read_meta_data() { |
601 | - if ( is_null( $this->meta_data ) ) { |
|
601 | + if (is_null($this->meta_data)) { |
|
602 | 602 | $this->read_meta_data(); |
603 | 603 | } |
604 | 604 | } |
@@ -610,42 +610,42 @@ discard block |
||
610 | 610 | * @since 1.0.19 |
611 | 611 | * @param bool $force_read True to force a new DB read (and update cache). |
612 | 612 | */ |
613 | - public function read_meta_data( $force_read = false ) { |
|
613 | + public function read_meta_data($force_read = false) { |
|
614 | 614 | |
615 | 615 | // Reset meta data. |
616 | 616 | $this->meta_data = array(); |
617 | 617 | |
618 | 618 | // Maybe abort early. |
619 | - if ( ! $this->get_id() || ! $this->data_store ) { |
|
619 | + if (!$this->get_id() || !$this->data_store) { |
|
620 | 620 | return; |
621 | 621 | } |
622 | 622 | |
623 | 623 | // Only read from cache if the cache key is set. |
624 | 624 | $cache_key = null; |
625 | - if ( ! $force_read && ! empty( $this->cache_group ) ) { |
|
626 | - $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
627 | - $raw_meta_data = wp_cache_get( $cache_key, $this->cache_group ); |
|
625 | + if (!$force_read && !empty($this->cache_group)) { |
|
626 | + $cache_key = GetPaid_Cache_Helper::get_cache_prefix($this->cache_group) . GetPaid_Cache_Helper::get_cache_prefix('object_' . $this->get_id()) . 'object_meta_' . $this->get_id(); |
|
627 | + $raw_meta_data = wp_cache_get($cache_key, $this->cache_group); |
|
628 | 628 | } |
629 | 629 | |
630 | 630 | // Should we force read? |
631 | - if ( empty( $raw_meta_data ) ) { |
|
632 | - $raw_meta_data = $this->data_store->read_meta( $this ); |
|
631 | + if (empty($raw_meta_data)) { |
|
632 | + $raw_meta_data = $this->data_store->read_meta($this); |
|
633 | 633 | |
634 | - if ( ! empty( $cache_key ) ) { |
|
635 | - wp_cache_set( $cache_key, $raw_meta_data, $this->cache_group ); |
|
634 | + if (!empty($cache_key)) { |
|
635 | + wp_cache_set($cache_key, $raw_meta_data, $this->cache_group); |
|
636 | 636 | } |
637 | 637 | |
638 | 638 | } |
639 | 639 | |
640 | 640 | // Set meta data. |
641 | - if ( is_array( $raw_meta_data ) ) { |
|
641 | + if (is_array($raw_meta_data)) { |
|
642 | 642 | |
643 | - foreach ( $raw_meta_data as $meta ) { |
|
643 | + foreach ($raw_meta_data as $meta) { |
|
644 | 644 | $this->meta_data[] = new GetPaid_Meta_Data( |
645 | 645 | array( |
646 | 646 | 'id' => (int) $meta->meta_id, |
647 | 647 | 'key' => $meta->meta_key, |
648 | - 'value' => maybe_unserialize( $meta->meta_value ), |
|
648 | + 'value' => maybe_unserialize($meta->meta_value), |
|
649 | 649 | ) |
650 | 650 | ); |
651 | 651 | } |
@@ -660,28 +660,28 @@ discard block |
||
660 | 660 | * @since 1.0.19 |
661 | 661 | */ |
662 | 662 | public function save_meta_data() { |
663 | - if ( ! $this->data_store || is_null( $this->meta_data ) ) { |
|
663 | + if (!$this->data_store || is_null($this->meta_data)) { |
|
664 | 664 | return; |
665 | 665 | } |
666 | - foreach ( $this->meta_data as $array_key => $meta ) { |
|
667 | - if ( is_null( $meta->value ) ) { |
|
668 | - if ( ! empty( $meta->id ) ) { |
|
669 | - $this->data_store->delete_meta( $this, $meta ); |
|
670 | - unset( $this->meta_data[ $array_key ] ); |
|
666 | + foreach ($this->meta_data as $array_key => $meta) { |
|
667 | + if (is_null($meta->value)) { |
|
668 | + if (!empty($meta->id)) { |
|
669 | + $this->data_store->delete_meta($this, $meta); |
|
670 | + unset($this->meta_data[$array_key]); |
|
671 | 671 | } |
672 | - } elseif ( empty( $meta->id ) ) { |
|
673 | - $meta->id = $this->data_store->add_meta( $this, $meta ); |
|
672 | + } elseif (empty($meta->id)) { |
|
673 | + $meta->id = $this->data_store->add_meta($this, $meta); |
|
674 | 674 | $meta->apply_changes(); |
675 | 675 | } else { |
676 | - if ( $meta->get_changes() ) { |
|
677 | - $this->data_store->update_meta( $this, $meta ); |
|
676 | + if ($meta->get_changes()) { |
|
677 | + $this->data_store->update_meta($this, $meta); |
|
678 | 678 | $meta->apply_changes(); |
679 | 679 | } |
680 | 680 | } |
681 | 681 | } |
682 | - if ( ! empty( $this->cache_group ) ) { |
|
683 | - $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id(); |
|
684 | - wp_cache_delete( $cache_key, $this->cache_group ); |
|
682 | + if (!empty($this->cache_group)) { |
|
683 | + $cache_key = GetPaid_Cache_Helper::get_cache_prefix($this->cache_group) . GetPaid_Cache_Helper::get_cache_prefix('object_' . $this->get_id()) . 'object_meta_' . $this->get_id(); |
|
684 | + wp_cache_delete($cache_key, $this->cache_group); |
|
685 | 685 | } |
686 | 686 | } |
687 | 687 | |
@@ -691,8 +691,8 @@ discard block |
||
691 | 691 | * @since 1.0.19 |
692 | 692 | * @param int $id ID. |
693 | 693 | */ |
694 | - public function set_id( $id ) { |
|
695 | - $this->id = absint( $id ); |
|
694 | + public function set_id($id) { |
|
695 | + $this->id = absint($id); |
|
696 | 696 | } |
697 | 697 | |
698 | 698 | /** |
@@ -702,10 +702,10 @@ discard block |
||
702 | 702 | * @param string $status New status. |
703 | 703 | * @return array details of change. |
704 | 704 | */ |
705 | - public function set_status( $status ) { |
|
705 | + public function set_status($status) { |
|
706 | 706 | $old_status = $this->get_status(); |
707 | 707 | |
708 | - $this->set_prop( 'status', $status ); |
|
708 | + $this->set_prop('status', $status); |
|
709 | 709 | |
710 | 710 | return array( |
711 | 711 | 'from' => $old_status, |
@@ -721,7 +721,7 @@ discard block |
||
721 | 721 | public function set_defaults() { |
722 | 722 | $this->data = $this->default_data; |
723 | 723 | $this->changes = array(); |
724 | - $this->set_object_read( false ); |
|
724 | + $this->set_object_read(false); |
|
725 | 725 | } |
726 | 726 | |
727 | 727 | /** |
@@ -730,7 +730,7 @@ discard block |
||
730 | 730 | * @since 1.0.19 |
731 | 731 | * @param boolean $read Should read?. |
732 | 732 | */ |
733 | - public function set_object_read( $read = true ) { |
|
733 | + public function set_object_read($read = true) { |
|
734 | 734 | $this->object_read = (bool) $read; |
735 | 735 | } |
736 | 736 | |
@@ -755,32 +755,32 @@ discard block |
||
755 | 755 | * |
756 | 756 | * @return bool|WP_Error |
757 | 757 | */ |
758 | - public function set_props( $props, $context = 'set' ) { |
|
758 | + public function set_props($props, $context = 'set') { |
|
759 | 759 | $errors = false; |
760 | 760 | |
761 | - foreach ( $props as $prop => $value ) { |
|
761 | + foreach ($props as $prop => $value) { |
|
762 | 762 | try { |
763 | 763 | /** |
764 | 764 | * Checks if the prop being set is allowed, and the value is not null. |
765 | 765 | */ |
766 | - if ( is_null( $value ) || in_array( $prop, array( 'prop', 'date_prop', 'meta_data' ), true ) ) { |
|
766 | + if (is_null($value) || in_array($prop, array('prop', 'date_prop', 'meta_data'), true)) { |
|
767 | 767 | continue; |
768 | 768 | } |
769 | 769 | $setter = "set_$prop"; |
770 | 770 | |
771 | - if ( is_callable( array( $this, $setter ) ) ) { |
|
772 | - $this->{$setter}( $value ); |
|
771 | + if (is_callable(array($this, $setter))) { |
|
772 | + $this->{$setter}($value); |
|
773 | 773 | } |
774 | - } catch ( Exception $e ) { |
|
775 | - if ( ! $errors ) { |
|
774 | + } catch (Exception $e) { |
|
775 | + if (!$errors) { |
|
776 | 776 | $errors = new WP_Error(); |
777 | 777 | } |
778 | - $errors->add( $e->getCode(), $e->getMessage() ); |
|
778 | + $errors->add($e->getCode(), $e->getMessage()); |
|
779 | 779 | $this->last_error = $e->getMessage(); |
780 | 780 | } |
781 | 781 | } |
782 | 782 | |
783 | - return $errors && count( $errors->get_error_codes() ) ? $errors : true; |
|
783 | + return $errors && count($errors->get_error_codes()) ? $errors : true; |
|
784 | 784 | } |
785 | 785 | |
786 | 786 | /** |
@@ -793,14 +793,14 @@ discard block |
||
793 | 793 | * @param string $prop Name of prop to set. |
794 | 794 | * @param mixed $value Value of the prop. |
795 | 795 | */ |
796 | - protected function set_prop( $prop, $value ) { |
|
797 | - if ( array_key_exists( $prop, $this->data ) ) { |
|
798 | - if ( true === $this->object_read ) { |
|
799 | - if ( $value !== $this->data[ $prop ] || array_key_exists( $prop, $this->changes ) ) { |
|
800 | - $this->changes[ $prop ] = $value; |
|
796 | + protected function set_prop($prop, $value) { |
|
797 | + if (array_key_exists($prop, $this->data)) { |
|
798 | + if (true === $this->object_read) { |
|
799 | + if ($value !== $this->data[$prop] || array_key_exists($prop, $this->changes)) { |
|
800 | + $this->changes[$prop] = $value; |
|
801 | 801 | } |
802 | 802 | } else { |
803 | - $this->data[ $prop ] = $value; |
|
803 | + $this->data[$prop] = $value; |
|
804 | 804 | } |
805 | 805 | } |
806 | 806 | } |
@@ -821,7 +821,7 @@ discard block |
||
821 | 821 | * @since 1.0.19 |
822 | 822 | */ |
823 | 823 | public function apply_changes() { |
824 | - $this->data = array_replace_recursive( $this->data, $this->changes ); |
|
824 | + $this->data = array_replace_recursive($this->data, $this->changes); |
|
825 | 825 | $this->changes = array(); |
826 | 826 | } |
827 | 827 | |
@@ -846,14 +846,14 @@ discard block |
||
846 | 846 | * @param string $context What the value is for. Valid values are view and edit. |
847 | 847 | * @return mixed |
848 | 848 | */ |
849 | - protected function get_prop( $prop, $context = 'view' ) { |
|
849 | + protected function get_prop($prop, $context = 'view') { |
|
850 | 850 | $value = null; |
851 | 851 | |
852 | - if ( array_key_exists( $prop, $this->data ) ) { |
|
853 | - $value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ]; |
|
852 | + if (array_key_exists($prop, $this->data)) { |
|
853 | + $value = array_key_exists($prop, $this->changes) ? $this->changes[$prop] : $this->data[$prop]; |
|
854 | 854 | |
855 | - if ( 'view' === $context ) { |
|
856 | - $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this ); |
|
855 | + if ('view' === $context) { |
|
856 | + $value = apply_filters($this->get_hook_prefix() . $prop, $value, $this); |
|
857 | 857 | } |
858 | 858 | } |
859 | 859 | |
@@ -867,13 +867,13 @@ discard block |
||
867 | 867 | * @param string $prop Name of prop to set. |
868 | 868 | * @param string|integer $value Value of the prop. |
869 | 869 | */ |
870 | - protected function set_date_prop( $prop, $value ) { |
|
870 | + protected function set_date_prop($prop, $value) { |
|
871 | 871 | |
872 | - if ( empty( $value ) ) { |
|
873 | - $this->set_prop( $prop, null ); |
|
872 | + if (empty($value)) { |
|
873 | + $this->set_prop($prop, null); |
|
874 | 874 | return; |
875 | 875 | } |
876 | - $this->set_prop( $prop, $value ); |
|
876 | + $this->set_prop($prop, $value); |
|
877 | 877 | |
878 | 878 | } |
879 | 879 | |
@@ -884,7 +884,7 @@ discard block |
||
884 | 884 | * @param string $code Error code. |
885 | 885 | * @param string $message Error message. |
886 | 886 | */ |
887 | - protected function error( $code, $message ) { |
|
887 | + protected function error($code, $message) { |
|
888 | 888 | $this->last_error = $message; |
889 | 889 | } |
890 | 890 | |
@@ -896,7 +896,7 @@ discard block |
||
896 | 896 | */ |
897 | 897 | public function exists() { |
898 | 898 | $id = $this->get_id(); |
899 | - return ! empty( $id ); |
|
899 | + return !empty($id); |
|
900 | 900 | } |
901 | 901 | |
902 | 902 | } |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | * |
6 | 6 | */ |
7 | 7 | if ( ! defined( 'ABSPATH' ) ) { |
8 | - exit; |
|
8 | + exit; |
|
9 | 9 | } |
10 | 10 | |
11 | 11 | /** |
@@ -15,196 +15,196 @@ discard block |
||
15 | 15 | */ |
16 | 16 | class GetPaid_Subscription_Data_Store { |
17 | 17 | |
18 | - /** |
|
19 | - * A map of database fields to data types. |
|
20 | - * |
|
21 | - * @since 1.0.19 |
|
22 | - * @var array |
|
23 | - */ |
|
24 | - protected $database_fields_to_data_type = array( |
|
25 | - 'id' => '%d', |
|
26 | - 'customer_id' => '%d', |
|
27 | - 'frequency' => '%d', |
|
28 | - 'period' => '%s', |
|
29 | - 'initial_amount' => '%s', |
|
30 | - 'recurring_amount' => '%s', |
|
31 | - 'bill_times' => '%d', |
|
32 | - 'transaction_id' => '%s', |
|
33 | - 'parent_payment_id' => '%d', |
|
34 | - 'product_id' => '%d', |
|
35 | - 'created' => '%s', |
|
36 | - 'expiration' => '%s', |
|
37 | - 'trial_period' => '%s', |
|
38 | - 'status' => '%s', |
|
39 | - 'profile_id' => '%s', |
|
40 | - ); |
|
41 | - |
|
42 | - /* |
|
18 | + /** |
|
19 | + * A map of database fields to data types. |
|
20 | + * |
|
21 | + * @since 1.0.19 |
|
22 | + * @var array |
|
23 | + */ |
|
24 | + protected $database_fields_to_data_type = array( |
|
25 | + 'id' => '%d', |
|
26 | + 'customer_id' => '%d', |
|
27 | + 'frequency' => '%d', |
|
28 | + 'period' => '%s', |
|
29 | + 'initial_amount' => '%s', |
|
30 | + 'recurring_amount' => '%s', |
|
31 | + 'bill_times' => '%d', |
|
32 | + 'transaction_id' => '%s', |
|
33 | + 'parent_payment_id' => '%d', |
|
34 | + 'product_id' => '%d', |
|
35 | + 'created' => '%s', |
|
36 | + 'expiration' => '%s', |
|
37 | + 'trial_period' => '%s', |
|
38 | + 'status' => '%s', |
|
39 | + 'profile_id' => '%s', |
|
40 | + ); |
|
41 | + |
|
42 | + /* |
|
43 | 43 | |-------------------------------------------------------------------------- |
44 | 44 | | CRUD Methods |
45 | 45 | |-------------------------------------------------------------------------- |
46 | 46 | */ |
47 | 47 | |
48 | - /** |
|
49 | - * Method to create a new subscription in the database. |
|
50 | - * |
|
51 | - * @param WPInv_Subscription $subscription Subscription object. |
|
52 | - */ |
|
53 | - public function create( &$subscription ) { |
|
54 | - global $wpdb; |
|
55 | - |
|
56 | - $values = array(); |
|
57 | - $formats = array(); |
|
58 | - |
|
59 | - $fields = $this->database_fields_to_data_type; |
|
60 | - unset( $fields['id'] ); |
|
61 | - |
|
62 | - foreach ( $fields as $key => $format ) { |
|
63 | - $method = "get_$key"; |
|
64 | - $values[$key] = $subscription->$method( 'edit' ); |
|
65 | - $formats[] = $format; |
|
66 | - } |
|
67 | - |
|
68 | - $result = $wpdb->insert( $wpdb->prefix . 'wpinv_subscriptions', $values, $formats ); |
|
69 | - |
|
70 | - if ( $result ) { |
|
71 | - $subscription->set_id( $wpdb->insert_id ); |
|
72 | - $subscription->apply_changes(); |
|
73 | - $subscription->clear_cache(); |
|
74 | - update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id', $subscription->get_id() ); |
|
75 | - do_action( 'getpaid_new_subscription', $subscription ); |
|
76 | - return true; |
|
77 | - } |
|
78 | - |
|
79 | - return false; |
|
80 | - } |
|
81 | - |
|
82 | - /** |
|
83 | - * Method to read a subscription from the database. |
|
84 | - * |
|
85 | - * @param WPInv_Subscription $subscription Subscription object. |
|
86 | - * |
|
87 | - */ |
|
88 | - public function read( &$subscription ) { |
|
89 | - global $wpdb; |
|
90 | - |
|
91 | - $subscription->set_defaults(); |
|
92 | - |
|
93 | - if ( ! $subscription->get_id() ) { |
|
94 | - $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
95 | - $subscription->set_id( 0 ); |
|
96 | - return false; |
|
97 | - } |
|
98 | - |
|
99 | - // Maybe retrieve from the cache. |
|
100 | - $raw_subscription = wp_cache_get( $subscription->get_id(), 'getpaid_subscriptions' ); |
|
101 | - |
|
102 | - // If not found, retrieve from the db. |
|
103 | - if ( false === $raw_subscription ) { |
|
104 | - |
|
105 | - $raw_subscription = $wpdb->get_row( |
|
106 | - $wpdb->prepare( |
|
107 | - "SELECT * FROM {$wpdb->prefix}wpinv_subscriptions WHERE id = %d", |
|
108 | - $subscription->get_id() |
|
109 | - ) |
|
110 | - ); |
|
111 | - |
|
112 | - // Update the cache with our data |
|
113 | - wp_cache_set( $subscription->get_id(), $raw_subscription, 'getpaid_subscriptions' ); |
|
114 | - |
|
115 | - } |
|
116 | - |
|
117 | - if ( ! $raw_subscription ) { |
|
118 | - $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
119 | - return false; |
|
120 | - } |
|
121 | - |
|
122 | - foreach ( array_keys( $this->database_fields_to_data_type ) as $key ) { |
|
123 | - $method = "set_$key"; |
|
124 | - $subscription->$method( $raw_subscription->$key ); |
|
125 | - } |
|
126 | - |
|
127 | - $subscription->set_object_read( true ); |
|
128 | - do_action( 'getpaid_read_subscription', $subscription ); |
|
129 | - |
|
130 | - } |
|
131 | - |
|
132 | - /** |
|
133 | - * Method to update a subscription in the database. |
|
134 | - * |
|
135 | - * @param WPInv_Subscription $subscription Subscription object. |
|
136 | - */ |
|
137 | - public function update( &$subscription ) { |
|
138 | - global $wpdb; |
|
139 | - |
|
140 | - $changes = $subscription->get_changes(); |
|
141 | - $values = array(); |
|
142 | - $format = array(); |
|
143 | - |
|
144 | - foreach ( $this->database_fields_to_data_type as $key => $format ) { |
|
145 | - if ( array_key_exists( $key, $changes ) ) { |
|
146 | - $method = "get_$key"; |
|
147 | - $values[$key] = $subscription->$method( 'edit' ); |
|
148 | - $formats[] = $format; |
|
149 | - } |
|
150 | - } |
|
151 | - |
|
152 | - if ( empty( $values ) ) { |
|
153 | - return; |
|
154 | - } |
|
155 | - |
|
156 | - $wpdb->update( |
|
157 | - $wpdb->prefix . 'wpinv_subscriptions', |
|
158 | - $values, |
|
159 | - array( |
|
160 | - 'id' => $subscription->get_id(), |
|
161 | - ), |
|
162 | - $formats, |
|
163 | - '%d' |
|
164 | - ); |
|
165 | - |
|
166 | - // Apply the changes. |
|
167 | - $subscription->apply_changes(); |
|
168 | - |
|
169 | - // Delete cache. |
|
170 | - $subscription->clear_cache(); |
|
171 | - |
|
172 | - update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id', $subscription->get_profile_id() ); |
|
173 | - |
|
174 | - // Fire a hook. |
|
175 | - do_action( 'getpaid_update_subscription', $subscription ); |
|
176 | - |
|
177 | - } |
|
178 | - |
|
179 | - /** |
|
180 | - * Method to delete a subscription from the database. |
|
181 | - * |
|
182 | - * @param WPInv_Subscription $subscription |
|
183 | - */ |
|
184 | - public function delete( &$subscription ) { |
|
185 | - global $wpdb; |
|
186 | - |
|
187 | - $wpdb->query( |
|
188 | - $wpdb->prepare( |
|
189 | - "DELETE FROM {$wpdb->prefix}getpaid_subscriptions |
|
48 | + /** |
|
49 | + * Method to create a new subscription in the database. |
|
50 | + * |
|
51 | + * @param WPInv_Subscription $subscription Subscription object. |
|
52 | + */ |
|
53 | + public function create( &$subscription ) { |
|
54 | + global $wpdb; |
|
55 | + |
|
56 | + $values = array(); |
|
57 | + $formats = array(); |
|
58 | + |
|
59 | + $fields = $this->database_fields_to_data_type; |
|
60 | + unset( $fields['id'] ); |
|
61 | + |
|
62 | + foreach ( $fields as $key => $format ) { |
|
63 | + $method = "get_$key"; |
|
64 | + $values[$key] = $subscription->$method( 'edit' ); |
|
65 | + $formats[] = $format; |
|
66 | + } |
|
67 | + |
|
68 | + $result = $wpdb->insert( $wpdb->prefix . 'wpinv_subscriptions', $values, $formats ); |
|
69 | + |
|
70 | + if ( $result ) { |
|
71 | + $subscription->set_id( $wpdb->insert_id ); |
|
72 | + $subscription->apply_changes(); |
|
73 | + $subscription->clear_cache(); |
|
74 | + update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id', $subscription->get_id() ); |
|
75 | + do_action( 'getpaid_new_subscription', $subscription ); |
|
76 | + return true; |
|
77 | + } |
|
78 | + |
|
79 | + return false; |
|
80 | + } |
|
81 | + |
|
82 | + /** |
|
83 | + * Method to read a subscription from the database. |
|
84 | + * |
|
85 | + * @param WPInv_Subscription $subscription Subscription object. |
|
86 | + * |
|
87 | + */ |
|
88 | + public function read( &$subscription ) { |
|
89 | + global $wpdb; |
|
90 | + |
|
91 | + $subscription->set_defaults(); |
|
92 | + |
|
93 | + if ( ! $subscription->get_id() ) { |
|
94 | + $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
95 | + $subscription->set_id( 0 ); |
|
96 | + return false; |
|
97 | + } |
|
98 | + |
|
99 | + // Maybe retrieve from the cache. |
|
100 | + $raw_subscription = wp_cache_get( $subscription->get_id(), 'getpaid_subscriptions' ); |
|
101 | + |
|
102 | + // If not found, retrieve from the db. |
|
103 | + if ( false === $raw_subscription ) { |
|
104 | + |
|
105 | + $raw_subscription = $wpdb->get_row( |
|
106 | + $wpdb->prepare( |
|
107 | + "SELECT * FROM {$wpdb->prefix}wpinv_subscriptions WHERE id = %d", |
|
108 | + $subscription->get_id() |
|
109 | + ) |
|
110 | + ); |
|
111 | + |
|
112 | + // Update the cache with our data |
|
113 | + wp_cache_set( $subscription->get_id(), $raw_subscription, 'getpaid_subscriptions' ); |
|
114 | + |
|
115 | + } |
|
116 | + |
|
117 | + if ( ! $raw_subscription ) { |
|
118 | + $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
119 | + return false; |
|
120 | + } |
|
121 | + |
|
122 | + foreach ( array_keys( $this->database_fields_to_data_type ) as $key ) { |
|
123 | + $method = "set_$key"; |
|
124 | + $subscription->$method( $raw_subscription->$key ); |
|
125 | + } |
|
126 | + |
|
127 | + $subscription->set_object_read( true ); |
|
128 | + do_action( 'getpaid_read_subscription', $subscription ); |
|
129 | + |
|
130 | + } |
|
131 | + |
|
132 | + /** |
|
133 | + * Method to update a subscription in the database. |
|
134 | + * |
|
135 | + * @param WPInv_Subscription $subscription Subscription object. |
|
136 | + */ |
|
137 | + public function update( &$subscription ) { |
|
138 | + global $wpdb; |
|
139 | + |
|
140 | + $changes = $subscription->get_changes(); |
|
141 | + $values = array(); |
|
142 | + $format = array(); |
|
143 | + |
|
144 | + foreach ( $this->database_fields_to_data_type as $key => $format ) { |
|
145 | + if ( array_key_exists( $key, $changes ) ) { |
|
146 | + $method = "get_$key"; |
|
147 | + $values[$key] = $subscription->$method( 'edit' ); |
|
148 | + $formats[] = $format; |
|
149 | + } |
|
150 | + } |
|
151 | + |
|
152 | + if ( empty( $values ) ) { |
|
153 | + return; |
|
154 | + } |
|
155 | + |
|
156 | + $wpdb->update( |
|
157 | + $wpdb->prefix . 'wpinv_subscriptions', |
|
158 | + $values, |
|
159 | + array( |
|
160 | + 'id' => $subscription->get_id(), |
|
161 | + ), |
|
162 | + $formats, |
|
163 | + '%d' |
|
164 | + ); |
|
165 | + |
|
166 | + // Apply the changes. |
|
167 | + $subscription->apply_changes(); |
|
168 | + |
|
169 | + // Delete cache. |
|
170 | + $subscription->clear_cache(); |
|
171 | + |
|
172 | + update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id', $subscription->get_profile_id() ); |
|
173 | + |
|
174 | + // Fire a hook. |
|
175 | + do_action( 'getpaid_update_subscription', $subscription ); |
|
176 | + |
|
177 | + } |
|
178 | + |
|
179 | + /** |
|
180 | + * Method to delete a subscription from the database. |
|
181 | + * |
|
182 | + * @param WPInv_Subscription $subscription |
|
183 | + */ |
|
184 | + public function delete( &$subscription ) { |
|
185 | + global $wpdb; |
|
186 | + |
|
187 | + $wpdb->query( |
|
188 | + $wpdb->prepare( |
|
189 | + "DELETE FROM {$wpdb->prefix}getpaid_subscriptions |
|
190 | 190 | WHERE id = %d", |
191 | - $subscription->get_id() |
|
192 | - ) |
|
193 | - ); |
|
191 | + $subscription->get_id() |
|
192 | + ) |
|
193 | + ); |
|
194 | 194 | |
195 | - delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id' ); |
|
196 | - delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id' ); |
|
195 | + delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id' ); |
|
196 | + delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id' ); |
|
197 | 197 | |
198 | - // Delete cache. |
|
199 | - $subscription->clear_cache(); |
|
198 | + // Delete cache. |
|
199 | + $subscription->clear_cache(); |
|
200 | 200 | |
201 | - // Fire a hook. |
|
202 | - do_action( 'getpaid_delete_subscription', $subscription ); |
|
201 | + // Fire a hook. |
|
202 | + do_action( 'getpaid_delete_subscription', $subscription ); |
|
203 | 203 | |
204 | - $subscription->set_id( 0 ); |
|
205 | - } |
|
204 | + $subscription->set_id( 0 ); |
|
205 | + } |
|
206 | 206 | |
207 | - /* |
|
207 | + /* |
|
208 | 208 | |-------------------------------------------------------------------------- |
209 | 209 | | Additional Methods |
210 | 210 | |-------------------------------------------------------------------------- |
@@ -4,7 +4,7 @@ discard block |
||
4 | 4 | * GetPaid_Subscription_Data_Store class file. |
5 | 5 | * |
6 | 6 | */ |
7 | -if ( ! defined( 'ABSPATH' ) ) { |
|
7 | +if (!defined('ABSPATH')) { |
|
8 | 8 | exit; |
9 | 9 | } |
10 | 10 | |
@@ -50,29 +50,29 @@ discard block |
||
50 | 50 | * |
51 | 51 | * @param WPInv_Subscription $subscription Subscription object. |
52 | 52 | */ |
53 | - public function create( &$subscription ) { |
|
53 | + public function create(&$subscription) { |
|
54 | 54 | global $wpdb; |
55 | 55 | |
56 | 56 | $values = array(); |
57 | 57 | $formats = array(); |
58 | 58 | |
59 | 59 | $fields = $this->database_fields_to_data_type; |
60 | - unset( $fields['id'] ); |
|
60 | + unset($fields['id']); |
|
61 | 61 | |
62 | - foreach ( $fields as $key => $format ) { |
|
62 | + foreach ($fields as $key => $format) { |
|
63 | 63 | $method = "get_$key"; |
64 | - $values[$key] = $subscription->$method( 'edit' ); |
|
64 | + $values[$key] = $subscription->$method('edit'); |
|
65 | 65 | $formats[] = $format; |
66 | 66 | } |
67 | 67 | |
68 | - $result = $wpdb->insert( $wpdb->prefix . 'wpinv_subscriptions', $values, $formats ); |
|
68 | + $result = $wpdb->insert($wpdb->prefix . 'wpinv_subscriptions', $values, $formats); |
|
69 | 69 | |
70 | - if ( $result ) { |
|
71 | - $subscription->set_id( $wpdb->insert_id ); |
|
70 | + if ($result) { |
|
71 | + $subscription->set_id($wpdb->insert_id); |
|
72 | 72 | $subscription->apply_changes(); |
73 | 73 | $subscription->clear_cache(); |
74 | - update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id', $subscription->get_id() ); |
|
75 | - do_action( 'getpaid_new_subscription', $subscription ); |
|
74 | + update_post_meta($subscription->get_parent_invoice_id(), '_wpinv_subscription_id', $subscription->get_id()); |
|
75 | + do_action('getpaid_new_subscription', $subscription); |
|
76 | 76 | return true; |
77 | 77 | } |
78 | 78 | |
@@ -85,22 +85,22 @@ discard block |
||
85 | 85 | * @param WPInv_Subscription $subscription Subscription object. |
86 | 86 | * |
87 | 87 | */ |
88 | - public function read( &$subscription ) { |
|
88 | + public function read(&$subscription) { |
|
89 | 89 | global $wpdb; |
90 | 90 | |
91 | 91 | $subscription->set_defaults(); |
92 | 92 | |
93 | - if ( ! $subscription->get_id() ) { |
|
94 | - $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
95 | - $subscription->set_id( 0 ); |
|
93 | + if (!$subscription->get_id()) { |
|
94 | + $subscription->last_error = __('Invalid subscription ID.', 'invoicing'); |
|
95 | + $subscription->set_id(0); |
|
96 | 96 | return false; |
97 | 97 | } |
98 | 98 | |
99 | 99 | // Maybe retrieve from the cache. |
100 | - $raw_subscription = wp_cache_get( $subscription->get_id(), 'getpaid_subscriptions' ); |
|
100 | + $raw_subscription = wp_cache_get($subscription->get_id(), 'getpaid_subscriptions'); |
|
101 | 101 | |
102 | 102 | // If not found, retrieve from the db. |
103 | - if ( false === $raw_subscription ) { |
|
103 | + if (false === $raw_subscription) { |
|
104 | 104 | |
105 | 105 | $raw_subscription = $wpdb->get_row( |
106 | 106 | $wpdb->prepare( |
@@ -110,22 +110,22 @@ discard block |
||
110 | 110 | ); |
111 | 111 | |
112 | 112 | // Update the cache with our data |
113 | - wp_cache_set( $subscription->get_id(), $raw_subscription, 'getpaid_subscriptions' ); |
|
113 | + wp_cache_set($subscription->get_id(), $raw_subscription, 'getpaid_subscriptions'); |
|
114 | 114 | |
115 | 115 | } |
116 | 116 | |
117 | - if ( ! $raw_subscription ) { |
|
118 | - $subscription->last_error = __( 'Invalid subscription ID.', 'invoicing' ); |
|
117 | + if (!$raw_subscription) { |
|
118 | + $subscription->last_error = __('Invalid subscription ID.', 'invoicing'); |
|
119 | 119 | return false; |
120 | 120 | } |
121 | 121 | |
122 | - foreach ( array_keys( $this->database_fields_to_data_type ) as $key ) { |
|
123 | - $method = "set_$key"; |
|
124 | - $subscription->$method( $raw_subscription->$key ); |
|
122 | + foreach (array_keys($this->database_fields_to_data_type) as $key) { |
|
123 | + $method = "set_$key"; |
|
124 | + $subscription->$method($raw_subscription->$key); |
|
125 | 125 | } |
126 | 126 | |
127 | - $subscription->set_object_read( true ); |
|
128 | - do_action( 'getpaid_read_subscription', $subscription ); |
|
127 | + $subscription->set_object_read(true); |
|
128 | + do_action('getpaid_read_subscription', $subscription); |
|
129 | 129 | |
130 | 130 | } |
131 | 131 | |
@@ -134,22 +134,22 @@ discard block |
||
134 | 134 | * |
135 | 135 | * @param WPInv_Subscription $subscription Subscription object. |
136 | 136 | */ |
137 | - public function update( &$subscription ) { |
|
137 | + public function update(&$subscription) { |
|
138 | 138 | global $wpdb; |
139 | 139 | |
140 | 140 | $changes = $subscription->get_changes(); |
141 | 141 | $values = array(); |
142 | 142 | $format = array(); |
143 | 143 | |
144 | - foreach ( $this->database_fields_to_data_type as $key => $format ) { |
|
145 | - if ( array_key_exists( $key, $changes ) ) { |
|
144 | + foreach ($this->database_fields_to_data_type as $key => $format) { |
|
145 | + if (array_key_exists($key, $changes)) { |
|
146 | 146 | $method = "get_$key"; |
147 | - $values[$key] = $subscription->$method( 'edit' ); |
|
147 | + $values[$key] = $subscription->$method('edit'); |
|
148 | 148 | $formats[] = $format; |
149 | 149 | } |
150 | 150 | } |
151 | 151 | |
152 | - if ( empty( $values ) ) { |
|
152 | + if (empty($values)) { |
|
153 | 153 | return; |
154 | 154 | } |
155 | 155 | |
@@ -169,10 +169,10 @@ discard block |
||
169 | 169 | // Delete cache. |
170 | 170 | $subscription->clear_cache(); |
171 | 171 | |
172 | - update_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id', $subscription->get_profile_id() ); |
|
172 | + update_post_meta($subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id', $subscription->get_profile_id()); |
|
173 | 173 | |
174 | 174 | // Fire a hook. |
175 | - do_action( 'getpaid_update_subscription', $subscription ); |
|
175 | + do_action('getpaid_update_subscription', $subscription); |
|
176 | 176 | |
177 | 177 | } |
178 | 178 | |
@@ -181,7 +181,7 @@ discard block |
||
181 | 181 | * |
182 | 182 | * @param WPInv_Subscription $subscription |
183 | 183 | */ |
184 | - public function delete( &$subscription ) { |
|
184 | + public function delete(&$subscription) { |
|
185 | 185 | global $wpdb; |
186 | 186 | |
187 | 187 | $wpdb->query( |
@@ -192,16 +192,16 @@ discard block |
||
192 | 192 | ) |
193 | 193 | ); |
194 | 194 | |
195 | - delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id' ); |
|
196 | - delete_post_meta( $subscription->get_parent_invoice_id(), '_wpinv_subscription_id' ); |
|
195 | + delete_post_meta($subscription->get_parent_invoice_id(), '_wpinv_subscr_profile_id'); |
|
196 | + delete_post_meta($subscription->get_parent_invoice_id(), '_wpinv_subscription_id'); |
|
197 | 197 | |
198 | 198 | // Delete cache. |
199 | 199 | $subscription->clear_cache(); |
200 | 200 | |
201 | 201 | // Fire a hook. |
202 | - do_action( 'getpaid_delete_subscription', $subscription ); |
|
202 | + do_action('getpaid_delete_subscription', $subscription); |
|
203 | 203 | |
204 | - $subscription->set_id( 0 ); |
|
204 | + $subscription->set_id(0); |
|
205 | 205 | } |
206 | 206 | |
207 | 207 | /* |
@@ -17,476 +17,476 @@ |
||
17 | 17 | */ |
18 | 18 | class GetPaid_REST_CRUD_Controller extends GetPaid_REST_Controller { |
19 | 19 | |
20 | - /** |
|
21 | - * Contains this controller's class name. |
|
22 | - * |
|
23 | - * @var string |
|
24 | - */ |
|
25 | - public $crud_class; |
|
26 | - |
|
27 | - /** |
|
28 | - * Contains the current CRUD object. |
|
29 | - * |
|
30 | - * @var GetPaid_Data |
|
31 | - */ |
|
32 | - protected $data_object; |
|
33 | - |
|
34 | - /** |
|
35 | - * Registers the routes for the objects of the controller. |
|
36 | - * |
|
37 | - * @since 1.0.19 |
|
38 | - * |
|
39 | - * @see register_rest_route() |
|
40 | - */ |
|
41 | - public function register_namespace_routes( $namespace ) { |
|
42 | - |
|
43 | - register_rest_route( |
|
44 | - $namespace, |
|
45 | - '/' . $this->rest_base, |
|
46 | - array( |
|
47 | - array( |
|
48 | - 'methods' => WP_REST_Server::READABLE, |
|
49 | - 'callback' => array( $this, 'get_items' ), |
|
50 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
51 | - 'args' => $this->get_collection_params(), |
|
52 | - ), |
|
53 | - array( |
|
54 | - 'methods' => WP_REST_Server::CREATABLE, |
|
55 | - 'callback' => array( $this, 'create_item' ), |
|
56 | - 'permission_callback' => array( $this, 'create_item_permissions_check' ), |
|
57 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), |
|
58 | - ), |
|
59 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
60 | - ) |
|
61 | - ); |
|
62 | - |
|
63 | - $get_item_args = array( |
|
64 | - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), |
|
65 | - ); |
|
66 | - |
|
67 | - register_rest_route( |
|
68 | - $namespace, |
|
69 | - '/' . $this->rest_base . '/(?P<id>[\d]+)', |
|
70 | - array( |
|
71 | - 'args' => array( |
|
72 | - 'id' => array( |
|
73 | - 'description' => __( 'Unique identifier for the object.', 'invoicing' ), |
|
74 | - 'type' => 'integer', |
|
75 | - ), |
|
76 | - ), |
|
77 | - array( |
|
78 | - 'methods' => WP_REST_Server::READABLE, |
|
79 | - 'callback' => array( $this, 'get_item' ), |
|
80 | - 'permission_callback' => array( $this, 'get_item_permissions_check' ), |
|
81 | - 'args' => $get_item_args, |
|
82 | - ), |
|
83 | - array( |
|
84 | - 'methods' => WP_REST_Server::EDITABLE, |
|
85 | - 'callback' => array( $this, 'update_item' ), |
|
86 | - 'permission_callback' => array( $this, 'update_item_permissions_check' ), |
|
87 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
88 | - ), |
|
89 | - array( |
|
90 | - 'methods' => WP_REST_Server::DELETABLE, |
|
91 | - 'callback' => array( $this, 'delete_item' ), |
|
92 | - 'permission_callback' => array( $this, 'delete_item_permissions_check' ), |
|
93 | - 'args' => array( |
|
94 | - 'force' => array( |
|
95 | - 'type' => 'boolean', |
|
96 | - 'default' => false, |
|
97 | - 'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ), |
|
98 | - ), |
|
99 | - ), |
|
100 | - ), |
|
101 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
102 | - ) |
|
103 | - ); |
|
104 | - |
|
105 | - } |
|
106 | - |
|
107 | - /** |
|
108 | - * Saves a single object. |
|
109 | - * |
|
110 | - * @param GetPaid_Data $object Object to save. |
|
111 | - * @return WP_Error|GetPaid_Data |
|
112 | - */ |
|
113 | - protected function save_object( $object ) { |
|
114 | - $object->save(); |
|
115 | - |
|
116 | - if ( ! empty( $object->last_error ) ) { |
|
117 | - return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) ); |
|
118 | - } |
|
119 | - |
|
120 | - return new $this->crud_class( $object->get_id() ); |
|
121 | - } |
|
122 | - |
|
123 | - /** |
|
124 | - * Retrieves a single object. |
|
125 | - * |
|
126 | - * @since 1.0.13 |
|
127 | - * |
|
128 | - * @param int|WP_Post $object_id Supplied ID. |
|
129 | - * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise. |
|
130 | - */ |
|
131 | - protected function get_object( $object_id ) { |
|
132 | - |
|
133 | - // Do we have an object? |
|
134 | - if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
135 | - return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
136 | - } |
|
137 | - |
|
138 | - // Fetch the object. |
|
139 | - $object = new $this->crud_class( $object_id ); |
|
140 | - if ( ! empty( $object->last_error ) ) { |
|
141 | - return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) ); |
|
142 | - } |
|
143 | - |
|
144 | - $this->data_object = $object; |
|
145 | - return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) ); |
|
146 | - |
|
147 | - } |
|
148 | - |
|
149 | - /** |
|
150 | - * Get a single object. |
|
151 | - * |
|
152 | - * @param WP_REST_Request $request Full details about the request. |
|
153 | - * @return WP_Error|WP_REST_Response |
|
154 | - */ |
|
155 | - public function get_item( $request ) { |
|
156 | - |
|
157 | - // Fetch the item. |
|
158 | - $object = $this->get_object( $request['id'] ); |
|
159 | - |
|
160 | - if ( is_wp_error( $object ) ) { |
|
161 | - return $object; |
|
162 | - } |
|
163 | - |
|
164 | - // Generate a response. |
|
165 | - return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) ); |
|
166 | - |
|
167 | - } |
|
168 | - |
|
169 | - /** |
|
170 | - * Create a single object. |
|
171 | - * |
|
172 | - * @param WP_REST_Request $request Full details about the request. |
|
173 | - * @return WP_Error|WP_REST_Response |
|
174 | - */ |
|
175 | - public function create_item( $request ) { |
|
176 | - |
|
177 | - // Can not create an existing item. |
|
178 | - if ( ! empty( $request['id'] ) ) { |
|
179 | - /* translators: %s: post type */ |
|
180 | - return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) ); |
|
181 | - } |
|
182 | - |
|
183 | - // Generate a GetPaid_Data object from the request. |
|
184 | - $object = $this->prepare_item_for_database( $request ); |
|
185 | - if ( is_wp_error( $object ) ) { |
|
186 | - return $object; |
|
187 | - } |
|
188 | - |
|
189 | - // Save the object. |
|
190 | - $object = $this->save_object( $object ); |
|
191 | - if ( is_wp_error( $object ) ) { |
|
192 | - return $object; |
|
193 | - } |
|
194 | - |
|
195 | - // Save special fields. |
|
196 | - $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
197 | - if ( is_wp_error( $save_special ) ) { |
|
198 | - $object->delete( true ); |
|
199 | - return $save_special; |
|
200 | - } |
|
201 | - |
|
202 | - $request->set_param( 'context', 'edit' ); |
|
203 | - $response = $this->prepare_item_for_response( $object, $request ); |
|
204 | - $response = rest_ensure_response( $response ); |
|
205 | - $response->set_status( 201 ); |
|
206 | - $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) ); |
|
207 | - |
|
208 | - return $response; |
|
209 | - } |
|
210 | - |
|
211 | - /** |
|
212 | - * Update a single object. |
|
213 | - * |
|
214 | - * @param WP_REST_Request $request Full details about the request. |
|
215 | - * @return WP_Error|WP_REST_Response |
|
216 | - */ |
|
217 | - public function update_item( $request ) { |
|
218 | - |
|
219 | - // Fetch the item. |
|
220 | - $object = $this->get_object( $request['id'] ); |
|
221 | - if ( is_wp_error( $object ) ) { |
|
222 | - return $object; |
|
223 | - } |
|
224 | - |
|
225 | - // Prepare the item for saving. |
|
226 | - $object = $this->prepare_item_for_database( $request ); |
|
227 | - if ( is_wp_error( $object ) ) { |
|
228 | - return $object; |
|
229 | - } |
|
230 | - |
|
231 | - // Save the item. |
|
232 | - $object = $this->save_object( $object ); |
|
233 | - if ( is_wp_error( $object ) ) { |
|
234 | - return $object; |
|
235 | - } |
|
236 | - |
|
237 | - // Save special fields (those added via hooks). |
|
238 | - $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
239 | - if ( is_wp_error( $save_special ) ) { |
|
240 | - return $save_special; |
|
241 | - } |
|
242 | - |
|
243 | - $request->set_param( 'context', 'edit' ); |
|
244 | - $response = $this->prepare_item_for_response( $object, $request ); |
|
245 | - return rest_ensure_response( $response ); |
|
246 | - } |
|
247 | - |
|
248 | - /** |
|
249 | - * Prepare links for the request. |
|
250 | - * |
|
251 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
252 | - * @return array Links for the given object. |
|
253 | - */ |
|
254 | - protected function prepare_links( $object ) { |
|
255 | - |
|
256 | - $links = array( |
|
257 | - 'self' => array( |
|
258 | - 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ), |
|
259 | - ), |
|
260 | - 'collection' => array( |
|
261 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
262 | - ), |
|
263 | - ); |
|
264 | - |
|
265 | - return $links; |
|
266 | - } |
|
267 | - |
|
268 | - /** |
|
269 | - * Get the query params for collections of attachments. |
|
270 | - * |
|
271 | - * @return array |
|
272 | - */ |
|
273 | - public function get_collection_params() { |
|
274 | - $params = parent::get_collection_params(); |
|
275 | - $params['context']['default'] = 'view'; |
|
276 | - return $params; |
|
277 | - } |
|
278 | - |
|
279 | - /** |
|
280 | - * Only return writable props from schema. |
|
281 | - * |
|
282 | - * @param array $schema Schema. |
|
283 | - * @return bool |
|
284 | - */ |
|
285 | - public function filter_writable_props( $schema ) { |
|
286 | - return empty( $schema['readonly'] ); |
|
287 | - } |
|
288 | - |
|
289 | - /** |
|
290 | - * Prepare a single object for create or update. |
|
291 | - * |
|
292 | - * @since 1.0.19 |
|
293 | - * @param WP_REST_Request $request Request object. |
|
294 | - * @return GetPaid_Data|WP_Error Data object or WP_Error. |
|
295 | - */ |
|
296 | - protected function prepare_item_for_database( $request ) { |
|
297 | - |
|
298 | - // Do we have an object? |
|
299 | - if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
300 | - return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
301 | - } |
|
302 | - |
|
303 | - // Prepare the object. |
|
304 | - $id = isset( $request['id'] ) ? absint( $request['id'] ) : 0; |
|
305 | - $object = new $this->crud_class( $id ); |
|
306 | - |
|
307 | - // Abort if an error exists. |
|
308 | - if ( ! empty( $object->last_error ) ) { |
|
309 | - return new WP_Error( 'invalid_item', $object->last_error ); |
|
310 | - } |
|
311 | - |
|
312 | - $schema = $this->get_item_schema(); |
|
313 | - $data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) ); |
|
314 | - |
|
315 | - // Handle all writable props. |
|
316 | - foreach ( $data_keys as $key ) { |
|
317 | - $value = $request[ $key ]; |
|
318 | - |
|
319 | - if ( ! is_null( $value ) ) { |
|
320 | - switch ( $key ) { |
|
321 | - |
|
322 | - case 'meta_data': |
|
323 | - if ( is_array( $value ) ) { |
|
324 | - foreach ( $value as $meta ) { |
|
325 | - $object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' ); |
|
326 | - } |
|
327 | - } |
|
328 | - break; |
|
329 | - |
|
330 | - default: |
|
331 | - if ( is_callable( array( $object, "set_{$key}" ) ) ) { |
|
332 | - $object->{"set_{$key}"}( $value ); |
|
333 | - } |
|
334 | - break; |
|
335 | - } |
|
336 | - } |
|
337 | - |
|
338 | - } |
|
339 | - |
|
340 | - // Filters an object before it is inserted via the REST API.. |
|
341 | - return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request ); |
|
342 | - } |
|
343 | - |
|
344 | - /** |
|
345 | - * Retrieves data from a GetPaid class. |
|
346 | - * |
|
347 | - * @since 1.0.19 |
|
348 | - * @param GetPaid_Meta_Data[] $meta_data meta data objects. |
|
349 | - * @return array |
|
350 | - */ |
|
351 | - protected function prepare_object_meta_data( $meta_data ) { |
|
352 | - $meta = array(); |
|
353 | - |
|
354 | - foreach( $meta_data as $object ) { |
|
355 | - $meta[] = $object->get_data(); |
|
356 | - } |
|
357 | - |
|
358 | - return $meta; |
|
359 | - } |
|
360 | - |
|
361 | - /** |
|
362 | - * Retrieves invoice items. |
|
363 | - * |
|
364 | - * @since 1.0.19 |
|
365 | - * @param WPInv_Invoice $invoice Invoice items. |
|
366 | - * @param array $fields Fields to include. |
|
367 | - * @return array |
|
368 | - */ |
|
369 | - protected function prepare_invoice_items( $invoice ) { |
|
370 | - $items = array(); |
|
371 | - |
|
372 | - foreach( $invoice->get_items() as $item ) { |
|
373 | - |
|
374 | - $item_data = $item->prepare_data_for_saving(); |
|
375 | - |
|
376 | - if ( 'amount' == $invoice->get_template() ) { |
|
377 | - $item_data['quantity'] = 1; |
|
378 | - } |
|
379 | - |
|
380 | - $items[] = $item_data; |
|
381 | - } |
|
382 | - |
|
383 | - return $items; |
|
384 | - } |
|
385 | - |
|
386 | - /** |
|
387 | - * Retrieves data from a GetPaid class. |
|
388 | - * |
|
389 | - * @since 1.0.19 |
|
390 | - * @param GetPaid_Data $object Data object. |
|
391 | - * @param array $fields Fields to include. |
|
392 | - * @param string $context either view or edit. |
|
393 | - * @return array |
|
394 | - */ |
|
395 | - protected function prepare_object_data( $object, $fields, $context = 'view' ) { |
|
396 | - |
|
397 | - $data = array(); |
|
398 | - |
|
399 | - // Handle all writable props. |
|
400 | - foreach ( array_keys( $this->get_schema_properties() ) as $key ) { |
|
401 | - |
|
402 | - // Abort if it is not included. |
|
403 | - if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) { |
|
404 | - continue; |
|
405 | - } |
|
406 | - |
|
407 | - // Or this current object does not support the field. |
|
408 | - if ( ! $this->object_supports_field( $object, $key ) ) { |
|
409 | - continue; |
|
410 | - } |
|
411 | - |
|
412 | - // Handle meta data. |
|
413 | - if ( $key == 'meta_data' ) { |
|
414 | - $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() ); |
|
415 | - continue; |
|
416 | - } |
|
417 | - |
|
418 | - // Handle items. |
|
419 | - if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) { |
|
420 | - $data['items'] = $this->prepare_invoice_items( $object ); |
|
421 | - continue; |
|
422 | - } |
|
423 | - |
|
424 | - // Booleans. |
|
425 | - if ( is_callable( array( $object, $key ) ) ) { |
|
426 | - $data[ $key ] = $object->$key( $context ); |
|
427 | - continue; |
|
428 | - } |
|
429 | - |
|
430 | - // Get object value. |
|
431 | - if ( is_callable( array( $object, "get_{$key}" ) ) ) { |
|
432 | - $value = $object->{"get_{$key}"}( $context ); |
|
433 | - |
|
434 | - // If the value is an instance of GetPaid_Data... |
|
435 | - if ( is_a( $value, 'GetPaid_Data' ) ) { |
|
436 | - $value = $value->get_data( $context ); |
|
437 | - } |
|
438 | - |
|
439 | - // For objects, retrieves it's properties. |
|
440 | - $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value ; |
|
441 | - continue; |
|
442 | - } |
|
443 | - |
|
444 | - } |
|
445 | - |
|
446 | - return $data; |
|
447 | - } |
|
448 | - |
|
449 | - /** |
|
450 | - * Checks if a key should be included in a response. |
|
451 | - * |
|
452 | - * @since 1.0.19 |
|
453 | - * @param GetPaid_Data $object Data object. |
|
454 | - * @param string $field_key The key to check for. |
|
455 | - * @return bool |
|
456 | - */ |
|
457 | - public function object_supports_field( $object, $field_key ) { |
|
458 | - return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key ); |
|
459 | - } |
|
460 | - |
|
461 | - /** |
|
462 | - * Prepare a single object output for response. |
|
463 | - * |
|
464 | - * @since 1.0.19 |
|
465 | - * @param GetPaid_Data $object Data object. |
|
466 | - * @param WP_REST_Request $request Request object. |
|
467 | - * @return WP_REST_Response |
|
468 | - */ |
|
469 | - public function prepare_item_for_response( $object, $request ) { |
|
470 | - remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 ); |
|
471 | - |
|
472 | - $this->data_object = $object; |
|
473 | - |
|
474 | - // Fetch the fields to include in this response. |
|
475 | - $fields = $this->get_fields_for_response( $request ); |
|
476 | - |
|
477 | - // Prepare object data. |
|
478 | - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
479 | - $data = $this->prepare_object_data( $object, $fields, $context ); |
|
480 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
481 | - $data = $this->limit_object_to_requested_fields( $data, $fields ); |
|
482 | - $data = $this->filter_response_by_context( $data, $context ); |
|
483 | - |
|
484 | - // Prepare the response. |
|
485 | - $response = rest_ensure_response( $data ); |
|
486 | - $response->add_links( $this->prepare_links( $object, $request ) ); |
|
487 | - |
|
488 | - // Filter item response. |
|
489 | - return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request ); |
|
490 | - } |
|
20 | + /** |
|
21 | + * Contains this controller's class name. |
|
22 | + * |
|
23 | + * @var string |
|
24 | + */ |
|
25 | + public $crud_class; |
|
26 | + |
|
27 | + /** |
|
28 | + * Contains the current CRUD object. |
|
29 | + * |
|
30 | + * @var GetPaid_Data |
|
31 | + */ |
|
32 | + protected $data_object; |
|
33 | + |
|
34 | + /** |
|
35 | + * Registers the routes for the objects of the controller. |
|
36 | + * |
|
37 | + * @since 1.0.19 |
|
38 | + * |
|
39 | + * @see register_rest_route() |
|
40 | + */ |
|
41 | + public function register_namespace_routes( $namespace ) { |
|
42 | + |
|
43 | + register_rest_route( |
|
44 | + $namespace, |
|
45 | + '/' . $this->rest_base, |
|
46 | + array( |
|
47 | + array( |
|
48 | + 'methods' => WP_REST_Server::READABLE, |
|
49 | + 'callback' => array( $this, 'get_items' ), |
|
50 | + 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
51 | + 'args' => $this->get_collection_params(), |
|
52 | + ), |
|
53 | + array( |
|
54 | + 'methods' => WP_REST_Server::CREATABLE, |
|
55 | + 'callback' => array( $this, 'create_item' ), |
|
56 | + 'permission_callback' => array( $this, 'create_item_permissions_check' ), |
|
57 | + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), |
|
58 | + ), |
|
59 | + 'schema' => array( $this, 'get_public_item_schema' ), |
|
60 | + ) |
|
61 | + ); |
|
62 | + |
|
63 | + $get_item_args = array( |
|
64 | + 'context' => $this->get_context_param( array( 'default' => 'view' ) ), |
|
65 | + ); |
|
66 | + |
|
67 | + register_rest_route( |
|
68 | + $namespace, |
|
69 | + '/' . $this->rest_base . '/(?P<id>[\d]+)', |
|
70 | + array( |
|
71 | + 'args' => array( |
|
72 | + 'id' => array( |
|
73 | + 'description' => __( 'Unique identifier for the object.', 'invoicing' ), |
|
74 | + 'type' => 'integer', |
|
75 | + ), |
|
76 | + ), |
|
77 | + array( |
|
78 | + 'methods' => WP_REST_Server::READABLE, |
|
79 | + 'callback' => array( $this, 'get_item' ), |
|
80 | + 'permission_callback' => array( $this, 'get_item_permissions_check' ), |
|
81 | + 'args' => $get_item_args, |
|
82 | + ), |
|
83 | + array( |
|
84 | + 'methods' => WP_REST_Server::EDITABLE, |
|
85 | + 'callback' => array( $this, 'update_item' ), |
|
86 | + 'permission_callback' => array( $this, 'update_item_permissions_check' ), |
|
87 | + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
88 | + ), |
|
89 | + array( |
|
90 | + 'methods' => WP_REST_Server::DELETABLE, |
|
91 | + 'callback' => array( $this, 'delete_item' ), |
|
92 | + 'permission_callback' => array( $this, 'delete_item_permissions_check' ), |
|
93 | + 'args' => array( |
|
94 | + 'force' => array( |
|
95 | + 'type' => 'boolean', |
|
96 | + 'default' => false, |
|
97 | + 'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ), |
|
98 | + ), |
|
99 | + ), |
|
100 | + ), |
|
101 | + 'schema' => array( $this, 'get_public_item_schema' ), |
|
102 | + ) |
|
103 | + ); |
|
104 | + |
|
105 | + } |
|
106 | + |
|
107 | + /** |
|
108 | + * Saves a single object. |
|
109 | + * |
|
110 | + * @param GetPaid_Data $object Object to save. |
|
111 | + * @return WP_Error|GetPaid_Data |
|
112 | + */ |
|
113 | + protected function save_object( $object ) { |
|
114 | + $object->save(); |
|
115 | + |
|
116 | + if ( ! empty( $object->last_error ) ) { |
|
117 | + return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) ); |
|
118 | + } |
|
119 | + |
|
120 | + return new $this->crud_class( $object->get_id() ); |
|
121 | + } |
|
122 | + |
|
123 | + /** |
|
124 | + * Retrieves a single object. |
|
125 | + * |
|
126 | + * @since 1.0.13 |
|
127 | + * |
|
128 | + * @param int|WP_Post $object_id Supplied ID. |
|
129 | + * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise. |
|
130 | + */ |
|
131 | + protected function get_object( $object_id ) { |
|
132 | + |
|
133 | + // Do we have an object? |
|
134 | + if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
135 | + return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
136 | + } |
|
137 | + |
|
138 | + // Fetch the object. |
|
139 | + $object = new $this->crud_class( $object_id ); |
|
140 | + if ( ! empty( $object->last_error ) ) { |
|
141 | + return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) ); |
|
142 | + } |
|
143 | + |
|
144 | + $this->data_object = $object; |
|
145 | + return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) ); |
|
146 | + |
|
147 | + } |
|
148 | + |
|
149 | + /** |
|
150 | + * Get a single object. |
|
151 | + * |
|
152 | + * @param WP_REST_Request $request Full details about the request. |
|
153 | + * @return WP_Error|WP_REST_Response |
|
154 | + */ |
|
155 | + public function get_item( $request ) { |
|
156 | + |
|
157 | + // Fetch the item. |
|
158 | + $object = $this->get_object( $request['id'] ); |
|
159 | + |
|
160 | + if ( is_wp_error( $object ) ) { |
|
161 | + return $object; |
|
162 | + } |
|
163 | + |
|
164 | + // Generate a response. |
|
165 | + return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) ); |
|
166 | + |
|
167 | + } |
|
168 | + |
|
169 | + /** |
|
170 | + * Create a single object. |
|
171 | + * |
|
172 | + * @param WP_REST_Request $request Full details about the request. |
|
173 | + * @return WP_Error|WP_REST_Response |
|
174 | + */ |
|
175 | + public function create_item( $request ) { |
|
176 | + |
|
177 | + // Can not create an existing item. |
|
178 | + if ( ! empty( $request['id'] ) ) { |
|
179 | + /* translators: %s: post type */ |
|
180 | + return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) ); |
|
181 | + } |
|
182 | + |
|
183 | + // Generate a GetPaid_Data object from the request. |
|
184 | + $object = $this->prepare_item_for_database( $request ); |
|
185 | + if ( is_wp_error( $object ) ) { |
|
186 | + return $object; |
|
187 | + } |
|
188 | + |
|
189 | + // Save the object. |
|
190 | + $object = $this->save_object( $object ); |
|
191 | + if ( is_wp_error( $object ) ) { |
|
192 | + return $object; |
|
193 | + } |
|
194 | + |
|
195 | + // Save special fields. |
|
196 | + $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
197 | + if ( is_wp_error( $save_special ) ) { |
|
198 | + $object->delete( true ); |
|
199 | + return $save_special; |
|
200 | + } |
|
201 | + |
|
202 | + $request->set_param( 'context', 'edit' ); |
|
203 | + $response = $this->prepare_item_for_response( $object, $request ); |
|
204 | + $response = rest_ensure_response( $response ); |
|
205 | + $response->set_status( 201 ); |
|
206 | + $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) ); |
|
207 | + |
|
208 | + return $response; |
|
209 | + } |
|
210 | + |
|
211 | + /** |
|
212 | + * Update a single object. |
|
213 | + * |
|
214 | + * @param WP_REST_Request $request Full details about the request. |
|
215 | + * @return WP_Error|WP_REST_Response |
|
216 | + */ |
|
217 | + public function update_item( $request ) { |
|
218 | + |
|
219 | + // Fetch the item. |
|
220 | + $object = $this->get_object( $request['id'] ); |
|
221 | + if ( is_wp_error( $object ) ) { |
|
222 | + return $object; |
|
223 | + } |
|
224 | + |
|
225 | + // Prepare the item for saving. |
|
226 | + $object = $this->prepare_item_for_database( $request ); |
|
227 | + if ( is_wp_error( $object ) ) { |
|
228 | + return $object; |
|
229 | + } |
|
230 | + |
|
231 | + // Save the item. |
|
232 | + $object = $this->save_object( $object ); |
|
233 | + if ( is_wp_error( $object ) ) { |
|
234 | + return $object; |
|
235 | + } |
|
236 | + |
|
237 | + // Save special fields (those added via hooks). |
|
238 | + $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
239 | + if ( is_wp_error( $save_special ) ) { |
|
240 | + return $save_special; |
|
241 | + } |
|
242 | + |
|
243 | + $request->set_param( 'context', 'edit' ); |
|
244 | + $response = $this->prepare_item_for_response( $object, $request ); |
|
245 | + return rest_ensure_response( $response ); |
|
246 | + } |
|
247 | + |
|
248 | + /** |
|
249 | + * Prepare links for the request. |
|
250 | + * |
|
251 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
252 | + * @return array Links for the given object. |
|
253 | + */ |
|
254 | + protected function prepare_links( $object ) { |
|
255 | + |
|
256 | + $links = array( |
|
257 | + 'self' => array( |
|
258 | + 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ), |
|
259 | + ), |
|
260 | + 'collection' => array( |
|
261 | + 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
262 | + ), |
|
263 | + ); |
|
264 | + |
|
265 | + return $links; |
|
266 | + } |
|
267 | + |
|
268 | + /** |
|
269 | + * Get the query params for collections of attachments. |
|
270 | + * |
|
271 | + * @return array |
|
272 | + */ |
|
273 | + public function get_collection_params() { |
|
274 | + $params = parent::get_collection_params(); |
|
275 | + $params['context']['default'] = 'view'; |
|
276 | + return $params; |
|
277 | + } |
|
278 | + |
|
279 | + /** |
|
280 | + * Only return writable props from schema. |
|
281 | + * |
|
282 | + * @param array $schema Schema. |
|
283 | + * @return bool |
|
284 | + */ |
|
285 | + public function filter_writable_props( $schema ) { |
|
286 | + return empty( $schema['readonly'] ); |
|
287 | + } |
|
288 | + |
|
289 | + /** |
|
290 | + * Prepare a single object for create or update. |
|
291 | + * |
|
292 | + * @since 1.0.19 |
|
293 | + * @param WP_REST_Request $request Request object. |
|
294 | + * @return GetPaid_Data|WP_Error Data object or WP_Error. |
|
295 | + */ |
|
296 | + protected function prepare_item_for_database( $request ) { |
|
297 | + |
|
298 | + // Do we have an object? |
|
299 | + if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
300 | + return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
301 | + } |
|
302 | + |
|
303 | + // Prepare the object. |
|
304 | + $id = isset( $request['id'] ) ? absint( $request['id'] ) : 0; |
|
305 | + $object = new $this->crud_class( $id ); |
|
306 | + |
|
307 | + // Abort if an error exists. |
|
308 | + if ( ! empty( $object->last_error ) ) { |
|
309 | + return new WP_Error( 'invalid_item', $object->last_error ); |
|
310 | + } |
|
311 | + |
|
312 | + $schema = $this->get_item_schema(); |
|
313 | + $data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) ); |
|
314 | + |
|
315 | + // Handle all writable props. |
|
316 | + foreach ( $data_keys as $key ) { |
|
317 | + $value = $request[ $key ]; |
|
318 | + |
|
319 | + if ( ! is_null( $value ) ) { |
|
320 | + switch ( $key ) { |
|
321 | + |
|
322 | + case 'meta_data': |
|
323 | + if ( is_array( $value ) ) { |
|
324 | + foreach ( $value as $meta ) { |
|
325 | + $object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' ); |
|
326 | + } |
|
327 | + } |
|
328 | + break; |
|
329 | + |
|
330 | + default: |
|
331 | + if ( is_callable( array( $object, "set_{$key}" ) ) ) { |
|
332 | + $object->{"set_{$key}"}( $value ); |
|
333 | + } |
|
334 | + break; |
|
335 | + } |
|
336 | + } |
|
337 | + |
|
338 | + } |
|
339 | + |
|
340 | + // Filters an object before it is inserted via the REST API.. |
|
341 | + return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request ); |
|
342 | + } |
|
343 | + |
|
344 | + /** |
|
345 | + * Retrieves data from a GetPaid class. |
|
346 | + * |
|
347 | + * @since 1.0.19 |
|
348 | + * @param GetPaid_Meta_Data[] $meta_data meta data objects. |
|
349 | + * @return array |
|
350 | + */ |
|
351 | + protected function prepare_object_meta_data( $meta_data ) { |
|
352 | + $meta = array(); |
|
353 | + |
|
354 | + foreach( $meta_data as $object ) { |
|
355 | + $meta[] = $object->get_data(); |
|
356 | + } |
|
357 | + |
|
358 | + return $meta; |
|
359 | + } |
|
360 | + |
|
361 | + /** |
|
362 | + * Retrieves invoice items. |
|
363 | + * |
|
364 | + * @since 1.0.19 |
|
365 | + * @param WPInv_Invoice $invoice Invoice items. |
|
366 | + * @param array $fields Fields to include. |
|
367 | + * @return array |
|
368 | + */ |
|
369 | + protected function prepare_invoice_items( $invoice ) { |
|
370 | + $items = array(); |
|
371 | + |
|
372 | + foreach( $invoice->get_items() as $item ) { |
|
373 | + |
|
374 | + $item_data = $item->prepare_data_for_saving(); |
|
375 | + |
|
376 | + if ( 'amount' == $invoice->get_template() ) { |
|
377 | + $item_data['quantity'] = 1; |
|
378 | + } |
|
379 | + |
|
380 | + $items[] = $item_data; |
|
381 | + } |
|
382 | + |
|
383 | + return $items; |
|
384 | + } |
|
385 | + |
|
386 | + /** |
|
387 | + * Retrieves data from a GetPaid class. |
|
388 | + * |
|
389 | + * @since 1.0.19 |
|
390 | + * @param GetPaid_Data $object Data object. |
|
391 | + * @param array $fields Fields to include. |
|
392 | + * @param string $context either view or edit. |
|
393 | + * @return array |
|
394 | + */ |
|
395 | + protected function prepare_object_data( $object, $fields, $context = 'view' ) { |
|
396 | + |
|
397 | + $data = array(); |
|
398 | + |
|
399 | + // Handle all writable props. |
|
400 | + foreach ( array_keys( $this->get_schema_properties() ) as $key ) { |
|
401 | + |
|
402 | + // Abort if it is not included. |
|
403 | + if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) { |
|
404 | + continue; |
|
405 | + } |
|
406 | + |
|
407 | + // Or this current object does not support the field. |
|
408 | + if ( ! $this->object_supports_field( $object, $key ) ) { |
|
409 | + continue; |
|
410 | + } |
|
411 | + |
|
412 | + // Handle meta data. |
|
413 | + if ( $key == 'meta_data' ) { |
|
414 | + $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() ); |
|
415 | + continue; |
|
416 | + } |
|
417 | + |
|
418 | + // Handle items. |
|
419 | + if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) { |
|
420 | + $data['items'] = $this->prepare_invoice_items( $object ); |
|
421 | + continue; |
|
422 | + } |
|
423 | + |
|
424 | + // Booleans. |
|
425 | + if ( is_callable( array( $object, $key ) ) ) { |
|
426 | + $data[ $key ] = $object->$key( $context ); |
|
427 | + continue; |
|
428 | + } |
|
429 | + |
|
430 | + // Get object value. |
|
431 | + if ( is_callable( array( $object, "get_{$key}" ) ) ) { |
|
432 | + $value = $object->{"get_{$key}"}( $context ); |
|
433 | + |
|
434 | + // If the value is an instance of GetPaid_Data... |
|
435 | + if ( is_a( $value, 'GetPaid_Data' ) ) { |
|
436 | + $value = $value->get_data( $context ); |
|
437 | + } |
|
438 | + |
|
439 | + // For objects, retrieves it's properties. |
|
440 | + $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value ; |
|
441 | + continue; |
|
442 | + } |
|
443 | + |
|
444 | + } |
|
445 | + |
|
446 | + return $data; |
|
447 | + } |
|
448 | + |
|
449 | + /** |
|
450 | + * Checks if a key should be included in a response. |
|
451 | + * |
|
452 | + * @since 1.0.19 |
|
453 | + * @param GetPaid_Data $object Data object. |
|
454 | + * @param string $field_key The key to check for. |
|
455 | + * @return bool |
|
456 | + */ |
|
457 | + public function object_supports_field( $object, $field_key ) { |
|
458 | + return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key ); |
|
459 | + } |
|
460 | + |
|
461 | + /** |
|
462 | + * Prepare a single object output for response. |
|
463 | + * |
|
464 | + * @since 1.0.19 |
|
465 | + * @param GetPaid_Data $object Data object. |
|
466 | + * @param WP_REST_Request $request Request object. |
|
467 | + * @return WP_REST_Response |
|
468 | + */ |
|
469 | + public function prepare_item_for_response( $object, $request ) { |
|
470 | + remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 ); |
|
471 | + |
|
472 | + $this->data_object = $object; |
|
473 | + |
|
474 | + // Fetch the fields to include in this response. |
|
475 | + $fields = $this->get_fields_for_response( $request ); |
|
476 | + |
|
477 | + // Prepare object data. |
|
478 | + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
479 | + $data = $this->prepare_object_data( $object, $fields, $context ); |
|
480 | + $data = $this->add_additional_fields_to_object( $data, $request ); |
|
481 | + $data = $this->limit_object_to_requested_fields( $data, $fields ); |
|
482 | + $data = $this->filter_response_by_context( $data, $context ); |
|
483 | + |
|
484 | + // Prepare the response. |
|
485 | + $response = rest_ensure_response( $data ); |
|
486 | + $response->add_links( $this->prepare_links( $object, $request ) ); |
|
487 | + |
|
488 | + // Filter item response. |
|
489 | + return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request ); |
|
490 | + } |
|
491 | 491 | |
492 | 492 | } |
@@ -8,7 +8,7 @@ discard block |
||
8 | 8 | * @version 1.0.19 |
9 | 9 | */ |
10 | 10 | |
11 | -defined( 'ABSPATH' ) || exit; |
|
11 | +defined('ABSPATH') || exit; |
|
12 | 12 | |
13 | 13 | /** |
14 | 14 | * GetPaid REST CRUD controller class. |
@@ -38,7 +38,7 @@ discard block |
||
38 | 38 | * |
39 | 39 | * @see register_rest_route() |
40 | 40 | */ |
41 | - public function register_namespace_routes( $namespace ) { |
|
41 | + public function register_namespace_routes($namespace) { |
|
42 | 42 | |
43 | 43 | register_rest_route( |
44 | 44 | $namespace, |
@@ -46,22 +46,22 @@ discard block |
||
46 | 46 | array( |
47 | 47 | array( |
48 | 48 | 'methods' => WP_REST_Server::READABLE, |
49 | - 'callback' => array( $this, 'get_items' ), |
|
50 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
49 | + 'callback' => array($this, 'get_items'), |
|
50 | + 'permission_callback' => array($this, 'get_items_permissions_check'), |
|
51 | 51 | 'args' => $this->get_collection_params(), |
52 | 52 | ), |
53 | 53 | array( |
54 | 54 | 'methods' => WP_REST_Server::CREATABLE, |
55 | - 'callback' => array( $this, 'create_item' ), |
|
56 | - 'permission_callback' => array( $this, 'create_item_permissions_check' ), |
|
57 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), |
|
55 | + 'callback' => array($this, 'create_item'), |
|
56 | + 'permission_callback' => array($this, 'create_item_permissions_check'), |
|
57 | + 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE), |
|
58 | 58 | ), |
59 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
59 | + 'schema' => array($this, 'get_public_item_schema'), |
|
60 | 60 | ) |
61 | 61 | ); |
62 | 62 | |
63 | 63 | $get_item_args = array( |
64 | - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), |
|
64 | + 'context' => $this->get_context_param(array('default' => 'view')), |
|
65 | 65 | ); |
66 | 66 | |
67 | 67 | register_rest_route( |
@@ -70,35 +70,35 @@ discard block |
||
70 | 70 | array( |
71 | 71 | 'args' => array( |
72 | 72 | 'id' => array( |
73 | - 'description' => __( 'Unique identifier for the object.', 'invoicing' ), |
|
73 | + 'description' => __('Unique identifier for the object.', 'invoicing'), |
|
74 | 74 | 'type' => 'integer', |
75 | 75 | ), |
76 | 76 | ), |
77 | 77 | array( |
78 | 78 | 'methods' => WP_REST_Server::READABLE, |
79 | - 'callback' => array( $this, 'get_item' ), |
|
80 | - 'permission_callback' => array( $this, 'get_item_permissions_check' ), |
|
79 | + 'callback' => array($this, 'get_item'), |
|
80 | + 'permission_callback' => array($this, 'get_item_permissions_check'), |
|
81 | 81 | 'args' => $get_item_args, |
82 | 82 | ), |
83 | 83 | array( |
84 | 84 | 'methods' => WP_REST_Server::EDITABLE, |
85 | - 'callback' => array( $this, 'update_item' ), |
|
86 | - 'permission_callback' => array( $this, 'update_item_permissions_check' ), |
|
87 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
85 | + 'callback' => array($this, 'update_item'), |
|
86 | + 'permission_callback' => array($this, 'update_item_permissions_check'), |
|
87 | + 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE), |
|
88 | 88 | ), |
89 | 89 | array( |
90 | 90 | 'methods' => WP_REST_Server::DELETABLE, |
91 | - 'callback' => array( $this, 'delete_item' ), |
|
92 | - 'permission_callback' => array( $this, 'delete_item_permissions_check' ), |
|
91 | + 'callback' => array($this, 'delete_item'), |
|
92 | + 'permission_callback' => array($this, 'delete_item_permissions_check'), |
|
93 | 93 | 'args' => array( |
94 | 94 | 'force' => array( |
95 | 95 | 'type' => 'boolean', |
96 | 96 | 'default' => false, |
97 | - 'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ), |
|
97 | + 'description' => __('Whether to bypass Trash and force deletion.', 'invoicing'), |
|
98 | 98 | ), |
99 | 99 | ), |
100 | 100 | ), |
101 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
101 | + 'schema' => array($this, 'get_public_item_schema'), |
|
102 | 102 | ) |
103 | 103 | ); |
104 | 104 | |
@@ -110,14 +110,14 @@ discard block |
||
110 | 110 | * @param GetPaid_Data $object Object to save. |
111 | 111 | * @return WP_Error|GetPaid_Data |
112 | 112 | */ |
113 | - protected function save_object( $object ) { |
|
113 | + protected function save_object($object) { |
|
114 | 114 | $object->save(); |
115 | 115 | |
116 | - if ( ! empty( $object->last_error ) ) { |
|
117 | - return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) ); |
|
116 | + if (!empty($object->last_error)) { |
|
117 | + return new WP_Error('rest_cannot_save', $object->last_error, array('status' => 400)); |
|
118 | 118 | } |
119 | 119 | |
120 | - return new $this->crud_class( $object->get_id() ); |
|
120 | + return new $this->crud_class($object->get_id()); |
|
121 | 121 | } |
122 | 122 | |
123 | 123 | /** |
@@ -128,21 +128,21 @@ discard block |
||
128 | 128 | * @param int|WP_Post $object_id Supplied ID. |
129 | 129 | * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise. |
130 | 130 | */ |
131 | - protected function get_object( $object_id ) { |
|
131 | + protected function get_object($object_id) { |
|
132 | 132 | |
133 | 133 | // Do we have an object? |
134 | - if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
135 | - return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
134 | + if (empty($this->crud_class) || !class_exists($this->crud_class)) { |
|
135 | + return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing')); |
|
136 | 136 | } |
137 | 137 | |
138 | 138 | // Fetch the object. |
139 | - $object = new $this->crud_class( $object_id ); |
|
140 | - if ( ! empty( $object->last_error ) ) { |
|
141 | - return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) ); |
|
139 | + $object = new $this->crud_class($object_id); |
|
140 | + if (!empty($object->last_error)) { |
|
141 | + return new WP_Error('rest_object_invalid_id', $object->last_error, array('status' => 404)); |
|
142 | 142 | } |
143 | 143 | |
144 | 144 | $this->data_object = $object; |
145 | - return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) ); |
|
145 | + return $object->get_id() ? $object : new WP_Error('rest_object_invalid_id', __('Invalid ID.', 'invoicing'), array('status' => 404)); |
|
146 | 146 | |
147 | 147 | } |
148 | 148 | |
@@ -152,17 +152,17 @@ discard block |
||
152 | 152 | * @param WP_REST_Request $request Full details about the request. |
153 | 153 | * @return WP_Error|WP_REST_Response |
154 | 154 | */ |
155 | - public function get_item( $request ) { |
|
155 | + public function get_item($request) { |
|
156 | 156 | |
157 | 157 | // Fetch the item. |
158 | - $object = $this->get_object( $request['id'] ); |
|
158 | + $object = $this->get_object($request['id']); |
|
159 | 159 | |
160 | - if ( is_wp_error( $object ) ) { |
|
160 | + if (is_wp_error($object)) { |
|
161 | 161 | return $object; |
162 | 162 | } |
163 | 163 | |
164 | 164 | // Generate a response. |
165 | - return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) ); |
|
165 | + return rest_ensure_response($this->prepare_item_for_response($object, $request)); |
|
166 | 166 | |
167 | 167 | } |
168 | 168 | |
@@ -172,38 +172,38 @@ discard block |
||
172 | 172 | * @param WP_REST_Request $request Full details about the request. |
173 | 173 | * @return WP_Error|WP_REST_Response |
174 | 174 | */ |
175 | - public function create_item( $request ) { |
|
175 | + public function create_item($request) { |
|
176 | 176 | |
177 | 177 | // Can not create an existing item. |
178 | - if ( ! empty( $request['id'] ) ) { |
|
178 | + if (!empty($request['id'])) { |
|
179 | 179 | /* translators: %s: post type */ |
180 | - return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) ); |
|
180 | + return new WP_Error("getpaid_rest_{$this->rest_base}_exists", __('Cannot create existing resource.', 'invoicing'), array('status' => 400)); |
|
181 | 181 | } |
182 | 182 | |
183 | 183 | // Generate a GetPaid_Data object from the request. |
184 | - $object = $this->prepare_item_for_database( $request ); |
|
185 | - if ( is_wp_error( $object ) ) { |
|
184 | + $object = $this->prepare_item_for_database($request); |
|
185 | + if (is_wp_error($object)) { |
|
186 | 186 | return $object; |
187 | 187 | } |
188 | 188 | |
189 | 189 | // Save the object. |
190 | - $object = $this->save_object( $object ); |
|
191 | - if ( is_wp_error( $object ) ) { |
|
190 | + $object = $this->save_object($object); |
|
191 | + if (is_wp_error($object)) { |
|
192 | 192 | return $object; |
193 | 193 | } |
194 | 194 | |
195 | 195 | // Save special fields. |
196 | - $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
197 | - if ( is_wp_error( $save_special ) ) { |
|
198 | - $object->delete( true ); |
|
196 | + $save_special = $this->update_additional_fields_for_object($object, $request); |
|
197 | + if (is_wp_error($save_special)) { |
|
198 | + $object->delete(true); |
|
199 | 199 | return $save_special; |
200 | 200 | } |
201 | 201 | |
202 | - $request->set_param( 'context', 'edit' ); |
|
203 | - $response = $this->prepare_item_for_response( $object, $request ); |
|
204 | - $response = rest_ensure_response( $response ); |
|
205 | - $response->set_status( 201 ); |
|
206 | - $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) ); |
|
202 | + $request->set_param('context', 'edit'); |
|
203 | + $response = $this->prepare_item_for_response($object, $request); |
|
204 | + $response = rest_ensure_response($response); |
|
205 | + $response->set_status(201); |
|
206 | + $response->header('Location', rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id()))); |
|
207 | 207 | |
208 | 208 | return $response; |
209 | 209 | } |
@@ -214,35 +214,35 @@ discard block |
||
214 | 214 | * @param WP_REST_Request $request Full details about the request. |
215 | 215 | * @return WP_Error|WP_REST_Response |
216 | 216 | */ |
217 | - public function update_item( $request ) { |
|
217 | + public function update_item($request) { |
|
218 | 218 | |
219 | 219 | // Fetch the item. |
220 | - $object = $this->get_object( $request['id'] ); |
|
221 | - if ( is_wp_error( $object ) ) { |
|
220 | + $object = $this->get_object($request['id']); |
|
221 | + if (is_wp_error($object)) { |
|
222 | 222 | return $object; |
223 | 223 | } |
224 | 224 | |
225 | 225 | // Prepare the item for saving. |
226 | - $object = $this->prepare_item_for_database( $request ); |
|
227 | - if ( is_wp_error( $object ) ) { |
|
226 | + $object = $this->prepare_item_for_database($request); |
|
227 | + if (is_wp_error($object)) { |
|
228 | 228 | return $object; |
229 | 229 | } |
230 | 230 | |
231 | 231 | // Save the item. |
232 | - $object = $this->save_object( $object ); |
|
233 | - if ( is_wp_error( $object ) ) { |
|
232 | + $object = $this->save_object($object); |
|
233 | + if (is_wp_error($object)) { |
|
234 | 234 | return $object; |
235 | 235 | } |
236 | 236 | |
237 | 237 | // Save special fields (those added via hooks). |
238 | - $save_special = $this->update_additional_fields_for_object( $object, $request ); |
|
239 | - if ( is_wp_error( $save_special ) ) { |
|
238 | + $save_special = $this->update_additional_fields_for_object($object, $request); |
|
239 | + if (is_wp_error($save_special)) { |
|
240 | 240 | return $save_special; |
241 | 241 | } |
242 | 242 | |
243 | - $request->set_param( 'context', 'edit' ); |
|
244 | - $response = $this->prepare_item_for_response( $object, $request ); |
|
245 | - return rest_ensure_response( $response ); |
|
243 | + $request->set_param('context', 'edit'); |
|
244 | + $response = $this->prepare_item_for_response($object, $request); |
|
245 | + return rest_ensure_response($response); |
|
246 | 246 | } |
247 | 247 | |
248 | 248 | /** |
@@ -251,14 +251,14 @@ discard block |
||
251 | 251 | * @param GetPaid_Data $object GetPaid_Data object. |
252 | 252 | * @return array Links for the given object. |
253 | 253 | */ |
254 | - protected function prepare_links( $object ) { |
|
254 | + protected function prepare_links($object) { |
|
255 | 255 | |
256 | 256 | $links = array( |
257 | 257 | 'self' => array( |
258 | - 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ), |
|
258 | + 'href' => rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id())), |
|
259 | 259 | ), |
260 | 260 | 'collection' => array( |
261 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
261 | + 'href' => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)), |
|
262 | 262 | ), |
263 | 263 | ); |
264 | 264 | |
@@ -282,8 +282,8 @@ discard block |
||
282 | 282 | * @param array $schema Schema. |
283 | 283 | * @return bool |
284 | 284 | */ |
285 | - public function filter_writable_props( $schema ) { |
|
286 | - return empty( $schema['readonly'] ); |
|
285 | + public function filter_writable_props($schema) { |
|
286 | + return empty($schema['readonly']); |
|
287 | 287 | } |
288 | 288 | |
289 | 289 | /** |
@@ -293,43 +293,43 @@ discard block |
||
293 | 293 | * @param WP_REST_Request $request Request object. |
294 | 294 | * @return GetPaid_Data|WP_Error Data object or WP_Error. |
295 | 295 | */ |
296 | - protected function prepare_item_for_database( $request ) { |
|
296 | + protected function prepare_item_for_database($request) { |
|
297 | 297 | |
298 | 298 | // Do we have an object? |
299 | - if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) { |
|
300 | - return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) ); |
|
299 | + if (empty($this->crud_class) || !class_exists($this->crud_class)) { |
|
300 | + return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing')); |
|
301 | 301 | } |
302 | 302 | |
303 | 303 | // Prepare the object. |
304 | - $id = isset( $request['id'] ) ? absint( $request['id'] ) : 0; |
|
305 | - $object = new $this->crud_class( $id ); |
|
304 | + $id = isset($request['id']) ? absint($request['id']) : 0; |
|
305 | + $object = new $this->crud_class($id); |
|
306 | 306 | |
307 | 307 | // Abort if an error exists. |
308 | - if ( ! empty( $object->last_error ) ) { |
|
309 | - return new WP_Error( 'invalid_item', $object->last_error ); |
|
308 | + if (!empty($object->last_error)) { |
|
309 | + return new WP_Error('invalid_item', $object->last_error); |
|
310 | 310 | } |
311 | 311 | |
312 | 312 | $schema = $this->get_item_schema(); |
313 | - $data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) ); |
|
313 | + $data_keys = array_keys(array_filter($schema['properties'], array($this, 'filter_writable_props'))); |
|
314 | 314 | |
315 | 315 | // Handle all writable props. |
316 | - foreach ( $data_keys as $key ) { |
|
317 | - $value = $request[ $key ]; |
|
316 | + foreach ($data_keys as $key) { |
|
317 | + $value = $request[$key]; |
|
318 | 318 | |
319 | - if ( ! is_null( $value ) ) { |
|
320 | - switch ( $key ) { |
|
319 | + if (!is_null($value)) { |
|
320 | + switch ($key) { |
|
321 | 321 | |
322 | 322 | case 'meta_data': |
323 | - if ( is_array( $value ) ) { |
|
324 | - foreach ( $value as $meta ) { |
|
325 | - $object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' ); |
|
323 | + if (is_array($value)) { |
|
324 | + foreach ($value as $meta) { |
|
325 | + $object->update_meta_data($meta['key'], $meta['value'], isset($meta['id']) ? $meta['id'] : ''); |
|
326 | 326 | } |
327 | 327 | } |
328 | 328 | break; |
329 | 329 | |
330 | 330 | default: |
331 | - if ( is_callable( array( $object, "set_{$key}" ) ) ) { |
|
332 | - $object->{"set_{$key}"}( $value ); |
|
331 | + if (is_callable(array($object, "set_{$key}"))) { |
|
332 | + $object->{"set_{$key}"}($value); |
|
333 | 333 | } |
334 | 334 | break; |
335 | 335 | } |
@@ -338,7 +338,7 @@ discard block |
||
338 | 338 | } |
339 | 339 | |
340 | 340 | // Filters an object before it is inserted via the REST API.. |
341 | - return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request ); |
|
341 | + return apply_filters("getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request); |
|
342 | 342 | } |
343 | 343 | |
344 | 344 | /** |
@@ -348,10 +348,10 @@ discard block |
||
348 | 348 | * @param GetPaid_Meta_Data[] $meta_data meta data objects. |
349 | 349 | * @return array |
350 | 350 | */ |
351 | - protected function prepare_object_meta_data( $meta_data ) { |
|
351 | + protected function prepare_object_meta_data($meta_data) { |
|
352 | 352 | $meta = array(); |
353 | 353 | |
354 | - foreach( $meta_data as $object ) { |
|
354 | + foreach ($meta_data as $object) { |
|
355 | 355 | $meta[] = $object->get_data(); |
356 | 356 | } |
357 | 357 | |
@@ -366,14 +366,14 @@ discard block |
||
366 | 366 | * @param array $fields Fields to include. |
367 | 367 | * @return array |
368 | 368 | */ |
369 | - protected function prepare_invoice_items( $invoice ) { |
|
369 | + protected function prepare_invoice_items($invoice) { |
|
370 | 370 | $items = array(); |
371 | 371 | |
372 | - foreach( $invoice->get_items() as $item ) { |
|
372 | + foreach ($invoice->get_items() as $item) { |
|
373 | 373 | |
374 | 374 | $item_data = $item->prepare_data_for_saving(); |
375 | 375 | |
376 | - if ( 'amount' == $invoice->get_template() ) { |
|
376 | + if ('amount' == $invoice->get_template()) { |
|
377 | 377 | $item_data['quantity'] = 1; |
378 | 378 | } |
379 | 379 | |
@@ -392,52 +392,52 @@ discard block |
||
392 | 392 | * @param string $context either view or edit. |
393 | 393 | * @return array |
394 | 394 | */ |
395 | - protected function prepare_object_data( $object, $fields, $context = 'view' ) { |
|
395 | + protected function prepare_object_data($object, $fields, $context = 'view') { |
|
396 | 396 | |
397 | 397 | $data = array(); |
398 | 398 | |
399 | 399 | // Handle all writable props. |
400 | - foreach ( array_keys( $this->get_schema_properties() ) as $key ) { |
|
400 | + foreach (array_keys($this->get_schema_properties()) as $key) { |
|
401 | 401 | |
402 | 402 | // Abort if it is not included. |
403 | - if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) { |
|
403 | + if (!empty($fields) && !$this->is_field_included($key, $fields)) { |
|
404 | 404 | continue; |
405 | 405 | } |
406 | 406 | |
407 | 407 | // Or this current object does not support the field. |
408 | - if ( ! $this->object_supports_field( $object, $key ) ) { |
|
408 | + if (!$this->object_supports_field($object, $key)) { |
|
409 | 409 | continue; |
410 | 410 | } |
411 | 411 | |
412 | 412 | // Handle meta data. |
413 | - if ( $key == 'meta_data' ) { |
|
414 | - $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() ); |
|
413 | + if ($key == 'meta_data') { |
|
414 | + $data['meta_data'] = $this->prepare_object_meta_data($object->get_meta_data()); |
|
415 | 415 | continue; |
416 | 416 | } |
417 | 417 | |
418 | 418 | // Handle items. |
419 | - if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) { |
|
420 | - $data['items'] = $this->prepare_invoice_items( $object ); |
|
419 | + if ($key == 'items' && is_a($object, 'WPInv_Invoice')) { |
|
420 | + $data['items'] = $this->prepare_invoice_items($object); |
|
421 | 421 | continue; |
422 | 422 | } |
423 | 423 | |
424 | 424 | // Booleans. |
425 | - if ( is_callable( array( $object, $key ) ) ) { |
|
426 | - $data[ $key ] = $object->$key( $context ); |
|
425 | + if (is_callable(array($object, $key))) { |
|
426 | + $data[$key] = $object->$key($context); |
|
427 | 427 | continue; |
428 | 428 | } |
429 | 429 | |
430 | 430 | // Get object value. |
431 | - if ( is_callable( array( $object, "get_{$key}" ) ) ) { |
|
432 | - $value = $object->{"get_{$key}"}( $context ); |
|
431 | + if (is_callable(array($object, "get_{$key}"))) { |
|
432 | + $value = $object->{"get_{$key}"}($context); |
|
433 | 433 | |
434 | 434 | // If the value is an instance of GetPaid_Data... |
435 | - if ( is_a( $value, 'GetPaid_Data' ) ) { |
|
436 | - $value = $value->get_data( $context ); |
|
435 | + if (is_a($value, 'GetPaid_Data')) { |
|
436 | + $value = $value->get_data($context); |
|
437 | 437 | } |
438 | 438 | |
439 | 439 | // For objects, retrieves it's properties. |
440 | - $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value ; |
|
440 | + $data[$key] = is_object($value) ? get_object_vars($value) : $value; |
|
441 | 441 | continue; |
442 | 442 | } |
443 | 443 | |
@@ -454,8 +454,8 @@ discard block |
||
454 | 454 | * @param string $field_key The key to check for. |
455 | 455 | * @return bool |
456 | 456 | */ |
457 | - public function object_supports_field( $object, $field_key ) { |
|
458 | - return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key ); |
|
457 | + public function object_supports_field($object, $field_key) { |
|
458 | + return apply_filters('getpaid_rest_object_supports_key', true, $object, $field_key); |
|
459 | 459 | } |
460 | 460 | |
461 | 461 | /** |
@@ -466,27 +466,27 @@ discard block |
||
466 | 466 | * @param WP_REST_Request $request Request object. |
467 | 467 | * @return WP_REST_Response |
468 | 468 | */ |
469 | - public function prepare_item_for_response( $object, $request ) { |
|
470 | - remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 ); |
|
469 | + public function prepare_item_for_response($object, $request) { |
|
470 | + remove_filter('rest_post_dispatch', 'rest_filter_response_fields', 10); |
|
471 | 471 | |
472 | 472 | $this->data_object = $object; |
473 | 473 | |
474 | 474 | // Fetch the fields to include in this response. |
475 | - $fields = $this->get_fields_for_response( $request ); |
|
475 | + $fields = $this->get_fields_for_response($request); |
|
476 | 476 | |
477 | 477 | // Prepare object data. |
478 | - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
479 | - $data = $this->prepare_object_data( $object, $fields, $context ); |
|
480 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
481 | - $data = $this->limit_object_to_requested_fields( $data, $fields ); |
|
482 | - $data = $this->filter_response_by_context( $data, $context ); |
|
478 | + $context = !empty($request['context']) ? $request['context'] : 'view'; |
|
479 | + $data = $this->prepare_object_data($object, $fields, $context); |
|
480 | + $data = $this->add_additional_fields_to_object($data, $request); |
|
481 | + $data = $this->limit_object_to_requested_fields($data, $fields); |
|
482 | + $data = $this->filter_response_by_context($data, $context); |
|
483 | 483 | |
484 | 484 | // Prepare the response. |
485 | - $response = rest_ensure_response( $data ); |
|
486 | - $response->add_links( $this->prepare_links( $object, $request ) ); |
|
485 | + $response = rest_ensure_response($data); |
|
486 | + $response->add_links($this->prepare_links($object, $request)); |
|
487 | 487 | |
488 | 488 | // Filter item response. |
489 | - return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request ); |
|
489 | + return apply_filters("getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request); |
|
490 | 490 | } |
491 | 491 | |
492 | 492 | } |
@@ -16,495 +16,495 @@ |
||
16 | 16 | */ |
17 | 17 | class GetPaid_Subscriptions_Query { |
18 | 18 | |
19 | - /** |
|
20 | - * Query vars, after parsing |
|
21 | - * |
|
22 | - * @since 1.0.19 |
|
23 | - * @var array |
|
24 | - */ |
|
25 | - public $query_vars = array(); |
|
26 | - |
|
27 | - /** |
|
28 | - * List of found subscriptions. |
|
29 | - * |
|
30 | - * @since 1.0.19 |
|
31 | - * @var array |
|
32 | - */ |
|
33 | - private $results; |
|
34 | - |
|
35 | - /** |
|
36 | - * Total number of found subscriptions for the current query |
|
37 | - * |
|
38 | - * @since 1.0.19 |
|
39 | - * @var int |
|
40 | - */ |
|
41 | - private $total_subscriptions = 0; |
|
42 | - |
|
43 | - /** |
|
44 | - * The SQL query used to fetch matching subscriptions. |
|
45 | - * |
|
46 | - * @since 1.0.19 |
|
47 | - * @var string |
|
48 | - */ |
|
49 | - public $request; |
|
50 | - |
|
51 | - // SQL clauses |
|
52 | - |
|
53 | - /** |
|
54 | - * Contains the 'FIELDS' sql clause |
|
55 | - * |
|
56 | - * @since 1.0.19 |
|
57 | - * @var string |
|
58 | - */ |
|
59 | - public $query_fields; |
|
60 | - |
|
61 | - /** |
|
62 | - * Contains the 'FROM' sql clause |
|
63 | - * |
|
64 | - * @since 1.0.19 |
|
65 | - * @var string |
|
66 | - */ |
|
67 | - public $query_from; |
|
68 | - |
|
69 | - /** |
|
70 | - * Contains the 'WHERE' sql clause |
|
71 | - * |
|
72 | - * @since 1.0.19 |
|
73 | - * @var string |
|
74 | - */ |
|
75 | - public $query_where; |
|
76 | - |
|
77 | - /** |
|
78 | - * Contains the 'ORDER BY' sql clause |
|
79 | - * |
|
80 | - * @since 1.0.19 |
|
81 | - * @var string |
|
82 | - */ |
|
83 | - public $query_orderby; |
|
84 | - |
|
85 | - /** |
|
86 | - * Contains the 'LIMIT' sql clause |
|
87 | - * |
|
88 | - * @since 1.0.19 |
|
89 | - * @var string |
|
90 | - */ |
|
91 | - public $query_limit; |
|
92 | - |
|
93 | - /** |
|
94 | - * Class constructor. |
|
95 | - * |
|
96 | - * @since 1.0.19 |
|
97 | - * |
|
98 | - * @param null|string|array $query Optional. The query variables. |
|
99 | - */ |
|
100 | - public function __construct( $query = null ) { |
|
101 | - if ( ! is_null( $query ) ) { |
|
102 | - $this->prepare_query( $query ); |
|
103 | - $this->query(); |
|
104 | - } |
|
105 | - } |
|
106 | - |
|
107 | - /** |
|
108 | - * Fills in missing query variables with default values. |
|
109 | - * |
|
110 | - * @since 1.0.19 |
|
111 | - * |
|
112 | - * @param string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`. |
|
113 | - * @return array Complete query variables with undefined ones filled in with defaults. |
|
114 | - */ |
|
115 | - public static function fill_query_vars( $args ) { |
|
116 | - $defaults = array( |
|
117 | - 'status' => 'all', |
|
118 | - 'customer_in' => array(), |
|
119 | - 'customer_not_in' => array(), |
|
120 | - 'product_in' => array(), |
|
121 | - 'product_not_in' => array(), |
|
122 | - 'include' => array(), |
|
123 | - 'exclude' => array(), |
|
124 | - 'orderby' => 'id', |
|
125 | - 'order' => 'DESC', |
|
126 | - 'offset' => '', |
|
127 | - 'number' => 10, |
|
128 | - 'paged' => 1, |
|
129 | - 'count_total' => true, |
|
130 | - 'fields' => 'all', |
|
131 | - ); |
|
132 | - |
|
133 | - return wp_parse_args( $args, $defaults ); |
|
134 | - } |
|
135 | - |
|
136 | - /** |
|
137 | - * Prepare the query variables. |
|
138 | - * |
|
139 | - * @since 1.0.19 |
|
140 | - * |
|
141 | - * @global wpdb $wpdb WordPress database abstraction object. |
|
142 | - * |
|
143 | - * @param string|array $query { |
|
144 | - * Optional. Array or string of Query parameters. |
|
145 | - * |
|
146 | - * @type string|array $status The subscription status to filter by. Can either be a single status or an array of statuses. |
|
147 | - * Default is all. |
|
148 | - * @type int[] $customer_in An array of customer ids to filter by. |
|
149 | - * @type int[] $customer_not_in An array of customer ids whose subscriptions should be excluded. |
|
150 | - * @type int[] $invoice_in An array of invoice ids to filter by. |
|
151 | - * @type int[] $invoice_not_in An array of invoice ids whose subscriptions should be excluded. |
|
152 | - * @type int[] $product_in An array of product ids to filter by. |
|
153 | - * @type int[] $product_not_in An array of product ids whose subscriptions should be excluded. |
|
154 | - * @type array $date_created_query A WP_Date_Query compatible array use to filter subscriptions by their date of creation. |
|
155 | - * @type array $date_expires_query A WP_Date_Query compatible array use to filter subscriptions by their expiration date. |
|
156 | - * @type array $include An array of subscription IDs to include. Default empty array. |
|
157 | - * @type array $exclude An array of subscription IDs to exclude. Default empty array. |
|
158 | - * @type string|array $orderby Field(s) to sort the retrieved subscription by. May be a single value, |
|
159 | - * an array of values, or a multi-dimensional array with fields as |
|
160 | - * keys and orders ('ASC' or 'DESC') as values. Accepted values are |
|
161 | - * 'id', 'customer_id', 'frequency', 'period', 'initial_amount, |
|
162 | - * 'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration' |
|
163 | - * 'transaction_id', 'product_id', 'trial_period', 'include', 'status', 'profile_id'. Default array( 'id' ). |
|
164 | - * @type string $order Designates ascending or descending order of subscriptions. Order values |
|
165 | - * passed as part of an `$orderby` array take precedence over this |
|
166 | - * parameter. Accepts 'ASC', 'DESC'. Default 'DESC'. |
|
167 | - * @type int $offset Number of subscriptions to offset in retrieved results. Can be used in |
|
168 | - * conjunction with pagination. Default 0. |
|
169 | - * @type int $number Number of subscriptions to limit the query for. Can be used in |
|
170 | - * conjunction with pagination. Value -1 (all) is supported, but |
|
171 | - * should be used with caution on larger sites. |
|
172 | - * Default 10. |
|
173 | - * @type int $paged When used with number, defines the page of results to return. |
|
174 | - * Default 1. |
|
175 | - * @type bool $count_total Whether to count the total number of subscriptions found. If pagination |
|
176 | - * is not needed, setting this to false can improve performance. |
|
177 | - * Default true. |
|
178 | - * @type string|array $fields Which fields to return. Single or all fields (string), or array |
|
179 | - * of fields. Accepts 'id', 'customer_id', 'frequency', 'period', 'initial_amount, |
|
180 | - * 'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration' |
|
181 | - * 'transaction_id', 'product_id', 'trial_period', 'status', 'profile_id'. |
|
182 | - * Use 'all' for all fields. Default 'all'. |
|
183 | - * } |
|
184 | - */ |
|
185 | - public function prepare_query( $query = array() ) { |
|
186 | - global $wpdb; |
|
187 | - |
|
188 | - if ( empty( $this->query_vars ) || ! empty( $query ) ) { |
|
189 | - $this->query_limit = null; |
|
190 | - $this->query_vars = $this->fill_query_vars( $query ); |
|
191 | - } |
|
192 | - |
|
193 | - if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) { |
|
194 | - $this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] ); |
|
195 | - } |
|
196 | - |
|
197 | - do_action( 'getpaid_pre_get_subscriptions', array( &$this ) ); |
|
198 | - |
|
199 | - // Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'. |
|
200 | - $qv =& $this->query_vars; |
|
201 | - $qv = $this->fill_query_vars( $qv ); |
|
202 | - $table = $wpdb->prefix . 'wpinv_subscriptions'; |
|
203 | - $this->query_from = "FROM $table"; |
|
204 | - |
|
205 | - // Prepare query fields. |
|
206 | - $this->prepare_query_fields( $qv, $table ); |
|
207 | - |
|
208 | - // Prepare query where. |
|
209 | - $this->prepare_query_where( $qv, $table ); |
|
210 | - |
|
211 | - // Prepare query order. |
|
212 | - $this->prepare_query_order( $qv, $table ); |
|
213 | - |
|
214 | - // limit |
|
215 | - if ( isset( $qv['number'] ) && $qv['number'] > 0 ) { |
|
216 | - if ( $qv['offset'] ) { |
|
217 | - $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] ); |
|
218 | - } else { |
|
219 | - $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] ); |
|
220 | - } |
|
221 | - } |
|
222 | - |
|
223 | - do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) ); |
|
224 | - } |
|
225 | - |
|
226 | - /** |
|
227 | - * Prepares the query fields. |
|
228 | - * |
|
229 | - * @since 1.0.19 |
|
230 | - * |
|
231 | - * @param array $qv Query vars. |
|
232 | - * @param string $table Table name. |
|
233 | - */ |
|
234 | - protected function prepare_query_fields( &$qv, $table ) { |
|
235 | - |
|
236 | - if ( is_array( $qv['fields'] ) ) { |
|
237 | - $qv['fields'] = array_unique( $qv['fields'] ); |
|
238 | - |
|
239 | - $query_fields = array(); |
|
240 | - foreach ( $qv['fields'] as $field ) { |
|
241 | - $field = sanitize_key( $field ); |
|
242 | - $query_fields[] = "$table.`$field`"; |
|
243 | - } |
|
244 | - $this->query_fields = implode( ',', $query_fields ); |
|
245 | - } else { |
|
246 | - $this->query_fields = "$table.*"; |
|
247 | - } |
|
248 | - |
|
249 | - if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
250 | - $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields; |
|
251 | - } |
|
252 | - |
|
253 | - } |
|
254 | - |
|
255 | - /** |
|
256 | - * Prepares the query where. |
|
257 | - * |
|
258 | - * @since 1.0.19 |
|
259 | - * |
|
260 | - * @param array $qv Query vars. |
|
261 | - * @param string $table Table name. |
|
262 | - */ |
|
263 | - protected function prepare_query_where( &$qv, $table ) { |
|
264 | - global $wpdb; |
|
265 | - $this->query_where = 'WHERE 1=1'; |
|
266 | - |
|
267 | - // Status. |
|
268 | - if ( 'all' !== $qv['status'] ) { |
|
269 | - $statuses = wpinv_clean( wpinv_parse_list( $qv['status'] ) ); |
|
270 | - $prepared_statuses = join( ',', array_fill( 0, count( $statuses ), '%s' ) ); |
|
271 | - $this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses ); |
|
272 | - } |
|
273 | - |
|
274 | - if ( ! empty( $qv['customer_in'] ) ) { |
|
275 | - $customer_in = implode( ',', wp_parse_id_list( $qv['customer_in'] ) ); |
|
276 | - $this->query_where .= " AND $table.`customer_id` IN ($customer_in)"; |
|
277 | - } elseif ( ! empty( $qv['customer_not_in'] ) ) { |
|
278 | - $customer_not_in = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) ); |
|
279 | - $this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)"; |
|
280 | - } |
|
281 | - |
|
282 | - if ( ! empty( $qv['product_in'] ) ) { |
|
283 | - $product_in = implode( ',', wp_parse_id_list( $qv['product_in'] ) ); |
|
284 | - $this->query_where .= " AND $table.`product_id` IN ($product_in)"; |
|
285 | - } elseif ( ! empty( $qv['product_not_in'] ) ) { |
|
286 | - $product_not_in = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) ); |
|
287 | - $this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)"; |
|
288 | - } |
|
289 | - |
|
290 | - if ( ! empty( $qv['invoice_in'] ) ) { |
|
291 | - $invoice_in = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) ); |
|
292 | - $this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)"; |
|
293 | - } elseif ( ! empty( $qv['invoice_not_in'] ) ) { |
|
294 | - $invoice_not_in = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) ); |
|
295 | - $this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)"; |
|
296 | - } |
|
297 | - |
|
298 | - if ( ! empty( $qv['include'] ) ) { |
|
299 | - $include = implode( ',', wp_parse_id_list( $qv['include'] ) ); |
|
300 | - $this->query_where .= " AND $table.`id` IN ($include)"; |
|
301 | - } elseif ( ! empty( $qv['exclude'] ) ) { |
|
302 | - $exclude = implode( ',', wp_parse_id_list( $qv['exclude'] ) ); |
|
303 | - $this->query_where .= " AND $table.`id` NOT IN ($exclude)"; |
|
304 | - } |
|
305 | - |
|
306 | - // Date queries are allowed for the subscription creation date. |
|
307 | - if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) { |
|
308 | - $date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" ); |
|
309 | - $this->query_where .= $date_created_query->get_sql(); |
|
310 | - } |
|
311 | - |
|
312 | - // Date queries are also allowed for the subscription expiration date. |
|
313 | - if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) { |
|
314 | - $date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" ); |
|
315 | - $this->query_where .= $date_expires_query->get_sql(); |
|
316 | - } |
|
317 | - |
|
318 | - } |
|
319 | - |
|
320 | - /** |
|
321 | - * Prepares the query order. |
|
322 | - * |
|
323 | - * @since 1.0.19 |
|
324 | - * |
|
325 | - * @param array $qv Query vars. |
|
326 | - * @param string $table Table name. |
|
327 | - */ |
|
328 | - protected function prepare_query_order( &$qv, $table ) { |
|
329 | - |
|
330 | - // sorting. |
|
331 | - $qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : ''; |
|
332 | - $order = $this->parse_order( $qv['order'] ); |
|
333 | - |
|
334 | - // Default order is by 'id' (latest subscriptions). |
|
335 | - if ( empty( $qv['orderby'] ) ) { |
|
336 | - $qv['orderby'] = array( 'id' ); |
|
337 | - } |
|
338 | - |
|
339 | - // 'orderby' values may be an array, comma- or space-separated list. |
|
340 | - $ordersby = array_filter( wpinv_parse_list( $qv['orderby'] ) ); |
|
341 | - |
|
342 | - $orderby_array = array(); |
|
343 | - foreach ( $ordersby as $_key => $_value ) { |
|
344 | - |
|
345 | - if ( is_int( $_key ) ) { |
|
346 | - // Integer key means this is a flat array of 'orderby' fields. |
|
347 | - $_orderby = $_value; |
|
348 | - $_order = $order; |
|
349 | - } else { |
|
350 | - // Non-integer key means that the key is the field and the value is ASC/DESC. |
|
351 | - $_orderby = $_key; |
|
352 | - $_order = $_value; |
|
353 | - } |
|
354 | - |
|
355 | - $parsed = $this->parse_orderby( $_orderby, $table ); |
|
356 | - |
|
357 | - if ( $parsed ) { |
|
358 | - $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order ); |
|
359 | - } |
|
360 | - |
|
361 | - } |
|
362 | - |
|
363 | - // If no valid clauses were found, order by id. |
|
364 | - if ( empty( $orderby_array ) ) { |
|
365 | - $orderby_array[] = "id $order"; |
|
366 | - } |
|
367 | - |
|
368 | - $this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array ); |
|
369 | - |
|
370 | - } |
|
371 | - |
|
372 | - /** |
|
373 | - * Execute the query, with the current variables. |
|
374 | - * |
|
375 | - * @since 1.0.19 |
|
376 | - * |
|
377 | - * @global wpdb $wpdb WordPress database abstraction object. |
|
378 | - */ |
|
379 | - public function query() { |
|
380 | - global $wpdb; |
|
381 | - |
|
382 | - $qv =& $this->query_vars; |
|
383 | - |
|
384 | - // Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the |
|
385 | - // total_subscriptions property. |
|
386 | - $this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) ); |
|
387 | - |
|
388 | - if ( null === $this->results ) { |
|
389 | - $this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit"; |
|
390 | - |
|
391 | - if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) { |
|
392 | - $this->results = $wpdb->get_results( $this->request ); |
|
393 | - } else { |
|
394 | - $this->results = $wpdb->get_col( $this->request ); |
|
395 | - } |
|
396 | - |
|
397 | - if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
398 | - $found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this ); |
|
399 | - $this->total_subscriptions = (int) $wpdb->get_var( $found_subscriptions_query ); |
|
400 | - } |
|
401 | - } |
|
402 | - |
|
403 | - if ( 'all' == $qv['fields'] ) { |
|
404 | - foreach ( $this->results as $key => $subscription ) { |
|
405 | - wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' ); |
|
406 | - wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' ); |
|
407 | - wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
408 | - wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
409 | - $this->results[ $key ] = new WPInv_Subscription( $subscription ); |
|
410 | - } |
|
411 | - } |
|
412 | - |
|
413 | - } |
|
414 | - |
|
415 | - /** |
|
416 | - * Retrieve query variable. |
|
417 | - * |
|
418 | - * @since 1.0.19 |
|
419 | - * |
|
420 | - * @param string $query_var Query variable key. |
|
421 | - * @return mixed |
|
422 | - */ |
|
423 | - public function get( $query_var ) { |
|
424 | - if ( isset( $this->query_vars[ $query_var ] ) ) { |
|
425 | - return $this->query_vars[ $query_var ]; |
|
426 | - } |
|
427 | - |
|
428 | - return null; |
|
429 | - } |
|
430 | - |
|
431 | - /** |
|
432 | - * Set query variable. |
|
433 | - * |
|
434 | - * @since 1.0.19 |
|
435 | - * |
|
436 | - * @param string $query_var Query variable key. |
|
437 | - * @param mixed $value Query variable value. |
|
438 | - */ |
|
439 | - public function set( $query_var, $value ) { |
|
440 | - $this->query_vars[ $query_var ] = $value; |
|
441 | - } |
|
442 | - |
|
443 | - /** |
|
444 | - * Return the list of subscriptions. |
|
445 | - * |
|
446 | - * @since 1.0.19 |
|
447 | - * |
|
448 | - * @return WPInv_Subscription[]|array Found subscriptions. |
|
449 | - */ |
|
450 | - public function get_results() { |
|
451 | - return $this->results; |
|
452 | - } |
|
453 | - |
|
454 | - /** |
|
455 | - * Return the total number of subscriptions for the current query. |
|
456 | - * |
|
457 | - * @since 1.0.19 |
|
458 | - * |
|
459 | - * @return int Number of total subscriptions. |
|
460 | - */ |
|
461 | - public function get_total() { |
|
462 | - return $this->total_subscriptions; |
|
463 | - } |
|
464 | - |
|
465 | - /** |
|
466 | - * Parse and sanitize 'orderby' keys passed to the subscriptions query. |
|
467 | - * |
|
468 | - * @since 1.0.19 |
|
469 | - * |
|
470 | - * @param string $orderby Alias for the field to order by. |
|
471 | - * @param string $table The current table. |
|
472 | - * @return string Value to use in the ORDER clause, if `$orderby` is valid. |
|
473 | - */ |
|
474 | - protected function parse_orderby( $orderby, $table ) { |
|
475 | - |
|
476 | - $_orderby = ''; |
|
477 | - if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) { |
|
478 | - $_orderby = "$table.`$orderby`"; |
|
479 | - } elseif ( 'id' === strtolower( $orderby ) ) { |
|
480 | - $_orderby = "$table.id"; |
|
481 | - } elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) { |
|
482 | - $include = wp_parse_id_list( $this->query_vars['include'] ); |
|
483 | - $include_sql = implode( ',', $include ); |
|
484 | - $_orderby = "FIELD( $table.id, $include_sql )"; |
|
485 | - } |
|
486 | - |
|
487 | - return $_orderby; |
|
488 | - } |
|
489 | - |
|
490 | - /** |
|
491 | - * Parse an 'order' query variable and cast it to ASC or DESC as necessary. |
|
492 | - * |
|
493 | - * @since 1.0.19 |
|
494 | - * |
|
495 | - * @param string $order The 'order' query variable. |
|
496 | - * @return string The sanitized 'order' query variable. |
|
497 | - */ |
|
498 | - protected function parse_order( $order ) { |
|
499 | - if ( ! is_string( $order ) || empty( $order ) ) { |
|
500 | - return 'DESC'; |
|
501 | - } |
|
502 | - |
|
503 | - if ( 'ASC' === strtoupper( $order ) ) { |
|
504 | - return 'ASC'; |
|
505 | - } else { |
|
506 | - return 'DESC'; |
|
507 | - } |
|
508 | - } |
|
19 | + /** |
|
20 | + * Query vars, after parsing |
|
21 | + * |
|
22 | + * @since 1.0.19 |
|
23 | + * @var array |
|
24 | + */ |
|
25 | + public $query_vars = array(); |
|
26 | + |
|
27 | + /** |
|
28 | + * List of found subscriptions. |
|
29 | + * |
|
30 | + * @since 1.0.19 |
|
31 | + * @var array |
|
32 | + */ |
|
33 | + private $results; |
|
34 | + |
|
35 | + /** |
|
36 | + * Total number of found subscriptions for the current query |
|
37 | + * |
|
38 | + * @since 1.0.19 |
|
39 | + * @var int |
|
40 | + */ |
|
41 | + private $total_subscriptions = 0; |
|
42 | + |
|
43 | + /** |
|
44 | + * The SQL query used to fetch matching subscriptions. |
|
45 | + * |
|
46 | + * @since 1.0.19 |
|
47 | + * @var string |
|
48 | + */ |
|
49 | + public $request; |
|
50 | + |
|
51 | + // SQL clauses |
|
52 | + |
|
53 | + /** |
|
54 | + * Contains the 'FIELDS' sql clause |
|
55 | + * |
|
56 | + * @since 1.0.19 |
|
57 | + * @var string |
|
58 | + */ |
|
59 | + public $query_fields; |
|
60 | + |
|
61 | + /** |
|
62 | + * Contains the 'FROM' sql clause |
|
63 | + * |
|
64 | + * @since 1.0.19 |
|
65 | + * @var string |
|
66 | + */ |
|
67 | + public $query_from; |
|
68 | + |
|
69 | + /** |
|
70 | + * Contains the 'WHERE' sql clause |
|
71 | + * |
|
72 | + * @since 1.0.19 |
|
73 | + * @var string |
|
74 | + */ |
|
75 | + public $query_where; |
|
76 | + |
|
77 | + /** |
|
78 | + * Contains the 'ORDER BY' sql clause |
|
79 | + * |
|
80 | + * @since 1.0.19 |
|
81 | + * @var string |
|
82 | + */ |
|
83 | + public $query_orderby; |
|
84 | + |
|
85 | + /** |
|
86 | + * Contains the 'LIMIT' sql clause |
|
87 | + * |
|
88 | + * @since 1.0.19 |
|
89 | + * @var string |
|
90 | + */ |
|
91 | + public $query_limit; |
|
92 | + |
|
93 | + /** |
|
94 | + * Class constructor. |
|
95 | + * |
|
96 | + * @since 1.0.19 |
|
97 | + * |
|
98 | + * @param null|string|array $query Optional. The query variables. |
|
99 | + */ |
|
100 | + public function __construct( $query = null ) { |
|
101 | + if ( ! is_null( $query ) ) { |
|
102 | + $this->prepare_query( $query ); |
|
103 | + $this->query(); |
|
104 | + } |
|
105 | + } |
|
106 | + |
|
107 | + /** |
|
108 | + * Fills in missing query variables with default values. |
|
109 | + * |
|
110 | + * @since 1.0.19 |
|
111 | + * |
|
112 | + * @param string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`. |
|
113 | + * @return array Complete query variables with undefined ones filled in with defaults. |
|
114 | + */ |
|
115 | + public static function fill_query_vars( $args ) { |
|
116 | + $defaults = array( |
|
117 | + 'status' => 'all', |
|
118 | + 'customer_in' => array(), |
|
119 | + 'customer_not_in' => array(), |
|
120 | + 'product_in' => array(), |
|
121 | + 'product_not_in' => array(), |
|
122 | + 'include' => array(), |
|
123 | + 'exclude' => array(), |
|
124 | + 'orderby' => 'id', |
|
125 | + 'order' => 'DESC', |
|
126 | + 'offset' => '', |
|
127 | + 'number' => 10, |
|
128 | + 'paged' => 1, |
|
129 | + 'count_total' => true, |
|
130 | + 'fields' => 'all', |
|
131 | + ); |
|
132 | + |
|
133 | + return wp_parse_args( $args, $defaults ); |
|
134 | + } |
|
135 | + |
|
136 | + /** |
|
137 | + * Prepare the query variables. |
|
138 | + * |
|
139 | + * @since 1.0.19 |
|
140 | + * |
|
141 | + * @global wpdb $wpdb WordPress database abstraction object. |
|
142 | + * |
|
143 | + * @param string|array $query { |
|
144 | + * Optional. Array or string of Query parameters. |
|
145 | + * |
|
146 | + * @type string|array $status The subscription status to filter by. Can either be a single status or an array of statuses. |
|
147 | + * Default is all. |
|
148 | + * @type int[] $customer_in An array of customer ids to filter by. |
|
149 | + * @type int[] $customer_not_in An array of customer ids whose subscriptions should be excluded. |
|
150 | + * @type int[] $invoice_in An array of invoice ids to filter by. |
|
151 | + * @type int[] $invoice_not_in An array of invoice ids whose subscriptions should be excluded. |
|
152 | + * @type int[] $product_in An array of product ids to filter by. |
|
153 | + * @type int[] $product_not_in An array of product ids whose subscriptions should be excluded. |
|
154 | + * @type array $date_created_query A WP_Date_Query compatible array use to filter subscriptions by their date of creation. |
|
155 | + * @type array $date_expires_query A WP_Date_Query compatible array use to filter subscriptions by their expiration date. |
|
156 | + * @type array $include An array of subscription IDs to include. Default empty array. |
|
157 | + * @type array $exclude An array of subscription IDs to exclude. Default empty array. |
|
158 | + * @type string|array $orderby Field(s) to sort the retrieved subscription by. May be a single value, |
|
159 | + * an array of values, or a multi-dimensional array with fields as |
|
160 | + * keys and orders ('ASC' or 'DESC') as values. Accepted values are |
|
161 | + * 'id', 'customer_id', 'frequency', 'period', 'initial_amount, |
|
162 | + * 'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration' |
|
163 | + * 'transaction_id', 'product_id', 'trial_period', 'include', 'status', 'profile_id'. Default array( 'id' ). |
|
164 | + * @type string $order Designates ascending or descending order of subscriptions. Order values |
|
165 | + * passed as part of an `$orderby` array take precedence over this |
|
166 | + * parameter. Accepts 'ASC', 'DESC'. Default 'DESC'. |
|
167 | + * @type int $offset Number of subscriptions to offset in retrieved results. Can be used in |
|
168 | + * conjunction with pagination. Default 0. |
|
169 | + * @type int $number Number of subscriptions to limit the query for. Can be used in |
|
170 | + * conjunction with pagination. Value -1 (all) is supported, but |
|
171 | + * should be used with caution on larger sites. |
|
172 | + * Default 10. |
|
173 | + * @type int $paged When used with number, defines the page of results to return. |
|
174 | + * Default 1. |
|
175 | + * @type bool $count_total Whether to count the total number of subscriptions found. If pagination |
|
176 | + * is not needed, setting this to false can improve performance. |
|
177 | + * Default true. |
|
178 | + * @type string|array $fields Which fields to return. Single or all fields (string), or array |
|
179 | + * of fields. Accepts 'id', 'customer_id', 'frequency', 'period', 'initial_amount, |
|
180 | + * 'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration' |
|
181 | + * 'transaction_id', 'product_id', 'trial_period', 'status', 'profile_id'. |
|
182 | + * Use 'all' for all fields. Default 'all'. |
|
183 | + * } |
|
184 | + */ |
|
185 | + public function prepare_query( $query = array() ) { |
|
186 | + global $wpdb; |
|
187 | + |
|
188 | + if ( empty( $this->query_vars ) || ! empty( $query ) ) { |
|
189 | + $this->query_limit = null; |
|
190 | + $this->query_vars = $this->fill_query_vars( $query ); |
|
191 | + } |
|
192 | + |
|
193 | + if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) { |
|
194 | + $this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] ); |
|
195 | + } |
|
196 | + |
|
197 | + do_action( 'getpaid_pre_get_subscriptions', array( &$this ) ); |
|
198 | + |
|
199 | + // Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'. |
|
200 | + $qv =& $this->query_vars; |
|
201 | + $qv = $this->fill_query_vars( $qv ); |
|
202 | + $table = $wpdb->prefix . 'wpinv_subscriptions'; |
|
203 | + $this->query_from = "FROM $table"; |
|
204 | + |
|
205 | + // Prepare query fields. |
|
206 | + $this->prepare_query_fields( $qv, $table ); |
|
207 | + |
|
208 | + // Prepare query where. |
|
209 | + $this->prepare_query_where( $qv, $table ); |
|
210 | + |
|
211 | + // Prepare query order. |
|
212 | + $this->prepare_query_order( $qv, $table ); |
|
213 | + |
|
214 | + // limit |
|
215 | + if ( isset( $qv['number'] ) && $qv['number'] > 0 ) { |
|
216 | + if ( $qv['offset'] ) { |
|
217 | + $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] ); |
|
218 | + } else { |
|
219 | + $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] ); |
|
220 | + } |
|
221 | + } |
|
222 | + |
|
223 | + do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) ); |
|
224 | + } |
|
225 | + |
|
226 | + /** |
|
227 | + * Prepares the query fields. |
|
228 | + * |
|
229 | + * @since 1.0.19 |
|
230 | + * |
|
231 | + * @param array $qv Query vars. |
|
232 | + * @param string $table Table name. |
|
233 | + */ |
|
234 | + protected function prepare_query_fields( &$qv, $table ) { |
|
235 | + |
|
236 | + if ( is_array( $qv['fields'] ) ) { |
|
237 | + $qv['fields'] = array_unique( $qv['fields'] ); |
|
238 | + |
|
239 | + $query_fields = array(); |
|
240 | + foreach ( $qv['fields'] as $field ) { |
|
241 | + $field = sanitize_key( $field ); |
|
242 | + $query_fields[] = "$table.`$field`"; |
|
243 | + } |
|
244 | + $this->query_fields = implode( ',', $query_fields ); |
|
245 | + } else { |
|
246 | + $this->query_fields = "$table.*"; |
|
247 | + } |
|
248 | + |
|
249 | + if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
250 | + $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields; |
|
251 | + } |
|
252 | + |
|
253 | + } |
|
254 | + |
|
255 | + /** |
|
256 | + * Prepares the query where. |
|
257 | + * |
|
258 | + * @since 1.0.19 |
|
259 | + * |
|
260 | + * @param array $qv Query vars. |
|
261 | + * @param string $table Table name. |
|
262 | + */ |
|
263 | + protected function prepare_query_where( &$qv, $table ) { |
|
264 | + global $wpdb; |
|
265 | + $this->query_where = 'WHERE 1=1'; |
|
266 | + |
|
267 | + // Status. |
|
268 | + if ( 'all' !== $qv['status'] ) { |
|
269 | + $statuses = wpinv_clean( wpinv_parse_list( $qv['status'] ) ); |
|
270 | + $prepared_statuses = join( ',', array_fill( 0, count( $statuses ), '%s' ) ); |
|
271 | + $this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses ); |
|
272 | + } |
|
273 | + |
|
274 | + if ( ! empty( $qv['customer_in'] ) ) { |
|
275 | + $customer_in = implode( ',', wp_parse_id_list( $qv['customer_in'] ) ); |
|
276 | + $this->query_where .= " AND $table.`customer_id` IN ($customer_in)"; |
|
277 | + } elseif ( ! empty( $qv['customer_not_in'] ) ) { |
|
278 | + $customer_not_in = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) ); |
|
279 | + $this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)"; |
|
280 | + } |
|
281 | + |
|
282 | + if ( ! empty( $qv['product_in'] ) ) { |
|
283 | + $product_in = implode( ',', wp_parse_id_list( $qv['product_in'] ) ); |
|
284 | + $this->query_where .= " AND $table.`product_id` IN ($product_in)"; |
|
285 | + } elseif ( ! empty( $qv['product_not_in'] ) ) { |
|
286 | + $product_not_in = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) ); |
|
287 | + $this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)"; |
|
288 | + } |
|
289 | + |
|
290 | + if ( ! empty( $qv['invoice_in'] ) ) { |
|
291 | + $invoice_in = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) ); |
|
292 | + $this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)"; |
|
293 | + } elseif ( ! empty( $qv['invoice_not_in'] ) ) { |
|
294 | + $invoice_not_in = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) ); |
|
295 | + $this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)"; |
|
296 | + } |
|
297 | + |
|
298 | + if ( ! empty( $qv['include'] ) ) { |
|
299 | + $include = implode( ',', wp_parse_id_list( $qv['include'] ) ); |
|
300 | + $this->query_where .= " AND $table.`id` IN ($include)"; |
|
301 | + } elseif ( ! empty( $qv['exclude'] ) ) { |
|
302 | + $exclude = implode( ',', wp_parse_id_list( $qv['exclude'] ) ); |
|
303 | + $this->query_where .= " AND $table.`id` NOT IN ($exclude)"; |
|
304 | + } |
|
305 | + |
|
306 | + // Date queries are allowed for the subscription creation date. |
|
307 | + if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) { |
|
308 | + $date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" ); |
|
309 | + $this->query_where .= $date_created_query->get_sql(); |
|
310 | + } |
|
311 | + |
|
312 | + // Date queries are also allowed for the subscription expiration date. |
|
313 | + if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) { |
|
314 | + $date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" ); |
|
315 | + $this->query_where .= $date_expires_query->get_sql(); |
|
316 | + } |
|
317 | + |
|
318 | + } |
|
319 | + |
|
320 | + /** |
|
321 | + * Prepares the query order. |
|
322 | + * |
|
323 | + * @since 1.0.19 |
|
324 | + * |
|
325 | + * @param array $qv Query vars. |
|
326 | + * @param string $table Table name. |
|
327 | + */ |
|
328 | + protected function prepare_query_order( &$qv, $table ) { |
|
329 | + |
|
330 | + // sorting. |
|
331 | + $qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : ''; |
|
332 | + $order = $this->parse_order( $qv['order'] ); |
|
333 | + |
|
334 | + // Default order is by 'id' (latest subscriptions). |
|
335 | + if ( empty( $qv['orderby'] ) ) { |
|
336 | + $qv['orderby'] = array( 'id' ); |
|
337 | + } |
|
338 | + |
|
339 | + // 'orderby' values may be an array, comma- or space-separated list. |
|
340 | + $ordersby = array_filter( wpinv_parse_list( $qv['orderby'] ) ); |
|
341 | + |
|
342 | + $orderby_array = array(); |
|
343 | + foreach ( $ordersby as $_key => $_value ) { |
|
344 | + |
|
345 | + if ( is_int( $_key ) ) { |
|
346 | + // Integer key means this is a flat array of 'orderby' fields. |
|
347 | + $_orderby = $_value; |
|
348 | + $_order = $order; |
|
349 | + } else { |
|
350 | + // Non-integer key means that the key is the field and the value is ASC/DESC. |
|
351 | + $_orderby = $_key; |
|
352 | + $_order = $_value; |
|
353 | + } |
|
354 | + |
|
355 | + $parsed = $this->parse_orderby( $_orderby, $table ); |
|
356 | + |
|
357 | + if ( $parsed ) { |
|
358 | + $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order ); |
|
359 | + } |
|
360 | + |
|
361 | + } |
|
362 | + |
|
363 | + // If no valid clauses were found, order by id. |
|
364 | + if ( empty( $orderby_array ) ) { |
|
365 | + $orderby_array[] = "id $order"; |
|
366 | + } |
|
367 | + |
|
368 | + $this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array ); |
|
369 | + |
|
370 | + } |
|
371 | + |
|
372 | + /** |
|
373 | + * Execute the query, with the current variables. |
|
374 | + * |
|
375 | + * @since 1.0.19 |
|
376 | + * |
|
377 | + * @global wpdb $wpdb WordPress database abstraction object. |
|
378 | + */ |
|
379 | + public function query() { |
|
380 | + global $wpdb; |
|
381 | + |
|
382 | + $qv =& $this->query_vars; |
|
383 | + |
|
384 | + // Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the |
|
385 | + // total_subscriptions property. |
|
386 | + $this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) ); |
|
387 | + |
|
388 | + if ( null === $this->results ) { |
|
389 | + $this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit"; |
|
390 | + |
|
391 | + if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) { |
|
392 | + $this->results = $wpdb->get_results( $this->request ); |
|
393 | + } else { |
|
394 | + $this->results = $wpdb->get_col( $this->request ); |
|
395 | + } |
|
396 | + |
|
397 | + if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
398 | + $found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this ); |
|
399 | + $this->total_subscriptions = (int) $wpdb->get_var( $found_subscriptions_query ); |
|
400 | + } |
|
401 | + } |
|
402 | + |
|
403 | + if ( 'all' == $qv['fields'] ) { |
|
404 | + foreach ( $this->results as $key => $subscription ) { |
|
405 | + wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' ); |
|
406 | + wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' ); |
|
407 | + wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
408 | + wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
409 | + $this->results[ $key ] = new WPInv_Subscription( $subscription ); |
|
410 | + } |
|
411 | + } |
|
412 | + |
|
413 | + } |
|
414 | + |
|
415 | + /** |
|
416 | + * Retrieve query variable. |
|
417 | + * |
|
418 | + * @since 1.0.19 |
|
419 | + * |
|
420 | + * @param string $query_var Query variable key. |
|
421 | + * @return mixed |
|
422 | + */ |
|
423 | + public function get( $query_var ) { |
|
424 | + if ( isset( $this->query_vars[ $query_var ] ) ) { |
|
425 | + return $this->query_vars[ $query_var ]; |
|
426 | + } |
|
427 | + |
|
428 | + return null; |
|
429 | + } |
|
430 | + |
|
431 | + /** |
|
432 | + * Set query variable. |
|
433 | + * |
|
434 | + * @since 1.0.19 |
|
435 | + * |
|
436 | + * @param string $query_var Query variable key. |
|
437 | + * @param mixed $value Query variable value. |
|
438 | + */ |
|
439 | + public function set( $query_var, $value ) { |
|
440 | + $this->query_vars[ $query_var ] = $value; |
|
441 | + } |
|
442 | + |
|
443 | + /** |
|
444 | + * Return the list of subscriptions. |
|
445 | + * |
|
446 | + * @since 1.0.19 |
|
447 | + * |
|
448 | + * @return WPInv_Subscription[]|array Found subscriptions. |
|
449 | + */ |
|
450 | + public function get_results() { |
|
451 | + return $this->results; |
|
452 | + } |
|
453 | + |
|
454 | + /** |
|
455 | + * Return the total number of subscriptions for the current query. |
|
456 | + * |
|
457 | + * @since 1.0.19 |
|
458 | + * |
|
459 | + * @return int Number of total subscriptions. |
|
460 | + */ |
|
461 | + public function get_total() { |
|
462 | + return $this->total_subscriptions; |
|
463 | + } |
|
464 | + |
|
465 | + /** |
|
466 | + * Parse and sanitize 'orderby' keys passed to the subscriptions query. |
|
467 | + * |
|
468 | + * @since 1.0.19 |
|
469 | + * |
|
470 | + * @param string $orderby Alias for the field to order by. |
|
471 | + * @param string $table The current table. |
|
472 | + * @return string Value to use in the ORDER clause, if `$orderby` is valid. |
|
473 | + */ |
|
474 | + protected function parse_orderby( $orderby, $table ) { |
|
475 | + |
|
476 | + $_orderby = ''; |
|
477 | + if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) { |
|
478 | + $_orderby = "$table.`$orderby`"; |
|
479 | + } elseif ( 'id' === strtolower( $orderby ) ) { |
|
480 | + $_orderby = "$table.id"; |
|
481 | + } elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) { |
|
482 | + $include = wp_parse_id_list( $this->query_vars['include'] ); |
|
483 | + $include_sql = implode( ',', $include ); |
|
484 | + $_orderby = "FIELD( $table.id, $include_sql )"; |
|
485 | + } |
|
486 | + |
|
487 | + return $_orderby; |
|
488 | + } |
|
489 | + |
|
490 | + /** |
|
491 | + * Parse an 'order' query variable and cast it to ASC or DESC as necessary. |
|
492 | + * |
|
493 | + * @since 1.0.19 |
|
494 | + * |
|
495 | + * @param string $order The 'order' query variable. |
|
496 | + * @return string The sanitized 'order' query variable. |
|
497 | + */ |
|
498 | + protected function parse_order( $order ) { |
|
499 | + if ( ! is_string( $order ) || empty( $order ) ) { |
|
500 | + return 'DESC'; |
|
501 | + } |
|
502 | + |
|
503 | + if ( 'ASC' === strtoupper( $order ) ) { |
|
504 | + return 'ASC'; |
|
505 | + } else { |
|
506 | + return 'DESC'; |
|
507 | + } |
|
508 | + } |
|
509 | 509 | |
510 | 510 | } |
@@ -97,9 +97,9 @@ discard block |
||
97 | 97 | * |
98 | 98 | * @param null|string|array $query Optional. The query variables. |
99 | 99 | */ |
100 | - public function __construct( $query = null ) { |
|
101 | - if ( ! is_null( $query ) ) { |
|
102 | - $this->prepare_query( $query ); |
|
100 | + public function __construct($query = null) { |
|
101 | + if (!is_null($query)) { |
|
102 | + $this->prepare_query($query); |
|
103 | 103 | $this->query(); |
104 | 104 | } |
105 | 105 | } |
@@ -112,7 +112,7 @@ discard block |
||
112 | 112 | * @param string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`. |
113 | 113 | * @return array Complete query variables with undefined ones filled in with defaults. |
114 | 114 | */ |
115 | - public static function fill_query_vars( $args ) { |
|
115 | + public static function fill_query_vars($args) { |
|
116 | 116 | $defaults = array( |
117 | 117 | 'status' => 'all', |
118 | 118 | 'customer_in' => array(), |
@@ -130,7 +130,7 @@ discard block |
||
130 | 130 | 'fields' => 'all', |
131 | 131 | ); |
132 | 132 | |
133 | - return wp_parse_args( $args, $defaults ); |
|
133 | + return wp_parse_args($args, $defaults); |
|
134 | 134 | } |
135 | 135 | |
136 | 136 | /** |
@@ -182,45 +182,45 @@ discard block |
||
182 | 182 | * Use 'all' for all fields. Default 'all'. |
183 | 183 | * } |
184 | 184 | */ |
185 | - public function prepare_query( $query = array() ) { |
|
185 | + public function prepare_query($query = array()) { |
|
186 | 186 | global $wpdb; |
187 | 187 | |
188 | - if ( empty( $this->query_vars ) || ! empty( $query ) ) { |
|
188 | + if (empty($this->query_vars) || !empty($query)) { |
|
189 | 189 | $this->query_limit = null; |
190 | - $this->query_vars = $this->fill_query_vars( $query ); |
|
190 | + $this->query_vars = $this->fill_query_vars($query); |
|
191 | 191 | } |
192 | 192 | |
193 | - if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) { |
|
194 | - $this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] ); |
|
193 | + if (!empty($this->query_vars['fields']) && 'all' !== $this->query_vars['fields']) { |
|
194 | + $this->query_vars['fields'] = wpinv_parse_list($this->query_vars['fields']); |
|
195 | 195 | } |
196 | 196 | |
197 | - do_action( 'getpaid_pre_get_subscriptions', array( &$this ) ); |
|
197 | + do_action('getpaid_pre_get_subscriptions', array(&$this)); |
|
198 | 198 | |
199 | 199 | // Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'. |
200 | - $qv =& $this->query_vars; |
|
201 | - $qv = $this->fill_query_vars( $qv ); |
|
200 | + $qv = & $this->query_vars; |
|
201 | + $qv = $this->fill_query_vars($qv); |
|
202 | 202 | $table = $wpdb->prefix . 'wpinv_subscriptions'; |
203 | 203 | $this->query_from = "FROM $table"; |
204 | 204 | |
205 | 205 | // Prepare query fields. |
206 | - $this->prepare_query_fields( $qv, $table ); |
|
206 | + $this->prepare_query_fields($qv, $table); |
|
207 | 207 | |
208 | 208 | // Prepare query where. |
209 | - $this->prepare_query_where( $qv, $table ); |
|
209 | + $this->prepare_query_where($qv, $table); |
|
210 | 210 | |
211 | 211 | // Prepare query order. |
212 | - $this->prepare_query_order( $qv, $table ); |
|
212 | + $this->prepare_query_order($qv, $table); |
|
213 | 213 | |
214 | 214 | // limit |
215 | - if ( isset( $qv['number'] ) && $qv['number'] > 0 ) { |
|
216 | - if ( $qv['offset'] ) { |
|
217 | - $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] ); |
|
215 | + if (isset($qv['number']) && $qv['number'] > 0) { |
|
216 | + if ($qv['offset']) { |
|
217 | + $this->query_limit = $wpdb->prepare('LIMIT %d, %d', $qv['offset'], $qv['number']); |
|
218 | 218 | } else { |
219 | - $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] ); |
|
219 | + $this->query_limit = $wpdb->prepare('LIMIT %d, %d', $qv['number'] * ($qv['paged'] - 1), $qv['number']); |
|
220 | 220 | } |
221 | 221 | } |
222 | 222 | |
223 | - do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) ); |
|
223 | + do_action_ref_array('getpaid_after_subscriptions_query', array(&$this)); |
|
224 | 224 | } |
225 | 225 | |
226 | 226 | /** |
@@ -231,22 +231,22 @@ discard block |
||
231 | 231 | * @param array $qv Query vars. |
232 | 232 | * @param string $table Table name. |
233 | 233 | */ |
234 | - protected function prepare_query_fields( &$qv, $table ) { |
|
234 | + protected function prepare_query_fields(&$qv, $table) { |
|
235 | 235 | |
236 | - if ( is_array( $qv['fields'] ) ) { |
|
237 | - $qv['fields'] = array_unique( $qv['fields'] ); |
|
236 | + if (is_array($qv['fields'])) { |
|
237 | + $qv['fields'] = array_unique($qv['fields']); |
|
238 | 238 | |
239 | 239 | $query_fields = array(); |
240 | - foreach ( $qv['fields'] as $field ) { |
|
241 | - $field = sanitize_key( $field ); |
|
240 | + foreach ($qv['fields'] as $field) { |
|
241 | + $field = sanitize_key($field); |
|
242 | 242 | $query_fields[] = "$table.`$field`"; |
243 | 243 | } |
244 | - $this->query_fields = implode( ',', $query_fields ); |
|
244 | + $this->query_fields = implode(',', $query_fields); |
|
245 | 245 | } else { |
246 | 246 | $this->query_fields = "$table.*"; |
247 | 247 | } |
248 | 248 | |
249 | - if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
249 | + if (isset($qv['count_total']) && $qv['count_total']) { |
|
250 | 250 | $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields; |
251 | 251 | } |
252 | 252 | |
@@ -260,58 +260,58 @@ discard block |
||
260 | 260 | * @param array $qv Query vars. |
261 | 261 | * @param string $table Table name. |
262 | 262 | */ |
263 | - protected function prepare_query_where( &$qv, $table ) { |
|
263 | + protected function prepare_query_where(&$qv, $table) { |
|
264 | 264 | global $wpdb; |
265 | 265 | $this->query_where = 'WHERE 1=1'; |
266 | 266 | |
267 | 267 | // Status. |
268 | - if ( 'all' !== $qv['status'] ) { |
|
269 | - $statuses = wpinv_clean( wpinv_parse_list( $qv['status'] ) ); |
|
270 | - $prepared_statuses = join( ',', array_fill( 0, count( $statuses ), '%s' ) ); |
|
271 | - $this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses ); |
|
268 | + if ('all' !== $qv['status']) { |
|
269 | + $statuses = wpinv_clean(wpinv_parse_list($qv['status'])); |
|
270 | + $prepared_statuses = join(',', array_fill(0, count($statuses), '%s')); |
|
271 | + $this->query_where .= $wpdb->prepare(" AND $table.`status` IN ( $prepared_statuses )", $statuses); |
|
272 | 272 | } |
273 | 273 | |
274 | - if ( ! empty( $qv['customer_in'] ) ) { |
|
275 | - $customer_in = implode( ',', wp_parse_id_list( $qv['customer_in'] ) ); |
|
274 | + if (!empty($qv['customer_in'])) { |
|
275 | + $customer_in = implode(',', wp_parse_id_list($qv['customer_in'])); |
|
276 | 276 | $this->query_where .= " AND $table.`customer_id` IN ($customer_in)"; |
277 | - } elseif ( ! empty( $qv['customer_not_in'] ) ) { |
|
278 | - $customer_not_in = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) ); |
|
277 | + } elseif (!empty($qv['customer_not_in'])) { |
|
278 | + $customer_not_in = implode(',', wp_parse_id_list($qv['customer_not_in'])); |
|
279 | 279 | $this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)"; |
280 | 280 | } |
281 | 281 | |
282 | - if ( ! empty( $qv['product_in'] ) ) { |
|
283 | - $product_in = implode( ',', wp_parse_id_list( $qv['product_in'] ) ); |
|
282 | + if (!empty($qv['product_in'])) { |
|
283 | + $product_in = implode(',', wp_parse_id_list($qv['product_in'])); |
|
284 | 284 | $this->query_where .= " AND $table.`product_id` IN ($product_in)"; |
285 | - } elseif ( ! empty( $qv['product_not_in'] ) ) { |
|
286 | - $product_not_in = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) ); |
|
285 | + } elseif (!empty($qv['product_not_in'])) { |
|
286 | + $product_not_in = implode(',', wp_parse_id_list($qv['product_not_in'])); |
|
287 | 287 | $this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)"; |
288 | 288 | } |
289 | 289 | |
290 | - if ( ! empty( $qv['invoice_in'] ) ) { |
|
291 | - $invoice_in = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) ); |
|
290 | + if (!empty($qv['invoice_in'])) { |
|
291 | + $invoice_in = implode(',', wp_parse_id_list($qv['invoice_in'])); |
|
292 | 292 | $this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)"; |
293 | - } elseif ( ! empty( $qv['invoice_not_in'] ) ) { |
|
294 | - $invoice_not_in = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) ); |
|
293 | + } elseif (!empty($qv['invoice_not_in'])) { |
|
294 | + $invoice_not_in = implode(',', wp_parse_id_list($qv['invoice_not_in'])); |
|
295 | 295 | $this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)"; |
296 | 296 | } |
297 | 297 | |
298 | - if ( ! empty( $qv['include'] ) ) { |
|
299 | - $include = implode( ',', wp_parse_id_list( $qv['include'] ) ); |
|
298 | + if (!empty($qv['include'])) { |
|
299 | + $include = implode(',', wp_parse_id_list($qv['include'])); |
|
300 | 300 | $this->query_where .= " AND $table.`id` IN ($include)"; |
301 | - } elseif ( ! empty( $qv['exclude'] ) ) { |
|
302 | - $exclude = implode( ',', wp_parse_id_list( $qv['exclude'] ) ); |
|
301 | + } elseif (!empty($qv['exclude'])) { |
|
302 | + $exclude = implode(',', wp_parse_id_list($qv['exclude'])); |
|
303 | 303 | $this->query_where .= " AND $table.`id` NOT IN ($exclude)"; |
304 | 304 | } |
305 | 305 | |
306 | 306 | // Date queries are allowed for the subscription creation date. |
307 | - if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) { |
|
308 | - $date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" ); |
|
307 | + if (!empty($qv['date_created_query']) && is_array($qv['date_created_query'])) { |
|
308 | + $date_created_query = new WP_Date_Query($qv['date_created_query'], "$table.created"); |
|
309 | 309 | $this->query_where .= $date_created_query->get_sql(); |
310 | 310 | } |
311 | 311 | |
312 | 312 | // Date queries are also allowed for the subscription expiration date. |
313 | - if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) { |
|
314 | - $date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" ); |
|
313 | + if (!empty($qv['date_expires_query']) && is_array($qv['date_expires_query'])) { |
|
314 | + $date_expires_query = new WP_Date_Query($qv['date_expires_query'], "$table.expiration"); |
|
315 | 315 | $this->query_where .= $date_expires_query->get_sql(); |
316 | 316 | } |
317 | 317 | |
@@ -325,24 +325,24 @@ discard block |
||
325 | 325 | * @param array $qv Query vars. |
326 | 326 | * @param string $table Table name. |
327 | 327 | */ |
328 | - protected function prepare_query_order( &$qv, $table ) { |
|
328 | + protected function prepare_query_order(&$qv, $table) { |
|
329 | 329 | |
330 | 330 | // sorting. |
331 | - $qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : ''; |
|
332 | - $order = $this->parse_order( $qv['order'] ); |
|
331 | + $qv['order'] = isset($qv['order']) ? strtoupper($qv['order']) : ''; |
|
332 | + $order = $this->parse_order($qv['order']); |
|
333 | 333 | |
334 | 334 | // Default order is by 'id' (latest subscriptions). |
335 | - if ( empty( $qv['orderby'] ) ) { |
|
336 | - $qv['orderby'] = array( 'id' ); |
|
335 | + if (empty($qv['orderby'])) { |
|
336 | + $qv['orderby'] = array('id'); |
|
337 | 337 | } |
338 | 338 | |
339 | 339 | // 'orderby' values may be an array, comma- or space-separated list. |
340 | - $ordersby = array_filter( wpinv_parse_list( $qv['orderby'] ) ); |
|
340 | + $ordersby = array_filter(wpinv_parse_list($qv['orderby'])); |
|
341 | 341 | |
342 | 342 | $orderby_array = array(); |
343 | - foreach ( $ordersby as $_key => $_value ) { |
|
343 | + foreach ($ordersby as $_key => $_value) { |
|
344 | 344 | |
345 | - if ( is_int( $_key ) ) { |
|
345 | + if (is_int($_key)) { |
|
346 | 346 | // Integer key means this is a flat array of 'orderby' fields. |
347 | 347 | $_orderby = $_value; |
348 | 348 | $_order = $order; |
@@ -352,20 +352,20 @@ discard block |
||
352 | 352 | $_order = $_value; |
353 | 353 | } |
354 | 354 | |
355 | - $parsed = $this->parse_orderby( $_orderby, $table ); |
|
355 | + $parsed = $this->parse_orderby($_orderby, $table); |
|
356 | 356 | |
357 | - if ( $parsed ) { |
|
358 | - $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order ); |
|
357 | + if ($parsed) { |
|
358 | + $orderby_array[] = $parsed . ' ' . $this->parse_order($_order); |
|
359 | 359 | } |
360 | 360 | |
361 | 361 | } |
362 | 362 | |
363 | 363 | // If no valid clauses were found, order by id. |
364 | - if ( empty( $orderby_array ) ) { |
|
364 | + if (empty($orderby_array)) { |
|
365 | 365 | $orderby_array[] = "id $order"; |
366 | 366 | } |
367 | 367 | |
368 | - $this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array ); |
|
368 | + $this->query_orderby = 'ORDER BY ' . implode(', ', $orderby_array); |
|
369 | 369 | |
370 | 370 | } |
371 | 371 | |
@@ -379,34 +379,34 @@ discard block |
||
379 | 379 | public function query() { |
380 | 380 | global $wpdb; |
381 | 381 | |
382 | - $qv =& $this->query_vars; |
|
382 | + $qv = & $this->query_vars; |
|
383 | 383 | |
384 | 384 | // Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the |
385 | 385 | // total_subscriptions property. |
386 | - $this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) ); |
|
386 | + $this->results = apply_filters_ref_array('getpaid_subscriptions_pre_query', array(null, &$this)); |
|
387 | 387 | |
388 | - if ( null === $this->results ) { |
|
388 | + if (null === $this->results) { |
|
389 | 389 | $this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit"; |
390 | 390 | |
391 | - if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) { |
|
392 | - $this->results = $wpdb->get_results( $this->request ); |
|
391 | + if ((is_array($qv['fields']) && 1 != count($qv['fields'])) || 'all' == $qv['fields']) { |
|
392 | + $this->results = $wpdb->get_results($this->request); |
|
393 | 393 | } else { |
394 | - $this->results = $wpdb->get_col( $this->request ); |
|
394 | + $this->results = $wpdb->get_col($this->request); |
|
395 | 395 | } |
396 | 396 | |
397 | - if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { |
|
398 | - $found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this ); |
|
399 | - $this->total_subscriptions = (int) $wpdb->get_var( $found_subscriptions_query ); |
|
397 | + if (isset($qv['count_total']) && $qv['count_total']) { |
|
398 | + $found_subscriptions_query = apply_filters('getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this); |
|
399 | + $this->total_subscriptions = (int) $wpdb->get_var($found_subscriptions_query); |
|
400 | 400 | } |
401 | 401 | } |
402 | 402 | |
403 | - if ( 'all' == $qv['fields'] ) { |
|
404 | - foreach ( $this->results as $key => $subscription ) { |
|
405 | - wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' ); |
|
406 | - wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' ); |
|
407 | - wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
408 | - wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' ); |
|
409 | - $this->results[ $key ] = new WPInv_Subscription( $subscription ); |
|
403 | + if ('all' == $qv['fields']) { |
|
404 | + foreach ($this->results as $key => $subscription) { |
|
405 | + wp_cache_set($subscription->id, $subscription, 'getpaid_subscriptions'); |
|
406 | + wp_cache_set($subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids'); |
|
407 | + wp_cache_set($subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids'); |
|
408 | + wp_cache_set($subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids'); |
|
409 | + $this->results[$key] = new WPInv_Subscription($subscription); |
|
410 | 410 | } |
411 | 411 | } |
412 | 412 | |
@@ -420,9 +420,9 @@ discard block |
||
420 | 420 | * @param string $query_var Query variable key. |
421 | 421 | * @return mixed |
422 | 422 | */ |
423 | - public function get( $query_var ) { |
|
424 | - if ( isset( $this->query_vars[ $query_var ] ) ) { |
|
425 | - return $this->query_vars[ $query_var ]; |
|
423 | + public function get($query_var) { |
|
424 | + if (isset($this->query_vars[$query_var])) { |
|
425 | + return $this->query_vars[$query_var]; |
|
426 | 426 | } |
427 | 427 | |
428 | 428 | return null; |
@@ -436,8 +436,8 @@ discard block |
||
436 | 436 | * @param string $query_var Query variable key. |
437 | 437 | * @param mixed $value Query variable value. |
438 | 438 | */ |
439 | - public function set( $query_var, $value ) { |
|
440 | - $this->query_vars[ $query_var ] = $value; |
|
439 | + public function set($query_var, $value) { |
|
440 | + $this->query_vars[$query_var] = $value; |
|
441 | 441 | } |
442 | 442 | |
443 | 443 | /** |
@@ -471,16 +471,16 @@ discard block |
||
471 | 471 | * @param string $table The current table. |
472 | 472 | * @return string Value to use in the ORDER clause, if `$orderby` is valid. |
473 | 473 | */ |
474 | - protected function parse_orderby( $orderby, $table ) { |
|
474 | + protected function parse_orderby($orderby, $table) { |
|
475 | 475 | |
476 | 476 | $_orderby = ''; |
477 | - if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) { |
|
477 | + if (in_array($orderby, array('customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id'))) { |
|
478 | 478 | $_orderby = "$table.`$orderby`"; |
479 | - } elseif ( 'id' === strtolower( $orderby ) ) { |
|
479 | + } elseif ('id' === strtolower($orderby)) { |
|
480 | 480 | $_orderby = "$table.id"; |
481 | - } elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) { |
|
482 | - $include = wp_parse_id_list( $this->query_vars['include'] ); |
|
483 | - $include_sql = implode( ',', $include ); |
|
481 | + } elseif ('include' === $orderby && !empty($this->query_vars['include'])) { |
|
482 | + $include = wp_parse_id_list($this->query_vars['include']); |
|
483 | + $include_sql = implode(',', $include); |
|
484 | 484 | $_orderby = "FIELD( $table.id, $include_sql )"; |
485 | 485 | } |
486 | 486 | |
@@ -495,12 +495,12 @@ discard block |
||
495 | 495 | * @param string $order The 'order' query variable. |
496 | 496 | * @return string The sanitized 'order' query variable. |
497 | 497 | */ |
498 | - protected function parse_order( $order ) { |
|
499 | - if ( ! is_string( $order ) || empty( $order ) ) { |
|
498 | + protected function parse_order($order) { |
|
499 | + if (!is_string($order) || empty($order)) { |
|
500 | 500 | return 'DESC'; |
501 | 501 | } |
502 | 502 | |
503 | - if ( 'ASC' === strtoupper( $order ) ) { |
|
503 | + if ('ASC' === strtoupper($order)) { |
|
504 | 504 | return 'ASC'; |
505 | 505 | } else { |
506 | 506 | return 'DESC'; |
@@ -14,144 +14,144 @@ discard block |
||
14 | 14 | */ |
15 | 15 | class WPInv_Subscriptions_Widget extends WP_Super_Duper { |
16 | 16 | |
17 | - /** |
|
18 | - * Register the widget with WordPress. |
|
19 | - * |
|
20 | - */ |
|
21 | - public function __construct() { |
|
22 | - |
|
23 | - $options = array( |
|
24 | - 'textdomain' => 'invoicing', |
|
25 | - 'block-icon' => 'controls-repeat', |
|
26 | - 'block-category'=> 'widgets', |
|
27 | - 'block-keywords'=> "['invoicing','subscriptions', 'getpaid']", |
|
28 | - 'class_name' => __CLASS__, |
|
29 | - 'base_id' => 'wpinv_subscriptions', |
|
30 | - 'name' => __( 'GetPaid > Subscriptions', 'invoicing' ), |
|
31 | - 'widget_ops' => array( |
|
32 | - 'classname' => 'getpaid-subscriptions bsui', |
|
33 | - 'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ), |
|
34 | - ), |
|
35 | - 'arguments' => array( |
|
36 | - 'title' => array( |
|
37 | - 'title' => __( 'Widget title', 'invoicing' ), |
|
38 | - 'desc' => __( 'Enter widget title.', 'invoicing' ), |
|
39 | - 'type' => 'text', |
|
40 | - 'desc_tip' => true, |
|
41 | - 'default' => '', |
|
42 | - 'advanced' => false |
|
43 | - ), |
|
44 | - ) |
|
45 | - |
|
46 | - ); |
|
47 | - |
|
48 | - |
|
49 | - parent::__construct( $options ); |
|
50 | - } |
|
51 | - |
|
52 | - /** |
|
53 | - * Retrieves current user's subscriptions. |
|
54 | - * |
|
55 | - * @return GetPaid_Subscriptions_Query |
|
56 | - */ |
|
57 | - public function get_subscriptions() { |
|
58 | - |
|
59 | - // Prepare license args. |
|
60 | - $args = array( |
|
61 | - 'customer_in' => get_current_user_id(), |
|
62 | - 'paged' => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1, |
|
63 | - ); |
|
64 | - |
|
65 | - return new GetPaid_Subscriptions_Query( $args ); |
|
66 | - |
|
67 | - } |
|
68 | - |
|
69 | - /** |
|
70 | - * The Super block output function. |
|
71 | - * |
|
72 | - * @param array $args |
|
73 | - * @param array $widget_args |
|
74 | - * @param string $content |
|
75 | - * |
|
76 | - * @return mixed|string|bool |
|
77 | - */ |
|
78 | - public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
79 | - |
|
80 | - // Ensure that the user is logged in. |
|
81 | - if ( ! is_user_logged_in() ) { |
|
82 | - |
|
83 | - return aui()->alert( |
|
84 | - array( |
|
85 | - 'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ), |
|
86 | - 'type' => 'error', |
|
87 | - ) |
|
88 | - ); |
|
89 | - |
|
90 | - } |
|
91 | - |
|
92 | - // Are we displaying a single subscription? |
|
93 | - if ( isset( $_GET['subscription'] ) ) { |
|
94 | - return $this->display_single_subscription( trim( $_GET['subscription'] ) ); |
|
95 | - } |
|
96 | - |
|
97 | - // Retrieve the user's subscriptions. |
|
98 | - $subscriptions = $this->get_subscriptions(); |
|
99 | - |
|
100 | - // Start the output buffer. |
|
101 | - ob_start(); |
|
102 | - |
|
103 | - // Backwards compatibility. |
|
104 | - do_action( 'wpinv_before_user_subscriptions' ); |
|
105 | - |
|
106 | - // Display errors and notices. |
|
107 | - wpinv_print_errors(); |
|
108 | - |
|
109 | - do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions ); |
|
110 | - |
|
111 | - // Print the table header. |
|
112 | - $this->print_table_header(); |
|
113 | - |
|
114 | - // Print table body. |
|
115 | - $this->print_table_body( $subscriptions->get_results() ); |
|
116 | - |
|
117 | - // Print table footer. |
|
118 | - $this->print_table_footer(); |
|
119 | - |
|
120 | - // Print the navigation. |
|
121 | - $this->print_navigation( $subscriptions->get_total() ); |
|
122 | - |
|
123 | - // Backwards compatibility. |
|
124 | - do_action( 'wpinv_after_user_subscriptions' ); |
|
125 | - |
|
126 | - // Return the output. |
|
127 | - return ob_get_clean(); |
|
128 | - |
|
129 | - } |
|
130 | - |
|
131 | - /** |
|
132 | - * Retrieves the subscription columns. |
|
133 | - * |
|
134 | - * @return array |
|
135 | - */ |
|
136 | - public function get_subscriptions_table_columns() { |
|
17 | + /** |
|
18 | + * Register the widget with WordPress. |
|
19 | + * |
|
20 | + */ |
|
21 | + public function __construct() { |
|
22 | + |
|
23 | + $options = array( |
|
24 | + 'textdomain' => 'invoicing', |
|
25 | + 'block-icon' => 'controls-repeat', |
|
26 | + 'block-category'=> 'widgets', |
|
27 | + 'block-keywords'=> "['invoicing','subscriptions', 'getpaid']", |
|
28 | + 'class_name' => __CLASS__, |
|
29 | + 'base_id' => 'wpinv_subscriptions', |
|
30 | + 'name' => __( 'GetPaid > Subscriptions', 'invoicing' ), |
|
31 | + 'widget_ops' => array( |
|
32 | + 'classname' => 'getpaid-subscriptions bsui', |
|
33 | + 'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ), |
|
34 | + ), |
|
35 | + 'arguments' => array( |
|
36 | + 'title' => array( |
|
37 | + 'title' => __( 'Widget title', 'invoicing' ), |
|
38 | + 'desc' => __( 'Enter widget title.', 'invoicing' ), |
|
39 | + 'type' => 'text', |
|
40 | + 'desc_tip' => true, |
|
41 | + 'default' => '', |
|
42 | + 'advanced' => false |
|
43 | + ), |
|
44 | + ) |
|
45 | + |
|
46 | + ); |
|
47 | + |
|
48 | + |
|
49 | + parent::__construct( $options ); |
|
50 | + } |
|
51 | + |
|
52 | + /** |
|
53 | + * Retrieves current user's subscriptions. |
|
54 | + * |
|
55 | + * @return GetPaid_Subscriptions_Query |
|
56 | + */ |
|
57 | + public function get_subscriptions() { |
|
58 | + |
|
59 | + // Prepare license args. |
|
60 | + $args = array( |
|
61 | + 'customer_in' => get_current_user_id(), |
|
62 | + 'paged' => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1, |
|
63 | + ); |
|
64 | + |
|
65 | + return new GetPaid_Subscriptions_Query( $args ); |
|
66 | + |
|
67 | + } |
|
68 | + |
|
69 | + /** |
|
70 | + * The Super block output function. |
|
71 | + * |
|
72 | + * @param array $args |
|
73 | + * @param array $widget_args |
|
74 | + * @param string $content |
|
75 | + * |
|
76 | + * @return mixed|string|bool |
|
77 | + */ |
|
78 | + public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
79 | + |
|
80 | + // Ensure that the user is logged in. |
|
81 | + if ( ! is_user_logged_in() ) { |
|
82 | + |
|
83 | + return aui()->alert( |
|
84 | + array( |
|
85 | + 'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ), |
|
86 | + 'type' => 'error', |
|
87 | + ) |
|
88 | + ); |
|
89 | + |
|
90 | + } |
|
91 | + |
|
92 | + // Are we displaying a single subscription? |
|
93 | + if ( isset( $_GET['subscription'] ) ) { |
|
94 | + return $this->display_single_subscription( trim( $_GET['subscription'] ) ); |
|
95 | + } |
|
96 | + |
|
97 | + // Retrieve the user's subscriptions. |
|
98 | + $subscriptions = $this->get_subscriptions(); |
|
99 | + |
|
100 | + // Start the output buffer. |
|
101 | + ob_start(); |
|
102 | + |
|
103 | + // Backwards compatibility. |
|
104 | + do_action( 'wpinv_before_user_subscriptions' ); |
|
105 | + |
|
106 | + // Display errors and notices. |
|
107 | + wpinv_print_errors(); |
|
108 | + |
|
109 | + do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions ); |
|
110 | + |
|
111 | + // Print the table header. |
|
112 | + $this->print_table_header(); |
|
113 | + |
|
114 | + // Print table body. |
|
115 | + $this->print_table_body( $subscriptions->get_results() ); |
|
116 | + |
|
117 | + // Print table footer. |
|
118 | + $this->print_table_footer(); |
|
119 | + |
|
120 | + // Print the navigation. |
|
121 | + $this->print_navigation( $subscriptions->get_total() ); |
|
122 | + |
|
123 | + // Backwards compatibility. |
|
124 | + do_action( 'wpinv_after_user_subscriptions' ); |
|
125 | + |
|
126 | + // Return the output. |
|
127 | + return ob_get_clean(); |
|
128 | + |
|
129 | + } |
|
130 | + |
|
131 | + /** |
|
132 | + * Retrieves the subscription columns. |
|
133 | + * |
|
134 | + * @return array |
|
135 | + */ |
|
136 | + public function get_subscriptions_table_columns() { |
|
137 | 137 | |
138 | - $columns = array( |
|
139 | - 'subscription' => __( 'Subscription', 'invoicing' ), |
|
140 | - 'amount' => __( 'Amount', 'invoicing' ), |
|
141 | - 'renewal-date' => __( 'Next payment', 'invoicing' ), |
|
142 | - 'status' => __( 'Status', 'invoicing' ), |
|
143 | - ); |
|
138 | + $columns = array( |
|
139 | + 'subscription' => __( 'Subscription', 'invoicing' ), |
|
140 | + 'amount' => __( 'Amount', 'invoicing' ), |
|
141 | + 'renewal-date' => __( 'Next payment', 'invoicing' ), |
|
142 | + 'status' => __( 'Status', 'invoicing' ), |
|
143 | + ); |
|
144 | 144 | |
145 | - return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns ); |
|
146 | - } |
|
145 | + return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns ); |
|
146 | + } |
|
147 | 147 | |
148 | - /** |
|
149 | - * Displays the table header. |
|
150 | - * |
|
151 | - */ |
|
152 | - public function print_table_header() { |
|
148 | + /** |
|
149 | + * Displays the table header. |
|
150 | + * |
|
151 | + */ |
|
152 | + public function print_table_header() { |
|
153 | 153 | |
154 | - ?> |
|
154 | + ?> |
|
155 | 155 | |
156 | 156 | <table class="table table-bordered table-striped"> |
157 | 157 | |
@@ -167,120 +167,120 @@ discard block |
||
167 | 167 | |
168 | 168 | <?php |
169 | 169 | |
170 | - } |
|
170 | + } |
|
171 | 171 | |
172 | - /** |
|
173 | - * Displays the table body. |
|
174 | - * |
|
175 | - * @param WPInv_Subscription[] $subscriptions |
|
176 | - */ |
|
177 | - public function print_table_body( $subscriptions ) { |
|
172 | + /** |
|
173 | + * Displays the table body. |
|
174 | + * |
|
175 | + * @param WPInv_Subscription[] $subscriptions |
|
176 | + */ |
|
177 | + public function print_table_body( $subscriptions ) { |
|
178 | 178 | |
179 | - if ( empty( $subscriptions ) ) { |
|
180 | - $this->print_table_body_no_subscriptions(); |
|
181 | - } else { |
|
182 | - $this->print_table_body_subscriptions( $subscriptions ); |
|
183 | - } |
|
179 | + if ( empty( $subscriptions ) ) { |
|
180 | + $this->print_table_body_no_subscriptions(); |
|
181 | + } else { |
|
182 | + $this->print_table_body_subscriptions( $subscriptions ); |
|
183 | + } |
|
184 | 184 | |
185 | - } |
|
185 | + } |
|
186 | 186 | |
187 | - /** |
|
188 | - * Displays the table body if no subscriptions were found. |
|
189 | - * |
|
190 | - */ |
|
191 | - public function print_table_body_no_subscriptions() { |
|
187 | + /** |
|
188 | + * Displays the table body if no subscriptions were found. |
|
189 | + * |
|
190 | + */ |
|
191 | + public function print_table_body_no_subscriptions() { |
|
192 | 192 | |
193 | - ?> |
|
193 | + ?> |
|
194 | 194 | <tbody> |
195 | 195 | |
196 | 196 | <tr> |
197 | 197 | <td colspan="<?php echo count( $this->get_subscriptions_table_columns() ); ?>"> |
198 | 198 | |
199 | 199 | <?php |
200 | - echo aui()->alert( |
|
201 | - array( |
|
202 | - 'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ), |
|
203 | - 'type' => 'warning', |
|
204 | - ) |
|
205 | - ); |
|
206 | - ?> |
|
200 | + echo aui()->alert( |
|
201 | + array( |
|
202 | + 'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ), |
|
203 | + 'type' => 'warning', |
|
204 | + ) |
|
205 | + ); |
|
206 | + ?> |
|
207 | 207 | |
208 | 208 | </td> |
209 | 209 | </tr> |
210 | 210 | |
211 | 211 | </tbody> |
212 | 212 | <?php |
213 | - } |
|
213 | + } |
|
214 | 214 | |
215 | - /** |
|
216 | - * Displays the table body if subscriptions were found. |
|
217 | - * |
|
218 | - * @param WPInv_Subscription[] $subscriptions |
|
219 | - */ |
|
220 | - public function print_table_body_subscriptions( $subscriptions ) { |
|
215 | + /** |
|
216 | + * Displays the table body if subscriptions were found. |
|
217 | + * |
|
218 | + * @param WPInv_Subscription[] $subscriptions |
|
219 | + */ |
|
220 | + public function print_table_body_subscriptions( $subscriptions ) { |
|
221 | 221 | |
222 | - ?> |
|
222 | + ?> |
|
223 | 223 | <tbody> |
224 | 224 | |
225 | 225 | <?php foreach ( $subscriptions as $subscription ) : ?> |
226 | 226 | <tr class="getpaid-subscriptions-table-row subscription-<?php echo (int) $subscription->get_id(); ?>"> |
227 | 227 | <?php |
228 | - wpinv_get_template( |
|
229 | - 'subscriptions/subscriptions-table-row.php', |
|
230 | - array( |
|
231 | - 'subscription' => $subscription, |
|
232 | - 'widget' => $this |
|
233 | - ) |
|
234 | - ); |
|
235 | - ?> |
|
228 | + wpinv_get_template( |
|
229 | + 'subscriptions/subscriptions-table-row.php', |
|
230 | + array( |
|
231 | + 'subscription' => $subscription, |
|
232 | + 'widget' => $this |
|
233 | + ) |
|
234 | + ); |
|
235 | + ?> |
|
236 | 236 | </tr> |
237 | 237 | <?php endforeach; ?> |
238 | 238 | |
239 | 239 | </tbody> |
240 | 240 | <?php |
241 | - } |
|
242 | - |
|
243 | - /** |
|
244 | - * Adds row actions to a column |
|
245 | - * |
|
246 | - * @param string $content column content |
|
247 | - * @param WPInv_Subscription $subscription |
|
248 | - * @since 1.0.0 |
|
249 | - * @return string |
|
250 | - */ |
|
251 | - public function add_row_actions( $content, $subscription ) { |
|
252 | - |
|
253 | - // Prepare row actions. |
|
254 | - $actions = array(); |
|
255 | - |
|
256 | - // View subscription action. |
|
257 | - $view_url = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ) ); |
|
258 | - $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>'; |
|
259 | - |
|
260 | - // Filter the actions. |
|
261 | - $actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription ); |
|
262 | - |
|
263 | - $sanitized = array(); |
|
264 | - foreach ( $actions as $key => $action ) { |
|
265 | - $key = sanitize_html_class( $key ); |
|
266 | - $action = wp_kses_post( $action ); |
|
267 | - $sanitized[] = "<span class='$key'>$action</span>"; |
|
268 | - } |
|
269 | - |
|
270 | - $row_actions = "<small class='form-text getpaid-subscription-item-actions'>"; |
|
271 | - $row_actions .= implode( ' | ', $sanitized ); |
|
272 | - $row_actions .= '</small>'; |
|
273 | - |
|
274 | - return $content . $row_actions; |
|
275 | - } |
|
276 | - |
|
277 | - /** |
|
278 | - * Displays the table footer. |
|
279 | - * |
|
280 | - */ |
|
281 | - public function print_table_footer() { |
|
282 | - |
|
283 | - ?> |
|
241 | + } |
|
242 | + |
|
243 | + /** |
|
244 | + * Adds row actions to a column |
|
245 | + * |
|
246 | + * @param string $content column content |
|
247 | + * @param WPInv_Subscription $subscription |
|
248 | + * @since 1.0.0 |
|
249 | + * @return string |
|
250 | + */ |
|
251 | + public function add_row_actions( $content, $subscription ) { |
|
252 | + |
|
253 | + // Prepare row actions. |
|
254 | + $actions = array(); |
|
255 | + |
|
256 | + // View subscription action. |
|
257 | + $view_url = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ) ); |
|
258 | + $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>'; |
|
259 | + |
|
260 | + // Filter the actions. |
|
261 | + $actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription ); |
|
262 | + |
|
263 | + $sanitized = array(); |
|
264 | + foreach ( $actions as $key => $action ) { |
|
265 | + $key = sanitize_html_class( $key ); |
|
266 | + $action = wp_kses_post( $action ); |
|
267 | + $sanitized[] = "<span class='$key'>$action</span>"; |
|
268 | + } |
|
269 | + |
|
270 | + $row_actions = "<small class='form-text getpaid-subscription-item-actions'>"; |
|
271 | + $row_actions .= implode( ' | ', $sanitized ); |
|
272 | + $row_actions .= '</small>'; |
|
273 | + |
|
274 | + return $content . $row_actions; |
|
275 | + } |
|
276 | + |
|
277 | + /** |
|
278 | + * Displays the table footer. |
|
279 | + * |
|
280 | + */ |
|
281 | + public function print_table_footer() { |
|
282 | + |
|
283 | + ?> |
|
284 | 284 | |
285 | 285 | <tfoot> |
286 | 286 | <tr> |
@@ -295,129 +295,129 @@ discard block |
||
295 | 295 | </table> |
296 | 296 | <?php |
297 | 297 | |
298 | - } |
|
298 | + } |
|
299 | 299 | |
300 | - /** |
|
301 | - * Displays the navigation. |
|
302 | - * |
|
303 | - * @param int $total |
|
304 | - */ |
|
305 | - public function print_navigation( $total ) { |
|
300 | + /** |
|
301 | + * Displays the navigation. |
|
302 | + * |
|
303 | + * @param int $total |
|
304 | + */ |
|
305 | + public function print_navigation( $total ) { |
|
306 | 306 | |
307 | - if ( $total < 1 ) { |
|
307 | + if ( $total < 1 ) { |
|
308 | 308 | |
309 | - // Out-of-bounds, run the query again without LIMIT for total count. |
|
310 | - $args = array( |
|
311 | - 'customer_in' => get_current_user_id(), |
|
312 | - 'fields' => 'id', |
|
313 | - ); |
|
309 | + // Out-of-bounds, run the query again without LIMIT for total count. |
|
310 | + $args = array( |
|
311 | + 'customer_in' => get_current_user_id(), |
|
312 | + 'fields' => 'id', |
|
313 | + ); |
|
314 | 314 | |
315 | - $count_query = new GetPaid_Subscriptions_Query( $args ); |
|
316 | - $total = $count_query->get_total(); |
|
317 | - } |
|
315 | + $count_query = new GetPaid_Subscriptions_Query( $args ); |
|
316 | + $total = $count_query->get_total(); |
|
317 | + } |
|
318 | 318 | |
319 | - // Abort if we do not have pages. |
|
320 | - if ( 2 > $total ) { |
|
321 | - return; |
|
322 | - } |
|
319 | + // Abort if we do not have pages. |
|
320 | + if ( 2 > $total ) { |
|
321 | + return; |
|
322 | + } |
|
323 | 323 | |
324 | - ?> |
|
324 | + ?> |
|
325 | 325 | |
326 | 326 | <div class="getpaid-subscriptions-pagination"> |
327 | 327 | <?php |
328 | - $big = 999999; |
|
329 | - |
|
330 | - echo getpaid_paginate_links( |
|
331 | - array( |
|
332 | - 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
333 | - 'format' => '?paged=%#%', |
|
334 | - 'total' => (int) ceil( $total / 10 ), |
|
335 | - ) |
|
336 | - ); |
|
337 | - ?> |
|
328 | + $big = 999999; |
|
329 | + |
|
330 | + echo getpaid_paginate_links( |
|
331 | + array( |
|
332 | + 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
333 | + 'format' => '?paged=%#%', |
|
334 | + 'total' => (int) ceil( $total / 10 ), |
|
335 | + ) |
|
336 | + ); |
|
337 | + ?> |
|
338 | 338 | </div> |
339 | 339 | |
340 | 340 | <?php |
341 | - } |
|
342 | - |
|
343 | - /** |
|
344 | - * Returns a single subscription's columns. |
|
345 | - * |
|
346 | - * @param WPInv_Subscription $subscription |
|
347 | - * |
|
348 | - * @return array |
|
349 | - */ |
|
350 | - public function get_single_subscription_columns( $subscription ) { |
|
351 | - |
|
352 | - // Prepare subscription detail columns. |
|
353 | - $fields = apply_filters( |
|
354 | - 'getpaid_single_subscription_details_fields', |
|
355 | - array( |
|
356 | - 'status' => __( 'Status', 'invoicing' ), |
|
357 | - 'initial_amount' => __( 'Initial amount', 'invoicing' ), |
|
358 | - 'recurring_amount' => __( 'Recurring amount', 'invoicing' ), |
|
359 | - 'start_date' => __( 'Start date', 'invoicing' ), |
|
360 | - 'expiry_date' => __( 'Next payment', 'invoicing' ), |
|
361 | - 'payments' => __( 'Payments', 'invoicing' ), |
|
362 | - 'item' => __( 'Item', 'invoicing' ), |
|
363 | - ), |
|
364 | - $subscription |
|
365 | - ); |
|
366 | - |
|
367 | - if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) { |
|
368 | - $fields['expiry_date'] = __( 'End date', 'invoicing' ); |
|
369 | - } |
|
370 | - |
|
371 | - if ( $subscription->get_initial_amount() == $subscription->get_recurring_amount() ) { |
|
372 | - unset( $fields['initial_amount'] ); |
|
373 | - } |
|
374 | - |
|
375 | - return $fields; |
|
376 | - } |
|
377 | - |
|
378 | - /** |
|
379 | - * Displays a single subscription. |
|
380 | - * |
|
381 | - * @param string $subscription |
|
382 | - * |
|
383 | - * @return string |
|
384 | - */ |
|
385 | - public function display_single_subscription( $subscription ) { |
|
386 | - |
|
387 | - // Fetch the subscription. |
|
388 | - $subscription = new WPInv_Subscription( (int) $subscription ); |
|
389 | - |
|
390 | - if ( ! $subscription->get_id() ) { |
|
391 | - |
|
392 | - return aui()->alert( |
|
393 | - array( |
|
394 | - 'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ), |
|
395 | - 'type' => 'error', |
|
396 | - ) |
|
397 | - ); |
|
398 | - |
|
399 | - } |
|
400 | - |
|
401 | - // Ensure that the user owns this subscription key. |
|
402 | - if ( get_current_user_id() != $subscription->get_customer_id() ) { |
|
403 | - |
|
404 | - return aui()->alert( |
|
405 | - array( |
|
406 | - 'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ), |
|
407 | - 'type' => 'error', |
|
408 | - ) |
|
409 | - ); |
|
410 | - |
|
411 | - } |
|
412 | - |
|
413 | - return wpinv_get_template_html( |
|
414 | - 'subscriptions/subscription-details.php', |
|
415 | - array( |
|
416 | - 'subscription' => $subscription, |
|
417 | - 'widget' => $this |
|
418 | - ) |
|
419 | - ); |
|
420 | - |
|
421 | - } |
|
341 | + } |
|
342 | + |
|
343 | + /** |
|
344 | + * Returns a single subscription's columns. |
|
345 | + * |
|
346 | + * @param WPInv_Subscription $subscription |
|
347 | + * |
|
348 | + * @return array |
|
349 | + */ |
|
350 | + public function get_single_subscription_columns( $subscription ) { |
|
351 | + |
|
352 | + // Prepare subscription detail columns. |
|
353 | + $fields = apply_filters( |
|
354 | + 'getpaid_single_subscription_details_fields', |
|
355 | + array( |
|
356 | + 'status' => __( 'Status', 'invoicing' ), |
|
357 | + 'initial_amount' => __( 'Initial amount', 'invoicing' ), |
|
358 | + 'recurring_amount' => __( 'Recurring amount', 'invoicing' ), |
|
359 | + 'start_date' => __( 'Start date', 'invoicing' ), |
|
360 | + 'expiry_date' => __( 'Next payment', 'invoicing' ), |
|
361 | + 'payments' => __( 'Payments', 'invoicing' ), |
|
362 | + 'item' => __( 'Item', 'invoicing' ), |
|
363 | + ), |
|
364 | + $subscription |
|
365 | + ); |
|
366 | + |
|
367 | + if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) { |
|
368 | + $fields['expiry_date'] = __( 'End date', 'invoicing' ); |
|
369 | + } |
|
370 | + |
|
371 | + if ( $subscription->get_initial_amount() == $subscription->get_recurring_amount() ) { |
|
372 | + unset( $fields['initial_amount'] ); |
|
373 | + } |
|
374 | + |
|
375 | + return $fields; |
|
376 | + } |
|
377 | + |
|
378 | + /** |
|
379 | + * Displays a single subscription. |
|
380 | + * |
|
381 | + * @param string $subscription |
|
382 | + * |
|
383 | + * @return string |
|
384 | + */ |
|
385 | + public function display_single_subscription( $subscription ) { |
|
386 | + |
|
387 | + // Fetch the subscription. |
|
388 | + $subscription = new WPInv_Subscription( (int) $subscription ); |
|
389 | + |
|
390 | + if ( ! $subscription->get_id() ) { |
|
391 | + |
|
392 | + return aui()->alert( |
|
393 | + array( |
|
394 | + 'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ), |
|
395 | + 'type' => 'error', |
|
396 | + ) |
|
397 | + ); |
|
398 | + |
|
399 | + } |
|
400 | + |
|
401 | + // Ensure that the user owns this subscription key. |
|
402 | + if ( get_current_user_id() != $subscription->get_customer_id() ) { |
|
403 | + |
|
404 | + return aui()->alert( |
|
405 | + array( |
|
406 | + 'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ), |
|
407 | + 'type' => 'error', |
|
408 | + ) |
|
409 | + ); |
|
410 | + |
|
411 | + } |
|
412 | + |
|
413 | + return wpinv_get_template_html( |
|
414 | + 'subscriptions/subscription-details.php', |
|
415 | + array( |
|
416 | + 'subscription' => $subscription, |
|
417 | + 'widget' => $this |
|
418 | + ) |
|
419 | + ); |
|
420 | + |
|
421 | + } |
|
422 | 422 | |
423 | 423 | } |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | * @version 1.0.0 |
6 | 6 | */ |
7 | 7 | |
8 | -defined( 'ABSPATH' ) || exit; |
|
8 | +defined('ABSPATH') || exit; |
|
9 | 9 | |
10 | 10 | /** |
11 | 11 | * Contains the subscriptions widget. |
@@ -27,15 +27,15 @@ discard block |
||
27 | 27 | 'block-keywords'=> "['invoicing','subscriptions', 'getpaid']", |
28 | 28 | 'class_name' => __CLASS__, |
29 | 29 | 'base_id' => 'wpinv_subscriptions', |
30 | - 'name' => __( 'GetPaid > Subscriptions', 'invoicing' ), |
|
30 | + 'name' => __('GetPaid > Subscriptions', 'invoicing'), |
|
31 | 31 | 'widget_ops' => array( |
32 | 32 | 'classname' => 'getpaid-subscriptions bsui', |
33 | - 'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ), |
|
33 | + 'description' => esc_html__("Displays the current user's subscriptions.", 'invoicing'), |
|
34 | 34 | ), |
35 | 35 | 'arguments' => array( |
36 | 36 | 'title' => array( |
37 | - 'title' => __( 'Widget title', 'invoicing' ), |
|
38 | - 'desc' => __( 'Enter widget title.', 'invoicing' ), |
|
37 | + 'title' => __('Widget title', 'invoicing'), |
|
38 | + 'desc' => __('Enter widget title.', 'invoicing'), |
|
39 | 39 | 'type' => 'text', |
40 | 40 | 'desc_tip' => true, |
41 | 41 | 'default' => '', |
@@ -46,7 +46,7 @@ discard block |
||
46 | 46 | ); |
47 | 47 | |
48 | 48 | |
49 | - parent::__construct( $options ); |
|
49 | + parent::__construct($options); |
|
50 | 50 | } |
51 | 51 | |
52 | 52 | /** |
@@ -57,12 +57,12 @@ discard block |
||
57 | 57 | public function get_subscriptions() { |
58 | 58 | |
59 | 59 | // Prepare license args. |
60 | - $args = array( |
|
60 | + $args = array( |
|
61 | 61 | 'customer_in' => get_current_user_id(), |
62 | - 'paged' => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1, |
|
62 | + 'paged' => (get_query_var('paged')) ? absint(get_query_var('paged')) : 1, |
|
63 | 63 | ); |
64 | 64 | |
65 | - return new GetPaid_Subscriptions_Query( $args ); |
|
65 | + return new GetPaid_Subscriptions_Query($args); |
|
66 | 66 | |
67 | 67 | } |
68 | 68 | |
@@ -75,14 +75,14 @@ discard block |
||
75 | 75 | * |
76 | 76 | * @return mixed|string|bool |
77 | 77 | */ |
78 | - public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
78 | + public function output($args = array(), $widget_args = array(), $content = '') { |
|
79 | 79 | |
80 | 80 | // Ensure that the user is logged in. |
81 | - if ( ! is_user_logged_in() ) { |
|
81 | + if (!is_user_logged_in()) { |
|
82 | 82 | |
83 | 83 | return aui()->alert( |
84 | 84 | array( |
85 | - 'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ), |
|
85 | + 'content' => wp_kses_post(__('You need to log-in or create an account to view this section.', 'invoicing')), |
|
86 | 86 | 'type' => 'error', |
87 | 87 | ) |
88 | 88 | ); |
@@ -90,8 +90,8 @@ discard block |
||
90 | 90 | } |
91 | 91 | |
92 | 92 | // Are we displaying a single subscription? |
93 | - if ( isset( $_GET['subscription'] ) ) { |
|
94 | - return $this->display_single_subscription( trim( $_GET['subscription'] ) ); |
|
93 | + if (isset($_GET['subscription'])) { |
|
94 | + return $this->display_single_subscription(trim($_GET['subscription'])); |
|
95 | 95 | } |
96 | 96 | |
97 | 97 | // Retrieve the user's subscriptions. |
@@ -101,27 +101,27 @@ discard block |
||
101 | 101 | ob_start(); |
102 | 102 | |
103 | 103 | // Backwards compatibility. |
104 | - do_action( 'wpinv_before_user_subscriptions' ); |
|
104 | + do_action('wpinv_before_user_subscriptions'); |
|
105 | 105 | |
106 | 106 | // Display errors and notices. |
107 | 107 | wpinv_print_errors(); |
108 | 108 | |
109 | - do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions ); |
|
109 | + do_action('getpaid_license_manager_before_subscriptions', $subscriptions); |
|
110 | 110 | |
111 | 111 | // Print the table header. |
112 | 112 | $this->print_table_header(); |
113 | 113 | |
114 | 114 | // Print table body. |
115 | - $this->print_table_body( $subscriptions->get_results() ); |
|
115 | + $this->print_table_body($subscriptions->get_results()); |
|
116 | 116 | |
117 | 117 | // Print table footer. |
118 | 118 | $this->print_table_footer(); |
119 | 119 | |
120 | 120 | // Print the navigation. |
121 | - $this->print_navigation( $subscriptions->get_total() ); |
|
121 | + $this->print_navigation($subscriptions->get_total()); |
|
122 | 122 | |
123 | 123 | // Backwards compatibility. |
124 | - do_action( 'wpinv_after_user_subscriptions' ); |
|
124 | + do_action('wpinv_after_user_subscriptions'); |
|
125 | 125 | |
126 | 126 | // Return the output. |
127 | 127 | return ob_get_clean(); |
@@ -136,13 +136,13 @@ discard block |
||
136 | 136 | public function get_subscriptions_table_columns() { |
137 | 137 | |
138 | 138 | $columns = array( |
139 | - 'subscription' => __( 'Subscription', 'invoicing' ), |
|
140 | - 'amount' => __( 'Amount', 'invoicing' ), |
|
141 | - 'renewal-date' => __( 'Next payment', 'invoicing' ), |
|
142 | - 'status' => __( 'Status', 'invoicing' ), |
|
139 | + 'subscription' => __('Subscription', 'invoicing'), |
|
140 | + 'amount' => __('Amount', 'invoicing'), |
|
141 | + 'renewal-date' => __('Next payment', 'invoicing'), |
|
142 | + 'status' => __('Status', 'invoicing'), |
|
143 | 143 | ); |
144 | 144 | |
145 | - return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns ); |
|
145 | + return apply_filters('getpaid_frontend_subscriptions_table_columns', $columns); |
|
146 | 146 | } |
147 | 147 | |
148 | 148 | /** |
@@ -157,9 +157,9 @@ discard block |
||
157 | 157 | |
158 | 158 | <thead> |
159 | 159 | <tr> |
160 | - <?php foreach ( $this->get_subscriptions_table_columns() as $key => $label ) : ?> |
|
161 | - <th scope="col" class="getpaid-subscriptions-table-<?php echo sanitize_html_class( $key ); ?>"> |
|
162 | - <?php echo sanitize_text_field( $label ); ?> |
|
160 | + <?php foreach ($this->get_subscriptions_table_columns() as $key => $label) : ?> |
|
161 | + <th scope="col" class="getpaid-subscriptions-table-<?php echo sanitize_html_class($key); ?>"> |
|
162 | + <?php echo sanitize_text_field($label); ?> |
|
163 | 163 | </th> |
164 | 164 | <?php endforeach; ?> |
165 | 165 | </tr> |
@@ -174,12 +174,12 @@ discard block |
||
174 | 174 | * |
175 | 175 | * @param WPInv_Subscription[] $subscriptions |
176 | 176 | */ |
177 | - public function print_table_body( $subscriptions ) { |
|
177 | + public function print_table_body($subscriptions) { |
|
178 | 178 | |
179 | - if ( empty( $subscriptions ) ) { |
|
179 | + if (empty($subscriptions)) { |
|
180 | 180 | $this->print_table_body_no_subscriptions(); |
181 | 181 | } else { |
182 | - $this->print_table_body_subscriptions( $subscriptions ); |
|
182 | + $this->print_table_body_subscriptions($subscriptions); |
|
183 | 183 | } |
184 | 184 | |
185 | 185 | } |
@@ -194,12 +194,12 @@ discard block |
||
194 | 194 | <tbody> |
195 | 195 | |
196 | 196 | <tr> |
197 | - <td colspan="<?php echo count( $this->get_subscriptions_table_columns() ); ?>"> |
|
197 | + <td colspan="<?php echo count($this->get_subscriptions_table_columns()); ?>"> |
|
198 | 198 | |
199 | 199 | <?php |
200 | 200 | echo aui()->alert( |
201 | 201 | array( |
202 | - 'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ), |
|
202 | + 'content' => wp_kses_post(__('No subscriptions found.', 'invoicing')), |
|
203 | 203 | 'type' => 'warning', |
204 | 204 | ) |
205 | 205 | ); |
@@ -217,12 +217,12 @@ discard block |
||
217 | 217 | * |
218 | 218 | * @param WPInv_Subscription[] $subscriptions |
219 | 219 | */ |
220 | - public function print_table_body_subscriptions( $subscriptions ) { |
|
220 | + public function print_table_body_subscriptions($subscriptions) { |
|
221 | 221 | |
222 | 222 | ?> |
223 | 223 | <tbody> |
224 | 224 | |
225 | - <?php foreach ( $subscriptions as $subscription ) : ?> |
|
225 | + <?php foreach ($subscriptions as $subscription) : ?> |
|
226 | 226 | <tr class="getpaid-subscriptions-table-row subscription-<?php echo (int) $subscription->get_id(); ?>"> |
227 | 227 | <?php |
228 | 228 | wpinv_get_template( |
@@ -248,27 +248,27 @@ discard block |
||
248 | 248 | * @since 1.0.0 |
249 | 249 | * @return string |
250 | 250 | */ |
251 | - public function add_row_actions( $content, $subscription ) { |
|
251 | + public function add_row_actions($content, $subscription) { |
|
252 | 252 | |
253 | 253 | // Prepare row actions. |
254 | 254 | $actions = array(); |
255 | 255 | |
256 | 256 | // View subscription action. |
257 | - $view_url = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) ) ); |
|
258 | - $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>'; |
|
257 | + $view_url = esc_url(add_query_arg('subscription', (int) $subscription->get_id(), get_permalink((int) wpinv_get_option('invoice_subscription_page')))); |
|
258 | + $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __('Manage Subscription', 'invoicing') . '</a>'; |
|
259 | 259 | |
260 | 260 | // Filter the actions. |
261 | - $actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription ); |
|
261 | + $actions = apply_filters('getpaid_subscriptions_table_subscription_actions', $actions, $subscription); |
|
262 | 262 | |
263 | - $sanitized = array(); |
|
264 | - foreach ( $actions as $key => $action ) { |
|
265 | - $key = sanitize_html_class( $key ); |
|
266 | - $action = wp_kses_post( $action ); |
|
263 | + $sanitized = array(); |
|
264 | + foreach ($actions as $key => $action) { |
|
265 | + $key = sanitize_html_class($key); |
|
266 | + $action = wp_kses_post($action); |
|
267 | 267 | $sanitized[] = "<span class='$key'>$action</span>"; |
268 | 268 | } |
269 | 269 | |
270 | 270 | $row_actions = "<small class='form-text getpaid-subscription-item-actions'>"; |
271 | - $row_actions .= implode( ' | ', $sanitized ); |
|
271 | + $row_actions .= implode(' | ', $sanitized); |
|
272 | 272 | $row_actions .= '</small>'; |
273 | 273 | |
274 | 274 | return $content . $row_actions; |
@@ -284,9 +284,9 @@ discard block |
||
284 | 284 | |
285 | 285 | <tfoot> |
286 | 286 | <tr> |
287 | - <?php foreach ( $this->get_subscriptions_table_columns() as $key => $label ) : ?> |
|
288 | - <th class="getpaid-subscriptions-<?php echo sanitize_html_class( $key ); ?>"> |
|
289 | - <?php echo sanitize_text_field( $label ); ?> |
|
287 | + <?php foreach ($this->get_subscriptions_table_columns() as $key => $label) : ?> |
|
288 | + <th class="getpaid-subscriptions-<?php echo sanitize_html_class($key); ?>"> |
|
289 | + <?php echo sanitize_text_field($label); ?> |
|
290 | 290 | </th> |
291 | 291 | <?php endforeach; ?> |
292 | 292 | </tr> |
@@ -302,22 +302,22 @@ discard block |
||
302 | 302 | * |
303 | 303 | * @param int $total |
304 | 304 | */ |
305 | - public function print_navigation( $total ) { |
|
305 | + public function print_navigation($total) { |
|
306 | 306 | |
307 | - if ( $total < 1 ) { |
|
307 | + if ($total < 1) { |
|
308 | 308 | |
309 | 309 | // Out-of-bounds, run the query again without LIMIT for total count. |
310 | - $args = array( |
|
310 | + $args = array( |
|
311 | 311 | 'customer_in' => get_current_user_id(), |
312 | 312 | 'fields' => 'id', |
313 | 313 | ); |
314 | 314 | |
315 | - $count_query = new GetPaid_Subscriptions_Query( $args ); |
|
315 | + $count_query = new GetPaid_Subscriptions_Query($args); |
|
316 | 316 | $total = $count_query->get_total(); |
317 | 317 | } |
318 | 318 | |
319 | 319 | // Abort if we do not have pages. |
320 | - if ( 2 > $total ) { |
|
320 | + if (2 > $total) { |
|
321 | 321 | return; |
322 | 322 | } |
323 | 323 | |
@@ -329,9 +329,9 @@ discard block |
||
329 | 329 | |
330 | 330 | echo getpaid_paginate_links( |
331 | 331 | array( |
332 | - 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
332 | + 'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), |
|
333 | 333 | 'format' => '?paged=%#%', |
334 | - 'total' => (int) ceil( $total / 10 ), |
|
334 | + 'total' => (int) ceil($total / 10), |
|
335 | 335 | ) |
336 | 336 | ); |
337 | 337 | ?> |
@@ -347,29 +347,29 @@ discard block |
||
347 | 347 | * |
348 | 348 | * @return array |
349 | 349 | */ |
350 | - public function get_single_subscription_columns( $subscription ) { |
|
350 | + public function get_single_subscription_columns($subscription) { |
|
351 | 351 | |
352 | 352 | // Prepare subscription detail columns. |
353 | 353 | $fields = apply_filters( |
354 | 354 | 'getpaid_single_subscription_details_fields', |
355 | 355 | array( |
356 | - 'status' => __( 'Status', 'invoicing' ), |
|
357 | - 'initial_amount' => __( 'Initial amount', 'invoicing' ), |
|
358 | - 'recurring_amount' => __( 'Recurring amount', 'invoicing' ), |
|
359 | - 'start_date' => __( 'Start date', 'invoicing' ), |
|
360 | - 'expiry_date' => __( 'Next payment', 'invoicing' ), |
|
361 | - 'payments' => __( 'Payments', 'invoicing' ), |
|
362 | - 'item' => __( 'Item', 'invoicing' ), |
|
356 | + 'status' => __('Status', 'invoicing'), |
|
357 | + 'initial_amount' => __('Initial amount', 'invoicing'), |
|
358 | + 'recurring_amount' => __('Recurring amount', 'invoicing'), |
|
359 | + 'start_date' => __('Start date', 'invoicing'), |
|
360 | + 'expiry_date' => __('Next payment', 'invoicing'), |
|
361 | + 'payments' => __('Payments', 'invoicing'), |
|
362 | + 'item' => __('Item', 'invoicing'), |
|
363 | 363 | ), |
364 | 364 | $subscription |
365 | 365 | ); |
366 | 366 | |
367 | - if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) { |
|
368 | - $fields['expiry_date'] = __( 'End date', 'invoicing' ); |
|
367 | + if (!$subscription->is_active() || $subscription->is_last_renewal()) { |
|
368 | + $fields['expiry_date'] = __('End date', 'invoicing'); |
|
369 | 369 | } |
370 | 370 | |
371 | - if ( $subscription->get_initial_amount() == $subscription->get_recurring_amount() ) { |
|
372 | - unset( $fields['initial_amount'] ); |
|
371 | + if ($subscription->get_initial_amount() == $subscription->get_recurring_amount()) { |
|
372 | + unset($fields['initial_amount']); |
|
373 | 373 | } |
374 | 374 | |
375 | 375 | return $fields; |
@@ -382,16 +382,16 @@ discard block |
||
382 | 382 | * |
383 | 383 | * @return string |
384 | 384 | */ |
385 | - public function display_single_subscription( $subscription ) { |
|
385 | + public function display_single_subscription($subscription) { |
|
386 | 386 | |
387 | 387 | // Fetch the subscription. |
388 | - $subscription = new WPInv_Subscription( (int) $subscription ); |
|
388 | + $subscription = new WPInv_Subscription((int) $subscription); |
|
389 | 389 | |
390 | - if ( ! $subscription->get_id() ) { |
|
390 | + if (!$subscription->get_id()) { |
|
391 | 391 | |
392 | 392 | return aui()->alert( |
393 | 393 | array( |
394 | - 'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ), |
|
394 | + 'content' => wp_kses_post(__('Subscription not found.', 'invoicing')), |
|
395 | 395 | 'type' => 'error', |
396 | 396 | ) |
397 | 397 | ); |
@@ -399,11 +399,11 @@ discard block |
||
399 | 399 | } |
400 | 400 | |
401 | 401 | // Ensure that the user owns this subscription key. |
402 | - if ( get_current_user_id() != $subscription->get_customer_id() ) { |
|
402 | + if (get_current_user_id() != $subscription->get_customer_id()) { |
|
403 | 403 | |
404 | 404 | return aui()->alert( |
405 | 405 | array( |
406 | - 'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ), |
|
406 | + 'content' => wp_kses_post(__('You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing')), |
|
407 | 407 | 'type' => 'error', |
408 | 408 | ) |
409 | 409 | ); |
@@ -6,7 +6,7 @@ discard block |
||
6 | 6 | */ |
7 | 7 | |
8 | 8 | if ( ! defined( 'ABSPATH' ) ) { |
9 | - exit; // Exit if accessed directly |
|
9 | + exit; // Exit if accessed directly |
|
10 | 10 | } |
11 | 11 | |
12 | 12 | /** |
@@ -15,10 +15,10 @@ discard block |
||
15 | 15 | class GetPaid_Meta_Box_Invoice_Subscription { |
16 | 16 | |
17 | 17 | /** |
18 | - * Output the subscription metabox. |
|
19 | - * |
|
20 | - * @param WP_Post $post |
|
21 | - */ |
|
18 | + * Output the subscription metabox. |
|
19 | + * |
|
20 | + * @param WP_Post $post |
|
21 | + */ |
|
22 | 22 | public static function output( $post ) { |
23 | 23 | |
24 | 24 | // Fetch the invoice. |
@@ -34,10 +34,10 @@ discard block |
||
34 | 34 | } |
35 | 35 | |
36 | 36 | /** |
37 | - * Output the subscription invoices. |
|
38 | - * |
|
39 | - * @param WP_Post $post |
|
40 | - */ |
|
37 | + * Output the subscription invoices. |
|
38 | + * |
|
39 | + * @param WP_Post $post |
|
40 | + */ |
|
41 | 41 | public static function output_invoices( $post ) { |
42 | 42 | |
43 | 43 | // Fetch the invoice. |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | * |
6 | 6 | */ |
7 | 7 | |
8 | -if ( ! defined( 'ABSPATH' ) ) { |
|
8 | +if (!defined('ABSPATH')) { |
|
9 | 9 | exit; // Exit if accessed directly |
10 | 10 | } |
11 | 11 | |
@@ -19,16 +19,16 @@ discard block |
||
19 | 19 | * |
20 | 20 | * @param WP_Post $post |
21 | 21 | */ |
22 | - public static function output( $post ) { |
|
22 | + public static function output($post) { |
|
23 | 23 | |
24 | 24 | // Fetch the invoice. |
25 | - $invoice = new WPInv_Invoice( $post ); |
|
25 | + $invoice = new WPInv_Invoice($post); |
|
26 | 26 | |
27 | 27 | // Fetch the subscription. |
28 | - $subscription = getpaid_get_invoice_subscription( $invoice ); |
|
28 | + $subscription = getpaid_get_invoice_subscription($invoice); |
|
29 | 29 | |
30 | 30 | echo '<div class="bsui">'; |
31 | - getpaid_admin_subscription_details_metabox( /** @scrutinizer ignore-type */$subscription ); |
|
31 | + getpaid_admin_subscription_details_metabox(/** @scrutinizer ignore-type */$subscription); |
|
32 | 32 | echo '</div>'; |
33 | 33 | |
34 | 34 | } |
@@ -38,16 +38,16 @@ discard block |
||
38 | 38 | * |
39 | 39 | * @param WP_Post $post |
40 | 40 | */ |
41 | - public static function output_invoices( $post ) { |
|
41 | + public static function output_invoices($post) { |
|
42 | 42 | |
43 | 43 | // Fetch the invoice. |
44 | - $invoice = new WPInv_Invoice( $post ); |
|
44 | + $invoice = new WPInv_Invoice($post); |
|
45 | 45 | |
46 | 46 | // Fetch the subscription. |
47 | - $subscription = getpaid_get_invoice_subscription( $invoice ); |
|
47 | + $subscription = getpaid_get_invoice_subscription($invoice); |
|
48 | 48 | |
49 | 49 | echo '<div class="bsui">'; |
50 | - getpaid_admin_subscription_invoice_details_metabox( /** @scrutinizer ignore-type */$subscription ); |
|
50 | + getpaid_admin_subscription_invoice_details_metabox(/** @scrutinizer ignore-type */$subscription); |
|
51 | 51 | echo '</div>'; |
52 | 52 | |
53 | 53 | } |
@@ -40,86 +40,86 @@ discard block |
||
40 | 40 | <tr class="wpinv-item wpinv-item-<?php echo $invoice_status = $invoice->get_status(); ?>"> |
41 | 41 | <?php |
42 | 42 | |
43 | - foreach ( wpinv_get_user_invoices_columns() as $column_id => $column_name ) : |
|
43 | + foreach ( wpinv_get_user_invoices_columns() as $column_id => $column_name ) : |
|
44 | 44 | |
45 | - $column_id = sanitize_html_class( $column_id ); |
|
46 | - $class = empty( $column_name['class'] ) ? '' : sanitize_html_class( $column_name['class'] ); |
|
45 | + $column_id = sanitize_html_class( $column_id ); |
|
46 | + $class = empty( $column_name['class'] ) ? '' : sanitize_html_class( $column_name['class'] ); |
|
47 | 47 | |
48 | - echo "<td class='$column_id $class'>"; |
|
49 | - switch ( $column_id ) { |
|
48 | + echo "<td class='$column_id $class'>"; |
|
49 | + switch ( $column_id ) { |
|
50 | 50 | |
51 | - case 'invoice-number': |
|
52 | - echo wpinv_invoice_link( $invoice ); |
|
53 | - break; |
|
51 | + case 'invoice-number': |
|
52 | + echo wpinv_invoice_link( $invoice ); |
|
53 | + break; |
|
54 | 54 | |
55 | - case 'created-date': |
|
56 | - echo getpaid_format_date_value( $invoice->get_date_created() ); |
|
57 | - break; |
|
55 | + case 'created-date': |
|
56 | + echo getpaid_format_date_value( $invoice->get_date_created() ); |
|
57 | + break; |
|
58 | 58 | |
59 | - case 'payment-date': |
|
59 | + case 'payment-date': |
|
60 | 60 | |
61 | - if ( $invoice->needs_payment() ) { |
|
62 | - echo "—"; |
|
63 | - } else { |
|
64 | - echo getpaid_format_date_value( $invoice->get_date_completed() ); |
|
65 | - } |
|
61 | + if ( $invoice->needs_payment() ) { |
|
62 | + echo "—"; |
|
63 | + } else { |
|
64 | + echo getpaid_format_date_value( $invoice->get_date_completed() ); |
|
65 | + } |
|
66 | 66 | |
67 | - break; |
|
67 | + break; |
|
68 | 68 | |
69 | - case 'invoice-status': |
|
70 | - echo $invoice->get_status_label_html(); |
|
69 | + case 'invoice-status': |
|
70 | + echo $invoice->get_status_label_html(); |
|
71 | 71 | |
72 | - break; |
|
72 | + break; |
|
73 | 73 | |
74 | - case 'invoice-total': |
|
75 | - echo wpinv_price( wpinv_format_amount( $invoice->get_total() ) ); |
|
74 | + case 'invoice-total': |
|
75 | + echo wpinv_price( wpinv_format_amount( $invoice->get_total() ) ); |
|
76 | 76 | |
77 | - break; |
|
77 | + break; |
|
78 | 78 | |
79 | - case 'invoice-actions': |
|
79 | + case 'invoice-actions': |
|
80 | 80 | |
81 | - $actions = array( |
|
81 | + $actions = array( |
|
82 | 82 | |
83 | - 'pay' => array( |
|
84 | - 'url' => $invoice->get_checkout_payment_url(), |
|
85 | - 'name' => __( 'Pay Now', 'invoicing' ), |
|
83 | + 'pay' => array( |
|
84 | + 'url' => $invoice->get_checkout_payment_url(), |
|
85 | + 'name' => __( 'Pay Now', 'invoicing' ), |
|
86 | 86 | 'class' => 'btn-success' |
87 | - ), |
|
87 | + ), |
|
88 | 88 | |
89 | 89 | 'print' => array( |
90 | - 'url' => $invoice->get_view_url(), |
|
91 | - 'name' => __( 'View Invoice', 'invoicing' ), |
|
90 | + 'url' => $invoice->get_view_url(), |
|
91 | + 'name' => __( 'View Invoice', 'invoicing' ), |
|
92 | 92 | 'class' => 'btn-secondary', |
93 | 93 | 'attrs' => 'target="_blank"' |
94 | - ) |
|
95 | - ); |
|
94 | + ) |
|
95 | + ); |
|
96 | 96 | |
97 | - if ( ! $invoice->needs_payment() ) { |
|
98 | - unset( $actions['pay'] ); |
|
99 | - } |
|
97 | + if ( ! $invoice->needs_payment() ) { |
|
98 | + unset( $actions['pay'] ); |
|
99 | + } |
|
100 | 100 | |
101 | - $actions = apply_filters( 'wpinv_user_invoices_actions', $actions, $invoice ); |
|
101 | + $actions = apply_filters( 'wpinv_user_invoices_actions', $actions, $invoice ); |
|
102 | 102 | |
103 | - foreach ( $actions as $key => $action ) { |
|
104 | - $class = !empty($action['class']) ? sanitize_html_class($action['class']) : ''; |
|
105 | - echo '<a href="' . esc_url( $action['url'] ) . '" class="btn btn-sm btn-block ' . $class . ' ' . sanitize_html_class( $key ) . '" ' . ( !empty($action['attrs']) ? $action['attrs'] : '' ) . '>' . $action['name'] . '</a>'; |
|
106 | - } |
|
103 | + foreach ( $actions as $key => $action ) { |
|
104 | + $class = !empty($action['class']) ? sanitize_html_class($action['class']) : ''; |
|
105 | + echo '<a href="' . esc_url( $action['url'] ) . '" class="btn btn-sm btn-block ' . $class . ' ' . sanitize_html_class( $key ) . '" ' . ( !empty($action['attrs']) ? $action['attrs'] : '' ) . '>' . $action['name'] . '</a>'; |
|
106 | + } |
|
107 | 107 | |
108 | - break; |
|
108 | + break; |
|
109 | 109 | |
110 | - default: |
|
111 | - do_action( "wpinv_user_invoices_column_$column_id", $invoice ); |
|
112 | - break; |
|
110 | + default: |
|
111 | + do_action( "wpinv_user_invoices_column_$column_id", $invoice ); |
|
112 | + break; |
|
113 | 113 | |
114 | 114 | |
115 | - } |
|
115 | + } |
|
116 | 116 | |
117 | - do_action( "wpinv_user_invoices_column_after_$column_id", $invoice ); |
|
117 | + do_action( "wpinv_user_invoices_column_after_$column_id", $invoice ); |
|
118 | 118 | |
119 | - echo '</td>'; |
|
119 | + echo '</td>'; |
|
120 | 120 | |
121 | - endforeach; |
|
122 | - ?> |
|
121 | + endforeach; |
|
122 | + ?> |
|
123 | 123 | </tr> |
124 | 124 | |
125 | 125 | <?php endforeach; ?> |
@@ -132,14 +132,14 @@ discard block |
||
132 | 132 | <?php if ( 1 < $invoices->max_num_pages ) : ?> |
133 | 133 | <div class="invoicing-Pagination"> |
134 | 134 | <?php |
135 | - $big = 999999; |
|
136 | - |
|
137 | - echo paginate_links( array( |
|
138 | - 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
139 | - 'format' => '?paged=%#%', |
|
140 | - 'total' => $invoices->max_num_pages, |
|
141 | - ) ); |
|
142 | - ?> |
|
135 | + $big = 999999; |
|
136 | + |
|
137 | + echo paginate_links( array( |
|
138 | + 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
139 | + 'format' => '?paged=%#%', |
|
140 | + 'total' => $invoices->max_num_pages, |
|
141 | + ) ); |
|
142 | + ?> |
|
143 | 143 | </div> |
144 | 144 | <?php endif; ?> |
145 | 145 |
@@ -7,13 +7,13 @@ discard block |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Current page. |
13 | -$current_page = empty( $_GET[ 'page' ] ) ? 1 : absint( $_GET[ 'page' ] ); |
|
13 | +$current_page = empty($_GET['page']) ? 1 : absint($_GET['page']); |
|
14 | 14 | |
15 | 15 | // Fires before displaying user invoices. |
16 | -do_action( 'wpinv_before_user_invoices', $invoices->invoices, $invoices->total, $invoices->max_num_pages ); |
|
16 | +do_action('wpinv_before_user_invoices', $invoices->invoices, $invoices->total, $invoices->max_num_pages); |
|
17 | 17 | |
18 | 18 | ?> |
19 | 19 | |
@@ -23,9 +23,9 @@ discard block |
||
23 | 23 | <thead> |
24 | 24 | <tr> |
25 | 25 | |
26 | - <?php foreach ( wpinv_get_user_invoices_columns() as $column_id => $column_name ) : ?> |
|
27 | - <th class="<?php echo sanitize_html_class( $column_id ); ?> <?php echo ( ! empty( $column_name['class'] ) ? sanitize_html_class( $column_name['class'] ) : '');?> border-bottom-0"> |
|
28 | - <span class="nobr"><?php echo esc_html( $column_name['title'] ); ?></span> |
|
26 | + <?php foreach (wpinv_get_user_invoices_columns() as $column_id => $column_name) : ?> |
|
27 | + <th class="<?php echo sanitize_html_class($column_id); ?> <?php echo (!empty($column_name['class']) ? sanitize_html_class($column_name['class']) : ''); ?> border-bottom-0"> |
|
28 | + <span class="nobr"><?php echo esc_html($column_name['title']); ?></span> |
|
29 | 29 | </th> |
30 | 30 | <?php endforeach; ?> |
31 | 31 | |
@@ -35,33 +35,33 @@ discard block |
||
35 | 35 | |
36 | 36 | |
37 | 37 | <tbody> |
38 | - <?php foreach ( $invoices->invoices as $invoice ) : ?> |
|
38 | + <?php foreach ($invoices->invoices as $invoice) : ?> |
|
39 | 39 | |
40 | 40 | <tr class="wpinv-item wpinv-item-<?php echo $invoice_status = $invoice->get_status(); ?>"> |
41 | 41 | <?php |
42 | 42 | |
43 | - foreach ( wpinv_get_user_invoices_columns() as $column_id => $column_name ) : |
|
43 | + foreach (wpinv_get_user_invoices_columns() as $column_id => $column_name) : |
|
44 | 44 | |
45 | - $column_id = sanitize_html_class( $column_id ); |
|
46 | - $class = empty( $column_name['class'] ) ? '' : sanitize_html_class( $column_name['class'] ); |
|
45 | + $column_id = sanitize_html_class($column_id); |
|
46 | + $class = empty($column_name['class']) ? '' : sanitize_html_class($column_name['class']); |
|
47 | 47 | |
48 | 48 | echo "<td class='$column_id $class'>"; |
49 | - switch ( $column_id ) { |
|
49 | + switch ($column_id) { |
|
50 | 50 | |
51 | 51 | case 'invoice-number': |
52 | - echo wpinv_invoice_link( $invoice ); |
|
52 | + echo wpinv_invoice_link($invoice); |
|
53 | 53 | break; |
54 | 54 | |
55 | 55 | case 'created-date': |
56 | - echo getpaid_format_date_value( $invoice->get_date_created() ); |
|
56 | + echo getpaid_format_date_value($invoice->get_date_created()); |
|
57 | 57 | break; |
58 | 58 | |
59 | 59 | case 'payment-date': |
60 | 60 | |
61 | - if ( $invoice->needs_payment() ) { |
|
61 | + if ($invoice->needs_payment()) { |
|
62 | 62 | echo "—"; |
63 | 63 | } else { |
64 | - echo getpaid_format_date_value( $invoice->get_date_completed() ); |
|
64 | + echo getpaid_format_date_value($invoice->get_date_completed()); |
|
65 | 65 | } |
66 | 66 | |
67 | 67 | break; |
@@ -72,7 +72,7 @@ discard block |
||
72 | 72 | break; |
73 | 73 | |
74 | 74 | case 'invoice-total': |
75 | - echo wpinv_price( wpinv_format_amount( $invoice->get_total() ) ); |
|
75 | + echo wpinv_price(wpinv_format_amount($invoice->get_total())); |
|
76 | 76 | |
77 | 77 | break; |
78 | 78 | |
@@ -82,39 +82,39 @@ discard block |
||
82 | 82 | |
83 | 83 | 'pay' => array( |
84 | 84 | 'url' => $invoice->get_checkout_payment_url(), |
85 | - 'name' => __( 'Pay Now', 'invoicing' ), |
|
85 | + 'name' => __('Pay Now', 'invoicing'), |
|
86 | 86 | 'class' => 'btn-success' |
87 | 87 | ), |
88 | 88 | |
89 | 89 | 'print' => array( |
90 | 90 | 'url' => $invoice->get_view_url(), |
91 | - 'name' => __( 'View Invoice', 'invoicing' ), |
|
91 | + 'name' => __('View Invoice', 'invoicing'), |
|
92 | 92 | 'class' => 'btn-secondary', |
93 | 93 | 'attrs' => 'target="_blank"' |
94 | 94 | ) |
95 | 95 | ); |
96 | 96 | |
97 | - if ( ! $invoice->needs_payment() ) { |
|
98 | - unset( $actions['pay'] ); |
|
97 | + if (!$invoice->needs_payment()) { |
|
98 | + unset($actions['pay']); |
|
99 | 99 | } |
100 | 100 | |
101 | - $actions = apply_filters( 'wpinv_user_invoices_actions', $actions, $invoice ); |
|
101 | + $actions = apply_filters('wpinv_user_invoices_actions', $actions, $invoice); |
|
102 | 102 | |
103 | - foreach ( $actions as $key => $action ) { |
|
103 | + foreach ($actions as $key => $action) { |
|
104 | 104 | $class = !empty($action['class']) ? sanitize_html_class($action['class']) : ''; |
105 | - echo '<a href="' . esc_url( $action['url'] ) . '" class="btn btn-sm btn-block ' . $class . ' ' . sanitize_html_class( $key ) . '" ' . ( !empty($action['attrs']) ? $action['attrs'] : '' ) . '>' . $action['name'] . '</a>'; |
|
105 | + echo '<a href="' . esc_url($action['url']) . '" class="btn btn-sm btn-block ' . $class . ' ' . sanitize_html_class($key) . '" ' . (!empty($action['attrs']) ? $action['attrs'] : '') . '>' . $action['name'] . '</a>'; |
|
106 | 106 | } |
107 | 107 | |
108 | 108 | break; |
109 | 109 | |
110 | 110 | default: |
111 | - do_action( "wpinv_user_invoices_column_$column_id", $invoice ); |
|
111 | + do_action("wpinv_user_invoices_column_$column_id", $invoice); |
|
112 | 112 | break; |
113 | 113 | |
114 | 114 | |
115 | 115 | } |
116 | 116 | |
117 | - do_action( "wpinv_user_invoices_column_after_$column_id", $invoice ); |
|
117 | + do_action("wpinv_user_invoices_column_after_$column_id", $invoice); |
|
118 | 118 | |
119 | 119 | echo '</td>'; |
120 | 120 | |
@@ -127,20 +127,20 @@ discard block |
||
127 | 127 | </tbody> |
128 | 128 | </table> |
129 | 129 | |
130 | - <?php do_action( 'wpinv_before_user_invoices_pagination' ); ?> |
|
130 | + <?php do_action('wpinv_before_user_invoices_pagination'); ?> |
|
131 | 131 | |
132 | - <?php if ( 1 < $invoices->max_num_pages ) : ?> |
|
132 | + <?php if (1 < $invoices->max_num_pages) : ?> |
|
133 | 133 | <div class="invoicing-Pagination"> |
134 | 134 | <?php |
135 | 135 | $big = 999999; |
136 | 136 | |
137 | - echo paginate_links( array( |
|
138 | - 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), |
|
137 | + echo paginate_links(array( |
|
138 | + 'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), |
|
139 | 139 | 'format' => '?paged=%#%', |
140 | 140 | 'total' => $invoices->max_num_pages, |
141 | - ) ); |
|
141 | + )); |
|
142 | 142 | ?> |
143 | 143 | </div> |
144 | 144 | <?php endif; ?> |
145 | 145 | |
146 | -<?php do_action( 'wpinv_after_user_invoices', $invoices->invoices, $invoices->total, $invoices->max_num_pages ); ?> |
|
146 | +<?php do_action('wpinv_after_user_invoices', $invoices->invoices, $invoices->total, $invoices->max_num_pages); ?> |