@@ -7,22 +7,22 @@ |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Print the email header. |
13 | -do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin ); |
|
13 | +do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin); |
|
14 | 14 | |
15 | 15 | // Generate the custom message body. |
16 | 16 | echo $message_body; |
17 | 17 | |
18 | 18 | // Print invoice details. |
19 | -do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin ); |
|
19 | +do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin); |
|
20 | 20 | |
21 | 21 | // Print invoice items. |
22 | -do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin ); |
|
22 | +do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin); |
|
23 | 23 | |
24 | 24 | // Print the billing details. |
25 | -do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin ); |
|
25 | +do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin); |
|
26 | 26 | |
27 | 27 | // Print the email footer. |
28 | -do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin ); |
|
28 | +do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin); |
@@ -7,22 +7,22 @@ |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Print the email header. |
13 | -do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin ); |
|
13 | +do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin); |
|
14 | 14 | |
15 | 15 | // Generate the custom message body. |
16 | 16 | echo $message_body; |
17 | 17 | |
18 | 18 | // Print invoice details. |
19 | -do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin ); |
|
19 | +do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin); |
|
20 | 20 | |
21 | 21 | // Print invoice items. |
22 | -do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin ); |
|
22 | +do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin); |
|
23 | 23 | |
24 | 24 | // Print the billing details. |
25 | -do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin ); |
|
25 | +do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin); |
|
26 | 26 | |
27 | 27 | // Print the email footer. |
28 | -do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin ); |
|
28 | +do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin); |
@@ -7,22 +7,22 @@ |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Print the email header. |
13 | -do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin ); |
|
13 | +do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin); |
|
14 | 14 | |
15 | 15 | // Generate the custom message body. |
16 | 16 | echo $message_body; |
17 | 17 | |
18 | 18 | // Print invoice details. |
19 | -do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin ); |
|
19 | +do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin); |
|
20 | 20 | |
21 | 21 | // Print invoice items. |
22 | -do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin ); |
|
22 | +do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin); |
|
23 | 23 | |
24 | 24 | // Print the billing details. |
25 | -do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin ); |
|
25 | +do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin); |
|
26 | 26 | |
27 | 27 | // Print the email footer. |
28 | -do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin ); |
|
28 | +do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin); |
@@ -7,22 +7,22 @@ |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Print the email header. |
13 | -do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin ); |
|
13 | +do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin); |
|
14 | 14 | |
15 | 15 | // Generate the custom message body. |
16 | 16 | echo $message_body; |
17 | 17 | |
18 | 18 | // Print invoice details. |
19 | -do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin ); |
|
19 | +do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin); |
|
20 | 20 | |
21 | 21 | // Print invoice items. |
22 | -do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin ); |
|
22 | +do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin); |
|
23 | 23 | |
24 | 24 | // Print the billing details. |
25 | -do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin ); |
|
25 | +do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin); |
|
26 | 26 | |
27 | 27 | // Print the email footer. |
28 | -do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin ); |
|
28 | +do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin); |
@@ -7,22 +7,22 @@ |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Print the email header. |
13 | -do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin ); |
|
13 | +do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin); |
|
14 | 14 | |
15 | 15 | // Generate the custom message body. |
16 | 16 | echo $message_body; |
17 | 17 | |
18 | 18 | // Print invoice details. |
19 | -do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin ); |
|
19 | +do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin); |
|
20 | 20 | |
21 | 21 | // Print invoice items. |
22 | -do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin ); |
|
22 | +do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin); |
|
23 | 23 | |
24 | 24 | // Print the billing details. |
25 | -do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin ); |
|
25 | +do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin); |
|
26 | 26 | |
27 | 27 | // Print the email footer. |
28 | -do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin ); |
|
28 | +do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin); |
@@ -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 | /* |