@@ -7,40 +7,40 @@ |
||
7 | 7 | * Bail if we are not in WP. |
8 | 8 | */ |
9 | 9 | if ( ! defined( 'ABSPATH' ) ) { |
10 | - exit; |
|
10 | + exit; |
|
11 | 11 | } |
12 | 12 | |
13 | 13 | /** |
14 | 14 | * Set the version only if its the current newest while loading. |
15 | 15 | */ |
16 | 16 | add_action('after_setup_theme', function () { |
17 | - global $ayecode_ui_version,$ayecode_ui_file_key; |
|
18 | - $this_version = "0.2.30"; |
|
19 | - if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | - $ayecode_ui_version = $this_version ; |
|
21 | - $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
22 | - } |
|
17 | + global $ayecode_ui_version,$ayecode_ui_file_key; |
|
18 | + $this_version = "0.2.30"; |
|
19 | + if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | + $ayecode_ui_version = $this_version ; |
|
21 | + $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
22 | + } |
|
23 | 23 | },0); |
24 | 24 | |
25 | 25 | /** |
26 | 26 | * Load this version of WP Bootstrap Settings only if the file hash is the current one. |
27 | 27 | */ |
28 | 28 | add_action('after_setup_theme', function () { |
29 | - global $ayecode_ui_file_key; |
|
30 | - if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | - include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | - include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
33 | - } |
|
29 | + global $ayecode_ui_file_key; |
|
30 | + if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | + include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | + include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
33 | + } |
|
34 | 34 | },1); |
35 | 35 | |
36 | 36 | /** |
37 | 37 | * Add the function that calls the class. |
38 | 38 | */ |
39 | 39 | if(!function_exists('aui')){ |
40 | - function aui(){ |
|
41 | - if(!class_exists("AUI",false)){ |
|
42 | - return false; |
|
43 | - } |
|
44 | - return AUI::instance(); |
|
45 | - } |
|
40 | + function aui(){ |
|
41 | + if(!class_exists("AUI",false)){ |
|
42 | + return false; |
|
43 | + } |
|
44 | + return AUI::instance(); |
|
45 | + } |
|
46 | 46 | } |
@@ -6,39 +6,39 @@ |
||
6 | 6 | /** |
7 | 7 | * Bail if we are not in WP. |
8 | 8 | */ |
9 | -if ( ! defined( 'ABSPATH' ) ) { |
|
9 | +if (!defined('ABSPATH')) { |
|
10 | 10 | exit; |
11 | 11 | } |
12 | 12 | |
13 | 13 | /** |
14 | 14 | * Set the version only if its the current newest while loading. |
15 | 15 | */ |
16 | -add_action('after_setup_theme', function () { |
|
17 | - global $ayecode_ui_version,$ayecode_ui_file_key; |
|
16 | +add_action('after_setup_theme', function() { |
|
17 | + global $ayecode_ui_version, $ayecode_ui_file_key; |
|
18 | 18 | $this_version = "0.2.30"; |
19 | - if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | - $ayecode_ui_version = $this_version ; |
|
21 | - $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
19 | + if (empty($ayecode_ui_version) || version_compare($this_version, $ayecode_ui_version, '>')) { |
|
20 | + $ayecode_ui_version = $this_version; |
|
21 | + $ayecode_ui_file_key = wp_hash(__FILE__); |
|
22 | 22 | } |
23 | 23 | },0); |
24 | 24 | |
25 | 25 | /** |
26 | 26 | * Load this version of WP Bootstrap Settings only if the file hash is the current one. |
27 | 27 | */ |
28 | -add_action('after_setup_theme', function () { |
|
28 | +add_action('after_setup_theme', function() { |
|
29 | 29 | global $ayecode_ui_file_key; |
30 | - if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | - include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | - include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
30 | + if ($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash(__FILE__)) { |
|
31 | + include_once(dirname(__FILE__) . '/includes/class-aui.php'); |
|
32 | + include_once(dirname(__FILE__) . '/includes/ayecode-ui-settings.php'); |
|
33 | 33 | } |
34 | 34 | },1); |
35 | 35 | |
36 | 36 | /** |
37 | 37 | * Add the function that calls the class. |
38 | 38 | */ |
39 | -if(!function_exists('aui')){ |
|
40 | - function aui(){ |
|
41 | - if(!class_exists("AUI",false)){ |
|
39 | +if (!function_exists('aui')) { |
|
40 | + function aui() { |
|
41 | + if (!class_exists("AUI", false)) { |
|
42 | 42 | return false; |
43 | 43 | } |
44 | 44 | return AUI::instance(); |
@@ -3,7 +3,7 @@ discard block |
||
3 | 3 | * Personal data exporters. |
4 | 4 | */ |
5 | 5 | |
6 | -defined( 'ABSPATH' ) || exit; |
|
6 | +defined('ABSPATH') || exit; |
|
7 | 7 | |
8 | 8 | /** |
9 | 9 | * WPInv_Privacy_Exporters Class. |
@@ -17,39 +17,39 @@ discard block |
||
17 | 17 | * @param int $page Page. |
18 | 18 | * @return array An array of invoice data in name value pairs |
19 | 19 | */ |
20 | - public static function customer_invoice_data_exporter( $email_address, $page ) { |
|
20 | + public static function customer_invoice_data_exporter($email_address, $page) { |
|
21 | 21 | $done = false; |
22 | 22 | $page = (int) $page; |
23 | 23 | $data_to_export = array(); |
24 | 24 | |
25 | - $user = get_user_by( 'email', $email_address ); |
|
26 | - if ( ! $user instanceof WP_User ) { |
|
25 | + $user = get_user_by('email', $email_address); |
|
26 | + if (!$user instanceof WP_User) { |
|
27 | 27 | return array( |
28 | 28 | 'data' => $data_to_export, |
29 | 29 | 'done' => true, |
30 | 30 | ); |
31 | 31 | } |
32 | 32 | |
33 | - $args = array( |
|
34 | - 'limit' => get_option( 'posts_per_page' ), |
|
33 | + $args = array( |
|
34 | + 'limit' => get_option('posts_per_page'), |
|
35 | 35 | 'page' => $page, |
36 | 36 | 'user' => $user->ID, |
37 | 37 | 'paginate' => false, |
38 | 38 | ); |
39 | 39 | |
40 | - $invoices = wpinv_get_invoices( $args ); |
|
40 | + $invoices = wpinv_get_invoices($args); |
|
41 | 41 | |
42 | - if ( 0 < count( $invoices ) ) { |
|
43 | - foreach ( $invoices as $invoice ) { |
|
42 | + if (0 < count($invoices)) { |
|
43 | + foreach ($invoices as $invoice) { |
|
44 | 44 | $data_to_export[] = array( |
45 | 45 | 'group_id' => 'customer_invoices', |
46 | - 'group_label' => __( 'GetPaid: Invoices', 'invoicing' ), |
|
47 | - 'group_description' => __( 'Customer invoices.', 'invoicing' ), |
|
46 | + 'group_label' => __('GetPaid: Invoices', 'invoicing'), |
|
47 | + 'group_description' => __('Customer invoices.', 'invoicing'), |
|
48 | 48 | 'item_id' => "wpinv-{$invoice->get_id()}", |
49 | - 'data' => self::get_customer_invoice_data( $invoice ), |
|
49 | + 'data' => self::get_customer_invoice_data($invoice), |
|
50 | 50 | ); |
51 | 51 | } |
52 | - $done = get_option( 'posts_per_page' ) > count( $invoices ); |
|
52 | + $done = get_option('posts_per_page') > count($invoices); |
|
53 | 53 | } else { |
54 | 54 | $done = true; |
55 | 55 | } |
@@ -67,122 +67,122 @@ discard block |
||
67 | 67 | * @param WPInv_Invoice $invoice invoice object. |
68 | 68 | * @return array |
69 | 69 | */ |
70 | - public static function get_customer_invoice_data( $invoice ) { |
|
70 | + public static function get_customer_invoice_data($invoice) { |
|
71 | 71 | |
72 | 72 | // Prepare basic properties. |
73 | 73 | $props_to_export = array( |
74 | 74 | 'number' => array( |
75 | - 'name' => __( 'Invoice Number', 'invoicing' ), |
|
75 | + 'name' => __('Invoice Number', 'invoicing'), |
|
76 | 76 | 'value' => $invoice->get_number(), |
77 | 77 | ), |
78 | 78 | 'created_date' => array( |
79 | - 'name' => __( 'Created Date', 'invoicing' ), |
|
79 | + 'name' => __('Created Date', 'invoicing'), |
|
80 | 80 | 'value' => $invoice->get_date_created(), |
81 | 81 | ), |
82 | 82 | 'due_date' => array( |
83 | - 'name' => __( 'Due Date', 'invoicing' ), |
|
83 | + 'name' => __('Due Date', 'invoicing'), |
|
84 | 84 | 'value' => $invoice->get_due_date(), |
85 | 85 | ), |
86 | 86 | 'items' => array( |
87 | - 'name' => __( 'Invoice Items', 'invoicing' ), |
|
88 | - 'value' => self::process_invoice_items( $invoice ), |
|
87 | + 'name' => __('Invoice Items', 'invoicing'), |
|
88 | + 'value' => self::process_invoice_items($invoice), |
|
89 | 89 | ), |
90 | 90 | 'discount' => array( |
91 | - 'name' => __( 'Invoice Discount', 'invoicing' ), |
|
92 | - 'value' => wpinv_price( $invoice->get_total_discount(), $invoice->get_currency() ), |
|
91 | + 'name' => __('Invoice Discount', 'invoicing'), |
|
92 | + 'value' => wpinv_price($invoice->get_total_discount(), $invoice->get_currency()), |
|
93 | 93 | ), |
94 | 94 | 'total' => array( |
95 | - 'name' => __( 'Invoice Total', 'invoicing' ), |
|
96 | - 'value' => wpinv_price( $invoice->get_total(), $invoice->get_currency() ), |
|
95 | + 'name' => __('Invoice Total', 'invoicing'), |
|
96 | + 'value' => wpinv_price($invoice->get_total(), $invoice->get_currency()), |
|
97 | 97 | ), |
98 | 98 | 'status' => array( |
99 | - 'name' => __( 'Invoice Status', 'invoicing' ), |
|
99 | + 'name' => __('Invoice Status', 'invoicing'), |
|
100 | 100 | 'value' => $invoice->get_status_nicename(), |
101 | 101 | ), |
102 | 102 | 'first_name' => array( |
103 | - 'name' => __( 'First Name', 'invoicing' ), |
|
103 | + 'name' => __('First Name', 'invoicing'), |
|
104 | 104 | 'value' => $invoice->get_first_name(), |
105 | 105 | ), |
106 | 106 | 'last_name' => array( |
107 | - 'name' => __( 'Last Name', 'invoicing' ), |
|
107 | + 'name' => __('Last Name', 'invoicing'), |
|
108 | 108 | 'value' => $invoice->get_last_name(), |
109 | 109 | ), |
110 | 110 | 'email' => array( |
111 | - 'name' => __( 'Email Address', 'invoicing' ), |
|
111 | + 'name' => __('Email Address', 'invoicing'), |
|
112 | 112 | 'value' => $invoice->get_email(), |
113 | 113 | ), |
114 | 114 | 'company' => array( |
115 | - 'name' => __( 'Company', 'invoicing' ), |
|
115 | + 'name' => __('Company', 'invoicing'), |
|
116 | 116 | 'value' => $invoice->get_company(), |
117 | 117 | ), |
118 | 118 | 'phone' => array( |
119 | - 'name' => __( 'Phone Number', 'invoicing' ), |
|
119 | + 'name' => __('Phone Number', 'invoicing'), |
|
120 | 120 | 'value' => $invoice->get_phone(), |
121 | 121 | ), |
122 | 122 | 'address' => array( |
123 | - 'name' => __( 'Address', 'invoicing' ), |
|
123 | + 'name' => __('Address', 'invoicing'), |
|
124 | 124 | 'value' => $invoice->get_address(), |
125 | 125 | ), |
126 | 126 | 'city' => array( |
127 | - 'name' => __( 'City', 'invoicing' ), |
|
127 | + 'name' => __('City', 'invoicing'), |
|
128 | 128 | 'value' => $invoice->get_city(), |
129 | 129 | ), |
130 | 130 | 'state' => array( |
131 | - 'name' => __( 'State', 'invoicing' ), |
|
131 | + 'name' => __('State', 'invoicing'), |
|
132 | 132 | 'value' => $invoice->get_state(), |
133 | 133 | ), |
134 | 134 | 'zip' => array( |
135 | - 'name' => __( 'Zip', 'invoicing' ), |
|
135 | + 'name' => __('Zip', 'invoicing'), |
|
136 | 136 | 'value' => $invoice->get_zip(), |
137 | 137 | ), |
138 | 138 | 'vat_number' => array( |
139 | - 'name' => __( 'VAT Number', 'invoicing' ), |
|
139 | + 'name' => __('VAT Number', 'invoicing'), |
|
140 | 140 | 'value' => $invoice->get_vat_number(), |
141 | 141 | ), |
142 | 142 | 'description' => array( |
143 | - 'name' => __( 'Description', 'invoicing' ), |
|
143 | + 'name' => __('Description', 'invoicing'), |
|
144 | 144 | 'value' => $invoice->get_description(), |
145 | 145 | ), |
146 | 146 | ); |
147 | 147 | |
148 | 148 | // In case the invoice is paid, add the payment date and gateway. |
149 | - if ( $invoice->is_paid() ) { |
|
149 | + if ($invoice->is_paid()) { |
|
150 | 150 | |
151 | 151 | $props_to_export['completed_date'] = array( |
152 | - 'name' => __( 'Completed Date', 'invoicing' ), |
|
152 | + 'name' => __('Completed Date', 'invoicing'), |
|
153 | 153 | 'value' => $invoice->get_completed_date(), |
154 | 154 | ); |
155 | 155 | |
156 | 156 | $props_to_export['gateway'] = array( |
157 | - 'name' => __( 'Paid Via', 'invoicing' ), |
|
157 | + 'name' => __('Paid Via', 'invoicing'), |
|
158 | 158 | 'value' => $invoice->get_gateway(), |
159 | 159 | ); |
160 | 160 | |
161 | 161 | } |
162 | 162 | |
163 | 163 | // Maybe add subscription details. |
164 | - $props_to_export = self::process_subscription( $invoice, $props_to_export ); |
|
164 | + $props_to_export = self::process_subscription($invoice, $props_to_export); |
|
165 | 165 | |
166 | 166 | // Add the ip address. |
167 | 167 | $props_to_export['ip'] = array( |
168 | - 'name' => __( 'IP Address', 'invoicing' ), |
|
168 | + 'name' => __('IP Address', 'invoicing'), |
|
169 | 169 | 'value' => $invoice->get_ip(), |
170 | 170 | ); |
171 | 171 | |
172 | 172 | // Add the invoice url. |
173 | 173 | $props_to_export['view_url'] = array( |
174 | - 'name' => __( 'Invoice URL', 'invoicing' ), |
|
174 | + 'name' => __('Invoice URL', 'invoicing'), |
|
175 | 175 | 'value' => $invoice->get_view_url(), |
176 | 176 | ); |
177 | 177 | |
178 | 178 | // Return the values. |
179 | - $items = apply_filters( 'getpaid_privacy_export_invoice_personal_data', array_values( $props_to_export ), $invoice ); |
|
179 | + $items = apply_filters('getpaid_privacy_export_invoice_personal_data', array_values($props_to_export), $invoice); |
|
180 | 180 | |
181 | 181 | $data = array(); |
182 | 182 | |
183 | 183 | // Unset null values to prevent PHP deprecated notice. |
184 | - foreach ( $items as $item ) { |
|
185 | - if ( isset( $item['value'] ) && ! is_null( $item['value'] ) ) { |
|
184 | + foreach ($items as $item) { |
|
185 | + if (isset($item['value']) && !is_null($item['value'])) { |
|
186 | 186 | $data[] = $item; |
187 | 187 | } |
188 | 188 | } |
@@ -198,40 +198,40 @@ discard block |
||
198 | 198 | * @param array $props invoice props. |
199 | 199 | * @return array |
200 | 200 | */ |
201 | - public static function process_subscription( $invoice, $props ) { |
|
201 | + public static function process_subscription($invoice, $props) { |
|
202 | 202 | |
203 | - $subscription = wpinv_get_subscription( $invoice ); |
|
204 | - if ( ! empty( $subscription ) ) { |
|
203 | + $subscription = wpinv_get_subscription($invoice); |
|
204 | + if (!empty($subscription)) { |
|
205 | 205 | |
206 | - $frequency = getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency() ); |
|
207 | - $period = wpinv_price( $subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency() ) . ' / ' . $frequency; |
|
208 | - $initial_amt = wpinv_price( $subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency() ); |
|
209 | - $bill_times = $subscription->get_times_billed() . ' / ' . ( ( $subscription->get_bill_times() == 0 ) ? __( 'Until Cancelled', 'invoicing' ) : $subscription->get_bill_times() ); |
|
210 | - $renewal_date = getpaid_format_date_value( $subscription->get_expiration() ); |
|
206 | + $frequency = getpaid_get_subscription_period_label($subscription->get_period(), $subscription->get_frequency()); |
|
207 | + $period = wpinv_price($subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency()) . ' / ' . $frequency; |
|
208 | + $initial_amt = wpinv_price($subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency()); |
|
209 | + $bill_times = $subscription->get_times_billed() . ' / ' . (($subscription->get_bill_times() == 0) ? __('Until Cancelled', 'invoicing') : $subscription->get_bill_times()); |
|
210 | + $renewal_date = getpaid_format_date_value($subscription->get_expiration()); |
|
211 | 211 | |
212 | 212 | // Billing cycle. |
213 | 213 | $props['period'] = array( |
214 | - 'name' => __( 'Billing Cycle', 'invoicing' ), |
|
214 | + 'name' => __('Billing Cycle', 'invoicing'), |
|
215 | 215 | 'value' => $period, |
216 | 216 | ); |
217 | 217 | |
218 | 218 | // Initial amount. |
219 | 219 | $props['initial_amount'] = array( |
220 | - 'name' => __( 'Initial Amount', 'invoicing' ), |
|
220 | + 'name' => __('Initial Amount', 'invoicing'), |
|
221 | 221 | 'value' => $initial_amt, |
222 | 222 | ); |
223 | 223 | |
224 | 224 | // Bill times. |
225 | 225 | $props['bill_times'] = array( |
226 | - 'name' => __( 'Times Billed', 'invoicing' ), |
|
226 | + 'name' => __('Times Billed', 'invoicing'), |
|
227 | 227 | 'value' => $bill_times, |
228 | 228 | ); |
229 | 229 | |
230 | 230 | // Add expiry date. |
231 | - if ( $subscription->is_active() ) { |
|
231 | + if ($subscription->is_active()) { |
|
232 | 232 | |
233 | 233 | $props['renewal_date'] = array( |
234 | - 'name' => __( 'Expires', 'invoicing' ), |
|
234 | + 'name' => __('Expires', 'invoicing'), |
|
235 | 235 | 'value' => $renewal_date, |
236 | 236 | ); |
237 | 237 | |
@@ -249,19 +249,19 @@ discard block |
||
249 | 249 | * @param WPInv_Invoice $invoice invoice object. |
250 | 250 | * @return array |
251 | 251 | */ |
252 | - public static function process_invoice_items( $invoice ) { |
|
252 | + public static function process_invoice_items($invoice) { |
|
253 | 253 | |
254 | 254 | $item_names = array(); |
255 | - foreach ( $invoice->get_items() as $cart_item ) { |
|
255 | + foreach ($invoice->get_items() as $cart_item) { |
|
256 | 256 | $item_names[] = sprintf( |
257 | 257 | '%s x %s - %s', |
258 | 258 | $cart_item->get_name(), |
259 | 259 | $cart_item->get_quantity(), |
260 | - wpinv_price( $invoice->is_renewal() ? $cart_item->get_recurring_sub_total() : $cart_item->get_sub_total(), $invoice->get_currency() ) |
|
260 | + wpinv_price($invoice->is_renewal() ? $cart_item->get_recurring_sub_total() : $cart_item->get_sub_total(), $invoice->get_currency()) |
|
261 | 261 | ); |
262 | 262 | } |
263 | 263 | |
264 | - return implode( ', ', $item_names ); |
|
264 | + return implode(', ', $item_names); |
|
265 | 265 | |
266 | 266 | } |
267 | 267 |
@@ -29,7 +29,7 @@ discard block |
||
29 | 29 | add_action( 'init', array( $this, 'register_erasers_exporters' ) ); |
30 | 30 | } |
31 | 31 | |
32 | - /** |
|
32 | + /** |
|
33 | 33 | * Initial registration of privacy erasers and exporters. |
34 | 34 | * |
35 | 35 | * Due to the use of translation functions, this should run only after plugins loaded. |
@@ -49,25 +49,25 @@ discard block |
||
49 | 49 | public function get_privacy_message() { |
50 | 50 | |
51 | 51 | $content = '<div class="wp-suggested-text">' . |
52 | - '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' . |
|
53 | - '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' . |
|
54 | - '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' . |
|
55 | - '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' . |
|
56 | - '<ul>' . |
|
57 | - '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' . |
|
58 | - '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' . |
|
59 | - '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' . |
|
60 | - '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
61 | - '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' . |
|
62 | - '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
63 | - '</ul>' . |
|
64 | - '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' . |
|
65 | - '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' . |
|
66 | - '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' . |
|
67 | - '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' . |
|
68 | - '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' . |
|
69 | - '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' . |
|
70 | - '</div>'; |
|
52 | + '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' . |
|
53 | + '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' . |
|
54 | + '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' . |
|
55 | + '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' . |
|
56 | + '<ul>' . |
|
57 | + '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' . |
|
58 | + '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' . |
|
59 | + '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' . |
|
60 | + '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
61 | + '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' . |
|
62 | + '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
63 | + '</ul>' . |
|
64 | + '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' . |
|
65 | + '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' . |
|
66 | + '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' . |
|
67 | + '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' . |
|
68 | + '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' . |
|
69 | + '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' . |
|
70 | + '</div>'; |
|
71 | 71 | |
72 | 72 | return apply_filters( 'wpinv_privacy_policy_content', $content ); |
73 | 73 | } |
@@ -3,7 +3,7 @@ discard block |
||
3 | 3 | * Privacy/GDPR related functionality which ties into WordPress functionality. |
4 | 4 | */ |
5 | 5 | |
6 | -defined( 'ABSPATH' ) || exit; |
|
6 | +defined('ABSPATH') || exit; |
|
7 | 7 | |
8 | 8 | /** |
9 | 9 | * WPInv_Privacy Class. |
@@ -26,7 +26,7 @@ discard block |
||
26 | 26 | $this->init(); |
27 | 27 | |
28 | 28 | // Initialize data exporters and erasers. |
29 | - add_action( 'init', array( $this, 'register_erasers_exporters' ) ); |
|
29 | + add_action('init', array($this, 'register_erasers_exporters')); |
|
30 | 30 | } |
31 | 31 | |
32 | 32 | /** |
@@ -35,10 +35,10 @@ discard block |
||
35 | 35 | * Due to the use of translation functions, this should run only after plugins loaded. |
36 | 36 | */ |
37 | 37 | public function register_erasers_exporters() { |
38 | - $this->name = __( 'GetPaid', 'invoicing' ); |
|
38 | + $this->name = __('GetPaid', 'invoicing'); |
|
39 | 39 | |
40 | 40 | // This hook registers Invoicing data exporters. |
41 | - $this->add_exporter( 'wpinv-customer-invoices', __( 'Customer Invoices', 'invoicing' ), array( 'WPInv_Privacy_Exporters', 'customer_invoice_data_exporter' ) ); |
|
41 | + $this->add_exporter('wpinv-customer-invoices', __('Customer Invoices', 'invoicing'), array('WPInv_Privacy_Exporters', 'customer_invoice_data_exporter')); |
|
42 | 42 | } |
43 | 43 | |
44 | 44 | /** |
@@ -49,27 +49,27 @@ discard block |
||
49 | 49 | public function get_privacy_message() { |
50 | 50 | |
51 | 51 | $content = '<div class="wp-suggested-text">' . |
52 | - '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' . |
|
53 | - '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' . |
|
54 | - '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' . |
|
55 | - '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' . |
|
52 | + '<h2>' . __('Invoices and checkout', 'invoicing') . '</h2>' . |
|
53 | + '<p class="privacy-policy-tutorial">' . __('Example privacy texts.', 'invoicing') . '</p>' . |
|
54 | + '<p>' . __('We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing') . '</p>' . |
|
55 | + '<p>' . __('Handling this data also allows us to:', 'invoicing') . '</p>' . |
|
56 | 56 | '<ul>' . |
57 | - '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' . |
|
58 | - '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' . |
|
59 | - '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' . |
|
60 | - '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
61 | - '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' . |
|
62 | - '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
57 | + '<li>' . __('- Send you important account/invoice/service information.', 'invoicing') . '</li>' . |
|
58 | + '<li>' . __('- Estimate taxes based on your location.', 'invoicing') . '</li>' . |
|
59 | + '<li>' . __('- Respond to your queries or complaints.', 'invoicing') . '</li>' . |
|
60 | + '<li>' . __('- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing') . '</li>' . |
|
61 | + '<li>' . __('- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing') . '</li>' . |
|
62 | + '<li>' . __('- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing') . '</li>' . |
|
63 | 63 | '</ul>' . |
64 | - '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' . |
|
65 | - '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' . |
|
66 | - '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' . |
|
67 | - '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' . |
|
68 | - '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' . |
|
69 | - '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' . |
|
64 | + '<p>' . __('In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing') . '</p>' . |
|
65 | + '<h2>' . __('What we share with others', 'invoicing') . '</h2>' . |
|
66 | + '<p>' . __('We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing') . '</p>' . |
|
67 | + '<p class="privacy-policy-tutorial">' . __('In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing') . '</p>' . |
|
68 | + '<p>' . __('We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing') . '</p>' . |
|
69 | + '<p>' . __('Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing') . '</p>' . |
|
70 | 70 | '</div>'; |
71 | 71 | |
72 | - return apply_filters( 'wpinv_privacy_policy_content', $content ); |
|
72 | + return apply_filters('wpinv_privacy_policy_content', $content); |
|
73 | 73 | } |
74 | 74 | |
75 | 75 | } |
@@ -3,7 +3,7 @@ discard block |
||
3 | 3 | * Abstract privacy class. |
4 | 4 | */ |
5 | 5 | |
6 | -defined( 'ABSPATH' ) || exit; |
|
6 | +defined('ABSPATH') || exit; |
|
7 | 7 | |
8 | 8 | /** |
9 | 9 | * Abstract class that is intended to be extended by |
@@ -38,7 +38,7 @@ discard block |
||
38 | 38 | * |
39 | 39 | * @param string $name Plugin identifier. |
40 | 40 | */ |
41 | - public function __construct( $name = '' ) { |
|
41 | + public function __construct($name = '') { |
|
42 | 42 | $this->name = $name; |
43 | 43 | $this->init(); |
44 | 44 | } |
@@ -47,26 +47,26 @@ discard block |
||
47 | 47 | * Hook in events. |
48 | 48 | */ |
49 | 49 | protected function init() { |
50 | - add_action( 'admin_init', array( $this, 'add_privacy_message' ) ); |
|
50 | + add_action('admin_init', array($this, 'add_privacy_message')); |
|
51 | 51 | // Register data exporters |
52 | - add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporters' ), 10 ); |
|
52 | + add_filter('wp_privacy_personal_data_exporters', array($this, 'register_exporters'), 10); |
|
53 | 53 | // Register data erasers |
54 | - add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'register_erasers' ) ); |
|
54 | + add_filter('wp_privacy_personal_data_erasers', array($this, 'register_erasers')); |
|
55 | 55 | } |
56 | 56 | |
57 | 57 | /** |
58 | 58 | * Adds the privacy message on invoicing privacy page. |
59 | 59 | */ |
60 | 60 | public function add_privacy_message() { |
61 | - if ( function_exists( 'wp_add_privacy_policy_content' ) ) { |
|
61 | + if (function_exists('wp_add_privacy_policy_content')) { |
|
62 | 62 | $content = $this->get_privacy_message(); |
63 | 63 | |
64 | - if ( $content ) { |
|
65 | - if ( empty( $this->name ) ) { |
|
66 | - $this->name = __( 'GetPaid', 'invoicing' ); |
|
64 | + if ($content) { |
|
65 | + if (empty($this->name)) { |
|
66 | + $this->name = __('GetPaid', 'invoicing'); |
|
67 | 67 | } |
68 | 68 | |
69 | - wp_add_privacy_policy_content( $this->name, $this->get_privacy_message() ); |
|
69 | + wp_add_privacy_policy_content($this->name, $this->get_privacy_message()); |
|
70 | 70 | } |
71 | 71 | } |
72 | 72 | } |
@@ -87,9 +87,9 @@ discard block |
||
87 | 87 | * @param array $exporters List of exporter callbacks. |
88 | 88 | * @return array |
89 | 89 | */ |
90 | - public function register_exporters( $exporters = array() ) { |
|
91 | - foreach ( $this->exporters as $id => $exporter ) { |
|
92 | - $exporters[ $id ] = $exporter; |
|
90 | + public function register_exporters($exporters = array()) { |
|
91 | + foreach ($this->exporters as $id => $exporter) { |
|
92 | + $exporters[$id] = $exporter; |
|
93 | 93 | } |
94 | 94 | return $exporters; |
95 | 95 | } |
@@ -100,9 +100,9 @@ discard block |
||
100 | 100 | * @param array $erasers List of eraser callbacks. |
101 | 101 | * @return array |
102 | 102 | */ |
103 | - public function register_erasers( $erasers = array() ) { |
|
104 | - foreach ( $this->erasers as $id => $eraser ) { |
|
105 | - $erasers[ $id ] = $eraser; |
|
103 | + public function register_erasers($erasers = array()) { |
|
104 | + foreach ($this->erasers as $id => $eraser) { |
|
105 | + $erasers[$id] = $eraser; |
|
106 | 106 | } |
107 | 107 | return $erasers; |
108 | 108 | } |
@@ -116,8 +116,8 @@ discard block |
||
116 | 116 | * |
117 | 117 | * @return array |
118 | 118 | */ |
119 | - public function add_exporter( $id, $name, $callback ) { |
|
120 | - $this->exporters[ $id ] = array( |
|
119 | + public function add_exporter($id, $name, $callback) { |
|
120 | + $this->exporters[$id] = array( |
|
121 | 121 | 'exporter_friendly_name' => $name, |
122 | 122 | 'callback' => $callback, |
123 | 123 | ); |
@@ -133,8 +133,8 @@ discard block |
||
133 | 133 | * |
134 | 134 | * @return array |
135 | 135 | */ |
136 | - public function add_eraser( $id, $name, $callback ) { |
|
137 | - $this->erasers[ $id ] = array( |
|
136 | + public function add_eraser($id, $name, $callback) { |
|
137 | + $this->erasers[$id] = array( |
|
138 | 138 | 'eraser_friendly_name' => $name, |
139 | 139 | 'callback' => $callback, |
140 | 140 | ); |
@@ -19,16 +19,16 @@ discard block |
||
19 | 19 | |
20 | 20 | // Define constants. |
21 | 21 | if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) { |
22 | - define( 'WPINV_PLUGIN_FILE', __FILE__ ); |
|
22 | + define( 'WPINV_PLUGIN_FILE', __FILE__ ); |
|
23 | 23 | } |
24 | 24 | |
25 | 25 | if ( ! defined( 'WPINV_VERSION' ) ) { |
26 | - define( 'WPINV_VERSION', '2.8.21' ); |
|
26 | + define( 'WPINV_VERSION', '2.8.21' ); |
|
27 | 27 | } |
28 | 28 | |
29 | 29 | // Include the main Invoicing class. |
30 | 30 | if ( ! class_exists( 'WPInv_Plugin', false ) ) { |
31 | - require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php'; |
|
31 | + require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php'; |
|
32 | 32 | } |
33 | 33 | |
34 | 34 | /** |
@@ -43,7 +43,7 @@ discard block |
||
43 | 43 | $GLOBALS['invoicing'] = new WPInv_Plugin(); |
44 | 44 | } |
45 | 45 | |
46 | - return $GLOBALS['invoicing']; |
|
46 | + return $GLOBALS['invoicing']; |
|
47 | 47 | } |
48 | 48 | |
49 | 49 | /** |
@@ -15,20 +15,20 @@ discard block |
||
15 | 15 | * @package GetPaid |
16 | 16 | */ |
17 | 17 | |
18 | -defined( 'ABSPATH' ) || exit; |
|
18 | +defined('ABSPATH') || exit; |
|
19 | 19 | |
20 | 20 | // Define constants. |
21 | -if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) { |
|
22 | - define( 'WPINV_PLUGIN_FILE', __FILE__ ); |
|
21 | +if (!defined('WPINV_PLUGIN_FILE')) { |
|
22 | + define('WPINV_PLUGIN_FILE', __FILE__); |
|
23 | 23 | } |
24 | 24 | |
25 | -if ( ! defined( 'WPINV_VERSION' ) ) { |
|
26 | - define( 'WPINV_VERSION', '2.8.21' ); |
|
25 | +if (!defined('WPINV_VERSION')) { |
|
26 | + define('WPINV_VERSION', '2.8.21'); |
|
27 | 27 | } |
28 | 28 | |
29 | 29 | // Include the main Invoicing class. |
30 | -if ( ! class_exists( 'WPInv_Plugin', false ) ) { |
|
31 | - require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php'; |
|
30 | +if (!class_exists('WPInv_Plugin', false)) { |
|
31 | + require_once plugin_dir_path(WPINV_PLUGIN_FILE) . 'includes/class-wpinv.php'; |
|
32 | 32 | } |
33 | 33 | |
34 | 34 | /** |
@@ -39,7 +39,7 @@ discard block |
||
39 | 39 | */ |
40 | 40 | function getpaid() { |
41 | 41 | |
42 | - if ( empty( $GLOBALS['invoicing'] ) ) { |
|
42 | + if (empty($GLOBALS['invoicing'])) { |
|
43 | 43 | $GLOBALS['invoicing'] = new WPInv_Plugin(); |
44 | 44 | } |
45 | 45 | |
@@ -52,9 +52,9 @@ discard block |
||
52 | 52 | * @since 2.0.8 |
53 | 53 | */ |
54 | 54 | function getpaid_deactivation_hook() { |
55 | - update_option( 'wpinv_flush_permalinks', 1 ); |
|
55 | + update_option('wpinv_flush_permalinks', 1); |
|
56 | 56 | } |
57 | -register_deactivation_hook( __FILE__, 'getpaid_deactivation_hook' ); |
|
57 | +register_deactivation_hook(__FILE__, 'getpaid_deactivation_hook'); |
|
58 | 58 | |
59 | 59 | /** |
60 | 60 | * @deprecated |
@@ -64,4 +64,4 @@ discard block |
||
64 | 64 | } |
65 | 65 | |
66 | 66 | // Kickstart the plugin. |
67 | -add_action( 'plugins_loaded', 'getpaid', 0 ); |
|
67 | +add_action('plugins_loaded', 'getpaid', 0); |
@@ -12,492 +12,492 @@ |
||
12 | 12 | */ |
13 | 13 | class GetPaid_Invoice_Notification_Emails { |
14 | 14 | |
15 | - /** |
|
16 | - * The array of invoice email actions. |
|
17 | - * |
|
18 | - * @param array |
|
19 | - */ |
|
20 | - public $invoice_actions; |
|
21 | - |
|
22 | - /** |
|
23 | - * Class constructor |
|
24 | - * |
|
25 | - */ |
|
26 | - public function __construct() { |
|
27 | - |
|
28 | - $this->invoice_actions = apply_filters( |
|
29 | - 'getpaid_notification_email_invoice_triggers', |
|
30 | - array( |
|
31 | - 'getpaid_new_invoice' => array( 'new_invoice', 'user_invoice' ), |
|
32 | - 'getpaid_invoice_status_wpi-cancelled' => 'cancelled_invoice', |
|
33 | - 'getpaid_invoice_status_wpi-failed' => 'failed_invoice', |
|
34 | - 'getpaid_invoice_status_wpi-onhold' => 'onhold_invoice', |
|
35 | - 'getpaid_invoice_status_wpi-processing' => 'processing_invoice', |
|
36 | - 'getpaid_invoice_status_publish' => 'completed_invoice', |
|
37 | - 'getpaid_invoice_status_wpi-renewal' => 'completed_invoice', |
|
38 | - 'getpaid_invoice_status_wpi-refunded' => 'refunded_invoice', |
|
39 | - 'getpaid_new_customer_note' => 'user_note', |
|
40 | - 'getpaid_daily_maintenance' => 'overdue', |
|
41 | - ) |
|
42 | - ); |
|
43 | - |
|
44 | - add_action( 'init', array( $this, 'init_hooks' ) ); |
|
45 | - } |
|
46 | - |
|
47 | - /** |
|
48 | - * Registers email hooks. |
|
49 | - */ |
|
50 | - public function init_hooks() { |
|
51 | - |
|
52 | - add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 ); |
|
53 | - add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 ); |
|
54 | - |
|
55 | - foreach ( $this->invoice_actions as $hook => $email_type ) { |
|
56 | - $this->init_email_type_hook( $hook, $email_type ); |
|
57 | - } |
|
58 | - } |
|
59 | - |
|
60 | - /** |
|
61 | - * Registers an email hook for an invoice action. |
|
62 | - * |
|
63 | - * @param string $hook |
|
64 | - * @param string|array $email_type |
|
65 | - */ |
|
66 | - public function init_email_type_hook( $hook, $email_type ) { |
|
67 | - |
|
68 | - $email_type = wpinv_parse_list( $email_type ); |
|
69 | - |
|
70 | - foreach ( $email_type as $type ) { |
|
71 | - |
|
72 | - $email = new GetPaid_Notification_Email( $type ); |
|
73 | - |
|
74 | - // Abort if it is not active. |
|
75 | - if ( ! $email->is_active() ) { |
|
76 | - continue; |
|
77 | - } |
|
78 | - |
|
79 | - if ( method_exists( $this, $type ) ) { |
|
80 | - add_action( $hook, array( $this, $type ), 100, 2 ); |
|
81 | - continue; |
|
82 | - } |
|
83 | - |
|
84 | - do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook ); |
|
85 | - } |
|
86 | - |
|
87 | - } |
|
88 | - |
|
89 | - /** |
|
90 | - * Filters invoice merge tags. |
|
91 | - * |
|
92 | - * @param array $merge_tags |
|
93 | - * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
|
94 | - */ |
|
95 | - public function invoice_merge_tags( $merge_tags, $object ) { |
|
96 | - |
|
97 | - if ( is_a( $object, 'WPInv_Invoice' ) ) { |
|
98 | - return array_merge( |
|
99 | - $merge_tags, |
|
100 | - $this->get_invoice_merge_tags( $object ) |
|
101 | - ); |
|
102 | - } |
|
103 | - |
|
104 | - if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
105 | - return array_merge( |
|
106 | - $merge_tags, |
|
107 | - $this->get_invoice_merge_tags( $object->get_parent_payment() ) |
|
108 | - ); |
|
109 | - } |
|
110 | - |
|
111 | - return $merge_tags; |
|
112 | - |
|
113 | - } |
|
114 | - |
|
115 | - /** |
|
116 | - * Generates invoice merge tags. |
|
117 | - * |
|
118 | - * @param WPInv_Invoice $invoice |
|
119 | - * @return array |
|
120 | - */ |
|
121 | - public function get_invoice_merge_tags( $invoice ) { |
|
122 | - |
|
123 | - // Abort if it does not exist. |
|
124 | - if ( ! $invoice->get_id() ) { |
|
125 | - return array(); |
|
126 | - } |
|
127 | - |
|
128 | - $due_date = $invoice->get_due_date(); |
|
129 | - $due_date = empty( $due_date ) ? time() + MINUTE_IN_SECONDS : strtotime( $due_date ) + ( (int) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); |
|
130 | - $merge_tags = array( |
|
131 | - '{name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
132 | - '{full_name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
133 | - '{first_name}' => sanitize_text_field( $invoice->get_first_name() ), |
|
134 | - '{last_name}' => sanitize_text_field( $invoice->get_last_name() ), |
|
135 | - '{email}' => sanitize_email( $invoice->get_email() ), |
|
136 | - '{invoice_number}' => sanitize_text_field( $invoice->get_number() ), |
|
137 | - '{invoice_currency}' => sanitize_text_field( $invoice->get_currency() ), |
|
138 | - '{invoice_total}' => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ), |
|
139 | - '{invoice_link}' => esc_url( $invoice->get_view_url() ), |
|
140 | - '{invoice_pay_link}' => esc_url( $invoice->get_checkout_payment_url() ), |
|
141 | - '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ), |
|
142 | - '{invoice_date}' => getpaid_format_date_value( $invoice->get_date_created() ), |
|
143 | - '{invoice_due_date}' => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ), |
|
144 | - '{invoice_quote}' => sanitize_text_field( strtolower( $invoice->get_label() ) ), |
|
145 | - '{invoice_label}' => sanitize_text_field( ucfirst( $invoice->get_label() ) ), |
|
146 | - '{invoice_description}' => wp_kses_post( $invoice->get_description() ), |
|
147 | - '{subscription_name}' => wp_kses_post( $invoice->get_subscription_name() ), |
|
148 | - '{is_was}' => $due_date < time() ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ), |
|
149 | - ); |
|
150 | - |
|
151 | - $payment_form_data = $invoice->get_meta( 'payment_form_data', true ); |
|
152 | - |
|
153 | - if ( is_array( $payment_form_data ) ) { |
|
154 | - |
|
155 | - foreach ( $payment_form_data as $label => $value ) { |
|
156 | - |
|
157 | - $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) ); |
|
158 | - $value = is_array( $value ) ? implode( ', ', $value ) : $value; |
|
159 | - |
|
160 | - if ( is_scalar( $value ) ) { |
|
161 | - $merge_tags[ "{{$label}}" ] = wp_kses_post( $value ); |
|
162 | - } |
|
163 | - } |
|
164 | - } |
|
165 | - |
|
166 | - return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice ); |
|
167 | - } |
|
168 | - |
|
169 | - /** |
|
170 | - * Helper function to send an email. |
|
171 | - * |
|
172 | - * @param WPInv_Invoice $invoice |
|
173 | - * @param GetPaid_Notification_Email $email |
|
174 | - * @param string $type |
|
175 | - * @param string|array $recipients |
|
176 | - * @param array $extra_args Extra template args. |
|
177 | - */ |
|
178 | - public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) { |
|
179 | - |
|
180 | - do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email ); |
|
181 | - |
|
182 | - $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' ); |
|
183 | - if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) { |
|
184 | - return; |
|
185 | - } |
|
186 | - |
|
187 | - $mailer = new GetPaid_Notification_Email_Sender(); |
|
188 | - $merge_tags = $email->get_merge_tags(); |
|
189 | - |
|
190 | - $result = $mailer->send( |
|
191 | - apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
192 | - $email->add_merge_tags( $email->get_subject(), $merge_tags ), |
|
193 | - $email->get_content( $merge_tags, $extra_args ), |
|
194 | - $email->get_attachments() |
|
195 | - ); |
|
196 | - |
|
197 | - // Maybe send a copy to the admin. |
|
198 | - if ( $email->include_admin_bcc() ) { |
|
199 | - $mailer->send( |
|
200 | - wpinv_get_admin_email(), |
|
201 | - $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ), |
|
202 | - $email->get_content( $merge_tags ), |
|
203 | - $email->get_attachments() |
|
204 | - ); |
|
205 | - } |
|
206 | - |
|
207 | - if ( $result ) { |
|
208 | - $invoice->add_system_note( |
|
209 | - sprintf( |
|
210 | - // translators: %1 is the email type, %2 is the invoice recipient. |
|
211 | - __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
212 | - sanitize_key( $type ), |
|
213 | - $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
214 | - ) |
|
215 | - ); |
|
216 | - } else { |
|
217 | - $invoice->add_system_note( |
|
218 | - sprintf( |
|
219 | - // translators: %1 is the email type, %2 is the invoice recipient. |
|
220 | - __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
221 | - sanitize_key( $type ), |
|
222 | - $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
223 | - ) |
|
224 | - ); |
|
225 | - } |
|
226 | - |
|
227 | - do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email ); |
|
228 | - |
|
229 | - return $result; |
|
230 | - } |
|
231 | - |
|
232 | - /** |
|
233 | - * Also send emails to any cc users. |
|
234 | - * |
|
235 | - * @param array $recipients |
|
236 | - * @param GetPaid_Notification_Email $email |
|
237 | - */ |
|
238 | - public function filter_email_recipients( $recipients, $email ) { |
|
239 | - |
|
240 | - if ( ! $email->is_admin_email() ) { |
|
241 | - $cc = $email->object->get_email_cc(); |
|
242 | - $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true ); |
|
243 | - |
|
244 | - if ( ! empty( $cc ) ) { |
|
245 | - $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
246 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
247 | - } |
|
248 | - |
|
249 | - if ( ! empty( $cc_2 ) ) { |
|
250 | - $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) ); |
|
251 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) ); |
|
252 | - } |
|
253 | - } |
|
254 | - |
|
255 | - return $recipients; |
|
256 | - |
|
257 | - } |
|
258 | - |
|
259 | - /** |
|
260 | - * Sends a new invoice notification. |
|
261 | - * |
|
262 | - * @param WPInv_Invoice $invoice |
|
263 | - */ |
|
264 | - public function new_invoice( $invoice ) { |
|
265 | - |
|
266 | - // Only send this email for invoices created via the admin page. |
|
267 | - if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) { |
|
268 | - return; |
|
269 | - } |
|
270 | - |
|
271 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
272 | - $recipient = wpinv_get_admin_email(); |
|
273 | - |
|
274 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
275 | - |
|
276 | - } |
|
277 | - |
|
278 | - /** |
|
279 | - * Sends a cancelled invoice notification. |
|
280 | - * |
|
281 | - * @param WPInv_Invoice $invoice |
|
282 | - */ |
|
283 | - public function cancelled_invoice( $invoice ) { |
|
284 | - |
|
285 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
286 | - $recipient = $invoice->get_email(); |
|
287 | - |
|
288 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
289 | - } |
|
290 | - |
|
291 | - /** |
|
292 | - * Sends a failed invoice notification. |
|
293 | - * |
|
294 | - * @param WPInv_Invoice $invoice |
|
295 | - */ |
|
296 | - public function failed_invoice( $invoice ) { |
|
297 | - |
|
298 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
299 | - $recipient = wpinv_get_admin_email(); |
|
300 | - |
|
301 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
302 | - |
|
303 | - } |
|
304 | - |
|
305 | - /** |
|
306 | - * Sends a notification whenever an invoice is put on hold. |
|
307 | - * |
|
308 | - * @param WPInv_Invoice $invoice |
|
309 | - */ |
|
310 | - public function onhold_invoice( $invoice ) { |
|
311 | - |
|
312 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
313 | - $recipient = $invoice->get_email(); |
|
314 | - |
|
315 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
316 | - |
|
317 | - } |
|
318 | - |
|
319 | - /** |
|
320 | - * Sends a notification whenever an invoice is marked as processing payment. |
|
321 | - * |
|
322 | - * @param WPInv_Invoice $invoice |
|
323 | - */ |
|
324 | - public function processing_invoice( $invoice ) { |
|
325 | - |
|
326 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
327 | - $recipient = $invoice->get_email(); |
|
328 | - |
|
329 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
330 | - |
|
331 | - } |
|
332 | - |
|
333 | - /** |
|
334 | - * Sends a notification whenever an invoice is paid. |
|
335 | - * |
|
336 | - * @param WPInv_Invoice $invoice |
|
337 | - */ |
|
338 | - public function completed_invoice( $invoice ) { |
|
339 | - |
|
340 | - // (Maybe) abort if it is a renewal invoice. |
|
341 | - if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) { |
|
342 | - return; |
|
343 | - } |
|
344 | - |
|
345 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
346 | - $recipient = $invoice->get_email(); |
|
347 | - |
|
348 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
349 | - |
|
350 | - } |
|
15 | + /** |
|
16 | + * The array of invoice email actions. |
|
17 | + * |
|
18 | + * @param array |
|
19 | + */ |
|
20 | + public $invoice_actions; |
|
21 | + |
|
22 | + /** |
|
23 | + * Class constructor |
|
24 | + * |
|
25 | + */ |
|
26 | + public function __construct() { |
|
27 | + |
|
28 | + $this->invoice_actions = apply_filters( |
|
29 | + 'getpaid_notification_email_invoice_triggers', |
|
30 | + array( |
|
31 | + 'getpaid_new_invoice' => array( 'new_invoice', 'user_invoice' ), |
|
32 | + 'getpaid_invoice_status_wpi-cancelled' => 'cancelled_invoice', |
|
33 | + 'getpaid_invoice_status_wpi-failed' => 'failed_invoice', |
|
34 | + 'getpaid_invoice_status_wpi-onhold' => 'onhold_invoice', |
|
35 | + 'getpaid_invoice_status_wpi-processing' => 'processing_invoice', |
|
36 | + 'getpaid_invoice_status_publish' => 'completed_invoice', |
|
37 | + 'getpaid_invoice_status_wpi-renewal' => 'completed_invoice', |
|
38 | + 'getpaid_invoice_status_wpi-refunded' => 'refunded_invoice', |
|
39 | + 'getpaid_new_customer_note' => 'user_note', |
|
40 | + 'getpaid_daily_maintenance' => 'overdue', |
|
41 | + ) |
|
42 | + ); |
|
43 | + |
|
44 | + add_action( 'init', array( $this, 'init_hooks' ) ); |
|
45 | + } |
|
46 | + |
|
47 | + /** |
|
48 | + * Registers email hooks. |
|
49 | + */ |
|
50 | + public function init_hooks() { |
|
51 | + |
|
52 | + add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 ); |
|
53 | + add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 ); |
|
54 | + |
|
55 | + foreach ( $this->invoice_actions as $hook => $email_type ) { |
|
56 | + $this->init_email_type_hook( $hook, $email_type ); |
|
57 | + } |
|
58 | + } |
|
59 | + |
|
60 | + /** |
|
61 | + * Registers an email hook for an invoice action. |
|
62 | + * |
|
63 | + * @param string $hook |
|
64 | + * @param string|array $email_type |
|
65 | + */ |
|
66 | + public function init_email_type_hook( $hook, $email_type ) { |
|
67 | + |
|
68 | + $email_type = wpinv_parse_list( $email_type ); |
|
69 | + |
|
70 | + foreach ( $email_type as $type ) { |
|
71 | + |
|
72 | + $email = new GetPaid_Notification_Email( $type ); |
|
73 | + |
|
74 | + // Abort if it is not active. |
|
75 | + if ( ! $email->is_active() ) { |
|
76 | + continue; |
|
77 | + } |
|
78 | + |
|
79 | + if ( method_exists( $this, $type ) ) { |
|
80 | + add_action( $hook, array( $this, $type ), 100, 2 ); |
|
81 | + continue; |
|
82 | + } |
|
83 | + |
|
84 | + do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook ); |
|
85 | + } |
|
86 | + |
|
87 | + } |
|
88 | + |
|
89 | + /** |
|
90 | + * Filters invoice merge tags. |
|
91 | + * |
|
92 | + * @param array $merge_tags |
|
93 | + * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
|
94 | + */ |
|
95 | + public function invoice_merge_tags( $merge_tags, $object ) { |
|
96 | + |
|
97 | + if ( is_a( $object, 'WPInv_Invoice' ) ) { |
|
98 | + return array_merge( |
|
99 | + $merge_tags, |
|
100 | + $this->get_invoice_merge_tags( $object ) |
|
101 | + ); |
|
102 | + } |
|
103 | + |
|
104 | + if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
105 | + return array_merge( |
|
106 | + $merge_tags, |
|
107 | + $this->get_invoice_merge_tags( $object->get_parent_payment() ) |
|
108 | + ); |
|
109 | + } |
|
110 | + |
|
111 | + return $merge_tags; |
|
112 | + |
|
113 | + } |
|
114 | + |
|
115 | + /** |
|
116 | + * Generates invoice merge tags. |
|
117 | + * |
|
118 | + * @param WPInv_Invoice $invoice |
|
119 | + * @return array |
|
120 | + */ |
|
121 | + public function get_invoice_merge_tags( $invoice ) { |
|
122 | + |
|
123 | + // Abort if it does not exist. |
|
124 | + if ( ! $invoice->get_id() ) { |
|
125 | + return array(); |
|
126 | + } |
|
127 | + |
|
128 | + $due_date = $invoice->get_due_date(); |
|
129 | + $due_date = empty( $due_date ) ? time() + MINUTE_IN_SECONDS : strtotime( $due_date ) + ( (int) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); |
|
130 | + $merge_tags = array( |
|
131 | + '{name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
132 | + '{full_name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
133 | + '{first_name}' => sanitize_text_field( $invoice->get_first_name() ), |
|
134 | + '{last_name}' => sanitize_text_field( $invoice->get_last_name() ), |
|
135 | + '{email}' => sanitize_email( $invoice->get_email() ), |
|
136 | + '{invoice_number}' => sanitize_text_field( $invoice->get_number() ), |
|
137 | + '{invoice_currency}' => sanitize_text_field( $invoice->get_currency() ), |
|
138 | + '{invoice_total}' => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ), |
|
139 | + '{invoice_link}' => esc_url( $invoice->get_view_url() ), |
|
140 | + '{invoice_pay_link}' => esc_url( $invoice->get_checkout_payment_url() ), |
|
141 | + '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ), |
|
142 | + '{invoice_date}' => getpaid_format_date_value( $invoice->get_date_created() ), |
|
143 | + '{invoice_due_date}' => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ), |
|
144 | + '{invoice_quote}' => sanitize_text_field( strtolower( $invoice->get_label() ) ), |
|
145 | + '{invoice_label}' => sanitize_text_field( ucfirst( $invoice->get_label() ) ), |
|
146 | + '{invoice_description}' => wp_kses_post( $invoice->get_description() ), |
|
147 | + '{subscription_name}' => wp_kses_post( $invoice->get_subscription_name() ), |
|
148 | + '{is_was}' => $due_date < time() ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ), |
|
149 | + ); |
|
150 | + |
|
151 | + $payment_form_data = $invoice->get_meta( 'payment_form_data', true ); |
|
152 | + |
|
153 | + if ( is_array( $payment_form_data ) ) { |
|
154 | + |
|
155 | + foreach ( $payment_form_data as $label => $value ) { |
|
156 | + |
|
157 | + $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) ); |
|
158 | + $value = is_array( $value ) ? implode( ', ', $value ) : $value; |
|
159 | + |
|
160 | + if ( is_scalar( $value ) ) { |
|
161 | + $merge_tags[ "{{$label}}" ] = wp_kses_post( $value ); |
|
162 | + } |
|
163 | + } |
|
164 | + } |
|
165 | + |
|
166 | + return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice ); |
|
167 | + } |
|
351 | 168 | |
352 | - /** |
|
353 | - * Sends a notification whenever an invoice is refunded. |
|
354 | - * |
|
355 | - * @param WPInv_Invoice $invoice |
|
356 | - */ |
|
357 | - public function refunded_invoice( $invoice ) { |
|
358 | - |
|
359 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
360 | - $recipient = $invoice->get_email(); |
|
361 | - |
|
362 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
363 | - |
|
364 | - } |
|
169 | + /** |
|
170 | + * Helper function to send an email. |
|
171 | + * |
|
172 | + * @param WPInv_Invoice $invoice |
|
173 | + * @param GetPaid_Notification_Email $email |
|
174 | + * @param string $type |
|
175 | + * @param string|array $recipients |
|
176 | + * @param array $extra_args Extra template args. |
|
177 | + */ |
|
178 | + public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) { |
|
365 | 179 | |
366 | - /** |
|
367 | - * Notifies a user about new invoices |
|
368 | - * |
|
369 | - * @param WPInv_Invoice $invoice |
|
370 | - * @param bool $force |
|
371 | - */ |
|
372 | - public function user_invoice( $invoice, $force = false ) { |
|
180 | + do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email ); |
|
373 | 181 | |
374 | - if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) { |
|
375 | - return; |
|
376 | - } |
|
377 | - |
|
378 | - // Only send this email for invoices created via the admin page. |
|
379 | - if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) { |
|
380 | - return; |
|
381 | - } |
|
382 | - |
|
383 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
384 | - $recipient = $invoice->get_email(); |
|
385 | - |
|
386 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
387 | - |
|
388 | - } |
|
389 | - |
|
390 | - /** |
|
391 | - * Checks if an invoice is a payment form invoice. |
|
392 | - * |
|
393 | - * @param int $invoice |
|
394 | - * @return bool |
|
395 | - */ |
|
396 | - public function is_payment_form_invoice( $invoice ) { |
|
397 | - $created_via = get_post_meta( $invoice, 'wpinv_created_via', true ); |
|
398 | - $is_payment_form_invoice = 'payment_form' === $created_via || 'geodirectory' === $created_via; |
|
399 | - $is_payment_form_invoice = apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice ); |
|
400 | - return empty( $_GET['getpaid-admin-action'] ) && $is_payment_form_invoice; |
|
401 | - } |
|
402 | - |
|
403 | - /** |
|
404 | - * Notifies admin about new invoice notes |
|
405 | - * |
|
406 | - * @param WPInv_Invoice $invoice |
|
407 | - * @param string $note |
|
408 | - */ |
|
409 | - public function user_note( $invoice, $note ) { |
|
410 | - |
|
411 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
412 | - $recipient = $invoice->get_email(); |
|
413 | - |
|
414 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) ); |
|
415 | - |
|
416 | - } |
|
417 | - |
|
418 | - /** |
|
419 | - * (Force) Sends overdue notices. |
|
420 | - * |
|
421 | - * @param WPInv_Invoice $invoice |
|
422 | - */ |
|
423 | - public function force_send_overdue_notice( $invoice ) { |
|
424 | - $email = new GetPaid_Notification_Email( 'overdue', $invoice ); |
|
425 | - return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() ); |
|
426 | - } |
|
427 | - |
|
428 | - /** |
|
429 | - * Sends overdue notices. |
|
430 | - * |
|
431 | - * @TODO: Create an invoices query class. |
|
432 | - */ |
|
433 | - public function overdue() { |
|
434 | - global $wpdb; |
|
435 | - |
|
436 | - $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
437 | - |
|
438 | - // Fetch reminder days. |
|
439 | - $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
440 | - |
|
441 | - // Abort if non is set. |
|
442 | - if ( empty( $reminder_days ) ) { |
|
443 | - return; |
|
444 | - } |
|
445 | - |
|
446 | - // Retrieve date query. |
|
447 | - $date_query = $this->get_date_query( $reminder_days ); |
|
448 | - |
|
449 | - // Invoices table. |
|
450 | - $table = $wpdb->prefix . 'getpaid_invoices'; |
|
451 | - |
|
452 | - // Fetch invoices. |
|
453 | - $invoices = $wpdb->get_col( |
|
454 | - "SELECT posts.ID FROM $wpdb->posts as posts |
|
182 | + $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' ); |
|
183 | + if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) { |
|
184 | + return; |
|
185 | + } |
|
186 | + |
|
187 | + $mailer = new GetPaid_Notification_Email_Sender(); |
|
188 | + $merge_tags = $email->get_merge_tags(); |
|
189 | + |
|
190 | + $result = $mailer->send( |
|
191 | + apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
192 | + $email->add_merge_tags( $email->get_subject(), $merge_tags ), |
|
193 | + $email->get_content( $merge_tags, $extra_args ), |
|
194 | + $email->get_attachments() |
|
195 | + ); |
|
196 | + |
|
197 | + // Maybe send a copy to the admin. |
|
198 | + if ( $email->include_admin_bcc() ) { |
|
199 | + $mailer->send( |
|
200 | + wpinv_get_admin_email(), |
|
201 | + $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ), |
|
202 | + $email->get_content( $merge_tags ), |
|
203 | + $email->get_attachments() |
|
204 | + ); |
|
205 | + } |
|
206 | + |
|
207 | + if ( $result ) { |
|
208 | + $invoice->add_system_note( |
|
209 | + sprintf( |
|
210 | + // translators: %1 is the email type, %2 is the invoice recipient. |
|
211 | + __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
212 | + sanitize_key( $type ), |
|
213 | + $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
214 | + ) |
|
215 | + ); |
|
216 | + } else { |
|
217 | + $invoice->add_system_note( |
|
218 | + sprintf( |
|
219 | + // translators: %1 is the email type, %2 is the invoice recipient. |
|
220 | + __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
221 | + sanitize_key( $type ), |
|
222 | + $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
223 | + ) |
|
224 | + ); |
|
225 | + } |
|
226 | + |
|
227 | + do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email ); |
|
228 | + |
|
229 | + return $result; |
|
230 | + } |
|
231 | + |
|
232 | + /** |
|
233 | + * Also send emails to any cc users. |
|
234 | + * |
|
235 | + * @param array $recipients |
|
236 | + * @param GetPaid_Notification_Email $email |
|
237 | + */ |
|
238 | + public function filter_email_recipients( $recipients, $email ) { |
|
239 | + |
|
240 | + if ( ! $email->is_admin_email() ) { |
|
241 | + $cc = $email->object->get_email_cc(); |
|
242 | + $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true ); |
|
243 | + |
|
244 | + if ( ! empty( $cc ) ) { |
|
245 | + $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
246 | + $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
247 | + } |
|
248 | + |
|
249 | + if ( ! empty( $cc_2 ) ) { |
|
250 | + $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) ); |
|
251 | + $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) ); |
|
252 | + } |
|
253 | + } |
|
254 | + |
|
255 | + return $recipients; |
|
256 | + |
|
257 | + } |
|
258 | + |
|
259 | + /** |
|
260 | + * Sends a new invoice notification. |
|
261 | + * |
|
262 | + * @param WPInv_Invoice $invoice |
|
263 | + */ |
|
264 | + public function new_invoice( $invoice ) { |
|
265 | + |
|
266 | + // Only send this email for invoices created via the admin page. |
|
267 | + if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) { |
|
268 | + return; |
|
269 | + } |
|
270 | + |
|
271 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
272 | + $recipient = wpinv_get_admin_email(); |
|
273 | + |
|
274 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
275 | + |
|
276 | + } |
|
277 | + |
|
278 | + /** |
|
279 | + * Sends a cancelled invoice notification. |
|
280 | + * |
|
281 | + * @param WPInv_Invoice $invoice |
|
282 | + */ |
|
283 | + public function cancelled_invoice( $invoice ) { |
|
284 | + |
|
285 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
286 | + $recipient = $invoice->get_email(); |
|
287 | + |
|
288 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
289 | + } |
|
290 | + |
|
291 | + /** |
|
292 | + * Sends a failed invoice notification. |
|
293 | + * |
|
294 | + * @param WPInv_Invoice $invoice |
|
295 | + */ |
|
296 | + public function failed_invoice( $invoice ) { |
|
297 | + |
|
298 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
299 | + $recipient = wpinv_get_admin_email(); |
|
300 | + |
|
301 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
302 | + |
|
303 | + } |
|
304 | + |
|
305 | + /** |
|
306 | + * Sends a notification whenever an invoice is put on hold. |
|
307 | + * |
|
308 | + * @param WPInv_Invoice $invoice |
|
309 | + */ |
|
310 | + public function onhold_invoice( $invoice ) { |
|
311 | + |
|
312 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
313 | + $recipient = $invoice->get_email(); |
|
314 | + |
|
315 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
316 | + |
|
317 | + } |
|
318 | + |
|
319 | + /** |
|
320 | + * Sends a notification whenever an invoice is marked as processing payment. |
|
321 | + * |
|
322 | + * @param WPInv_Invoice $invoice |
|
323 | + */ |
|
324 | + public function processing_invoice( $invoice ) { |
|
325 | + |
|
326 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
327 | + $recipient = $invoice->get_email(); |
|
328 | + |
|
329 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
330 | + |
|
331 | + } |
|
332 | + |
|
333 | + /** |
|
334 | + * Sends a notification whenever an invoice is paid. |
|
335 | + * |
|
336 | + * @param WPInv_Invoice $invoice |
|
337 | + */ |
|
338 | + public function completed_invoice( $invoice ) { |
|
339 | + |
|
340 | + // (Maybe) abort if it is a renewal invoice. |
|
341 | + if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) { |
|
342 | + return; |
|
343 | + } |
|
344 | + |
|
345 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
346 | + $recipient = $invoice->get_email(); |
|
347 | + |
|
348 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
349 | + |
|
350 | + } |
|
351 | + |
|
352 | + /** |
|
353 | + * Sends a notification whenever an invoice is refunded. |
|
354 | + * |
|
355 | + * @param WPInv_Invoice $invoice |
|
356 | + */ |
|
357 | + public function refunded_invoice( $invoice ) { |
|
358 | + |
|
359 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
360 | + $recipient = $invoice->get_email(); |
|
361 | + |
|
362 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
363 | + |
|
364 | + } |
|
365 | + |
|
366 | + /** |
|
367 | + * Notifies a user about new invoices |
|
368 | + * |
|
369 | + * @param WPInv_Invoice $invoice |
|
370 | + * @param bool $force |
|
371 | + */ |
|
372 | + public function user_invoice( $invoice, $force = false ) { |
|
373 | + |
|
374 | + if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) { |
|
375 | + return; |
|
376 | + } |
|
377 | + |
|
378 | + // Only send this email for invoices created via the admin page. |
|
379 | + if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) { |
|
380 | + return; |
|
381 | + } |
|
382 | + |
|
383 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
384 | + $recipient = $invoice->get_email(); |
|
385 | + |
|
386 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
387 | + |
|
388 | + } |
|
389 | + |
|
390 | + /** |
|
391 | + * Checks if an invoice is a payment form invoice. |
|
392 | + * |
|
393 | + * @param int $invoice |
|
394 | + * @return bool |
|
395 | + */ |
|
396 | + public function is_payment_form_invoice( $invoice ) { |
|
397 | + $created_via = get_post_meta( $invoice, 'wpinv_created_via', true ); |
|
398 | + $is_payment_form_invoice = 'payment_form' === $created_via || 'geodirectory' === $created_via; |
|
399 | + $is_payment_form_invoice = apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice ); |
|
400 | + return empty( $_GET['getpaid-admin-action'] ) && $is_payment_form_invoice; |
|
401 | + } |
|
402 | + |
|
403 | + /** |
|
404 | + * Notifies admin about new invoice notes |
|
405 | + * |
|
406 | + * @param WPInv_Invoice $invoice |
|
407 | + * @param string $note |
|
408 | + */ |
|
409 | + public function user_note( $invoice, $note ) { |
|
410 | + |
|
411 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
412 | + $recipient = $invoice->get_email(); |
|
413 | + |
|
414 | + return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) ); |
|
415 | + |
|
416 | + } |
|
417 | + |
|
418 | + /** |
|
419 | + * (Force) Sends overdue notices. |
|
420 | + * |
|
421 | + * @param WPInv_Invoice $invoice |
|
422 | + */ |
|
423 | + public function force_send_overdue_notice( $invoice ) { |
|
424 | + $email = new GetPaid_Notification_Email( 'overdue', $invoice ); |
|
425 | + return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() ); |
|
426 | + } |
|
427 | + |
|
428 | + /** |
|
429 | + * Sends overdue notices. |
|
430 | + * |
|
431 | + * @TODO: Create an invoices query class. |
|
432 | + */ |
|
433 | + public function overdue() { |
|
434 | + global $wpdb; |
|
435 | + |
|
436 | + $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
437 | + |
|
438 | + // Fetch reminder days. |
|
439 | + $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
440 | + |
|
441 | + // Abort if non is set. |
|
442 | + if ( empty( $reminder_days ) ) { |
|
443 | + return; |
|
444 | + } |
|
445 | + |
|
446 | + // Retrieve date query. |
|
447 | + $date_query = $this->get_date_query( $reminder_days ); |
|
448 | + |
|
449 | + // Invoices table. |
|
450 | + $table = $wpdb->prefix . 'getpaid_invoices'; |
|
451 | + |
|
452 | + // Fetch invoices. |
|
453 | + $invoices = $wpdb->get_col( |
|
454 | + "SELECT posts.ID FROM $wpdb->posts as posts |
|
455 | 455 | LEFT JOIN $table as invoices ON invoices.post_id = posts.ID |
456 | 456 | WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query" |
457 | 457 | ); |
458 | 458 | |
459 | - foreach ( $invoices as $invoice ) { |
|
459 | + foreach ( $invoices as $invoice ) { |
|
460 | 460 | |
461 | - // Only send this email for invoices created via the admin page. |
|
462 | - if ( ! $this->is_payment_form_invoice( $invoice ) ) { |
|
463 | - $invoice = new WPInv_Invoice( $invoice ); |
|
464 | - $email->object = $invoice; |
|
461 | + // Only send this email for invoices created via the admin page. |
|
462 | + if ( ! $this->is_payment_form_invoice( $invoice ) ) { |
|
463 | + $invoice = new WPInv_Invoice( $invoice ); |
|
464 | + $email->object = $invoice; |
|
465 | 465 | |
466 | - if ( $invoice->needs_payment() && ! $invoice->is_renewal() ) { |
|
467 | - $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() ); |
|
468 | - } |
|
469 | - } |
|
470 | - } |
|
466 | + if ( $invoice->needs_payment() && ! $invoice->is_renewal() ) { |
|
467 | + $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() ); |
|
468 | + } |
|
469 | + } |
|
470 | + } |
|
471 | 471 | |
472 | - } |
|
472 | + } |
|
473 | 473 | |
474 | - /** |
|
475 | - * Calculates the date query for an invoices query |
|
476 | - * |
|
477 | - * @param array $reminder_days |
|
478 | - * @return string |
|
479 | - */ |
|
480 | - public function get_date_query( $reminder_days ) { |
|
474 | + /** |
|
475 | + * Calculates the date query for an invoices query |
|
476 | + * |
|
477 | + * @param array $reminder_days |
|
478 | + * @return string |
|
479 | + */ |
|
480 | + public function get_date_query( $reminder_days ) { |
|
481 | 481 | |
482 | - $date_query = array( |
|
483 | - 'relation' => 'OR', |
|
484 | - ); |
|
482 | + $date_query = array( |
|
483 | + 'relation' => 'OR', |
|
484 | + ); |
|
485 | 485 | |
486 | - foreach ( $reminder_days as $days ) { |
|
487 | - $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) ); |
|
486 | + foreach ( $reminder_days as $days ) { |
|
487 | + $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) ); |
|
488 | 488 | |
489 | - $date_query[] = array( |
|
490 | - 'year' => $date['year'], |
|
491 | - 'month' => $date['month'], |
|
492 | - 'day' => $date['day'], |
|
493 | - ); |
|
489 | + $date_query[] = array( |
|
490 | + 'year' => $date['year'], |
|
491 | + 'month' => $date['month'], |
|
492 | + 'day' => $date['day'], |
|
493 | + ); |
|
494 | 494 | |
495 | - } |
|
495 | + } |
|
496 | 496 | |
497 | - $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' ); |
|
497 | + $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' ); |
|
498 | 498 | |
499 | - return $date_query->get_sql(); |
|
499 | + return $date_query->get_sql(); |
|
500 | 500 | |
501 | - } |
|
501 | + } |
|
502 | 502 | |
503 | 503 | } |
@@ -4,7 +4,7 @@ discard block |
||
4 | 4 | * |
5 | 5 | */ |
6 | 6 | |
7 | -defined( 'ABSPATH' ) || exit; |
|
7 | +defined('ABSPATH') || exit; |
|
8 | 8 | |
9 | 9 | /** |
10 | 10 | * This class handles invoice notificaiton emails. |
@@ -28,7 +28,7 @@ discard block |
||
28 | 28 | $this->invoice_actions = apply_filters( |
29 | 29 | 'getpaid_notification_email_invoice_triggers', |
30 | 30 | array( |
31 | - 'getpaid_new_invoice' => array( 'new_invoice', 'user_invoice' ), |
|
31 | + 'getpaid_new_invoice' => array('new_invoice', 'user_invoice'), |
|
32 | 32 | 'getpaid_invoice_status_wpi-cancelled' => 'cancelled_invoice', |
33 | 33 | 'getpaid_invoice_status_wpi-failed' => 'failed_invoice', |
34 | 34 | 'getpaid_invoice_status_wpi-onhold' => 'onhold_invoice', |
@@ -41,7 +41,7 @@ discard block |
||
41 | 41 | ) |
42 | 42 | ); |
43 | 43 | |
44 | - add_action( 'init', array( $this, 'init_hooks' ) ); |
|
44 | + add_action('init', array($this, 'init_hooks')); |
|
45 | 45 | } |
46 | 46 | |
47 | 47 | /** |
@@ -49,11 +49,11 @@ discard block |
||
49 | 49 | */ |
50 | 50 | public function init_hooks() { |
51 | 51 | |
52 | - add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 ); |
|
53 | - add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 ); |
|
52 | + add_filter('getpaid_get_email_merge_tags', array($this, 'invoice_merge_tags'), 10, 2); |
|
53 | + add_filter('getpaid_invoice_email_recipients', array($this, 'filter_email_recipients'), 10, 2); |
|
54 | 54 | |
55 | - foreach ( $this->invoice_actions as $hook => $email_type ) { |
|
56 | - $this->init_email_type_hook( $hook, $email_type ); |
|
55 | + foreach ($this->invoice_actions as $hook => $email_type) { |
|
56 | + $this->init_email_type_hook($hook, $email_type); |
|
57 | 57 | } |
58 | 58 | } |
59 | 59 | |
@@ -63,25 +63,25 @@ discard block |
||
63 | 63 | * @param string $hook |
64 | 64 | * @param string|array $email_type |
65 | 65 | */ |
66 | - public function init_email_type_hook( $hook, $email_type ) { |
|
66 | + public function init_email_type_hook($hook, $email_type) { |
|
67 | 67 | |
68 | - $email_type = wpinv_parse_list( $email_type ); |
|
68 | + $email_type = wpinv_parse_list($email_type); |
|
69 | 69 | |
70 | - foreach ( $email_type as $type ) { |
|
70 | + foreach ($email_type as $type) { |
|
71 | 71 | |
72 | - $email = new GetPaid_Notification_Email( $type ); |
|
72 | + $email = new GetPaid_Notification_Email($type); |
|
73 | 73 | |
74 | 74 | // Abort if it is not active. |
75 | - if ( ! $email->is_active() ) { |
|
75 | + if (!$email->is_active()) { |
|
76 | 76 | continue; |
77 | 77 | } |
78 | 78 | |
79 | - if ( method_exists( $this, $type ) ) { |
|
80 | - add_action( $hook, array( $this, $type ), 100, 2 ); |
|
79 | + if (method_exists($this, $type)) { |
|
80 | + add_action($hook, array($this, $type), 100, 2); |
|
81 | 81 | continue; |
82 | 82 | } |
83 | 83 | |
84 | - do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook ); |
|
84 | + do_action('getpaid_invoice_init_email_type_hook', $type, $hook); |
|
85 | 85 | } |
86 | 86 | |
87 | 87 | } |
@@ -92,19 +92,19 @@ discard block |
||
92 | 92 | * @param array $merge_tags |
93 | 93 | * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
94 | 94 | */ |
95 | - public function invoice_merge_tags( $merge_tags, $object ) { |
|
95 | + public function invoice_merge_tags($merge_tags, $object) { |
|
96 | 96 | |
97 | - if ( is_a( $object, 'WPInv_Invoice' ) ) { |
|
97 | + if (is_a($object, 'WPInv_Invoice')) { |
|
98 | 98 | return array_merge( |
99 | 99 | $merge_tags, |
100 | - $this->get_invoice_merge_tags( $object ) |
|
100 | + $this->get_invoice_merge_tags($object) |
|
101 | 101 | ); |
102 | 102 | } |
103 | 103 | |
104 | - if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
104 | + if (is_a($object, 'WPInv_Subscription')) { |
|
105 | 105 | return array_merge( |
106 | 106 | $merge_tags, |
107 | - $this->get_invoice_merge_tags( $object->get_parent_payment() ) |
|
107 | + $this->get_invoice_merge_tags($object->get_parent_payment()) |
|
108 | 108 | ); |
109 | 109 | } |
110 | 110 | |
@@ -118,52 +118,52 @@ discard block |
||
118 | 118 | * @param WPInv_Invoice $invoice |
119 | 119 | * @return array |
120 | 120 | */ |
121 | - public function get_invoice_merge_tags( $invoice ) { |
|
121 | + public function get_invoice_merge_tags($invoice) { |
|
122 | 122 | |
123 | 123 | // Abort if it does not exist. |
124 | - if ( ! $invoice->get_id() ) { |
|
124 | + if (!$invoice->get_id()) { |
|
125 | 125 | return array(); |
126 | 126 | } |
127 | 127 | |
128 | 128 | $due_date = $invoice->get_due_date(); |
129 | - $due_date = empty( $due_date ) ? time() + MINUTE_IN_SECONDS : strtotime( $due_date ) + ( (int) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); |
|
129 | + $due_date = empty($due_date) ? time() + MINUTE_IN_SECONDS : strtotime($due_date) + ((int) get_option('gmt_offset') * HOUR_IN_SECONDS); |
|
130 | 130 | $merge_tags = array( |
131 | - '{name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
132 | - '{full_name}' => sanitize_text_field( $invoice->get_user_full_name() ), |
|
133 | - '{first_name}' => sanitize_text_field( $invoice->get_first_name() ), |
|
134 | - '{last_name}' => sanitize_text_field( $invoice->get_last_name() ), |
|
135 | - '{email}' => sanitize_email( $invoice->get_email() ), |
|
136 | - '{invoice_number}' => sanitize_text_field( $invoice->get_number() ), |
|
137 | - '{invoice_currency}' => sanitize_text_field( $invoice->get_currency() ), |
|
138 | - '{invoice_total}' => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ), |
|
139 | - '{invoice_link}' => esc_url( $invoice->get_view_url() ), |
|
140 | - '{invoice_pay_link}' => esc_url( $invoice->get_checkout_payment_url() ), |
|
141 | - '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ), |
|
142 | - '{invoice_date}' => getpaid_format_date_value( $invoice->get_date_created() ), |
|
143 | - '{invoice_due_date}' => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ), |
|
144 | - '{invoice_quote}' => sanitize_text_field( strtolower( $invoice->get_label() ) ), |
|
145 | - '{invoice_label}' => sanitize_text_field( ucfirst( $invoice->get_label() ) ), |
|
146 | - '{invoice_description}' => wp_kses_post( $invoice->get_description() ), |
|
147 | - '{subscription_name}' => wp_kses_post( $invoice->get_subscription_name() ), |
|
148 | - '{is_was}' => $due_date < time() ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ), |
|
131 | + '{name}' => sanitize_text_field($invoice->get_user_full_name()), |
|
132 | + '{full_name}' => sanitize_text_field($invoice->get_user_full_name()), |
|
133 | + '{first_name}' => sanitize_text_field($invoice->get_first_name()), |
|
134 | + '{last_name}' => sanitize_text_field($invoice->get_last_name()), |
|
135 | + '{email}' => sanitize_email($invoice->get_email()), |
|
136 | + '{invoice_number}' => sanitize_text_field($invoice->get_number()), |
|
137 | + '{invoice_currency}' => sanitize_text_field($invoice->get_currency()), |
|
138 | + '{invoice_total}' => sanitize_text_field(wpinv_price($invoice->get_total(), $invoice->get_currency())), |
|
139 | + '{invoice_link}' => esc_url($invoice->get_view_url()), |
|
140 | + '{invoice_pay_link}' => esc_url($invoice->get_checkout_payment_url()), |
|
141 | + '{invoice_receipt_link}' => esc_url($invoice->get_receipt_url()), |
|
142 | + '{invoice_date}' => getpaid_format_date_value($invoice->get_date_created()), |
|
143 | + '{invoice_due_date}' => getpaid_format_date_value($invoice->get_due_date(), __('on receipt', 'invoicing')), |
|
144 | + '{invoice_quote}' => sanitize_text_field(strtolower($invoice->get_label())), |
|
145 | + '{invoice_label}' => sanitize_text_field(ucfirst($invoice->get_label())), |
|
146 | + '{invoice_description}' => wp_kses_post($invoice->get_description()), |
|
147 | + '{subscription_name}' => wp_kses_post($invoice->get_subscription_name()), |
|
148 | + '{is_was}' => $due_date < time() ? __('was', 'invoicing') : __('is', 'invoicing'), |
|
149 | 149 | ); |
150 | 150 | |
151 | - $payment_form_data = $invoice->get_meta( 'payment_form_data', true ); |
|
151 | + $payment_form_data = $invoice->get_meta('payment_form_data', true); |
|
152 | 152 | |
153 | - if ( is_array( $payment_form_data ) ) { |
|
153 | + if (is_array($payment_form_data)) { |
|
154 | 154 | |
155 | - foreach ( $payment_form_data as $label => $value ) { |
|
155 | + foreach ($payment_form_data as $label => $value) { |
|
156 | 156 | |
157 | - $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) ); |
|
158 | - $value = is_array( $value ) ? implode( ', ', $value ) : $value; |
|
157 | + $label = preg_replace('/[^a-z0-9]+/', '_', strtolower($label)); |
|
158 | + $value = is_array($value) ? implode(', ', $value) : $value; |
|
159 | 159 | |
160 | - if ( is_scalar( $value ) ) { |
|
161 | - $merge_tags[ "{{$label}}" ] = wp_kses_post( $value ); |
|
160 | + if (is_scalar($value)) { |
|
161 | + $merge_tags["{{$label}}"] = wp_kses_post($value); |
|
162 | 162 | } |
163 | 163 | } |
164 | 164 | } |
165 | 165 | |
166 | - return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice ); |
|
166 | + return apply_filters('getpaid_invoice_email_merge_tags', $merge_tags, $invoice); |
|
167 | 167 | } |
168 | 168 | |
169 | 169 | /** |
@@ -175,12 +175,12 @@ discard block |
||
175 | 175 | * @param string|array $recipients |
176 | 176 | * @param array $extra_args Extra template args. |
177 | 177 | */ |
178 | - public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) { |
|
178 | + public function send_email($invoice, $email, $type, $recipients, $extra_args = array()) { |
|
179 | 179 | |
180 | - do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email ); |
|
180 | + do_action('getpaid_before_send_invoice_notification', $type, $invoice, $email); |
|
181 | 181 | |
182 | - $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' ); |
|
183 | - if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) { |
|
182 | + $skip = $invoice->is_free() && wpinv_get_option('skip_email_free_invoice'); |
|
183 | + if (apply_filters('getpaid_skip_invoice_email', $skip, $type, $invoice)) { |
|
184 | 184 | return; |
185 | 185 | } |
186 | 186 | |
@@ -188,43 +188,43 @@ discard block |
||
188 | 188 | $merge_tags = $email->get_merge_tags(); |
189 | 189 | |
190 | 190 | $result = $mailer->send( |
191 | - apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
192 | - $email->add_merge_tags( $email->get_subject(), $merge_tags ), |
|
193 | - $email->get_content( $merge_tags, $extra_args ), |
|
191 | + apply_filters('getpaid_invoice_email_recipients', wpinv_parse_list($recipients), $email), |
|
192 | + $email->add_merge_tags($email->get_subject(), $merge_tags), |
|
193 | + $email->get_content($merge_tags, $extra_args), |
|
194 | 194 | $email->get_attachments() |
195 | 195 | ); |
196 | 196 | |
197 | 197 | // Maybe send a copy to the admin. |
198 | - if ( $email->include_admin_bcc() ) { |
|
198 | + if ($email->include_admin_bcc()) { |
|
199 | 199 | $mailer->send( |
200 | 200 | wpinv_get_admin_email(), |
201 | - $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ), |
|
202 | - $email->get_content( $merge_tags ), |
|
201 | + $email->add_merge_tags($email->get_subject() . __(' - ADMIN BCC COPY', 'invoicing'), $merge_tags), |
|
202 | + $email->get_content($merge_tags), |
|
203 | 203 | $email->get_attachments() |
204 | 204 | ); |
205 | 205 | } |
206 | 206 | |
207 | - if ( $result ) { |
|
207 | + if ($result) { |
|
208 | 208 | $invoice->add_system_note( |
209 | 209 | sprintf( |
210 | 210 | // translators: %1 is the email type, %2 is the invoice recipient. |
211 | - __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
212 | - sanitize_key( $type ), |
|
213 | - $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
211 | + __('Successfully sent %1$s notification email to %2$s.', 'invoicing'), |
|
212 | + sanitize_key($type), |
|
213 | + $email->is_admin_email() ? __('admin', 'invoicing') : __('the customer', 'invoicing') |
|
214 | 214 | ) |
215 | 215 | ); |
216 | 216 | } else { |
217 | 217 | $invoice->add_system_note( |
218 | 218 | sprintf( |
219 | 219 | // translators: %1 is the email type, %2 is the invoice recipient. |
220 | - __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
221 | - sanitize_key( $type ), |
|
222 | - $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' ) |
|
220 | + __('Failed sending %1$s notification email to %2$s.', 'invoicing'), |
|
221 | + sanitize_key($type), |
|
222 | + $email->is_admin_email() ? __('admin', 'invoicing') : __('the customer', 'invoicing') |
|
223 | 223 | ) |
224 | 224 | ); |
225 | 225 | } |
226 | 226 | |
227 | - do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email ); |
|
227 | + do_action('getpaid_after_send_invoice_notification', $type, $invoice, $email); |
|
228 | 228 | |
229 | 229 | return $result; |
230 | 230 | } |
@@ -235,20 +235,20 @@ discard block |
||
235 | 235 | * @param array $recipients |
236 | 236 | * @param GetPaid_Notification_Email $email |
237 | 237 | */ |
238 | - public function filter_email_recipients( $recipients, $email ) { |
|
238 | + public function filter_email_recipients($recipients, $email) { |
|
239 | 239 | |
240 | - if ( ! $email->is_admin_email() ) { |
|
240 | + if (!$email->is_admin_email()) { |
|
241 | 241 | $cc = $email->object->get_email_cc(); |
242 | - $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true ); |
|
242 | + $cc_2 = get_user_meta($email->object->get_user_id(), '_wpinv_email_cc', true); |
|
243 | 243 | |
244 | - if ( ! empty( $cc ) ) { |
|
245 | - $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
246 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
244 | + if (!empty($cc)) { |
|
245 | + $cc = array_map('sanitize_email', wpinv_parse_list($cc)); |
|
246 | + $recipients = array_filter(array_unique(array_merge($recipients, $cc))); |
|
247 | 247 | } |
248 | 248 | |
249 | - if ( ! empty( $cc_2 ) ) { |
|
250 | - $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) ); |
|
251 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) ); |
|
249 | + if (!empty($cc_2)) { |
|
250 | + $cc_2 = array_map('sanitize_email', wpinv_parse_list($cc_2)); |
|
251 | + $recipients = array_filter(array_unique(array_merge($recipients, $cc_2))); |
|
252 | 252 | } |
253 | 253 | } |
254 | 254 | |
@@ -261,17 +261,17 @@ discard block |
||
261 | 261 | * |
262 | 262 | * @param WPInv_Invoice $invoice |
263 | 263 | */ |
264 | - public function new_invoice( $invoice ) { |
|
264 | + public function new_invoice($invoice) { |
|
265 | 265 | |
266 | 266 | // Only send this email for invoices created via the admin page. |
267 | - if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) { |
|
267 | + if (!$invoice->is_type('invoice') || $invoice->is_paid() || $this->is_payment_form_invoice($invoice->get_id())) { |
|
268 | 268 | return; |
269 | 269 | } |
270 | 270 | |
271 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
271 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
272 | 272 | $recipient = wpinv_get_admin_email(); |
273 | 273 | |
274 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
274 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
275 | 275 | |
276 | 276 | } |
277 | 277 | |
@@ -280,12 +280,12 @@ discard block |
||
280 | 280 | * |
281 | 281 | * @param WPInv_Invoice $invoice |
282 | 282 | */ |
283 | - public function cancelled_invoice( $invoice ) { |
|
283 | + public function cancelled_invoice($invoice) { |
|
284 | 284 | |
285 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
285 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
286 | 286 | $recipient = $invoice->get_email(); |
287 | 287 | |
288 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
288 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
289 | 289 | } |
290 | 290 | |
291 | 291 | /** |
@@ -293,12 +293,12 @@ discard block |
||
293 | 293 | * |
294 | 294 | * @param WPInv_Invoice $invoice |
295 | 295 | */ |
296 | - public function failed_invoice( $invoice ) { |
|
296 | + public function failed_invoice($invoice) { |
|
297 | 297 | |
298 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
298 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
299 | 299 | $recipient = wpinv_get_admin_email(); |
300 | 300 | |
301 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
301 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
302 | 302 | |
303 | 303 | } |
304 | 304 | |
@@ -307,12 +307,12 @@ discard block |
||
307 | 307 | * |
308 | 308 | * @param WPInv_Invoice $invoice |
309 | 309 | */ |
310 | - public function onhold_invoice( $invoice ) { |
|
310 | + public function onhold_invoice($invoice) { |
|
311 | 311 | |
312 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
312 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
313 | 313 | $recipient = $invoice->get_email(); |
314 | 314 | |
315 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
315 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
316 | 316 | |
317 | 317 | } |
318 | 318 | |
@@ -321,12 +321,12 @@ discard block |
||
321 | 321 | * |
322 | 322 | * @param WPInv_Invoice $invoice |
323 | 323 | */ |
324 | - public function processing_invoice( $invoice ) { |
|
324 | + public function processing_invoice($invoice) { |
|
325 | 325 | |
326 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
326 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
327 | 327 | $recipient = $invoice->get_email(); |
328 | 328 | |
329 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
329 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
330 | 330 | |
331 | 331 | } |
332 | 332 | |
@@ -335,17 +335,17 @@ discard block |
||
335 | 335 | * |
336 | 336 | * @param WPInv_Invoice $invoice |
337 | 337 | */ |
338 | - public function completed_invoice( $invoice ) { |
|
338 | + public function completed_invoice($invoice) { |
|
339 | 339 | |
340 | 340 | // (Maybe) abort if it is a renewal invoice. |
341 | - if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) { |
|
341 | + if ($invoice->is_renewal() && !wpinv_get_option('email_completed_invoice_renewal_active', false)) { |
|
342 | 342 | return; |
343 | 343 | } |
344 | 344 | |
345 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
345 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
346 | 346 | $recipient = $invoice->get_email(); |
347 | 347 | |
348 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
348 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
349 | 349 | |
350 | 350 | } |
351 | 351 | |
@@ -354,12 +354,12 @@ discard block |
||
354 | 354 | * |
355 | 355 | * @param WPInv_Invoice $invoice |
356 | 356 | */ |
357 | - public function refunded_invoice( $invoice ) { |
|
357 | + public function refunded_invoice($invoice) { |
|
358 | 358 | |
359 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
359 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
360 | 360 | $recipient = $invoice->get_email(); |
361 | 361 | |
362 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
362 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
363 | 363 | |
364 | 364 | } |
365 | 365 | |
@@ -369,21 +369,21 @@ discard block |
||
369 | 369 | * @param WPInv_Invoice $invoice |
370 | 370 | * @param bool $force |
371 | 371 | */ |
372 | - public function user_invoice( $invoice, $force = false ) { |
|
372 | + public function user_invoice($invoice, $force = false) { |
|
373 | 373 | |
374 | - if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) { |
|
374 | + if (!$force && !empty($GLOBALS['wpinv_skip_invoice_notification'])) { |
|
375 | 375 | return; |
376 | 376 | } |
377 | 377 | |
378 | 378 | // Only send this email for invoices created via the admin page. |
379 | - if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) { |
|
379 | + if (!$invoice->is_type('invoice') || (empty($force) && $invoice->is_paid()) || (empty($force) && $this->is_payment_form_invoice($invoice->get_id()))) { |
|
380 | 380 | return; |
381 | 381 | } |
382 | 382 | |
383 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
383 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
384 | 384 | $recipient = $invoice->get_email(); |
385 | 385 | |
386 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient ); |
|
386 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient); |
|
387 | 387 | |
388 | 388 | } |
389 | 389 | |
@@ -393,11 +393,11 @@ discard block |
||
393 | 393 | * @param int $invoice |
394 | 394 | * @return bool |
395 | 395 | */ |
396 | - public function is_payment_form_invoice( $invoice ) { |
|
397 | - $created_via = get_post_meta( $invoice, 'wpinv_created_via', true ); |
|
396 | + public function is_payment_form_invoice($invoice) { |
|
397 | + $created_via = get_post_meta($invoice, 'wpinv_created_via', true); |
|
398 | 398 | $is_payment_form_invoice = 'payment_form' === $created_via || 'geodirectory' === $created_via; |
399 | - $is_payment_form_invoice = apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice ); |
|
400 | - return empty( $_GET['getpaid-admin-action'] ) && $is_payment_form_invoice; |
|
399 | + $is_payment_form_invoice = apply_filters('getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice); |
|
400 | + return empty($_GET['getpaid-admin-action']) && $is_payment_form_invoice; |
|
401 | 401 | } |
402 | 402 | |
403 | 403 | /** |
@@ -406,12 +406,12 @@ discard block |
||
406 | 406 | * @param WPInv_Invoice $invoice |
407 | 407 | * @param string $note |
408 | 408 | */ |
409 | - public function user_note( $invoice, $note ) { |
|
409 | + public function user_note($invoice, $note) { |
|
410 | 410 | |
411 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $invoice ); |
|
411 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $invoice); |
|
412 | 412 | $recipient = $invoice->get_email(); |
413 | 413 | |
414 | - return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) ); |
|
414 | + return $this->send_email($invoice, $email, __FUNCTION__, $recipient, array('customer_note' => $note)); |
|
415 | 415 | |
416 | 416 | } |
417 | 417 | |
@@ -420,9 +420,9 @@ discard block |
||
420 | 420 | * |
421 | 421 | * @param WPInv_Invoice $invoice |
422 | 422 | */ |
423 | - public function force_send_overdue_notice( $invoice ) { |
|
424 | - $email = new GetPaid_Notification_Email( 'overdue', $invoice ); |
|
425 | - return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() ); |
|
423 | + public function force_send_overdue_notice($invoice) { |
|
424 | + $email = new GetPaid_Notification_Email('overdue', $invoice); |
|
425 | + return $this->send_email($invoice, $email, 'overdue', $invoice->get_email()); |
|
426 | 426 | } |
427 | 427 | |
428 | 428 | /** |
@@ -433,38 +433,38 @@ discard block |
||
433 | 433 | public function overdue() { |
434 | 434 | global $wpdb; |
435 | 435 | |
436 | - $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
436 | + $email = new GetPaid_Notification_Email(__FUNCTION__); |
|
437 | 437 | |
438 | 438 | // Fetch reminder days. |
439 | - $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
439 | + $reminder_days = array_unique(wp_parse_id_list($email->get_option('days'))); |
|
440 | 440 | |
441 | 441 | // Abort if non is set. |
442 | - if ( empty( $reminder_days ) ) { |
|
442 | + if (empty($reminder_days)) { |
|
443 | 443 | return; |
444 | 444 | } |
445 | 445 | |
446 | 446 | // Retrieve date query. |
447 | - $date_query = $this->get_date_query( $reminder_days ); |
|
447 | + $date_query = $this->get_date_query($reminder_days); |
|
448 | 448 | |
449 | 449 | // Invoices table. |
450 | 450 | $table = $wpdb->prefix . 'getpaid_invoices'; |
451 | 451 | |
452 | 452 | // Fetch invoices. |
453 | - $invoices = $wpdb->get_col( |
|
453 | + $invoices = $wpdb->get_col( |
|
454 | 454 | "SELECT posts.ID FROM $wpdb->posts as posts |
455 | 455 | LEFT JOIN $table as invoices ON invoices.post_id = posts.ID |
456 | 456 | WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query" |
457 | 457 | ); |
458 | 458 | |
459 | - foreach ( $invoices as $invoice ) { |
|
459 | + foreach ($invoices as $invoice) { |
|
460 | 460 | |
461 | 461 | // Only send this email for invoices created via the admin page. |
462 | - if ( ! $this->is_payment_form_invoice( $invoice ) ) { |
|
463 | - $invoice = new WPInv_Invoice( $invoice ); |
|
462 | + if (!$this->is_payment_form_invoice($invoice)) { |
|
463 | + $invoice = new WPInv_Invoice($invoice); |
|
464 | 464 | $email->object = $invoice; |
465 | 465 | |
466 | - if ( $invoice->needs_payment() && ! $invoice->is_renewal() ) { |
|
467 | - $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() ); |
|
466 | + if ($invoice->needs_payment() && !$invoice->is_renewal()) { |
|
467 | + $this->send_email($invoice, $email, __FUNCTION__, $invoice->get_email()); |
|
468 | 468 | } |
469 | 469 | } |
470 | 470 | } |
@@ -477,14 +477,14 @@ discard block |
||
477 | 477 | * @param array $reminder_days |
478 | 478 | * @return string |
479 | 479 | */ |
480 | - public function get_date_query( $reminder_days ) { |
|
480 | + public function get_date_query($reminder_days) { |
|
481 | 481 | |
482 | 482 | $date_query = array( |
483 | 483 | 'relation' => 'OR', |
484 | 484 | ); |
485 | 485 | |
486 | - foreach ( $reminder_days as $days ) { |
|
487 | - $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) ); |
|
486 | + foreach ($reminder_days as $days) { |
|
487 | + $date = date_parse(date('Y-m-d', strtotime("-$days days", current_time('timestamp')))); |
|
488 | 488 | |
489 | 489 | $date_query[] = array( |
490 | 490 | 'year' => $date['year'], |
@@ -494,7 +494,7 @@ discard block |
||
494 | 494 | |
495 | 495 | } |
496 | 496 | |
497 | - $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' ); |
|
497 | + $date_query = new WP_Date_Query($date_query, 'invoices.due_date'); |
|
498 | 498 | |
499 | 499 | return $date_query->get_sql(); |
500 | 500 |
@@ -13,324 +13,324 @@ |
||
13 | 13 | class GetPaid_Subscription_Notification_Emails { |
14 | 14 | |
15 | 15 | /** |
16 | - * The array of subscription email actions. |
|
17 | - * |
|
18 | - * @param array |
|
19 | - */ |
|
20 | - public $subscription_actions; |
|
16 | + * The array of subscription email actions. |
|
17 | + * |
|
18 | + * @param array |
|
19 | + */ |
|
20 | + public $subscription_actions; |
|
21 | 21 | |
22 | 22 | /** |
23 | - * Class constructor |
|
23 | + * Class constructor |
|
24 | 24 | * |
25 | - */ |
|
26 | - public function __construct() { |
|
27 | - |
|
28 | - $this->subscription_actions = apply_filters( |
|
29 | - 'getpaid_notification_email_subscription_triggers', |
|
30 | - array( |
|
31 | - 'getpaid_subscription_active' => 'subscription_active', |
|
32 | - 'getpaid_subscription_trialling' => 'subscription_trial', |
|
33 | - 'getpaid_subscription_cancelled' => 'subscription_cancelled', |
|
34 | - 'getpaid_subscription_expired' => 'subscription_expired', |
|
35 | - 'getpaid_subscription_completed' => 'subscription_complete', |
|
36 | - 'getpaid_daily_maintenance' => 'renewal_reminder' |
|
37 | - ) |
|
38 | - ); |
|
39 | - |
|
40 | - add_action( 'init', array( $this, 'init_hooks' ) ); |
|
41 | - } |
|
25 | + */ |
|
26 | + public function __construct() { |
|
27 | + |
|
28 | + $this->subscription_actions = apply_filters( |
|
29 | + 'getpaid_notification_email_subscription_triggers', |
|
30 | + array( |
|
31 | + 'getpaid_subscription_active' => 'subscription_active', |
|
32 | + 'getpaid_subscription_trialling' => 'subscription_trial', |
|
33 | + 'getpaid_subscription_cancelled' => 'subscription_cancelled', |
|
34 | + 'getpaid_subscription_expired' => 'subscription_expired', |
|
35 | + 'getpaid_subscription_completed' => 'subscription_complete', |
|
36 | + 'getpaid_daily_maintenance' => 'renewal_reminder' |
|
37 | + ) |
|
38 | + ); |
|
39 | + |
|
40 | + add_action( 'init', array( $this, 'init_hooks' ) ); |
|
41 | + } |
|
42 | 42 | |
43 | 43 | /** |
44 | - * Registers email hooks. |
|
45 | - */ |
|
46 | - public function init_hooks() { |
|
47 | - |
|
48 | - add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 ); |
|
49 | - foreach ( $this->subscription_actions as $hook => $email_type ) { |
|
50 | - |
|
51 | - $email = new GetPaid_Notification_Email( $email_type ); |
|
52 | - |
|
53 | - if ( ! $email->is_active() ) { |
|
54 | - continue; |
|
55 | - } |
|
56 | - |
|
57 | - if ( method_exists( $this, $email_type ) ) { |
|
58 | - add_action( $hook, array( $this, $email_type ), 100, 2 ); |
|
59 | - continue; |
|
60 | - } |
|
61 | - |
|
62 | - do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook ); |
|
63 | - |
|
64 | - } |
|
65 | - |
|
66 | - } |
|
67 | - |
|
68 | - /** |
|
69 | - * Filters subscription merge tags. |
|
70 | - * |
|
71 | - * @param array $merge_tags |
|
72 | - * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
|
73 | - */ |
|
74 | - public function subscription_merge_tags( $merge_tags, $object ) { |
|
75 | - |
|
76 | - if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
77 | - $merge_tags = array_merge( |
|
78 | - $merge_tags, |
|
79 | - $this->get_subscription_merge_tags( $object ) |
|
80 | - ); |
|
81 | - } |
|
82 | - |
|
83 | - return $merge_tags; |
|
84 | - |
|
85 | - } |
|
86 | - |
|
87 | - /** |
|
88 | - * Generates subscription merge tags. |
|
89 | - * |
|
90 | - * @param WPInv_Subscription $subscription |
|
91 | - * @return array |
|
92 | - */ |
|
93 | - public function get_subscription_merge_tags( $subscription ) { |
|
94 | - |
|
95 | - // Abort if it does not exist. |
|
96 | - if ( ! $subscription->get_id() ) { |
|
97 | - return array(); |
|
98 | - } |
|
99 | - |
|
100 | - $invoice = $subscription->get_parent_invoice(); |
|
101 | - return array( |
|
102 | - '{subscription_renewal_date}' => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ), |
|
103 | - '{subscription_created}' => getpaid_format_date_value( $subscription->get_date_created() ), |
|
104 | - '{subscription_status}' => sanitize_text_field( $subscription->get_status_label() ), |
|
105 | - '{subscription_profile_id}' => sanitize_text_field( $subscription->get_profile_id() ), |
|
106 | - '{subscription_id}' => absint( $subscription->get_id() ), |
|
107 | - '{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ), |
|
108 | - '{subscription_initial_amount}' => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ), |
|
109 | - '{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ), |
|
110 | - '{subscription_bill_times}' => $subscription->get_bill_times(), |
|
111 | - '{subscription_url}' => esc_url( $subscription->get_view_url() ), |
|
112 | - ); |
|
113 | - |
|
114 | - } |
|
115 | - |
|
116 | - /** |
|
117 | - * Checks if we should send a notification for a subscription. |
|
118 | - * |
|
119 | - * @param WPInv_Invoice $invoice |
|
120 | - * @return bool |
|
121 | - */ |
|
122 | - public function should_send_notification( $invoice ) { |
|
123 | - return 0 != $invoice->get_id(); |
|
124 | - } |
|
125 | - |
|
126 | - /** |
|
127 | - * Returns notification recipients. |
|
128 | - * |
|
129 | - * @param WPInv_Invoice $invoice |
|
130 | - * @return array |
|
131 | - */ |
|
132 | - public function get_recipients( $invoice ) { |
|
133 | - $recipients = array( $invoice->get_email() ); |
|
134 | - |
|
135 | - $cc = $invoice->get_email_cc(); |
|
136 | - |
|
137 | - if ( ! empty( $cc ) ) { |
|
138 | - $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
139 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
140 | - } |
|
141 | - |
|
142 | - return $recipients; |
|
143 | - } |
|
144 | - |
|
145 | - /** |
|
146 | - * Helper function to send an email. |
|
147 | - * |
|
148 | - * @param WPInv_Subscription $subscription |
|
149 | - * @param GetPaid_Notification_Email $email |
|
150 | - * @param string $type |
|
151 | - * @param array $extra_args Extra template args. |
|
152 | - */ |
|
153 | - public function send_email( $subscription, $email, $type, $extra_args = array() ) { |
|
154 | - |
|
155 | - if ( empty( $subscription ) ) { |
|
156 | - return; |
|
157 | - } |
|
158 | - |
|
159 | - if ( is_array( $subscription ) ) { |
|
160 | - $subscription = current( $subscription ); |
|
161 | - } |
|
162 | - |
|
163 | - if ( ! $subscription instanceof WPInv_Subscription ) { |
|
164 | - return; |
|
165 | - } |
|
166 | - |
|
167 | - // Abort in case the parent invoice does not exist. |
|
168 | - $invoice = $subscription->get_parent_invoice(); |
|
169 | - if ( ! $this->should_send_notification( $invoice ) ) { |
|
170 | - return; |
|
171 | - } |
|
172 | - |
|
173 | - if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) { |
|
174 | - return; |
|
175 | - } |
|
176 | - |
|
177 | - do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email ); |
|
178 | - |
|
179 | - $recipients = $this->get_recipients( $invoice ); |
|
180 | - $mailer = new GetPaid_Notification_Email_Sender(); |
|
181 | - $merge_tags = $email->get_merge_tags(); |
|
182 | - $content = $email->get_content( $merge_tags, $extra_args ); |
|
183 | - $subject = $email->add_merge_tags( $email->get_subject(), $merge_tags ); |
|
184 | - $attachments = $email->get_attachments(); |
|
185 | - |
|
186 | - $result = $mailer->send( |
|
187 | - apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
188 | - $subject, |
|
189 | - $content, |
|
190 | - $attachments |
|
191 | - ); |
|
192 | - |
|
193 | - // Maybe send a copy to the admin. |
|
194 | - if ( $email->include_admin_bcc() ) { |
|
195 | - $mailer->send( |
|
196 | - wpinv_get_admin_email(), |
|
197 | - $subject . __( ' - ADMIN BCC COPY', 'invoicing' ), |
|
198 | - $content, |
|
199 | - $attachments |
|
200 | - ); |
|
201 | - } |
|
202 | - |
|
203 | - if ( $result ) { |
|
204 | - $invoice->add_system_note( |
|
205 | - sprintf( |
|
206 | - __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
207 | - sanitize_key( $type ), |
|
208 | - $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
209 | - ) |
|
210 | - ); |
|
211 | - } else { |
|
212 | - $invoice->add_system_note( |
|
213 | - sprintf( |
|
214 | - __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
215 | - sanitize_key( $type ), |
|
216 | - $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
217 | - ) |
|
218 | - ); |
|
219 | - } |
|
220 | - |
|
221 | - do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email ); |
|
222 | - |
|
223 | - } |
|
224 | - |
|
225 | - /** |
|
226 | - * Sends a subscription active. |
|
227 | - * |
|
228 | - * @since 2.8.4 |
|
229 | - * |
|
230 | - * @param WPInv_Subscription $subscription |
|
231 | - */ |
|
232 | - public function subscription_active( $subscription ) { |
|
233 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
234 | - |
|
235 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
236 | - } |
|
44 | + * Registers email hooks. |
|
45 | + */ |
|
46 | + public function init_hooks() { |
|
47 | + |
|
48 | + add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 ); |
|
49 | + foreach ( $this->subscription_actions as $hook => $email_type ) { |
|
50 | + |
|
51 | + $email = new GetPaid_Notification_Email( $email_type ); |
|
52 | + |
|
53 | + if ( ! $email->is_active() ) { |
|
54 | + continue; |
|
55 | + } |
|
56 | + |
|
57 | + if ( method_exists( $this, $email_type ) ) { |
|
58 | + add_action( $hook, array( $this, $email_type ), 100, 2 ); |
|
59 | + continue; |
|
60 | + } |
|
61 | + |
|
62 | + do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook ); |
|
63 | + |
|
64 | + } |
|
65 | + |
|
66 | + } |
|
237 | 67 | |
238 | 68 | /** |
239 | - * Sends a new trial notification. |
|
240 | - * |
|
241 | - * @param WPInv_Subscription $subscription |
|
242 | - */ |
|
243 | - public function subscription_trial( $subscription ) { |
|
69 | + * Filters subscription merge tags. |
|
70 | + * |
|
71 | + * @param array $merge_tags |
|
72 | + * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
|
73 | + */ |
|
74 | + public function subscription_merge_tags( $merge_tags, $object ) { |
|
244 | 75 | |
245 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
246 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
76 | + if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
77 | + $merge_tags = array_merge( |
|
78 | + $merge_tags, |
|
79 | + $this->get_subscription_merge_tags( $object ) |
|
80 | + ); |
|
81 | + } |
|
247 | 82 | |
248 | - } |
|
83 | + return $merge_tags; |
|
249 | 84 | |
250 | - /** |
|
251 | - * Sends a cancelled subscription notification. |
|
252 | - * |
|
253 | - * @param WPInv_Subscription $subscription |
|
254 | - */ |
|
255 | - public function subscription_cancelled( $subscription ) { |
|
85 | + } |
|
86 | + |
|
87 | + /** |
|
88 | + * Generates subscription merge tags. |
|
89 | + * |
|
90 | + * @param WPInv_Subscription $subscription |
|
91 | + * @return array |
|
92 | + */ |
|
93 | + public function get_subscription_merge_tags( $subscription ) { |
|
94 | + |
|
95 | + // Abort if it does not exist. |
|
96 | + if ( ! $subscription->get_id() ) { |
|
97 | + return array(); |
|
98 | + } |
|
99 | + |
|
100 | + $invoice = $subscription->get_parent_invoice(); |
|
101 | + return array( |
|
102 | + '{subscription_renewal_date}' => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ), |
|
103 | + '{subscription_created}' => getpaid_format_date_value( $subscription->get_date_created() ), |
|
104 | + '{subscription_status}' => sanitize_text_field( $subscription->get_status_label() ), |
|
105 | + '{subscription_profile_id}' => sanitize_text_field( $subscription->get_profile_id() ), |
|
106 | + '{subscription_id}' => absint( $subscription->get_id() ), |
|
107 | + '{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ), |
|
108 | + '{subscription_initial_amount}' => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ), |
|
109 | + '{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ), |
|
110 | + '{subscription_bill_times}' => $subscription->get_bill_times(), |
|
111 | + '{subscription_url}' => esc_url( $subscription->get_view_url() ), |
|
112 | + ); |
|
113 | + |
|
114 | + } |
|
256 | 115 | |
257 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
258 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
116 | + /** |
|
117 | + * Checks if we should send a notification for a subscription. |
|
118 | + * |
|
119 | + * @param WPInv_Invoice $invoice |
|
120 | + * @return bool |
|
121 | + */ |
|
122 | + public function should_send_notification( $invoice ) { |
|
123 | + return 0 != $invoice->get_id(); |
|
124 | + } |
|
259 | 125 | |
260 | - } |
|
126 | + /** |
|
127 | + * Returns notification recipients. |
|
128 | + * |
|
129 | + * @param WPInv_Invoice $invoice |
|
130 | + * @return array |
|
131 | + */ |
|
132 | + public function get_recipients( $invoice ) { |
|
133 | + $recipients = array( $invoice->get_email() ); |
|
261 | 134 | |
262 | - /** |
|
263 | - * Sends a subscription expired notification. |
|
264 | - * |
|
265 | - * @param WPInv_Subscription $subscription |
|
266 | - */ |
|
267 | - public function subscription_expired( $subscription ) { |
|
135 | + $cc = $invoice->get_email_cc(); |
|
268 | 136 | |
269 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
270 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
137 | + if ( ! empty( $cc ) ) { |
|
138 | + $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
139 | + $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
140 | + } |
|
271 | 141 | |
272 | - } |
|
142 | + return $recipients; |
|
143 | + } |
|
273 | 144 | |
274 | - /** |
|
275 | - * Sends a completed subscription notification. |
|
276 | - * |
|
277 | - * @param WPInv_Subscription $subscription |
|
278 | - */ |
|
279 | - public function subscription_complete( $subscription ) { |
|
145 | + /** |
|
146 | + * Helper function to send an email. |
|
147 | + * |
|
148 | + * @param WPInv_Subscription $subscription |
|
149 | + * @param GetPaid_Notification_Email $email |
|
150 | + * @param string $type |
|
151 | + * @param array $extra_args Extra template args. |
|
152 | + */ |
|
153 | + public function send_email( $subscription, $email, $type, $extra_args = array() ) { |
|
154 | + |
|
155 | + if ( empty( $subscription ) ) { |
|
156 | + return; |
|
157 | + } |
|
158 | + |
|
159 | + if ( is_array( $subscription ) ) { |
|
160 | + $subscription = current( $subscription ); |
|
161 | + } |
|
162 | + |
|
163 | + if ( ! $subscription instanceof WPInv_Subscription ) { |
|
164 | + return; |
|
165 | + } |
|
166 | + |
|
167 | + // Abort in case the parent invoice does not exist. |
|
168 | + $invoice = $subscription->get_parent_invoice(); |
|
169 | + if ( ! $this->should_send_notification( $invoice ) ) { |
|
170 | + return; |
|
171 | + } |
|
172 | + |
|
173 | + if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) { |
|
174 | + return; |
|
175 | + } |
|
176 | + |
|
177 | + do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email ); |
|
178 | + |
|
179 | + $recipients = $this->get_recipients( $invoice ); |
|
180 | + $mailer = new GetPaid_Notification_Email_Sender(); |
|
181 | + $merge_tags = $email->get_merge_tags(); |
|
182 | + $content = $email->get_content( $merge_tags, $extra_args ); |
|
183 | + $subject = $email->add_merge_tags( $email->get_subject(), $merge_tags ); |
|
184 | + $attachments = $email->get_attachments(); |
|
185 | + |
|
186 | + $result = $mailer->send( |
|
187 | + apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
188 | + $subject, |
|
189 | + $content, |
|
190 | + $attachments |
|
191 | + ); |
|
192 | + |
|
193 | + // Maybe send a copy to the admin. |
|
194 | + if ( $email->include_admin_bcc() ) { |
|
195 | + $mailer->send( |
|
196 | + wpinv_get_admin_email(), |
|
197 | + $subject . __( ' - ADMIN BCC COPY', 'invoicing' ), |
|
198 | + $content, |
|
199 | + $attachments |
|
200 | + ); |
|
201 | + } |
|
202 | + |
|
203 | + if ( $result ) { |
|
204 | + $invoice->add_system_note( |
|
205 | + sprintf( |
|
206 | + __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
207 | + sanitize_key( $type ), |
|
208 | + $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
209 | + ) |
|
210 | + ); |
|
211 | + } else { |
|
212 | + $invoice->add_system_note( |
|
213 | + sprintf( |
|
214 | + __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
215 | + sanitize_key( $type ), |
|
216 | + $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
217 | + ) |
|
218 | + ); |
|
219 | + } |
|
220 | + |
|
221 | + do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email ); |
|
222 | + |
|
223 | + } |
|
280 | 224 | |
281 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
282 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
225 | + /** |
|
226 | + * Sends a subscription active. |
|
227 | + * |
|
228 | + * @since 2.8.4 |
|
229 | + * |
|
230 | + * @param WPInv_Subscription $subscription |
|
231 | + */ |
|
232 | + public function subscription_active( $subscription ) { |
|
233 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
283 | 234 | |
284 | - } |
|
235 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
236 | + } |
|
285 | 237 | |
286 | - /** |
|
287 | - * Sends a subscription renewal reminder notification. |
|
288 | - * |
|
289 | - */ |
|
290 | - public function renewal_reminder() { |
|
238 | + /** |
|
239 | + * Sends a new trial notification. |
|
240 | + * |
|
241 | + * @param WPInv_Subscription $subscription |
|
242 | + */ |
|
243 | + public function subscription_trial( $subscription ) { |
|
244 | + |
|
245 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
246 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
247 | + |
|
248 | + } |
|
249 | + |
|
250 | + /** |
|
251 | + * Sends a cancelled subscription notification. |
|
252 | + * |
|
253 | + * @param WPInv_Subscription $subscription |
|
254 | + */ |
|
255 | + public function subscription_cancelled( $subscription ) { |
|
256 | + |
|
257 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
258 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
259 | + |
|
260 | + } |
|
261 | + |
|
262 | + /** |
|
263 | + * Sends a subscription expired notification. |
|
264 | + * |
|
265 | + * @param WPInv_Subscription $subscription |
|
266 | + */ |
|
267 | + public function subscription_expired( $subscription ) { |
|
268 | + |
|
269 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
270 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
271 | + |
|
272 | + } |
|
273 | + |
|
274 | + /** |
|
275 | + * Sends a completed subscription notification. |
|
276 | + * |
|
277 | + * @param WPInv_Subscription $subscription |
|
278 | + */ |
|
279 | + public function subscription_complete( $subscription ) { |
|
280 | + |
|
281 | + $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
282 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
283 | + |
|
284 | + } |
|
285 | + |
|
286 | + /** |
|
287 | + * Sends a subscription renewal reminder notification. |
|
288 | + * |
|
289 | + */ |
|
290 | + public function renewal_reminder() { |
|
291 | 291 | |
292 | - $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
292 | + $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
293 | 293 | |
294 | - // Fetch reminder days. |
|
295 | - $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
294 | + // Fetch reminder days. |
|
295 | + $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
296 | 296 | |
297 | - // Abort if non is set. |
|
298 | - if ( empty( $reminder_days ) ) { |
|
299 | - return; |
|
300 | - } |
|
297 | + // Abort if non is set. |
|
298 | + if ( empty( $reminder_days ) ) { |
|
299 | + return; |
|
300 | + } |
|
301 | 301 | |
302 | - // Fetch matching subscriptions. |
|
302 | + // Fetch matching subscriptions. |
|
303 | 303 | $args = array( |
304 | 304 | 'number' => -1, |
305 | - 'count_total' => false, |
|
306 | - 'status' => 'trialling active', |
|
305 | + 'count_total' => false, |
|
306 | + 'status' => 'trialling active', |
|
307 | 307 | 'date_expires_query' => array( |
308 | - 'relation' => 'OR', |
|
308 | + 'relation' => 'OR', |
|
309 | 309 | ), |
310 | - ); |
|
310 | + ); |
|
311 | 311 | |
312 | - foreach ( $reminder_days as $days ) { |
|
313 | - $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) ); |
|
312 | + foreach ( $reminder_days as $days ) { |
|
313 | + $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) ); |
|
314 | 314 | |
315 | - $args['date_expires_query'][] = array( |
|
316 | - 'year' => $date['year'], |
|
317 | - 'month' => $date['month'], |
|
318 | - 'day' => $date['day'], |
|
319 | - ); |
|
315 | + $args['date_expires_query'][] = array( |
|
316 | + 'year' => $date['year'], |
|
317 | + 'month' => $date['month'], |
|
318 | + 'day' => $date['day'], |
|
319 | + ); |
|
320 | 320 | |
321 | - } |
|
321 | + } |
|
322 | 322 | |
323 | - $subscriptions = new GetPaid_Subscriptions_Query( $args ); |
|
323 | + $subscriptions = new GetPaid_Subscriptions_Query( $args ); |
|
324 | 324 | |
325 | 325 | foreach ( $subscriptions->get_results() as $subscription ) { |
326 | 326 | |
327 | - // Skip packages. |
|
328 | - if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) { |
|
329 | - $email->object = $subscription; |
|
330 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
331 | - } |
|
332 | - } |
|
327 | + // Skip packages. |
|
328 | + if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) { |
|
329 | + $email->object = $subscription; |
|
330 | + $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
331 | + } |
|
332 | + } |
|
333 | 333 | |
334 | - } |
|
334 | + } |
|
335 | 335 | |
336 | 336 | } |
@@ -4,7 +4,7 @@ discard block |
||
4 | 4 | * |
5 | 5 | */ |
6 | 6 | |
7 | -defined( 'ABSPATH' ) || exit; |
|
7 | +defined('ABSPATH') || exit; |
|
8 | 8 | |
9 | 9 | /** |
10 | 10 | * This class handles subscription notificaiton emails. |
@@ -37,7 +37,7 @@ discard block |
||
37 | 37 | ) |
38 | 38 | ); |
39 | 39 | |
40 | - add_action( 'init', array( $this, 'init_hooks' ) ); |
|
40 | + add_action('init', array($this, 'init_hooks')); |
|
41 | 41 | } |
42 | 42 | |
43 | 43 | /** |
@@ -45,21 +45,21 @@ discard block |
||
45 | 45 | */ |
46 | 46 | public function init_hooks() { |
47 | 47 | |
48 | - add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 ); |
|
49 | - foreach ( $this->subscription_actions as $hook => $email_type ) { |
|
48 | + add_filter('getpaid_get_email_merge_tags', array($this, 'subscription_merge_tags'), 10, 2); |
|
49 | + foreach ($this->subscription_actions as $hook => $email_type) { |
|
50 | 50 | |
51 | - $email = new GetPaid_Notification_Email( $email_type ); |
|
51 | + $email = new GetPaid_Notification_Email($email_type); |
|
52 | 52 | |
53 | - if ( ! $email->is_active() ) { |
|
53 | + if (!$email->is_active()) { |
|
54 | 54 | continue; |
55 | 55 | } |
56 | 56 | |
57 | - if ( method_exists( $this, $email_type ) ) { |
|
58 | - add_action( $hook, array( $this, $email_type ), 100, 2 ); |
|
57 | + if (method_exists($this, $email_type)) { |
|
58 | + add_action($hook, array($this, $email_type), 100, 2); |
|
59 | 59 | continue; |
60 | 60 | } |
61 | 61 | |
62 | - do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook ); |
|
62 | + do_action('getpaid_subscription_notification_email_register_hook', $email_type, $hook); |
|
63 | 63 | |
64 | 64 | } |
65 | 65 | |
@@ -71,12 +71,12 @@ discard block |
||
71 | 71 | * @param array $merge_tags |
72 | 72 | * @param mixed|WPInv_Invoice|WPInv_Subscription $object |
73 | 73 | */ |
74 | - public function subscription_merge_tags( $merge_tags, $object ) { |
|
74 | + public function subscription_merge_tags($merge_tags, $object) { |
|
75 | 75 | |
76 | - if ( is_a( $object, 'WPInv_Subscription' ) ) { |
|
76 | + if (is_a($object, 'WPInv_Subscription')) { |
|
77 | 77 | $merge_tags = array_merge( |
78 | 78 | $merge_tags, |
79 | - $this->get_subscription_merge_tags( $object ) |
|
79 | + $this->get_subscription_merge_tags($object) |
|
80 | 80 | ); |
81 | 81 | } |
82 | 82 | |
@@ -90,25 +90,25 @@ discard block |
||
90 | 90 | * @param WPInv_Subscription $subscription |
91 | 91 | * @return array |
92 | 92 | */ |
93 | - public function get_subscription_merge_tags( $subscription ) { |
|
93 | + public function get_subscription_merge_tags($subscription) { |
|
94 | 94 | |
95 | 95 | // Abort if it does not exist. |
96 | - if ( ! $subscription->get_id() ) { |
|
96 | + if (!$subscription->get_id()) { |
|
97 | 97 | return array(); |
98 | 98 | } |
99 | 99 | |
100 | - $invoice = $subscription->get_parent_invoice(); |
|
100 | + $invoice = $subscription->get_parent_invoice(); |
|
101 | 101 | return array( |
102 | - '{subscription_renewal_date}' => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ), |
|
103 | - '{subscription_created}' => getpaid_format_date_value( $subscription->get_date_created() ), |
|
104 | - '{subscription_status}' => sanitize_text_field( $subscription->get_status_label() ), |
|
105 | - '{subscription_profile_id}' => sanitize_text_field( $subscription->get_profile_id() ), |
|
106 | - '{subscription_id}' => absint( $subscription->get_id() ), |
|
107 | - '{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ), |
|
108 | - '{subscription_initial_amount}' => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ), |
|
109 | - '{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ), |
|
102 | + '{subscription_renewal_date}' => getpaid_format_date_value($subscription->get_next_renewal_date(), __('Never', 'invoicing')), |
|
103 | + '{subscription_created}' => getpaid_format_date_value($subscription->get_date_created()), |
|
104 | + '{subscription_status}' => sanitize_text_field($subscription->get_status_label()), |
|
105 | + '{subscription_profile_id}' => sanitize_text_field($subscription->get_profile_id()), |
|
106 | + '{subscription_id}' => absint($subscription->get_id()), |
|
107 | + '{subscription_recurring_amount}' => sanitize_text_field(wpinv_price($subscription->get_recurring_amount(), $invoice->get_currency())), |
|
108 | + '{subscription_initial_amount}' => sanitize_text_field(wpinv_price($subscription->get_initial_amount(), $invoice->get_currency())), |
|
109 | + '{subscription_recurring_period}' => getpaid_get_subscription_period_label($subscription->get_period(), $subscription->get_frequency(), ''), |
|
110 | 110 | '{subscription_bill_times}' => $subscription->get_bill_times(), |
111 | - '{subscription_url}' => esc_url( $subscription->get_view_url() ), |
|
111 | + '{subscription_url}' => esc_url($subscription->get_view_url()), |
|
112 | 112 | ); |
113 | 113 | |
114 | 114 | } |
@@ -119,7 +119,7 @@ discard block |
||
119 | 119 | * @param WPInv_Invoice $invoice |
120 | 120 | * @return bool |
121 | 121 | */ |
122 | - public function should_send_notification( $invoice ) { |
|
122 | + public function should_send_notification($invoice) { |
|
123 | 123 | return 0 != $invoice->get_id(); |
124 | 124 | } |
125 | 125 | |
@@ -129,14 +129,14 @@ discard block |
||
129 | 129 | * @param WPInv_Invoice $invoice |
130 | 130 | * @return array |
131 | 131 | */ |
132 | - public function get_recipients( $invoice ) { |
|
133 | - $recipients = array( $invoice->get_email() ); |
|
132 | + public function get_recipients($invoice) { |
|
133 | + $recipients = array($invoice->get_email()); |
|
134 | 134 | |
135 | 135 | $cc = $invoice->get_email_cc(); |
136 | 136 | |
137 | - if ( ! empty( $cc ) ) { |
|
138 | - $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) ); |
|
139 | - $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) ); |
|
137 | + if (!empty($cc)) { |
|
138 | + $cc = array_map('sanitize_email', wpinv_parse_list($cc)); |
|
139 | + $recipients = array_filter(array_unique(array_merge($recipients, $cc))); |
|
140 | 140 | } |
141 | 141 | |
142 | 142 | return $recipients; |
@@ -150,75 +150,75 @@ discard block |
||
150 | 150 | * @param string $type |
151 | 151 | * @param array $extra_args Extra template args. |
152 | 152 | */ |
153 | - public function send_email( $subscription, $email, $type, $extra_args = array() ) { |
|
153 | + public function send_email($subscription, $email, $type, $extra_args = array()) { |
|
154 | 154 | |
155 | - if ( empty( $subscription ) ) { |
|
155 | + if (empty($subscription)) { |
|
156 | 156 | return; |
157 | 157 | } |
158 | 158 | |
159 | - if ( is_array( $subscription ) ) { |
|
160 | - $subscription = current( $subscription ); |
|
159 | + if (is_array($subscription)) { |
|
160 | + $subscription = current($subscription); |
|
161 | 161 | } |
162 | 162 | |
163 | - if ( ! $subscription instanceof WPInv_Subscription ) { |
|
163 | + if (!$subscription instanceof WPInv_Subscription) { |
|
164 | 164 | return; |
165 | 165 | } |
166 | 166 | |
167 | 167 | // Abort in case the parent invoice does not exist. |
168 | 168 | $invoice = $subscription->get_parent_invoice(); |
169 | - if ( ! $this->should_send_notification( $invoice ) ) { |
|
169 | + if (!$this->should_send_notification($invoice)) { |
|
170 | 170 | return; |
171 | 171 | } |
172 | 172 | |
173 | - if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) { |
|
173 | + if (apply_filters('getpaid_skip_subscription_email', false, $type, $subscription)) { |
|
174 | 174 | return; |
175 | 175 | } |
176 | 176 | |
177 | - do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email ); |
|
177 | + do_action('getpaid_before_send_subscription_notification', $type, $subscription, $email); |
|
178 | 178 | |
179 | - $recipients = $this->get_recipients( $invoice ); |
|
179 | + $recipients = $this->get_recipients($invoice); |
|
180 | 180 | $mailer = new GetPaid_Notification_Email_Sender(); |
181 | 181 | $merge_tags = $email->get_merge_tags(); |
182 | - $content = $email->get_content( $merge_tags, $extra_args ); |
|
183 | - $subject = $email->add_merge_tags( $email->get_subject(), $merge_tags ); |
|
182 | + $content = $email->get_content($merge_tags, $extra_args); |
|
183 | + $subject = $email->add_merge_tags($email->get_subject(), $merge_tags); |
|
184 | 184 | $attachments = $email->get_attachments(); |
185 | 185 | |
186 | 186 | $result = $mailer->send( |
187 | - apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ), |
|
187 | + apply_filters('getpaid_subscription_email_recipients', wpinv_parse_list($recipients), $email), |
|
188 | 188 | $subject, |
189 | 189 | $content, |
190 | 190 | $attachments |
191 | 191 | ); |
192 | 192 | |
193 | 193 | // Maybe send a copy to the admin. |
194 | - if ( $email->include_admin_bcc() ) { |
|
194 | + if ($email->include_admin_bcc()) { |
|
195 | 195 | $mailer->send( |
196 | 196 | wpinv_get_admin_email(), |
197 | - $subject . __( ' - ADMIN BCC COPY', 'invoicing' ), |
|
197 | + $subject . __(' - ADMIN BCC COPY', 'invoicing'), |
|
198 | 198 | $content, |
199 | 199 | $attachments |
200 | 200 | ); |
201 | 201 | } |
202 | 202 | |
203 | - if ( $result ) { |
|
203 | + if ($result) { |
|
204 | 204 | $invoice->add_system_note( |
205 | 205 | sprintf( |
206 | - __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ), |
|
207 | - sanitize_key( $type ), |
|
208 | - $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
206 | + __('Successfully sent %1$s notification email to %2$s.', 'invoicing'), |
|
207 | + sanitize_key($type), |
|
208 | + $email->is_admin_email() ? __('admin') : __('the customer') |
|
209 | 209 | ) |
210 | 210 | ); |
211 | 211 | } else { |
212 | 212 | $invoice->add_system_note( |
213 | 213 | sprintf( |
214 | - __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ), |
|
215 | - sanitize_key( $type ), |
|
216 | - $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' ) |
|
214 | + __('Failed sending %1$s notification email to %2$s.', 'invoicing'), |
|
215 | + sanitize_key($type), |
|
216 | + $email->is_admin_email() ? __('admin') : __('the customer') |
|
217 | 217 | ) |
218 | 218 | ); |
219 | 219 | } |
220 | 220 | |
221 | - do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email ); |
|
221 | + do_action('getpaid_after_send_subscription_notification', $type, $subscription, $email); |
|
222 | 222 | |
223 | 223 | } |
224 | 224 | |
@@ -229,10 +229,10 @@ discard block |
||
229 | 229 | * |
230 | 230 | * @param WPInv_Subscription $subscription |
231 | 231 | */ |
232 | - public function subscription_active( $subscription ) { |
|
233 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
232 | + public function subscription_active($subscription) { |
|
233 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $subscription); |
|
234 | 234 | |
235 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
235 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
236 | 236 | } |
237 | 237 | |
238 | 238 | /** |
@@ -240,10 +240,10 @@ discard block |
||
240 | 240 | * |
241 | 241 | * @param WPInv_Subscription $subscription |
242 | 242 | */ |
243 | - public function subscription_trial( $subscription ) { |
|
243 | + public function subscription_trial($subscription) { |
|
244 | 244 | |
245 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
246 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
245 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $subscription); |
|
246 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
247 | 247 | |
248 | 248 | } |
249 | 249 | |
@@ -252,10 +252,10 @@ discard block |
||
252 | 252 | * |
253 | 253 | * @param WPInv_Subscription $subscription |
254 | 254 | */ |
255 | - public function subscription_cancelled( $subscription ) { |
|
255 | + public function subscription_cancelled($subscription) { |
|
256 | 256 | |
257 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
258 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
257 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $subscription); |
|
258 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
259 | 259 | |
260 | 260 | } |
261 | 261 | |
@@ -264,10 +264,10 @@ discard block |
||
264 | 264 | * |
265 | 265 | * @param WPInv_Subscription $subscription |
266 | 266 | */ |
267 | - public function subscription_expired( $subscription ) { |
|
267 | + public function subscription_expired($subscription) { |
|
268 | 268 | |
269 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
270 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
269 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $subscription); |
|
270 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
271 | 271 | |
272 | 272 | } |
273 | 273 | |
@@ -276,10 +276,10 @@ discard block |
||
276 | 276 | * |
277 | 277 | * @param WPInv_Subscription $subscription |
278 | 278 | */ |
279 | - public function subscription_complete( $subscription ) { |
|
279 | + public function subscription_complete($subscription) { |
|
280 | 280 | |
281 | - $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription ); |
|
282 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
281 | + $email = new GetPaid_Notification_Email(__FUNCTION__, $subscription); |
|
282 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
283 | 283 | |
284 | 284 | } |
285 | 285 | |
@@ -289,18 +289,18 @@ discard block |
||
289 | 289 | */ |
290 | 290 | public function renewal_reminder() { |
291 | 291 | |
292 | - $email = new GetPaid_Notification_Email( __FUNCTION__ ); |
|
292 | + $email = new GetPaid_Notification_Email(__FUNCTION__); |
|
293 | 293 | |
294 | 294 | // Fetch reminder days. |
295 | - $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) ); |
|
295 | + $reminder_days = array_unique(wp_parse_id_list($email->get_option('days'))); |
|
296 | 296 | |
297 | 297 | // Abort if non is set. |
298 | - if ( empty( $reminder_days ) ) { |
|
298 | + if (empty($reminder_days)) { |
|
299 | 299 | return; |
300 | 300 | } |
301 | 301 | |
302 | 302 | // Fetch matching subscriptions. |
303 | - $args = array( |
|
303 | + $args = array( |
|
304 | 304 | 'number' => -1, |
305 | 305 | 'count_total' => false, |
306 | 306 | 'status' => 'trialling active', |
@@ -309,8 +309,8 @@ discard block |
||
309 | 309 | ), |
310 | 310 | ); |
311 | 311 | |
312 | - foreach ( $reminder_days as $days ) { |
|
313 | - $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) ); |
|
312 | + foreach ($reminder_days as $days) { |
|
313 | + $date = date_parse(date('Y-m-d', strtotime("+$days days", current_time('timestamp')))); |
|
314 | 314 | |
315 | 315 | $args['date_expires_query'][] = array( |
316 | 316 | 'year' => $date['year'], |
@@ -320,14 +320,14 @@ discard block |
||
320 | 320 | |
321 | 321 | } |
322 | 322 | |
323 | - $subscriptions = new GetPaid_Subscriptions_Query( $args ); |
|
323 | + $subscriptions = new GetPaid_Subscriptions_Query($args); |
|
324 | 324 | |
325 | - foreach ( $subscriptions->get_results() as $subscription ) { |
|
325 | + foreach ($subscriptions->get_results() as $subscription) { |
|
326 | 326 | |
327 | 327 | // Skip packages. |
328 | - if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) { |
|
328 | + if (apply_filters('getpaid_send_subscription_renewal_reminder_email', true)) { |
|
329 | 329 | $email->object = $subscription; |
330 | - $this->send_email( $subscription, $email, __FUNCTION__ ); |
|
330 | + $this->send_email($subscription, $email, __FUNCTION__); |
|
331 | 331 | } |
332 | 332 | } |
333 | 333 |