Passed
Push — master ( 9ee829...6e3436 )
by Brian
04:40
created
includes/gateways/class-getpaid-worldpay-gateway.php 1 patch
Indentation   +94 added lines, -94 removed lines patch added patch discarded remove patch
@@ -13,65 +13,65 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Worldpay_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'worldpay';
21 21
 
22 22
     /**
23
-	 * Payment method order.
24
-	 *
25
-	 * @var int
26
-	 */
23
+     * Payment method order.
24
+     *
25
+     * @var int
26
+     */
27 27
     public $order = 5;
28 28
 
29 29
     /**
30
-	 * Endpoint for requests from Worldpay.
31
-	 *
32
-	 * @var string
33
-	 */
34
-	protected $notify_url;
35
-
36
-	/**
37
-	 * Endpoint for requests to Worldpay.
38
-	 *
39
-	 * @var string
40
-	 */
30
+     * Endpoint for requests from Worldpay.
31
+     *
32
+     * @var string
33
+     */
34
+    protected $notify_url;
35
+
36
+    /**
37
+     * Endpoint for requests to Worldpay.
38
+     *
39
+     * @var string
40
+     */
41 41
     protected $endpoint;
42 42
 
43 43
     /**
44
-	 * An array of features that this gateway supports.
45
-	 *
46
-	 * @var array
47
-	 */
44
+     * An array of features that this gateway supports.
45
+     *
46
+     * @var array
47
+     */
48 48
     protected $supports = array( 'sandbox' );
49 49
 
50 50
     /**
51
-	 * Currencies this gateway is allowed for.
52
-	 *
53
-	 * @var array
54
-	 */
55
-	public $currencies = array( 'AUD', 'ARS', 'CAD', 'CHF', 'DKK', 'EUR', 'HKD', 'MYR', 'GBP', 'NZD', 'NOK', 'SGD', 'LKR', 'SEK', 'TRY', 'USD', 'ZAR' );
51
+     * Currencies this gateway is allowed for.
52
+     *
53
+     * @var array
54
+     */
55
+    public $currencies = array( 'AUD', 'ARS', 'CAD', 'CHF', 'DKK', 'EUR', 'HKD', 'MYR', 'GBP', 'NZD', 'NOK', 'SGD', 'LKR', 'SEK', 'TRY', 'USD', 'ZAR' );
56 56
 
57 57
     /**
58
-	 * URL to view a transaction.
59
-	 *
60
-	 * @var string
61
-	 */
58
+     * URL to view a transaction.
59
+     *
60
+     * @var string
61
+     */
62 62
     public $view_transaction_url = 'https://www.{sandbox}paypal.com/activity/payment/%s';
63 63
 
64 64
     /**
65
-	 * URL to view a subscription.
66
-	 *
67
-	 * @var string
68
-	 */
69
-	public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
65
+     * URL to view a subscription.
66
+     *
67
+     * @var string
68
+     */
69
+    public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
70 70
 
71 71
     /**
72
-	 * Class constructor.
73
-	 */
74
-	public function __construct() {
72
+     * Class constructor.
73
+     */
74
+    public function __construct() {
75 75
 
76 76
         $this->method_title         = __( 'Worldpay', 'invoicing' );
77 77
         $this->title                = __( 'Worldpay - Credit Card / Debit Card', 'invoicing' );
@@ -85,15 +85,15 @@  discard block
 block discarded – undo
85 85
     }
86 86
 
87 87
     /**
88
-	 * Process Payment.
89
-	 *
90
-	 *
91
-	 * @param WPInv_Invoice $invoice Invoice.
92
-	 * @param array $submission_data Posted checkout fields.
93
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
94
-	 * @return array
95
-	 */
96
-	public function process_payment( $invoice, $submission_data, $submission ) {
88
+     * Process Payment.
89
+     *
90
+     *
91
+     * @param WPInv_Invoice $invoice Invoice.
92
+     * @param array $submission_data Posted checkout fields.
93
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
94
+     * @return array
95
+     */
96
+    public function process_payment( $invoice, $submission_data, $submission ) {
97 97
 
98 98
         // Get redirect url.
99 99
         $worldpay_redirect = esc_url( $this->get_request_url( $invoice ) );
@@ -128,31 +128,31 @@  discard block
 block discarded – undo
128 128
     }
129 129
 
130 130
     /**
131
-	 * Get the Worldpay request URL for an invoice.
132
-	 *
133
-	 * @param  WPInv_Invoice $invoice Invoice object.
134
-	 * @return string
135
-	 */
136
-	public function get_request_url( $invoice ) {
131
+     * Get the Worldpay request URL for an invoice.
132
+     *
133
+     * @param  WPInv_Invoice $invoice Invoice object.
134
+     * @return string
135
+     */
136
+    public function get_request_url( $invoice ) {
137 137
 
138 138
         // Endpoint for this request
139
-		$this->endpoint = $this->is_sandbox( $invoice ) ? 'https://secure-test.worldpay.com/wcc/purchase' : 'https://secure.worldpay.com/wcc/purchase';
139
+        $this->endpoint = $this->is_sandbox( $invoice ) ? 'https://secure-test.worldpay.com/wcc/purchase' : 'https://secure.worldpay.com/wcc/purchase';
140 140
 
141 141
         return $this->endpoint;
142 142
 
143
-	}
143
+    }
144 144
 
145 145
     /**
146
-	 * Get Worldpay Args for passing to Worldpay.
147
-	 *
148
-	 * @param  WPInv_Invoice $invoice Invoice object.
149
-	 * @return array
150
-	 */
151
-	protected function get_worldpay_args( $invoice ) {
152
-
153
-		return apply_filters(
154
-			'getpaid_worldpay_args',
155
-			array(
146
+     * Get Worldpay Args for passing to Worldpay.
147
+     *
148
+     * @param  WPInv_Invoice $invoice Invoice object.
149
+     * @return array
150
+     */
151
+    protected function get_worldpay_args( $invoice ) {
152
+
153
+        return apply_filters(
154
+            'getpaid_worldpay_args',
155
+            array(
156 156
                 'amount'         => wpinv_sanitize_amount( $invoice->get_total() ), // mandatory
157 157
                 'cartId'         => wpinv_clean( $invoice->get_number() ), // mandatory reference for the item purchased
158 158
                 'currency'       => wpinv_clean( $invoice->get_currency() ), // mandatory
@@ -177,18 +177,18 @@  discard block
 block discarded – undo
177 177
                 'countryString'  => wpinv_clean( wpinv_country_name( $invoice->get_country() ) ),
178 178
                 'compName'       => wpinv_clean( $invoice->get_company() ),
179 179
             ),
180
-			$invoice
181
-		);
180
+            $invoice
181
+        );
182 182
 
183 183
     }
184 184
 
185 185
     /**
186
-	 * Secures worldpay args with an md5 hash.
187
-	 *
188
-	 * @param  array $args Gateway args.
189
-	 * @return array
190
-	 */
191
-	public function hash_args( $args ) {
186
+     * Secures worldpay args with an md5 hash.
187
+     *
188
+     * @param  array $args Gateway args.
189
+     * @return array
190
+     */
191
+    public function hash_args( $args ) {
192 192
 
193 193
         $md5_secret = $this->get_option( 'md5_secret' );
194 194
 
@@ -204,16 +204,16 @@  discard block
 block discarded – undo
204 204
     }
205 205
 
206 206
     /**
207
-	 * Processes ipns and marks payments as complete.
208
-	 *
209
-	 * @return void
210
-	 */
211
-	public function verify_ipn() {
207
+     * Processes ipns and marks payments as complete.
208
+     *
209
+     * @return void
210
+     */
211
+    public function verify_ipn() {
212 212
 
213 213
         // Validate the IPN.
214 214
         if ( empty( $_POST ) || ! $this->validate_ipn() ) {
215
-		    wp_die( 'Worldpay IPN Request Failure', 'Worldpay IPN', array( 'response' => 500 ) );
216
-		}
215
+            wp_die( 'Worldpay IPN Request Failure', 'Worldpay IPN', array( 'response' => 500 ) );
216
+        }
217 217
 
218 218
         // Process the IPN.
219 219
         $posted  = wp_kses_post_deep( wp_unslash( $_POST ) );
@@ -229,8 +229,8 @@  discard block
 block discarded – undo
229 229
                 $invoice->set_transaction_id( wpinv_clean( $posted['transId'] ) );
230 230
             }
231 231
 
232
-             // Update the ip address.
233
-             if ( ! empty( $posted['ipAddress'] ) ) {
232
+                // Update the ip address.
233
+                if ( ! empty( $posted['ipAddress'] ) ) {
234 234
                 $invoice->set_ip( wpinv_clean( $posted['ipAddress'] ) );
235 235
             }
236 236
 
@@ -257,9 +257,9 @@  discard block
 block discarded – undo
257 257
     }
258 258
 
259 259
     /**
260
-	 * Check Worldpay IPN validity.
261
-	 */
262
-	public function validate_ipn() {
260
+     * Check Worldpay IPN validity.
261
+     */
262
+    public function validate_ipn() {
263 263
 
264 264
         wpinv_error_log( 'Validating Worldpay IPN response' );
265 265
 
@@ -305,11 +305,11 @@  discard block
 block discarded – undo
305 305
     }
306 306
 
307 307
     /**
308
-	 * Filters the gateway settings.
309
-	 *
310
-	 * @param array $admin_settings
311
-	 */
312
-	public function admin_settings( $admin_settings ) {
308
+     * Filters the gateway settings.
309
+     *
310
+     * @param array $admin_settings
311
+     */
312
+    public function admin_settings( $admin_settings ) {
313 313
 
314 314
         $currencies = sprintf(
315 315
             __( 'Supported Currencies: %s', 'invoicing' ),
@@ -350,7 +350,7 @@  discard block
 block discarded – undo
350 350
             'readonly' => true,
351 351
         );
352 352
 
353
-		return $admin_settings;
354
-	}
353
+        return $admin_settings;
354
+    }
355 355
 
356 356
 }
Please login to merge, or discard this patch.
includes/class-getpaid-subscription-notification-emails.php 1 patch
Indentation   +256 added lines, -256 removed lines patch added patch discarded remove patch
@@ -13,299 +13,299 @@
 block discarded – undo
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_trialling' => 'subscription_trial',
32
-				'getpaid_subscription_cancelled' => 'subscription_cancelled',
33
-				'getpaid_subscription_expired'   => 'subscription_expired',
34
-				'getpaid_subscription_completed' => 'subscription_complete',
35
-				'getpaid_daily_maintenance'      => 'renewal_reminder',
36
-			)
37
-		);
38
-
39
-		$this->init_hooks();
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->subscription_actions = apply_filters(
29
+            'getpaid_notification_email_subscription_triggers',
30
+            array(
31
+                'getpaid_subscription_trialling' => 'subscription_trial',
32
+                'getpaid_subscription_cancelled' => 'subscription_cancelled',
33
+                'getpaid_subscription_expired'   => 'subscription_expired',
34
+                'getpaid_subscription_completed' => 'subscription_complete',
35
+                'getpaid_daily_maintenance'      => 'renewal_reminder',
36
+            )
37
+        );
38
+
39
+        $this->init_hooks();
40 40
 
41 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
-		// Abort in case the parent invoice does not exist.
156
-		$invoice = $subscription->get_parent_invoice();
157
-		if ( ! $this->should_send_notification( $invoice ) ) {
158
-			return;
159
-		}
160
-
161
-		if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
162
-			return;
163
-		}
164
-
165
-		do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
166
-
167
-		$recipients  = $this->get_recipients( $invoice );
168
-		$mailer      = new GetPaid_Notification_Email_Sender();
169
-		$merge_tags  = $email->get_merge_tags();
170
-		$content     = $email->get_content( $merge_tags, $extra_args );
171
-		$subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
172
-		$attachments = $email->get_attachments();
173
-
174
-		$result = $mailer->send(
175
-			apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
176
-			$subject,
177
-			$content,
178
-			$attachments
179
-		);
180
-
181
-		// Maybe send a copy to the admin.
182
-		if ( $email->include_admin_bcc() ) {
183
-			$mailer->send(
184
-				wpinv_get_admin_email(),
185
-				$subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
186
-				$content,
187
-				$attachments
188
-			);
189
-		}
190
-
191
-		if ( $result ) {
192
-			$invoice->add_system_note(
193
-				sprintf(
194
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
195
-					sanitize_key( $type ),
196
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
197
-				)
198
-			);
199
-		} else {
200
-			$invoice->add_system_note(
201
-				sprintf(
202
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
203
-					sanitize_key( $type ),
204
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
205
-				)
206
-			);
207
-		}
208
-
209
-		do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
210
-
211
-	}
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
+    }
212 67
 
213 68
     /**
214
-	 * Sends a new trial notification.
215
-	 *
216
-	 * @param WPInv_Subscription $subscription
217
-	 */
218
-	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 ) {
219 75
 
220
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
221
-		$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
+        }
222 82
 
223
-	}
83
+        return $merge_tags;
224 84
 
225
-	/**
226
-	 * Sends a cancelled subscription notification.
227
-	 *
228
-	 * @param WPInv_Subscription $subscription
229
-	 */
230
-	public function subscription_cancelled( $subscription ) {
85
+    }
231 86
 
232
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
233
-		$this->send_email( $subscription, $email, __FUNCTION__ );
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
+        );
234 113
 
235
-	}
114
+    }
236 115
 
237
-	/**
238
-	 * Sends a subscription expired notification.
239
-	 *
240
-	 * @param WPInv_Subscription $subscription
241
-	 */
242
-	public function subscription_expired( $subscription ) {
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
+    }
243 125
 
244
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
245
-		$this->send_email( $subscription, $email, __FUNCTION__ );
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() );
246 134
 
247
-	}
135
+        $cc = $invoice->get_email_cc();
248 136
 
249
-	/**
250
-	 * Sends a completed subscription notification.
251
-	 *
252
-	 * @param WPInv_Subscription $subscription
253
-	 */
254
-	public function subscription_complete( $subscription ) {
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
+        }
255 141
 
256
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
257
-		$this->send_email( $subscription, $email, __FUNCTION__ );
142
+        return $recipients;
143
+    }
258 144
 
259
-	}
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
+        // Abort in case the parent invoice does not exist.
156
+        $invoice = $subscription->get_parent_invoice();
157
+        if ( ! $this->should_send_notification( $invoice ) ) {
158
+            return;
159
+        }
160
+
161
+        if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
162
+            return;
163
+        }
164
+
165
+        do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
166
+
167
+        $recipients  = $this->get_recipients( $invoice );
168
+        $mailer      = new GetPaid_Notification_Email_Sender();
169
+        $merge_tags  = $email->get_merge_tags();
170
+        $content     = $email->get_content( $merge_tags, $extra_args );
171
+        $subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
172
+        $attachments = $email->get_attachments();
173
+
174
+        $result = $mailer->send(
175
+            apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
176
+            $subject,
177
+            $content,
178
+            $attachments
179
+        );
180
+
181
+        // Maybe send a copy to the admin.
182
+        if ( $email->include_admin_bcc() ) {
183
+            $mailer->send(
184
+                wpinv_get_admin_email(),
185
+                $subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
186
+                $content,
187
+                $attachments
188
+            );
189
+        }
190
+
191
+        if ( $result ) {
192
+            $invoice->add_system_note(
193
+                sprintf(
194
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
195
+                    sanitize_key( $type ),
196
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
197
+                )
198
+            );
199
+        } else {
200
+            $invoice->add_system_note(
201
+                sprintf(
202
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
203
+                    sanitize_key( $type ),
204
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
205
+                )
206
+            );
207
+        }
208
+
209
+        do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
260 210
 
261
-	/**
262
-	 * Sends a subscription renewal reminder notification.
263
-	 *
264
-	 */
265
-	public function renewal_reminder() {
211
+    }
266 212
 
267
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
213
+    /**
214
+     * Sends a new trial notification.
215
+     *
216
+     * @param WPInv_Subscription $subscription
217
+     */
218
+    public function subscription_trial( $subscription ) {
268 219
 
269
-		// Fetch reminder days.
270
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
220
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
221
+        $this->send_email( $subscription, $email, __FUNCTION__ );
271 222
 
272
-		// Abort if non is set.
273
-		if ( empty( $reminder_days ) ) {
274
-			return;
275
-		}
223
+    }
276 224
 
277
-		// Fetch matching subscriptions.
225
+    /**
226
+     * Sends a cancelled subscription notification.
227
+     *
228
+     * @param WPInv_Subscription $subscription
229
+     */
230
+    public function subscription_cancelled( $subscription ) {
231
+
232
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
233
+        $this->send_email( $subscription, $email, __FUNCTION__ );
234
+
235
+    }
236
+
237
+    /**
238
+     * Sends a subscription expired notification.
239
+     *
240
+     * @param WPInv_Subscription $subscription
241
+     */
242
+    public function subscription_expired( $subscription ) {
243
+
244
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
245
+        $this->send_email( $subscription, $email, __FUNCTION__ );
246
+
247
+    }
248
+
249
+    /**
250
+     * Sends a completed subscription notification.
251
+     *
252
+     * @param WPInv_Subscription $subscription
253
+     */
254
+    public function subscription_complete( $subscription ) {
255
+
256
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
257
+        $this->send_email( $subscription, $email, __FUNCTION__ );
258
+
259
+    }
260
+
261
+    /**
262
+     * Sends a subscription renewal reminder notification.
263
+     *
264
+     */
265
+    public function renewal_reminder() {
266
+
267
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
268
+
269
+        // Fetch reminder days.
270
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
271
+
272
+        // Abort if non is set.
273
+        if ( empty( $reminder_days ) ) {
274
+            return;
275
+        }
276
+
277
+        // Fetch matching subscriptions.
278 278
         $args  = array(
279 279
             'number'             => -1,
280
-			'count_total'        => false,
281
-			'status'             => 'trialling active',
280
+            'count_total'        => false,
281
+            'status'             => 'trialling active',
282 282
             'date_expires_query' => array(
283
-				'relation' => 'OR',
283
+                'relation' => 'OR',
284 284
             ),
285
-		);
285
+        );
286 286
 
287
-		foreach ( $reminder_days as $days ) {
288
-			$date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
287
+        foreach ( $reminder_days as $days ) {
288
+            $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
289 289
 
290
-			$args['date_expires_query'][] = array(
291
-				'year'  => $date['year'],
292
-				'month' => $date['month'],
293
-				'day'   => $date['day'],
294
-			);
290
+            $args['date_expires_query'][] = array(
291
+                'year'  => $date['year'],
292
+                'month' => $date['month'],
293
+                'day'   => $date['day'],
294
+            );
295 295
 
296
-		}
296
+        }
297 297
 
298
-		$subscriptions = new GetPaid_Subscriptions_Query( $args );
298
+        $subscriptions = new GetPaid_Subscriptions_Query( $args );
299 299
 
300 300
         foreach ( $subscriptions as $subscription ) {
301 301
 
302
-			// Skip packages.
303
-			if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
304
-				$email->object = $subscription;
305
-            	$this->send_email( $subscription, $email, __FUNCTION__ );
306
-			}
302
+            // Skip packages.
303
+            if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
304
+                $email->object = $subscription;
305
+                $this->send_email( $subscription, $email, __FUNCTION__ );
306
+            }
307 307
 }
308 308
 
309
-	}
309
+    }
310 310
 
311 311
 }
Please login to merge, or discard this patch.
includes/wpinv-item-functions.php 1 patch
Indentation   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -57,16 +57,16 @@  discard block
 block discarded – undo
57 57
     $args = wp_parse_args(
58 58
         $args,
59 59
         array(
60
-			'status'     => array( 'publish' ),
61
-			'limit'      => get_option( 'posts_per_page' ),
62
-			'page'       => 1,
63
-			'exclude'    => array(),
64
-			'orderby'    => 'date',
65
-			'order'      => 'DESC',
66
-			'type'       => wpinv_item_types(),
67
-			'meta_query' => array(),
68
-			'return'     => 'objects',
69
-			'paginate'   => false,
60
+            'status'     => array( 'publish' ),
61
+            'limit'      => get_option( 'posts_per_page' ),
62
+            'page'       => 1,
63
+            'exclude'    => array(),
64
+            'orderby'    => 'date',
65
+            'order'      => 'DESC',
66
+            'type'       => wpinv_item_types(),
67
+            'meta_query' => array(),
68
+            'return'     => 'objects',
69
+            'paginate'   => false,
70 70
         )
71 71
     );
72 72
 
@@ -206,9 +206,9 @@  discard block
 block discarded – undo
206 206
 
207 207
 function wpinv_get_item_types() {
208 208
     $item_types = array(
209
-		'custom' => __( 'Standard', 'invoicing' ),
210
-		'fee'    => __( 'Fee', 'invoicing' ),
211
-	);
209
+        'custom' => __( 'Standard', 'invoicing' ),
210
+        'fee'    => __( 'Fee', 'invoicing' ),
211
+    );
212 212
     return apply_filters( 'wpinv_get_item_types', $item_types );
213 213
 }
214 214
 
@@ -249,17 +249,17 @@  discard block
 block discarded – undo
249 249
 function wpinv_get_random_items( $num = 3, $post_ids = true ) {
250 250
     if ( $post_ids ) {
251 251
         $args = array(
252
-			'post_type'  => 'wpi_item',
253
-			'orderby'    => 'rand',
254
-			'post_count' => $num,
255
-			'fields'     => 'ids',
256
-		);
252
+            'post_type'  => 'wpi_item',
253
+            'orderby'    => 'rand',
254
+            'post_count' => $num,
255
+            'fields'     => 'ids',
256
+        );
257 257
     } else {
258 258
         $args = array(
259
-			'post_type'  => 'wpi_item',
260
-			'orderby'    => 'rand',
261
-			'post_count' => $num,
262
-		);
259
+            'post_type'  => 'wpi_item',
260
+            'orderby'    => 'rand',
261
+            'post_count' => $num,
262
+        );
263 263
     }
264 264
 
265 265
     $args  = apply_filters( 'wpinv_get_random_items', $args );
@@ -426,9 +426,9 @@  discard block
 block discarded – undo
426 426
     $bill_times      = $item->get_recurring_limit();
427 427
 
428 428
     if ( ! empty( $bill_times ) ) {
429
-		$bill_times = $item->get_recurring_interval() * $bill_times;
430
-		$bill_times = getpaid_get_subscription_period_label( $item->get_recurring_period(), $bill_times );
431
-	}
429
+        $bill_times = $item->get_recurring_interval() * $bill_times;
430
+        $bill_times = getpaid_get_subscription_period_label( $item->get_recurring_period(), $bill_times );
431
+    }
432 432
 
433 433
     if ( $item instanceof GetPaid_Form_Item && false === $_initial_price ) {
434 434
         $initial_price   = wpinv_price( $item->get_sub_total(), $currency );
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission.php 1 patch
Indentation   +861 added lines, -861 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,199 +10,199 @@  discard block
 block discarded – undo
10 10
 class GetPaid_Payment_Form_Submission {
11 11
 
12 12
     /**
13
-	 * Submission ID
14
-	 *
15
-	 * @var string
16
-	 */
17
-	public $id = null;
18
-
19
-	/**
20
-	 * The raw submission data.
21
-	 *
22
-	 * @var array
23
-	 */
24
-	protected $data = null;
25
-
26
-	/**
27
-	 * Submission totals
28
-	 *
29
-	 * @var array
30
-	 */
31
-	protected $totals = array(
32
-
33
-		'subtotal' => array(
34
-			'initial'   => 0,
35
-			'recurring' => 0,
36
-		),
37
-
38
-		'discount' => array(
39
-			'initial'   => 0,
40
-			'recurring' => 0,
41
-		),
42
-
43
-		'fees'     => array(
44
-			'initial'   => 0,
45
-			'recurring' => 0,
46
-		),
47
-
48
-		'taxes'    => array(
49
-			'initial'   => 0,
50
-			'recurring' => 0,
51
-		),
52
-
53
-		'shipping' => array(
54
-			'initial'   => 0,
55
-			'recurring' => 0,
56
-		),
57
-
58
-	);
59
-
60
-	/**
61
-	 * Sets the associated payment form.
62
-	 *
63
-	 * @var GetPaid_Payment_Form
64
-	 */
13
+     * Submission ID
14
+     *
15
+     * @var string
16
+     */
17
+    public $id = null;
18
+
19
+    /**
20
+     * The raw submission data.
21
+     *
22
+     * @var array
23
+     */
24
+    protected $data = null;
25
+
26
+    /**
27
+     * Submission totals
28
+     *
29
+     * @var array
30
+     */
31
+    protected $totals = array(
32
+
33
+        'subtotal' => array(
34
+            'initial'   => 0,
35
+            'recurring' => 0,
36
+        ),
37
+
38
+        'discount' => array(
39
+            'initial'   => 0,
40
+            'recurring' => 0,
41
+        ),
42
+
43
+        'fees'     => array(
44
+            'initial'   => 0,
45
+            'recurring' => 0,
46
+        ),
47
+
48
+        'taxes'    => array(
49
+            'initial'   => 0,
50
+            'recurring' => 0,
51
+        ),
52
+
53
+        'shipping' => array(
54
+            'initial'   => 0,
55
+            'recurring' => 0,
56
+        ),
57
+
58
+    );
59
+
60
+    /**
61
+     * Sets the associated payment form.
62
+     *
63
+     * @var GetPaid_Payment_Form
64
+     */
65 65
     protected $payment_form = null;
66 66
 
67 67
     /**
68
-	 * The country for the submission.
69
-	 *
70
-	 * @var string
71
-	 */
72
-	public $country = null;
73
-
74
-    /**
75
-	 * The state for the submission.
76
-	 *
77
-	 * @since 1.0.19
78
-	 * @var string
79
-	 */
80
-	public $state = null;
81
-
82
-	/**
83
-	 * The invoice associated with the submission.
84
-	 *
85
-	 * @var WPInv_Invoice
86
-	 */
87
-	protected $invoice = null;
88
-
89
-	/**
90
-	 * The recurring item for the submission.
91
-	 *
92
-	 * @var int
93
-	 */
94
-	public $has_recurring = 0;
95
-
96
-	/**
97
-	 * An array of fees for the submission.
98
-	 *
99
-	 * @var array
100
-	 */
101
-	protected $fees = array();
102
-
103
-	/**
104
-	 * An array of discounts for the submission.
105
-	 *
106
-	 * @var array
107
-	 */
108
-	protected $discounts = array();
109
-
110
-	/**
111
-	 * An array of taxes for the submission.
112
-	 *
113
-	 * @var array
114
-	 */
115
-	protected $taxes = array();
116
-
117
-	/**
118
-	 * An array of items for the submission.
119
-	 *
120
-	 * @var GetPaid_Form_Item[]
121
-	 */
122
-	protected $items = array();
123
-
124
-	/**
125
-	 * The last error.
126
-	 *
127
-	 * @var string
128
-	 */
129
-	public $last_error = null;
130
-
131
-	/**
132
-	 * The last error code.
133
-	 *
134
-	 * @var string
135
-	 */
136
-	public $last_error_code = null;
137
-
138
-    /**
139
-	 * Class constructor.
140
-	 *
141
-	 */
142
-	public function __construct() {
143
-
144
-		// Set the state and country to the default state and country.
145
-		$this->country = wpinv_default_billing_country();
146
-		$this->state   = wpinv_get_default_state();
147
-
148
-		// Do we have an actual submission?
149
-		if ( isset( $_POST['getpaid_payment_form_submission'] ) ) {
150
-			$this->load_data( wp_kses_post_deep( wp_unslash( $_POST ) ) );
151
-		}
152
-
153
-	}
154
-
155
-	/**
156
-	 * Loads submission data.
157
-	 *
158
-	 * @param array $data
159
-	 */
160
-	public function load_data( $data ) {
161
-
162
-		// Allow plugins to filter the data.
163
-		$data       = apply_filters( 'getpaid_submission_data', $data, $this );
164
-
165
-		// Cache it...
166
-		$this->data = $data;
167
-
168
-		// Then generate a unique id from the data.
169
-		$this->id   = md5( wp_json_encode( $data ) );
170
-
171
-		// Finally, process the submission.
172
-		try {
173
-
174
-			// Each process is passed an instance of the class (with reference)
175
-			// and should throw an Exception whenever it encounters one.
176
-			$processors = apply_filters(
177
-				'getpaid_payment_form_submission_processors',
178
-				array(
179
-					array( $this, 'process_payment_form' ),
180
-					array( $this, 'process_invoice' ),
181
-					array( $this, 'process_fees' ),
182
-					array( $this, 'process_items' ),
183
-					array( $this, 'process_discount' ),
184
-					array( $this, 'process_taxes' ),
185
-				),
186
-				$this
187
-			);
188
-
189
-			foreach ( $processors as $processor ) {
190
-				call_user_func_array( $processor, array( &$this ) );
191
-			}
68
+     * The country for the submission.
69
+     *
70
+     * @var string
71
+     */
72
+    public $country = null;
73
+
74
+    /**
75
+     * The state for the submission.
76
+     *
77
+     * @since 1.0.19
78
+     * @var string
79
+     */
80
+    public $state = null;
81
+
82
+    /**
83
+     * The invoice associated with the submission.
84
+     *
85
+     * @var WPInv_Invoice
86
+     */
87
+    protected $invoice = null;
88
+
89
+    /**
90
+     * The recurring item for the submission.
91
+     *
92
+     * @var int
93
+     */
94
+    public $has_recurring = 0;
95
+
96
+    /**
97
+     * An array of fees for the submission.
98
+     *
99
+     * @var array
100
+     */
101
+    protected $fees = array();
102
+
103
+    /**
104
+     * An array of discounts for the submission.
105
+     *
106
+     * @var array
107
+     */
108
+    protected $discounts = array();
109
+
110
+    /**
111
+     * An array of taxes for the submission.
112
+     *
113
+     * @var array
114
+     */
115
+    protected $taxes = array();
116
+
117
+    /**
118
+     * An array of items for the submission.
119
+     *
120
+     * @var GetPaid_Form_Item[]
121
+     */
122
+    protected $items = array();
123
+
124
+    /**
125
+     * The last error.
126
+     *
127
+     * @var string
128
+     */
129
+    public $last_error = null;
130
+
131
+    /**
132
+     * The last error code.
133
+     *
134
+     * @var string
135
+     */
136
+    public $last_error_code = null;
137
+
138
+    /**
139
+     * Class constructor.
140
+     *
141
+     */
142
+    public function __construct() {
143
+
144
+        // Set the state and country to the default state and country.
145
+        $this->country = wpinv_default_billing_country();
146
+        $this->state   = wpinv_get_default_state();
147
+
148
+        // Do we have an actual submission?
149
+        if ( isset( $_POST['getpaid_payment_form_submission'] ) ) {
150
+            $this->load_data( wp_kses_post_deep( wp_unslash( $_POST ) ) );
151
+        }
152
+
153
+    }
154
+
155
+    /**
156
+     * Loads submission data.
157
+     *
158
+     * @param array $data
159
+     */
160
+    public function load_data( $data ) {
161
+
162
+        // Allow plugins to filter the data.
163
+        $data       = apply_filters( 'getpaid_submission_data', $data, $this );
164
+
165
+        // Cache it...
166
+        $this->data = $data;
167
+
168
+        // Then generate a unique id from the data.
169
+        $this->id   = md5( wp_json_encode( $data ) );
170
+
171
+        // Finally, process the submission.
172
+        try {
173
+
174
+            // Each process is passed an instance of the class (with reference)
175
+            // and should throw an Exception whenever it encounters one.
176
+            $processors = apply_filters(
177
+                'getpaid_payment_form_submission_processors',
178
+                array(
179
+                    array( $this, 'process_payment_form' ),
180
+                    array( $this, 'process_invoice' ),
181
+                    array( $this, 'process_fees' ),
182
+                    array( $this, 'process_items' ),
183
+                    array( $this, 'process_discount' ),
184
+                    array( $this, 'process_taxes' ),
185
+                ),
186
+                $this
187
+            );
188
+
189
+            foreach ( $processors as $processor ) {
190
+                call_user_func_array( $processor, array( &$this ) );
191
+            }
192 192
 } catch ( GetPaid_Payment_Exception $e ) {
193
-			$this->last_error      = $e->getMessage();
194
-			$this->last_error_code = $e->getErrorCode();
195
-		} catch ( Exception $e ) {
196
-			$this->last_error      = $e->getMessage();
197
-			$this->last_error_code = $e->getCode();
198
-		}
193
+            $this->last_error      = $e->getMessage();
194
+            $this->last_error_code = $e->getErrorCode();
195
+        } catch ( Exception $e ) {
196
+            $this->last_error      = $e->getMessage();
197
+            $this->last_error_code = $e->getCode();
198
+        }
199 199
 
200
-		// Fired when we are done processing a submission.
201
-		do_action_ref_array( 'getpaid_process_submission', array( &$this ) );
200
+        // Fired when we are done processing a submission.
201
+        do_action_ref_array( 'getpaid_process_submission', array( &$this ) );
202 202
 
203
-	}
203
+    }
204 204
 
205
-	/*
205
+    /*
206 206
 	|--------------------------------------------------------------------------
207 207
 	| Payment Forms.
208 208
 	|--------------------------------------------------------------------------
@@ -211,39 +211,39 @@  discard block
 block discarded – undo
211 211
 	| submission has an active payment form etc.
212 212
     */
213 213
 
214
-	/**
215
-	 * Prepares the submission's payment form.
216
-	 *
217
-	 * @since 1.0.19
218
-	 */
219
-	public function process_payment_form() {
214
+    /**
215
+     * Prepares the submission's payment form.
216
+     *
217
+     * @since 1.0.19
218
+     */
219
+    public function process_payment_form() {
220 220
 
221
-		// Every submission needs an active payment form.
222
-		if ( empty( $this->data['form_id'] ) ) {
223
-			throw new Exception( __( 'Missing payment form', 'invoicing' ) );
224
-		}
221
+        // Every submission needs an active payment form.
222
+        if ( empty( $this->data['form_id'] ) ) {
223
+            throw new Exception( __( 'Missing payment form', 'invoicing' ) );
224
+        }
225 225
 
226
-		// Fetch the payment form.
227
-		$this->payment_form = new GetPaid_Payment_Form( $this->data['form_id'] );
226
+        // Fetch the payment form.
227
+        $this->payment_form = new GetPaid_Payment_Form( $this->data['form_id'] );
228 228
 
229
-		if ( ! $this->payment_form->is_active() ) {
230
-			throw new Exception( __( 'Payment form not active', 'invoicing' ) );
231
-		}
229
+        if ( ! $this->payment_form->is_active() ) {
230
+            throw new Exception( __( 'Payment form not active', 'invoicing' ) );
231
+        }
232 232
 
233
-		do_action_ref_array( 'getpaid_submissions_process_payment_form', array( &$this ) );
234
-	}
233
+        do_action_ref_array( 'getpaid_submissions_process_payment_form', array( &$this ) );
234
+    }
235 235
 
236 236
     /**
237
-	 * Returns the payment form.
238
-	 *
239
-	 * @since 1.0.19
240
-	 * @return GetPaid_Payment_Form
241
-	 */
242
-	public function get_payment_form() {
243
-		return $this->payment_form;
244
-	}
237
+     * Returns the payment form.
238
+     *
239
+     * @since 1.0.19
240
+     * @return GetPaid_Payment_Form
241
+     */
242
+    public function get_payment_form() {
243
+        return $this->payment_form;
244
+    }
245 245
 
246
-	/*
246
+    /*
247 247
 	|--------------------------------------------------------------------------
248 248
 	| Invoices.
249 249
 	|--------------------------------------------------------------------------
@@ -252,84 +252,84 @@  discard block
 block discarded – undo
252 252
 	| might be for an existing invoice.
253 253
 	*/
254 254
 
255
-	/**
256
-	 * Prepares the submission's invoice.
257
-	 *
258
-	 * @since 1.0.19
259
-	 */
260
-	public function process_invoice() {
255
+    /**
256
+     * Prepares the submission's invoice.
257
+     *
258
+     * @since 1.0.19
259
+     */
260
+    public function process_invoice() {
261 261
 
262
-		// Abort if there is no invoice.
263
-		if ( empty( $this->data['invoice_id'] ) ) {
264
-			return;
265
-		}
262
+        // Abort if there is no invoice.
263
+        if ( empty( $this->data['invoice_id'] ) ) {
264
+            return;
265
+        }
266 266
 
267
-		// If the submission is for an existing invoice, ensure that it exists
268
-		// and that it is not paid for.
269
-		$invoice = wpinv_get_invoice( $this->data['invoice_id'] );
267
+        // If the submission is for an existing invoice, ensure that it exists
268
+        // and that it is not paid for.
269
+        $invoice = wpinv_get_invoice( $this->data['invoice_id'] );
270 270
 
271 271
         if ( empty( $invoice ) ) {
272
-			throw new Exception( __( 'Invalid invoice', 'invoicing' ) );
273
-		}
274
-
275
-		if ( $invoice->is_paid() ) {
276
-			throw new Exception( __( 'This invoice is already paid for.', 'invoicing' ) );
277
-		}
278
-
279
-		$this->payment_form->invoice = $invoice;
280
-		if ( ! $this->payment_form->is_default() ) {
281
-
282
-			$items    = array();
283
-			$item_ids = array();
284
-
285
-			foreach ( $invoice->get_items() as $item ) {
286
-				if ( ! in_array( $item->get_id(), $item_ids ) ) {
287
-					$item_ids[] = $item->get_id();
288
-					$items[]    = $item;
289
-				}
290
-			}
291
-
292
-			foreach ( $this->payment_form->get_items() as $item ) {
293
-				if ( ! in_array( $item->get_id(), $item_ids ) ) {
294
-					$item_ids[] = $item->get_id();
295
-					$items[]    = $item;
296
-				}
297
-			}
298
-
299
-			$this->payment_form->set_items( $items );
300
-
301
-		} else {
302
-			$this->payment_form->set_items( $invoice->get_items() );
303
-		}
304
-
305
-		$this->country = $invoice->get_country();
306
-		$this->state   = $invoice->get_state();
307
-		$this->invoice = $invoice;
308
-
309
-		do_action_ref_array( 'getpaid_submissions_process_invoice', array( &$this ) );
310
-	}
311
-
312
-	/**
313
-	 * Returns the associated invoice.
314
-	 *
315
-	 * @since 1.0.19
316
-	 * @return WPInv_Invoice
317
-	 */
318
-	public function get_invoice() {
319
-		return $this->invoice;
320
-	}
321
-
322
-	/**
323
-	 * Checks whether there is an invoice associated with this submission.
324
-	 *
325
-	 * @since 1.0.19
326
-	 * @return bool
327
-	 */
328
-	public function has_invoice() {
329
-		return ! empty( $this->invoice );
330
-	}
331
-
332
-	/*
272
+            throw new Exception( __( 'Invalid invoice', 'invoicing' ) );
273
+        }
274
+
275
+        if ( $invoice->is_paid() ) {
276
+            throw new Exception( __( 'This invoice is already paid for.', 'invoicing' ) );
277
+        }
278
+
279
+        $this->payment_form->invoice = $invoice;
280
+        if ( ! $this->payment_form->is_default() ) {
281
+
282
+            $items    = array();
283
+            $item_ids = array();
284
+
285
+            foreach ( $invoice->get_items() as $item ) {
286
+                if ( ! in_array( $item->get_id(), $item_ids ) ) {
287
+                    $item_ids[] = $item->get_id();
288
+                    $items[]    = $item;
289
+                }
290
+            }
291
+
292
+            foreach ( $this->payment_form->get_items() as $item ) {
293
+                if ( ! in_array( $item->get_id(), $item_ids ) ) {
294
+                    $item_ids[] = $item->get_id();
295
+                    $items[]    = $item;
296
+                }
297
+            }
298
+
299
+            $this->payment_form->set_items( $items );
300
+
301
+        } else {
302
+            $this->payment_form->set_items( $invoice->get_items() );
303
+        }
304
+
305
+        $this->country = $invoice->get_country();
306
+        $this->state   = $invoice->get_state();
307
+        $this->invoice = $invoice;
308
+
309
+        do_action_ref_array( 'getpaid_submissions_process_invoice', array( &$this ) );
310
+    }
311
+
312
+    /**
313
+     * Returns the associated invoice.
314
+     *
315
+     * @since 1.0.19
316
+     * @return WPInv_Invoice
317
+     */
318
+    public function get_invoice() {
319
+        return $this->invoice;
320
+    }
321
+
322
+    /**
323
+     * Checks whether there is an invoice associated with this submission.
324
+     *
325
+     * @since 1.0.19
326
+     * @return bool
327
+     */
328
+    public function has_invoice() {
329
+        return ! empty( $this->invoice );
330
+    }
331
+
332
+    /*
333 333
 	|--------------------------------------------------------------------------
334 334
 	| Items.
335 335
 	|--------------------------------------------------------------------------
@@ -338,129 +338,129 @@  discard block
 block discarded – undo
338 338
 	| recurring item. But can have an unlimited number of non-recurring items.
339 339
 	*/
340 340
 
341
-	/**
342
-	 * Prepares the submission's items.
343
-	 *
344
-	 * @since 1.0.19
345
-	 */
346
-	public function process_items() {
347
-
348
-		$processor = new GetPaid_Payment_Form_Submission_Items( $this );
349
-
350
-		foreach ( $processor->items as $item ) {
351
-			$this->add_item( $item );
352
-		}
353
-
354
-		do_action_ref_array( 'getpaid_submissions_process_items', array( &$this ) );
355
-	}
356
-
357
-	/**
358
-	 * Adds an item to the submission.
359
-	 *
360
-	 * @since 1.0.19
361
-	 * @param GetPaid_Form_Item $item
362
-	 */
363
-	public function add_item( $item ) {
364
-
365
-		// Make sure that it is available for purchase.
366
-		if ( ! $item->can_purchase() || isset( $this->items[ $item->get_id() ] ) ) {
367
-			return;
368
-		}
369
-
370
-		// Each submission can only contain one recurring item.
371
-		if ( $item->is_recurring() ) {
372
-			$this->has_recurring = $item->get_id();
373
-		}
374
-
375
-		// Update the items and totals.
376
-		$this->items[ $item->get_id() ]         = $item;
377
-		$this->totals['subtotal']['initial']   += $item->get_sub_total();
378
-		$this->totals['subtotal']['recurring'] += $item->get_recurring_sub_total();
379
-
380
-	}
381
-
382
-	/**
383
-	 * Removes a specific item.
384
-	 *
385
-	 * You should not call this method after the discounts and taxes
386
-	 * have been calculated.
387
-	 *
388
-	 * @since 1.0.19
389
-	 */
390
-	public function remove_item( $item_id ) {
391
-
392
-		if ( isset( $this->items[ $item_id ] ) ) {
393
-			$this->totals['subtotal']['initial']   -= $this->items[ $item_id ]->get_sub_total();
394
-			$this->totals['subtotal']['recurring'] -= $this->items[ $item_id ]->get_recurring_sub_total();
395
-
396
-			if ( $this->items[ $item_id ]->is_recurring() ) {
397
-				$this->has_recurring = 0;
398
-			}
399
-
400
-			unset( $this->items[ $item_id ] );
401
-		}
402
-
403
-	}
404
-
405
-	/**
406
-	 * Returns the subtotal.
407
-	 *
408
-	 * @since 1.0.19
409
-	 */
410
-	public function get_subtotal() {
411
-
412
-		if ( wpinv_prices_include_tax() ) {
413
-			return $this->totals['subtotal']['initial'] - $this->totals['taxes']['initial'];
414
-		}
415
-
416
-		return $this->totals['subtotal']['initial'];
417
-	}
418
-
419
-	/**
420
-	 * Returns the recurring subtotal.
421
-	 *
422
-	 * @since 1.0.19
423
-	 */
424
-	public function get_recurring_subtotal() {
425
-
426
-		if ( wpinv_prices_include_tax() ) {
427
-			return $this->totals['subtotal']['recurring'] - $this->totals['taxes']['recurring'];
428
-		}
429
-
430
-		return $this->totals['subtotal']['recurring'];
431
-	}
432
-
433
-	/**
434
-	 * Returns all items.
435
-	 *
436
-	 * @since 1.0.19
437
-	 * @return GetPaid_Form_Item[]
438
-	 */
439
-	public function get_items() {
440
-		return $this->items;
441
-	}
442
-
443
-	/**
444
-	 * Checks if there's a single subscription group in the submission.
445
-	 *
446
-	 * @since 2.3.0
447
-	 * @return bool
448
-	 */
449
-	public function has_subscription_group() {
450
-		return $this->has_recurring && getpaid_should_group_subscriptions( $this ) && 1 == count( getpaid_get_subscription_groups( $this ) );
451
-	}
452
-
453
-	/**
454
-	 * Checks if there are multipe subscription groups in the submission.
455
-	 *
456
-	 * @since 2.3.0
457
-	 * @return bool
458
-	 */
459
-	public function has_multiple_subscription_groups() {
460
-		return $this->has_recurring && 1 < count( getpaid_get_subscription_groups( $this ) );
461
-	}
462
-
463
-	/*
341
+    /**
342
+     * Prepares the submission's items.
343
+     *
344
+     * @since 1.0.19
345
+     */
346
+    public function process_items() {
347
+
348
+        $processor = new GetPaid_Payment_Form_Submission_Items( $this );
349
+
350
+        foreach ( $processor->items as $item ) {
351
+            $this->add_item( $item );
352
+        }
353
+
354
+        do_action_ref_array( 'getpaid_submissions_process_items', array( &$this ) );
355
+    }
356
+
357
+    /**
358
+     * Adds an item to the submission.
359
+     *
360
+     * @since 1.0.19
361
+     * @param GetPaid_Form_Item $item
362
+     */
363
+    public function add_item( $item ) {
364
+
365
+        // Make sure that it is available for purchase.
366
+        if ( ! $item->can_purchase() || isset( $this->items[ $item->get_id() ] ) ) {
367
+            return;
368
+        }
369
+
370
+        // Each submission can only contain one recurring item.
371
+        if ( $item->is_recurring() ) {
372
+            $this->has_recurring = $item->get_id();
373
+        }
374
+
375
+        // Update the items and totals.
376
+        $this->items[ $item->get_id() ]         = $item;
377
+        $this->totals['subtotal']['initial']   += $item->get_sub_total();
378
+        $this->totals['subtotal']['recurring'] += $item->get_recurring_sub_total();
379
+
380
+    }
381
+
382
+    /**
383
+     * Removes a specific item.
384
+     *
385
+     * You should not call this method after the discounts and taxes
386
+     * have been calculated.
387
+     *
388
+     * @since 1.0.19
389
+     */
390
+    public function remove_item( $item_id ) {
391
+
392
+        if ( isset( $this->items[ $item_id ] ) ) {
393
+            $this->totals['subtotal']['initial']   -= $this->items[ $item_id ]->get_sub_total();
394
+            $this->totals['subtotal']['recurring'] -= $this->items[ $item_id ]->get_recurring_sub_total();
395
+
396
+            if ( $this->items[ $item_id ]->is_recurring() ) {
397
+                $this->has_recurring = 0;
398
+            }
399
+
400
+            unset( $this->items[ $item_id ] );
401
+        }
402
+
403
+    }
404
+
405
+    /**
406
+     * Returns the subtotal.
407
+     *
408
+     * @since 1.0.19
409
+     */
410
+    public function get_subtotal() {
411
+
412
+        if ( wpinv_prices_include_tax() ) {
413
+            return $this->totals['subtotal']['initial'] - $this->totals['taxes']['initial'];
414
+        }
415
+
416
+        return $this->totals['subtotal']['initial'];
417
+    }
418
+
419
+    /**
420
+     * Returns the recurring subtotal.
421
+     *
422
+     * @since 1.0.19
423
+     */
424
+    public function get_recurring_subtotal() {
425
+
426
+        if ( wpinv_prices_include_tax() ) {
427
+            return $this->totals['subtotal']['recurring'] - $this->totals['taxes']['recurring'];
428
+        }
429
+
430
+        return $this->totals['subtotal']['recurring'];
431
+    }
432
+
433
+    /**
434
+     * Returns all items.
435
+     *
436
+     * @since 1.0.19
437
+     * @return GetPaid_Form_Item[]
438
+     */
439
+    public function get_items() {
440
+        return $this->items;
441
+    }
442
+
443
+    /**
444
+     * Checks if there's a single subscription group in the submission.
445
+     *
446
+     * @since 2.3.0
447
+     * @return bool
448
+     */
449
+    public function has_subscription_group() {
450
+        return $this->has_recurring && getpaid_should_group_subscriptions( $this ) && 1 == count( getpaid_get_subscription_groups( $this ) );
451
+    }
452
+
453
+    /**
454
+     * Checks if there are multipe subscription groups in the submission.
455
+     *
456
+     * @since 2.3.0
457
+     * @return bool
458
+     */
459
+    public function has_multiple_subscription_groups() {
460
+        return $this->has_recurring && 1 < count( getpaid_get_subscription_groups( $this ) );
461
+    }
462
+
463
+    /*
464 464
 	|--------------------------------------------------------------------------
465 465
 	| Taxes
466 466
 	|--------------------------------------------------------------------------
@@ -469,128 +469,128 @@  discard block
 block discarded – undo
469 469
 	| or only one-time.
470 470
     */
471 471
 
472
-	/**
473
-	 * Prepares the submission's taxes.
474
-	 *
475
-	 * @since 1.0.19
476
-	 */
477
-	public function process_taxes() {
478
-
479
-		// Abort if we're not using taxes.
480
-		if ( ! $this->use_taxes() ) {
481
-			return;
482
-		}
483
-
484
-		// If a custom country && state has been passed in, use it to calculate taxes.
485
-		$country = $this->get_field( 'wpinv_country', 'billing' );
486
-		if ( ! empty( $country ) ) {
487
-			$this->country = $country;
488
-		}
489
-
490
-		$state = $this->get_field( 'wpinv_state', 'billing' );
491
-		if ( ! empty( $state ) ) {
492
-			$this->state = $state;
493
-		}
494
-
495
-		// Confirm if the provided country and the ip country are similar.
496
-		$address_confirmed = $this->get_field( 'confirm-address' );
497
-		if ( isset( $_POST['billing']['country'] ) && wpinv_should_validate_vat_number() && getpaid_get_ip_country() != $this->country && empty( $address_confirmed ) ) {
498
-			throw new Exception( __( 'The country of your current location must be the same as the country of your billing location or you must confirm the billing address is your home country.', 'invoicing' ) );
499
-		}
500
-
501
-		// Abort if the country is not taxable.
502
-		if ( ! wpinv_is_country_taxable( $this->country ) ) {
503
-			return;
504
-		}
505
-
506
-		$processor = new GetPaid_Payment_Form_Submission_Taxes( $this );
507
-
508
-		foreach ( $processor->taxes as $tax ) {
509
-			$this->add_tax( $tax );
510
-		}
511
-
512
-		do_action_ref_array( 'getpaid_submissions_process_taxes', array( &$this ) );
513
-	}
514
-
515
-	/**
516
-	 * Adds a tax to the submission.
517
-	 *
518
-	 * @param array $tax An array of tax details. name, initial_tax, and recurring_tax are required.
519
-	 * @since 1.0.19
520
-	 */
521
-	public function add_tax( $tax ) {
522
-
523
-		if ( wpinv_round_tax_per_tax_rate() ) {
524
-			$tax['initial_tax']   = wpinv_round_amount( $tax['initial_tax'] );
525
-			$tax['recurring_tax'] = wpinv_round_amount( $tax['recurring_tax'] );
526
-		}
527
-
528
-		$this->taxes[ $tax['name'] ]         = $tax;
529
-		$this->totals['taxes']['initial']   += wpinv_sanitize_amount( $tax['initial_tax'] );
530
-		$this->totals['taxes']['recurring'] += wpinv_sanitize_amount( $tax['recurring_tax'] );
531
-
532
-	}
533
-
534
-	/**
535
-	 * Removes a specific tax.
536
-	 *
537
-	 * @since 1.0.19
538
-	 */
539
-	public function remove_tax( $tax_name ) {
540
-
541
-		if ( isset( $this->taxes[ $tax_name ] ) ) {
542
-			$this->totals['taxes']['initial']   -= $this->taxes[ $tax_name ]['initial_tax'];
543
-			$this->totals['taxes']['recurring'] -= $this->taxes[ $tax_name ]['recurring_tax'];
544
-			unset( $this->taxes[ $tax_name ] );
545
-		}
546
-
547
-	}
548
-
549
-	/**
550
-	 * Whether or not we'll use taxes for the submission.
551
-	 *
552
-	 * @since 1.0.19
553
-	 */
554
-	public function use_taxes() {
555
-
556
-		$use_taxes = wpinv_use_taxes();
557
-
558
-		if ( $this->has_invoice() && ! $this->invoice->is_taxable() ) {
559
-			$use_taxes = false;
560
-		}
561
-
562
-		return apply_filters( 'getpaid_submission_use_taxes', $use_taxes, $this );
563
-
564
-	}
565
-
566
-	/**
567
-	 * Returns the tax.
568
-	 *
569
-	 * @since 1.0.19
570
-	 */
571
-	public function get_tax() {
572
-		return $this->totals['taxes']['initial'];
573
-	}
574
-
575
-	/**
576
-	 * Returns the recurring tax.
577
-	 *
578
-	 * @since 1.0.19
579
-	 */
580
-	public function get_recurring_tax() {
581
-		return $this->totals['taxes']['recurring'];
582
-	}
583
-
584
-	/**
585
-	 * Returns all taxes.
586
-	 *
587
-	 * @since 1.0.19
588
-	 */
589
-	public function get_taxes() {
590
-		return $this->taxes;
591
-	}
592
-
593
-	/*
472
+    /**
473
+     * Prepares the submission's taxes.
474
+     *
475
+     * @since 1.0.19
476
+     */
477
+    public function process_taxes() {
478
+
479
+        // Abort if we're not using taxes.
480
+        if ( ! $this->use_taxes() ) {
481
+            return;
482
+        }
483
+
484
+        // If a custom country && state has been passed in, use it to calculate taxes.
485
+        $country = $this->get_field( 'wpinv_country', 'billing' );
486
+        if ( ! empty( $country ) ) {
487
+            $this->country = $country;
488
+        }
489
+
490
+        $state = $this->get_field( 'wpinv_state', 'billing' );
491
+        if ( ! empty( $state ) ) {
492
+            $this->state = $state;
493
+        }
494
+
495
+        // Confirm if the provided country and the ip country are similar.
496
+        $address_confirmed = $this->get_field( 'confirm-address' );
497
+        if ( isset( $_POST['billing']['country'] ) && wpinv_should_validate_vat_number() && getpaid_get_ip_country() != $this->country && empty( $address_confirmed ) ) {
498
+            throw new Exception( __( 'The country of your current location must be the same as the country of your billing location or you must confirm the billing address is your home country.', 'invoicing' ) );
499
+        }
500
+
501
+        // Abort if the country is not taxable.
502
+        if ( ! wpinv_is_country_taxable( $this->country ) ) {
503
+            return;
504
+        }
505
+
506
+        $processor = new GetPaid_Payment_Form_Submission_Taxes( $this );
507
+
508
+        foreach ( $processor->taxes as $tax ) {
509
+            $this->add_tax( $tax );
510
+        }
511
+
512
+        do_action_ref_array( 'getpaid_submissions_process_taxes', array( &$this ) );
513
+    }
514
+
515
+    /**
516
+     * Adds a tax to the submission.
517
+     *
518
+     * @param array $tax An array of tax details. name, initial_tax, and recurring_tax are required.
519
+     * @since 1.0.19
520
+     */
521
+    public function add_tax( $tax ) {
522
+
523
+        if ( wpinv_round_tax_per_tax_rate() ) {
524
+            $tax['initial_tax']   = wpinv_round_amount( $tax['initial_tax'] );
525
+            $tax['recurring_tax'] = wpinv_round_amount( $tax['recurring_tax'] );
526
+        }
527
+
528
+        $this->taxes[ $tax['name'] ]         = $tax;
529
+        $this->totals['taxes']['initial']   += wpinv_sanitize_amount( $tax['initial_tax'] );
530
+        $this->totals['taxes']['recurring'] += wpinv_sanitize_amount( $tax['recurring_tax'] );
531
+
532
+    }
533
+
534
+    /**
535
+     * Removes a specific tax.
536
+     *
537
+     * @since 1.0.19
538
+     */
539
+    public function remove_tax( $tax_name ) {
540
+
541
+        if ( isset( $this->taxes[ $tax_name ] ) ) {
542
+            $this->totals['taxes']['initial']   -= $this->taxes[ $tax_name ]['initial_tax'];
543
+            $this->totals['taxes']['recurring'] -= $this->taxes[ $tax_name ]['recurring_tax'];
544
+            unset( $this->taxes[ $tax_name ] );
545
+        }
546
+
547
+    }
548
+
549
+    /**
550
+     * Whether or not we'll use taxes for the submission.
551
+     *
552
+     * @since 1.0.19
553
+     */
554
+    public function use_taxes() {
555
+
556
+        $use_taxes = wpinv_use_taxes();
557
+
558
+        if ( $this->has_invoice() && ! $this->invoice->is_taxable() ) {
559
+            $use_taxes = false;
560
+        }
561
+
562
+        return apply_filters( 'getpaid_submission_use_taxes', $use_taxes, $this );
563
+
564
+    }
565
+
566
+    /**
567
+     * Returns the tax.
568
+     *
569
+     * @since 1.0.19
570
+     */
571
+    public function get_tax() {
572
+        return $this->totals['taxes']['initial'];
573
+    }
574
+
575
+    /**
576
+     * Returns the recurring tax.
577
+     *
578
+     * @since 1.0.19
579
+     */
580
+    public function get_recurring_tax() {
581
+        return $this->totals['taxes']['recurring'];
582
+    }
583
+
584
+    /**
585
+     * Returns all taxes.
586
+     *
587
+     * @since 1.0.19
588
+     */
589
+    public function get_taxes() {
590
+        return $this->taxes;
591
+    }
592
+
593
+    /*
594 594
 	|--------------------------------------------------------------------------
595 595
 	| Discounts
596 596
 	|--------------------------------------------------------------------------
@@ -599,99 +599,99 @@  discard block
 block discarded – undo
599 599
 	| or only one-time. They also do not have to come from a discount code.
600 600
     */
601 601
 
602
-	/**
603
-	 * Prepares the submission's discount.
604
-	 *
605
-	 * @since 1.0.19
606
-	 */
607
-	public function process_discount() {
608
-
609
-		$initial_total    = $this->get_subtotal() + $this->get_fee() + $this->get_tax();
610
-		$recurring_total  = $this->get_recurring_subtotal() + $this->get_recurring_fee() + $this->get_recurring_tax();
611
-		$processor        = new GetPaid_Payment_Form_Submission_Discount( $this, $initial_total, $recurring_total );
612
-
613
-		foreach ( $processor->discounts as $discount ) {
614
-			$this->add_discount( $discount );
615
-		}
616
-
617
-		do_action_ref_array( 'getpaid_submissions_process_discounts', array( &$this ) );
618
-	}
619
-
620
-	/**
621
-	 * Adds a discount to the submission.
622
-	 *
623
-	 * @param array $discount An array of discount details. name, initial_discount, and recurring_discount are required. Include discount_code if the discount is from a discount code.
624
-	 * @since 1.0.19
625
-	 */
626
-	public function add_discount( $discount ) {
627
-		$this->discounts[ $discount['name'] ]   = $discount;
628
-		$this->totals['discount']['initial']   += wpinv_sanitize_amount( $discount['initial_discount'] );
629
-		$this->totals['discount']['recurring'] += wpinv_sanitize_amount( $discount['recurring_discount'] );
630
-	}
631
-
632
-	/**
633
-	 * Removes a discount from the submission.
634
-	 *
635
-	 * @since 1.0.19
636
-	 */
637
-	public function remove_discount( $name ) {
638
-
639
-		if ( isset( $this->discounts[ $name ] ) ) {
640
-			$this->totals['discount']['initial']   -= $this->discounts[ $name ]['initial_discount'];
641
-			$this->totals['discount']['recurring'] -= $this->discounts[ $name ]['recurring_discount'];
642
-			unset( $this->discounts[ $name ] );
643
-		}
644
-
645
-	}
646
-
647
-	/**
648
-	 * Checks whether there is a discount code associated with this submission.
649
-	 *
650
-	 * @since 1.0.19
651
-	 * @return bool
652
-	 */
653
-	public function has_discount_code() {
654
-		return ! empty( $this->discounts['discount_code'] );
655
-	}
656
-
657
-	/**
658
-	 * Returns the discount code.
659
-	 *
660
-	 * @since 1.0.19
661
-	 * @return string
662
-	 */
663
-	public function get_discount_code() {
664
-		return $this->has_discount_code() ? $this->discounts['discount_code']['discount_code'] : '';
665
-	}
666
-
667
-	/**
668
-	 * Returns the discount.
669
-	 *
670
-	 * @since 1.0.19
671
-	 */
672
-	public function get_discount() {
673
-		return $this->totals['discount']['initial'];
674
-	}
675
-
676
-	/**
677
-	 * Returns the recurring discount.
678
-	 *
679
-	 * @since 1.0.19
680
-	 */
681
-	public function get_recurring_discount() {
682
-		return $this->totals['discount']['recurring'];
683
-	}
684
-
685
-	/**
686
-	 * Returns all discounts.
687
-	 *
688
-	 * @since 1.0.19
689
-	 */
690
-	public function get_discounts() {
691
-		return $this->discounts;
692
-	}
693
-
694
-	/*
602
+    /**
603
+     * Prepares the submission's discount.
604
+     *
605
+     * @since 1.0.19
606
+     */
607
+    public function process_discount() {
608
+
609
+        $initial_total    = $this->get_subtotal() + $this->get_fee() + $this->get_tax();
610
+        $recurring_total  = $this->get_recurring_subtotal() + $this->get_recurring_fee() + $this->get_recurring_tax();
611
+        $processor        = new GetPaid_Payment_Form_Submission_Discount( $this, $initial_total, $recurring_total );
612
+
613
+        foreach ( $processor->discounts as $discount ) {
614
+            $this->add_discount( $discount );
615
+        }
616
+
617
+        do_action_ref_array( 'getpaid_submissions_process_discounts', array( &$this ) );
618
+    }
619
+
620
+    /**
621
+     * Adds a discount to the submission.
622
+     *
623
+     * @param array $discount An array of discount details. name, initial_discount, and recurring_discount are required. Include discount_code if the discount is from a discount code.
624
+     * @since 1.0.19
625
+     */
626
+    public function add_discount( $discount ) {
627
+        $this->discounts[ $discount['name'] ]   = $discount;
628
+        $this->totals['discount']['initial']   += wpinv_sanitize_amount( $discount['initial_discount'] );
629
+        $this->totals['discount']['recurring'] += wpinv_sanitize_amount( $discount['recurring_discount'] );
630
+    }
631
+
632
+    /**
633
+     * Removes a discount from the submission.
634
+     *
635
+     * @since 1.0.19
636
+     */
637
+    public function remove_discount( $name ) {
638
+
639
+        if ( isset( $this->discounts[ $name ] ) ) {
640
+            $this->totals['discount']['initial']   -= $this->discounts[ $name ]['initial_discount'];
641
+            $this->totals['discount']['recurring'] -= $this->discounts[ $name ]['recurring_discount'];
642
+            unset( $this->discounts[ $name ] );
643
+        }
644
+
645
+    }
646
+
647
+    /**
648
+     * Checks whether there is a discount code associated with this submission.
649
+     *
650
+     * @since 1.0.19
651
+     * @return bool
652
+     */
653
+    public function has_discount_code() {
654
+        return ! empty( $this->discounts['discount_code'] );
655
+    }
656
+
657
+    /**
658
+     * Returns the discount code.
659
+     *
660
+     * @since 1.0.19
661
+     * @return string
662
+     */
663
+    public function get_discount_code() {
664
+        return $this->has_discount_code() ? $this->discounts['discount_code']['discount_code'] : '';
665
+    }
666
+
667
+    /**
668
+     * Returns the discount.
669
+     *
670
+     * @since 1.0.19
671
+     */
672
+    public function get_discount() {
673
+        return $this->totals['discount']['initial'];
674
+    }
675
+
676
+    /**
677
+     * Returns the recurring discount.
678
+     *
679
+     * @since 1.0.19
680
+     */
681
+    public function get_recurring_discount() {
682
+        return $this->totals['discount']['recurring'];
683
+    }
684
+
685
+    /**
686
+     * Returns all discounts.
687
+     *
688
+     * @since 1.0.19
689
+     */
690
+    public function get_discounts() {
691
+        return $this->discounts;
692
+    }
693
+
694
+    /*
695 695
 	|--------------------------------------------------------------------------
696 696
 	| Fees
697 697
 	|--------------------------------------------------------------------------
@@ -701,100 +701,100 @@  discard block
 block discarded – undo
701 701
 	| fees.
702 702
     */
703 703
 
704
-	/**
705
-	 * Prepares the submission's fees.
706
-	 *
707
-	 * @since 1.0.19
708
-	 */
709
-	public function process_fees() {
710
-
711
-		$fees_processor = new GetPaid_Payment_Form_Submission_Fees( $this );
712
-
713
-		foreach ( $fees_processor->fees as $fee ) {
714
-			$this->add_fee( $fee );
715
-		}
716
-
717
-		do_action_ref_array( 'getpaid_submissions_process_fees', array( &$this ) );
718
-	}
719
-
720
-	/**
721
-	 * Adds a fee to the submission.
722
-	 *
723
-	 * @param array $fee An array of fee details. name, initial_fee, and recurring_fee are required.
724
-	 * @since 1.0.19
725
-	 */
726
-	public function add_fee( $fee ) {
727
-
728
-		if ( $fee['name'] == 'shipping' ) {
729
-			$this->totals['shipping']['initial']   += wpinv_sanitize_amount( $fee['initial_fee'] );
730
-			$this->totals['shipping']['recurring'] += wpinv_sanitize_amount( $fee['recurring_fee'] );
731
-			return;
732
-		}
733
-
734
-		$this->fees[ $fee['name'] ]         = $fee;
735
-		$this->totals['fees']['initial']   += wpinv_sanitize_amount( $fee['initial_fee'] );
736
-		$this->totals['fees']['recurring'] += wpinv_sanitize_amount( $fee['recurring_fee'] );
737
-
738
-	}
739
-
740
-	/**
741
-	 * Removes a fee from the submission.
742
-	 *
743
-	 * @since 1.0.19
744
-	 */
745
-	public function remove_fee( $name ) {
746
-
747
-		if ( isset( $this->fees[ $name ] ) ) {
748
-			$this->totals['fees']['initial']   -= $this->fees[ $name ]['initial_fee'];
749
-			$this->totals['fees']['recurring'] -= $this->fees[ $name ]['recurring_fee'];
750
-			unset( $this->fees[ $name ] );
751
-		}
752
-
753
-		if ( 'shipping' == $name ) {
754
-			$this->totals['shipping']['initial']   = 0;
755
-			$this->totals['shipping']['recurring'] = 0;
756
-		}
757
-
758
-	}
759
-
760
-	/**
761
-	 * Returns the fees.
762
-	 *
763
-	 * @since 1.0.19
764
-	 */
765
-	public function get_fee() {
766
-		return $this->totals['fees']['initial'];
767
-	}
768
-
769
-	/**
770
-	 * Returns the recurring fees.
771
-	 *
772
-	 * @since 1.0.19
773
-	 */
774
-	public function get_recurring_fee() {
775
-		return $this->totals['fees']['recurring'];
776
-	}
777
-
778
-	/**
779
-	 * Returns all fees.
780
-	 *
781
-	 * @since 1.0.19
782
-	 */
783
-	public function get_fees() {
784
-		return $this->fees;
785
-	}
786
-
787
-	/**
788
-	 * Checks if there are any fees for the form.
789
-	 *
790
-	 * @return bool
791
-	 * @since 1.0.19
792
-	 */
793
-	public function has_fees() {
794
-		return count( $this->fees ) !== 0;
795
-	}
796
-
797
-	/*
704
+    /**
705
+     * Prepares the submission's fees.
706
+     *
707
+     * @since 1.0.19
708
+     */
709
+    public function process_fees() {
710
+
711
+        $fees_processor = new GetPaid_Payment_Form_Submission_Fees( $this );
712
+
713
+        foreach ( $fees_processor->fees as $fee ) {
714
+            $this->add_fee( $fee );
715
+        }
716
+
717
+        do_action_ref_array( 'getpaid_submissions_process_fees', array( &$this ) );
718
+    }
719
+
720
+    /**
721
+     * Adds a fee to the submission.
722
+     *
723
+     * @param array $fee An array of fee details. name, initial_fee, and recurring_fee are required.
724
+     * @since 1.0.19
725
+     */
726
+    public function add_fee( $fee ) {
727
+
728
+        if ( $fee['name'] == 'shipping' ) {
729
+            $this->totals['shipping']['initial']   += wpinv_sanitize_amount( $fee['initial_fee'] );
730
+            $this->totals['shipping']['recurring'] += wpinv_sanitize_amount( $fee['recurring_fee'] );
731
+            return;
732
+        }
733
+
734
+        $this->fees[ $fee['name'] ]         = $fee;
735
+        $this->totals['fees']['initial']   += wpinv_sanitize_amount( $fee['initial_fee'] );
736
+        $this->totals['fees']['recurring'] += wpinv_sanitize_amount( $fee['recurring_fee'] );
737
+
738
+    }
739
+
740
+    /**
741
+     * Removes a fee from the submission.
742
+     *
743
+     * @since 1.0.19
744
+     */
745
+    public function remove_fee( $name ) {
746
+
747
+        if ( isset( $this->fees[ $name ] ) ) {
748
+            $this->totals['fees']['initial']   -= $this->fees[ $name ]['initial_fee'];
749
+            $this->totals['fees']['recurring'] -= $this->fees[ $name ]['recurring_fee'];
750
+            unset( $this->fees[ $name ] );
751
+        }
752
+
753
+        if ( 'shipping' == $name ) {
754
+            $this->totals['shipping']['initial']   = 0;
755
+            $this->totals['shipping']['recurring'] = 0;
756
+        }
757
+
758
+    }
759
+
760
+    /**
761
+     * Returns the fees.
762
+     *
763
+     * @since 1.0.19
764
+     */
765
+    public function get_fee() {
766
+        return $this->totals['fees']['initial'];
767
+    }
768
+
769
+    /**
770
+     * Returns the recurring fees.
771
+     *
772
+     * @since 1.0.19
773
+     */
774
+    public function get_recurring_fee() {
775
+        return $this->totals['fees']['recurring'];
776
+    }
777
+
778
+    /**
779
+     * Returns all fees.
780
+     *
781
+     * @since 1.0.19
782
+     */
783
+    public function get_fees() {
784
+        return $this->fees;
785
+    }
786
+
787
+    /**
788
+     * Checks if there are any fees for the form.
789
+     *
790
+     * @return bool
791
+     * @since 1.0.19
792
+     */
793
+    public function has_fees() {
794
+        return count( $this->fees ) !== 0;
795
+    }
796
+
797
+    /*
798 798
 	|--------------------------------------------------------------------------
799 799
 	| MISC
800 800
 	|--------------------------------------------------------------------------
@@ -802,147 +802,147 @@  discard block
 block discarded – undo
802 802
 	| Extra submission functions.
803 803
     */
804 804
 
805
-	/**
806
-	 * Returns the shipping amount.
807
-	 *
808
-	 * @since 1.0.19
809
-	 */
810
-	public function get_shipping() {
811
-		return $this->totals['shipping']['initial'];
812
-	}
813
-
814
-	/**
815
-	 * Returns the recurring shipping.
816
-	 *
817
-	 * @since 1.0.19
818
-	 */
819
-	public function get_recurring_shipping() {
820
-		return $this->totals['shipping']['recurring'];
821
-	}
822
-
823
-	/**
824
-	 * Checks if there are any shipping fees for the form.
825
-	 *
826
-	 * @return bool
827
-	 * @since 1.0.19
828
-	 */
829
-	public function has_shipping() {
830
-		return apply_filters( 'getpaid_payment_form_has_shipping', false, $this );
831
-	}
832
-
833
-	/**
834
-	 * Checks if this is the initial fetch.
835
-	 *
836
-	 * @return bool
837
-	 * @since 1.0.19
838
-	 */
839
-	public function is_initial_fetch() {
840
-		return empty( $this->data['initial_state'] );
841
-	}
842
-
843
-	/**
844
-	 * Returns the total amount to collect for this submission.
845
-	 *
846
-	 * @since 1.0.19
847
-	 */
848
-	public function get_total() {
849
-		$total = $this->get_subtotal() + $this->get_fee() + $this->get_tax() + $this->get_shipping() - $this->get_discount();
850
-		return max( $total, 0 );
851
-	}
852
-
853
-	/**
854
-	 * Returns the recurring total amount to collect for this submission.
855
-	 *
856
-	 * @since 1.0.19
857
-	 */
858
-	public function get_recurring_total() {
859
-		$total = $this->get_recurring_subtotal() + $this->get_recurring_fee() + $this->get_recurring_tax() + $this->get_recurring_shipping() - $this->get_recurring_discount();
860
-		return max( $total, 0 );
861
-	}
862
-
863
-	/**
864
-	 * Whether payment details should be collected for this submission.
865
-	 *
866
-	 * @since 1.0.19
867
-	 */
868
-	public function should_collect_payment_details() {
869
-		$initial   = $this->get_total();
870
-		$recurring = $this->get_recurring_total();
871
-
872
-		if ( $this->has_recurring == 0 ) {
873
-			$recurring = 0;
874
-		}
875
-
876
-		$collect = $initial > 0 || $recurring > 0;
877
-		return apply_filters( 'getpaid_submission_should_collect_payment_details', $collect, $this );
878
-	}
879
-
880
-	/**
881
-	 * Returns the billing email of the user.
882
-	 *
883
-	 * @since 1.0.19
884
-	 */
885
-	public function get_billing_email() {
886
-		return apply_filters( 'getpaid_get_submission_billing_email', $this->get_field( 'billing_email' ), $this );
887
-	}
888
-
889
-	/**
890
-	 * Checks if the submitter has a billing email.
891
-	 *
892
-	 * @since 1.0.19
893
-	 */
894
-	public function has_billing_email() {
895
-		$billing_email = $this->get_billing_email();
896
-		return ! empty( $billing_email ) && is_email( $billing_email );
897
-	}
898
-
899
-	/**
900
-	 * Returns the appropriate currency for the submission.
901
-	 *
902
-	 * @since 1.0.19
903
-	 * @return string
904
-	 */
905
-	public function get_currency() {
906
-		return $this->has_invoice() ? $this->invoice->get_currency() : wpinv_get_currency();
907
-    }
908
-
909
-    /**
910
-	 * Returns the raw submission data.
911
-	 *
912
-	 * @since 1.0.19
913
-	 * @return array
914
-	 */
915
-	public function get_data() {
916
-		return $this->data;
917
-	}
918
-
919
-	/**
920
-	 * Returns a field from the submission data
921
-	 *
922
-	 * @param string $field
923
-	 * @since 1.0.19
924
-	 * @return mixed|null
925
-	 */
926
-	public function get_field( $field, $sub_array_key = null ) {
927
-		return getpaid_get_array_field( $this->data, $field, $sub_array_key );
928
-	}
929
-
930
-	/**
931
-	 * Checks if a required field is set.
932
-	 *
933
-	 * @since 1.0.19
934
-	 */
935
-	public function is_required_field_set( $field ) {
936
-		return empty( $field['required'] ) || ! empty( $this->data[ $field['id'] ] );
937
-	}
938
-
939
-	/**
940
-	 * Formats an amount
941
-	 *
942
-	 * @since 1.0.19
943
-	 */
944
-	public function format_amount( $amount ) {
945
-		return wpinv_price( $amount, $this->get_currency() );
946
-	}
805
+    /**
806
+     * Returns the shipping amount.
807
+     *
808
+     * @since 1.0.19
809
+     */
810
+    public function get_shipping() {
811
+        return $this->totals['shipping']['initial'];
812
+    }
813
+
814
+    /**
815
+     * Returns the recurring shipping.
816
+     *
817
+     * @since 1.0.19
818
+     */
819
+    public function get_recurring_shipping() {
820
+        return $this->totals['shipping']['recurring'];
821
+    }
822
+
823
+    /**
824
+     * Checks if there are any shipping fees for the form.
825
+     *
826
+     * @return bool
827
+     * @since 1.0.19
828
+     */
829
+    public function has_shipping() {
830
+        return apply_filters( 'getpaid_payment_form_has_shipping', false, $this );
831
+    }
832
+
833
+    /**
834
+     * Checks if this is the initial fetch.
835
+     *
836
+     * @return bool
837
+     * @since 1.0.19
838
+     */
839
+    public function is_initial_fetch() {
840
+        return empty( $this->data['initial_state'] );
841
+    }
842
+
843
+    /**
844
+     * Returns the total amount to collect for this submission.
845
+     *
846
+     * @since 1.0.19
847
+     */
848
+    public function get_total() {
849
+        $total = $this->get_subtotal() + $this->get_fee() + $this->get_tax() + $this->get_shipping() - $this->get_discount();
850
+        return max( $total, 0 );
851
+    }
852
+
853
+    /**
854
+     * Returns the recurring total amount to collect for this submission.
855
+     *
856
+     * @since 1.0.19
857
+     */
858
+    public function get_recurring_total() {
859
+        $total = $this->get_recurring_subtotal() + $this->get_recurring_fee() + $this->get_recurring_tax() + $this->get_recurring_shipping() - $this->get_recurring_discount();
860
+        return max( $total, 0 );
861
+    }
862
+
863
+    /**
864
+     * Whether payment details should be collected for this submission.
865
+     *
866
+     * @since 1.0.19
867
+     */
868
+    public function should_collect_payment_details() {
869
+        $initial   = $this->get_total();
870
+        $recurring = $this->get_recurring_total();
871
+
872
+        if ( $this->has_recurring == 0 ) {
873
+            $recurring = 0;
874
+        }
875
+
876
+        $collect = $initial > 0 || $recurring > 0;
877
+        return apply_filters( 'getpaid_submission_should_collect_payment_details', $collect, $this );
878
+    }
879
+
880
+    /**
881
+     * Returns the billing email of the user.
882
+     *
883
+     * @since 1.0.19
884
+     */
885
+    public function get_billing_email() {
886
+        return apply_filters( 'getpaid_get_submission_billing_email', $this->get_field( 'billing_email' ), $this );
887
+    }
888
+
889
+    /**
890
+     * Checks if the submitter has a billing email.
891
+     *
892
+     * @since 1.0.19
893
+     */
894
+    public function has_billing_email() {
895
+        $billing_email = $this->get_billing_email();
896
+        return ! empty( $billing_email ) && is_email( $billing_email );
897
+    }
898
+
899
+    /**
900
+     * Returns the appropriate currency for the submission.
901
+     *
902
+     * @since 1.0.19
903
+     * @return string
904
+     */
905
+    public function get_currency() {
906
+        return $this->has_invoice() ? $this->invoice->get_currency() : wpinv_get_currency();
907
+    }
908
+
909
+    /**
910
+     * Returns the raw submission data.
911
+     *
912
+     * @since 1.0.19
913
+     * @return array
914
+     */
915
+    public function get_data() {
916
+        return $this->data;
917
+    }
918
+
919
+    /**
920
+     * Returns a field from the submission data
921
+     *
922
+     * @param string $field
923
+     * @since 1.0.19
924
+     * @return mixed|null
925
+     */
926
+    public function get_field( $field, $sub_array_key = null ) {
927
+        return getpaid_get_array_field( $this->data, $field, $sub_array_key );
928
+    }
929
+
930
+    /**
931
+     * Checks if a required field is set.
932
+     *
933
+     * @since 1.0.19
934
+     */
935
+    public function is_required_field_set( $field ) {
936
+        return empty( $field['required'] ) || ! empty( $this->data[ $field['id'] ] );
937
+    }
938
+
939
+    /**
940
+     * Formats an amount
941
+     *
942
+     * @since 1.0.19
943
+     */
944
+    public function format_amount( $amount ) {
945
+        return wpinv_price( $amount, $this->get_currency() );
946
+    }
947 947
 
948 948
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-form-item.php 1 patch
Indentation   +359 added lines, -359 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,67 +10,67 @@  discard block
 block discarded – undo
10 10
 class GetPaid_Form_Item  extends WPInv_Item {
11 11
 
12 12
     /**
13
-	 * Stores a custom description for the item.
14
-	 *
15
-	 * @var string
16
-	 */
17
-	protected $custom_description = null;
18
-
19
-	/**
20
-	 * Stores the item quantity.
21
-	 *
22
-	 * @var float
23
-	 */
24
-	protected $quantity = 1;
25
-
26
-	/**
27
-	 * Stores the item meta.
28
-	 *
29
-	 * @var array
30
-	 */
31
-	protected $meta = array();
32
-
33
-	/**
34
-	 * Is this item required?
35
-	 *
36
-	 * @var int
37
-	 */
38
-	protected $is_required = true;
39
-
40
-	/**
41
-	 * Are quantities allowed?
42
-	 *
43
-	 * @var int
44
-	 */
45
-	protected $allow_quantities = false;
46
-
47
-	/**
48
-	 * Associated invoice.
49
-	 *
50
-	 * @var int
51
-	 */
52
-	public $invoice_id = 0;
53
-
54
-	/**
55
-	 * Item discount.
56
-	 *
57
-	 * @var float
58
-	 */
59
-	public $item_discount = 0;
60
-
61
-	/**
62
-	 * Recurring item discount.
63
-	 *
64
-	 * @var float
65
-	 */
66
-	public $recurring_item_discount = 0;
67
-
68
-	/**
69
-	 * Item tax.
70
-	 *
71
-	 * @var float
72
-	 */
73
-	public $item_tax = 0;
13
+     * Stores a custom description for the item.
14
+     *
15
+     * @var string
16
+     */
17
+    protected $custom_description = null;
18
+
19
+    /**
20
+     * Stores the item quantity.
21
+     *
22
+     * @var float
23
+     */
24
+    protected $quantity = 1;
25
+
26
+    /**
27
+     * Stores the item meta.
28
+     *
29
+     * @var array
30
+     */
31
+    protected $meta = array();
32
+
33
+    /**
34
+     * Is this item required?
35
+     *
36
+     * @var int
37
+     */
38
+    protected $is_required = true;
39
+
40
+    /**
41
+     * Are quantities allowed?
42
+     *
43
+     * @var int
44
+     */
45
+    protected $allow_quantities = false;
46
+
47
+    /**
48
+     * Associated invoice.
49
+     *
50
+     * @var int
51
+     */
52
+    public $invoice_id = 0;
53
+
54
+    /**
55
+     * Item discount.
56
+     *
57
+     * @var float
58
+     */
59
+    public $item_discount = 0;
60
+
61
+    /**
62
+     * Recurring item discount.
63
+     *
64
+     * @var float
65
+     */
66
+    public $recurring_item_discount = 0;
67
+
68
+    /**
69
+     * Item tax.
70
+     *
71
+     * @var float
72
+     */
73
+    public $item_tax = 0;
74 74
 
75 75
     /*
76 76
 	|--------------------------------------------------------------------------
@@ -88,230 +88,230 @@  discard block
 block discarded – undo
88 88
     */
89 89
 
90 90
     /**
91
-	 * Get the item name.
92
-	 *
93
-	 * @since 1.0.19
94
-	 * @param  string $context View or edit context.
95
-	 * @return string
96
-	 */
97
-	public function get_name( $context = 'view' ) {
98
-		$name = parent::get_name( $context );
99
-		return $name . wpinv_get_item_suffix( $this );
100
-	}
101
-
102
-	/**
103
-	 * Get the item name without a suffix.
104
-	 *
105
-	 * @since 1.0.19
106
-	 * @param  string $context View or edit context.
107
-	 * @return string
108
-	 */
109
-	public function get_raw_name( $context = 'view' ) {
110
-		return parent::get_name( $context );
111
-	}
112
-
113
-	/**
114
-	 * Get the item description.
115
-	 *
116
-	 * @since 1.0.19
117
-	 * @param  string $context View or edit context.
118
-	 * @return string
119
-	 */
120
-	public function get_description( $context = 'view' ) {
121
-
122
-		if ( isset( $this->custom_description ) ) {
123
-			return $this->custom_description;
124
-		}
125
-
126
-		return parent::get_description( $context );
127
-	}
128
-
129
-	/**
130
-	 * Returns the sub total.
131
-	 *
132
-	 * @since 1.0.19
133
-	 * @param  string $context View or edit context.
134
-	 * @return float
135
-	 */
136
-	public function get_sub_total( $context = 'view' ) {
137
-		return $this->get_quantity( $context ) * $this->get_initial_price( $context );
138
-	}
139
-
140
-	/**
141
-	 * Returns the recurring sub total.
142
-	 *
143
-	 * @since 1.0.19
144
-	 * @param  string $context View or edit context.
145
-	 * @return float
146
-	 */
147
-	public function get_recurring_sub_total( $context = 'view' ) {
148
-
149
-		if ( $this->is_recurring() ) {
150
-			return $this->get_quantity( $context ) * $this->get_price( $context );
151
-		}
152
-
153
-		return 0;
154
-	}
155
-
156
-	/**
157
-	 * @deprecated
158
-	 */
159
-	public function get_qantity( $context = 'view' ) {
160
-		return $this->get_quantity( $context );
161
-	}
162
-
163
-	/**
164
-	 * Get the item quantity.
165
-	 *
166
-	 * @since 1.0.19
167
-	 * @param  string $context View or edit context.
168
-	 * @return float
169
-	 */
170
-	public function get_quantity( $context = 'view' ) {
171
-		$quantity = (float) $this->quantity;
172
-
173
-		if ( 'view' == $context ) {
174
-			return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
175
-		}
176
-
177
-		return $quantity;
178
-
179
-	}
180
-
181
-	/**
182
-	 * Get the item meta data.
183
-	 *
184
-	 * @since 1.0.19
185
-	 * @param  string $context View or edit context.
186
-	 * @return meta
187
-	 */
188
-	public function get_item_meta( $context = 'view' ) {
189
-		$meta = $this->meta;
190
-
191
-		if ( 'view' == $context ) {
192
-			return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
193
-		}
194
-
195
-		return $meta;
196
-
197
-	}
198
-
199
-	/**
200
-	 * Returns whether or not customers can update the item quantity.
201
-	 *
202
-	 * @since 1.0.19
203
-	 * @param  string $context View or edit context.
204
-	 * @return bool
205
-	 */
206
-	public function get_allow_quantities( $context = 'view' ) {
207
-		$allow_quantities = (bool) $this->allow_quantities;
208
-
209
-		if ( 'view' == $context ) {
210
-			return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
211
-		}
212
-
213
-		return $allow_quantities;
214
-
215
-	}
216
-
217
-	/**
218
-	 * Returns whether or not the item is required.
219
-	 *
220
-	 * @since 1.0.19
221
-	 * @param  string $context View or edit context.
222
-	 * @return bool
223
-	 */
224
-	public function get_is_required( $context = 'view' ) {
225
-		$is_required = (bool) $this->is_required;
226
-
227
-		if ( 'view' == $context ) {
228
-			return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
229
-		}
230
-
231
-		return $is_required;
232
-
233
-	}
234
-
235
-	/**
236
-	 * Prepares form data for use.
237
-	 *
238
-	 * @since 1.0.19
239
-	 * @return array
240
-	 */
241
-	public function prepare_data_for_use( $required = null ) {
242
-
243
-		$required = is_null( $required ) ? $this->is_required() : $required;
244
-		return array(
245
-			'title'            => strip_tags( $this->get_name() ),
246
-			'id'               => $this->get_id(),
247
-			'price'            => $this->get_price(),
248
-			'recurring'        => $this->is_recurring(),
249
-			'description'      => $this->get_description(),
250
-			'allow_quantities' => $this->allows_quantities(),
251
-			'required'         => $required,
252
-		);
253
-
254
-	}
255
-
256
-	/**
257
-	 * Prepares form data for ajax use.
258
-	 *
259
-	 * @since 1.0.19
260
-	 * @return array
261
-	 */
262
-	public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
263
-
264
-		$description = getpaid_item_recurring_price_help_text( $this, $currency );
265
-
266
-		if ( $description ) {
267
-			$description = "<div class='getpaid-subscription-help-text'>$description</div>";
268
-		}
269
-
270
-		$price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
271
-		$subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
272
-		return array(
273
-			'id'     => $this->get_id(),
274
-			'texts'  => array(
275
-				'item-name'        => sanitize_text_field( $this->get_name() ),
276
-				'item-description' => wp_kses_post( $this->get_description() ) . $description,
277
-				'item-quantity'    => floatval( $this->get_quantity() ),
278
-				'item-price'       => wpinv_price( $price, $currency ),
279
-				'item-total'       => wpinv_price( $subtotal, $currency ),
280
-			),
281
-			'inputs' => array(
282
-				'item-id'          => $this->get_id(),
283
-				'item-name'        => sanitize_text_field( $this->get_name() ),
284
-				'item-description' => wp_kses_post( $this->get_description() ),
285
-				'item-quantity'    => floatval( $this->get_quantity() ),
286
-				'item-price'       => $price,
287
-			),
288
-		);
289
-
290
-	}
291
-
292
-	/**
293
-	 * Prepares form data for saving (cart_details).
294
-	 *
295
-	 * @since 1.0.19
296
-	 * @return array
297
-	 */
298
-	public function prepare_data_for_saving() {
299
-
300
-		return array(
301
-			'post_id'          => $this->invoice_id,
302
-			'item_id'          => $this->get_id(),
303
-			'item_name'        => sanitize_text_field( $this->get_raw_name( 'edit' ) ),
304
-			'item_description' => $this->get_description( 'edit' ),
305
-			'tax'              => $this->item_tax,
306
-			'item_price'       => $this->get_price( 'edit' ),
307
-			'quantity'         => (float) $this->get_quantity( 'edit' ),
308
-			'discount'         => $this->item_discount,
309
-			'subtotal'         => $this->get_sub_total( 'edit' ),
310
-			'price'            => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount,
311
-			'meta'             => $this->get_item_meta( 'edit' ),
312
-		);
313
-
314
-	}
91
+     * Get the item name.
92
+     *
93
+     * @since 1.0.19
94
+     * @param  string $context View or edit context.
95
+     * @return string
96
+     */
97
+    public function get_name( $context = 'view' ) {
98
+        $name = parent::get_name( $context );
99
+        return $name . wpinv_get_item_suffix( $this );
100
+    }
101
+
102
+    /**
103
+     * Get the item name without a suffix.
104
+     *
105
+     * @since 1.0.19
106
+     * @param  string $context View or edit context.
107
+     * @return string
108
+     */
109
+    public function get_raw_name( $context = 'view' ) {
110
+        return parent::get_name( $context );
111
+    }
112
+
113
+    /**
114
+     * Get the item description.
115
+     *
116
+     * @since 1.0.19
117
+     * @param  string $context View or edit context.
118
+     * @return string
119
+     */
120
+    public function get_description( $context = 'view' ) {
121
+
122
+        if ( isset( $this->custom_description ) ) {
123
+            return $this->custom_description;
124
+        }
125
+
126
+        return parent::get_description( $context );
127
+    }
128
+
129
+    /**
130
+     * Returns the sub total.
131
+     *
132
+     * @since 1.0.19
133
+     * @param  string $context View or edit context.
134
+     * @return float
135
+     */
136
+    public function get_sub_total( $context = 'view' ) {
137
+        return $this->get_quantity( $context ) * $this->get_initial_price( $context );
138
+    }
139
+
140
+    /**
141
+     * Returns the recurring sub total.
142
+     *
143
+     * @since 1.0.19
144
+     * @param  string $context View or edit context.
145
+     * @return float
146
+     */
147
+    public function get_recurring_sub_total( $context = 'view' ) {
148
+
149
+        if ( $this->is_recurring() ) {
150
+            return $this->get_quantity( $context ) * $this->get_price( $context );
151
+        }
152
+
153
+        return 0;
154
+    }
155
+
156
+    /**
157
+     * @deprecated
158
+     */
159
+    public function get_qantity( $context = 'view' ) {
160
+        return $this->get_quantity( $context );
161
+    }
162
+
163
+    /**
164
+     * Get the item quantity.
165
+     *
166
+     * @since 1.0.19
167
+     * @param  string $context View or edit context.
168
+     * @return float
169
+     */
170
+    public function get_quantity( $context = 'view' ) {
171
+        $quantity = (float) $this->quantity;
172
+
173
+        if ( 'view' == $context ) {
174
+            return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
175
+        }
176
+
177
+        return $quantity;
178
+
179
+    }
180
+
181
+    /**
182
+     * Get the item meta data.
183
+     *
184
+     * @since 1.0.19
185
+     * @param  string $context View or edit context.
186
+     * @return meta
187
+     */
188
+    public function get_item_meta( $context = 'view' ) {
189
+        $meta = $this->meta;
190
+
191
+        if ( 'view' == $context ) {
192
+            return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
193
+        }
194
+
195
+        return $meta;
196
+
197
+    }
198
+
199
+    /**
200
+     * Returns whether or not customers can update the item quantity.
201
+     *
202
+     * @since 1.0.19
203
+     * @param  string $context View or edit context.
204
+     * @return bool
205
+     */
206
+    public function get_allow_quantities( $context = 'view' ) {
207
+        $allow_quantities = (bool) $this->allow_quantities;
208
+
209
+        if ( 'view' == $context ) {
210
+            return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
211
+        }
212
+
213
+        return $allow_quantities;
214
+
215
+    }
216
+
217
+    /**
218
+     * Returns whether or not the item is required.
219
+     *
220
+     * @since 1.0.19
221
+     * @param  string $context View or edit context.
222
+     * @return bool
223
+     */
224
+    public function get_is_required( $context = 'view' ) {
225
+        $is_required = (bool) $this->is_required;
226
+
227
+        if ( 'view' == $context ) {
228
+            return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
229
+        }
230
+
231
+        return $is_required;
232
+
233
+    }
234
+
235
+    /**
236
+     * Prepares form data for use.
237
+     *
238
+     * @since 1.0.19
239
+     * @return array
240
+     */
241
+    public function prepare_data_for_use( $required = null ) {
242
+
243
+        $required = is_null( $required ) ? $this->is_required() : $required;
244
+        return array(
245
+            'title'            => strip_tags( $this->get_name() ),
246
+            'id'               => $this->get_id(),
247
+            'price'            => $this->get_price(),
248
+            'recurring'        => $this->is_recurring(),
249
+            'description'      => $this->get_description(),
250
+            'allow_quantities' => $this->allows_quantities(),
251
+            'required'         => $required,
252
+        );
253
+
254
+    }
255
+
256
+    /**
257
+     * Prepares form data for ajax use.
258
+     *
259
+     * @since 1.0.19
260
+     * @return array
261
+     */
262
+    public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
263
+
264
+        $description = getpaid_item_recurring_price_help_text( $this, $currency );
265
+
266
+        if ( $description ) {
267
+            $description = "<div class='getpaid-subscription-help-text'>$description</div>";
268
+        }
269
+
270
+        $price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
271
+        $subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
272
+        return array(
273
+            'id'     => $this->get_id(),
274
+            'texts'  => array(
275
+                'item-name'        => sanitize_text_field( $this->get_name() ),
276
+                'item-description' => wp_kses_post( $this->get_description() ) . $description,
277
+                'item-quantity'    => floatval( $this->get_quantity() ),
278
+                'item-price'       => wpinv_price( $price, $currency ),
279
+                'item-total'       => wpinv_price( $subtotal, $currency ),
280
+            ),
281
+            'inputs' => array(
282
+                'item-id'          => $this->get_id(),
283
+                'item-name'        => sanitize_text_field( $this->get_name() ),
284
+                'item-description' => wp_kses_post( $this->get_description() ),
285
+                'item-quantity'    => floatval( $this->get_quantity() ),
286
+                'item-price'       => $price,
287
+            ),
288
+        );
289
+
290
+    }
291
+
292
+    /**
293
+     * Prepares form data for saving (cart_details).
294
+     *
295
+     * @since 1.0.19
296
+     * @return array
297
+     */
298
+    public function prepare_data_for_saving() {
299
+
300
+        return array(
301
+            'post_id'          => $this->invoice_id,
302
+            'item_id'          => $this->get_id(),
303
+            'item_name'        => sanitize_text_field( $this->get_raw_name( 'edit' ) ),
304
+            'item_description' => $this->get_description( 'edit' ),
305
+            'tax'              => $this->item_tax,
306
+            'item_price'       => $this->get_price( 'edit' ),
307
+            'quantity'         => (float) $this->get_quantity( 'edit' ),
308
+            'discount'         => $this->item_discount,
309
+            'subtotal'         => $this->get_sub_total( 'edit' ),
310
+            'price'            => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount,
311
+            'meta'             => $this->get_item_meta( 'edit' ),
312
+        );
313
+
314
+    }
315 315
 
316 316
     /*
317 317
 	|--------------------------------------------------------------------------
@@ -323,70 +323,70 @@  discard block
 block discarded – undo
323 323
 	| object.
324 324
     */
325 325
 
326
-	/**
327
-	 * Set the item qantity.
328
-	 *
329
-	 * @since 1.0.19
330
-	 * @param  float $quantity The item quantity.
331
-	 */
332
-	public function set_quantity( $quantity ) {
333
-
334
-		if ( ! is_numeric( $quantity ) ) {
335
-			$quantity = 1;
336
-		}
337
-
338
-		$this->quantity = (float) $quantity;
339
-
340
-	}
341
-
342
-	/**
343
-	 * Set the item meta data.
344
-	 *
345
-	 * @since 1.0.19
346
-	 * @param  array $meta The item meta data.
347
-	 */
348
-	public function set_item_meta( $meta ) {
349
-		$this->meta = maybe_unserialize( $meta );
350
-	}
351
-
352
-	/**
353
-	 * Set whether or not the quantities are allowed.
354
-	 *
355
-	 * @since 1.0.19
356
-	 * @param  bool $allow_quantities
357
-	 */
358
-	public function set_allow_quantities( $allow_quantities ) {
359
-		$this->allow_quantities = (bool) $allow_quantities;
360
-	}
361
-
362
-	/**
363
-	 * Set whether or not the item is required.
364
-	 *
365
-	 * @since 1.0.19
366
-	 * @param  bool $is_required
367
-	 */
368
-	public function set_is_required( $is_required ) {
369
-		$this->is_required = (bool) $is_required;
370
-	}
371
-
372
-	/**
373
-	 * Sets the custom item description.
374
-	 *
375
-	 * @since 1.0.19
376
-	 * @param  string $description
377
-	 */
378
-	public function set_custom_description( $description ) {
379
-		$this->custom_description = $description;
380
-	}
326
+    /**
327
+     * Set the item qantity.
328
+     *
329
+     * @since 1.0.19
330
+     * @param  float $quantity The item quantity.
331
+     */
332
+    public function set_quantity( $quantity ) {
333
+
334
+        if ( ! is_numeric( $quantity ) ) {
335
+            $quantity = 1;
336
+        }
337
+
338
+        $this->quantity = (float) $quantity;
339
+
340
+    }
341
+
342
+    /**
343
+     * Set the item meta data.
344
+     *
345
+     * @since 1.0.19
346
+     * @param  array $meta The item meta data.
347
+     */
348
+    public function set_item_meta( $meta ) {
349
+        $this->meta = maybe_unserialize( $meta );
350
+    }
351
+
352
+    /**
353
+     * Set whether or not the quantities are allowed.
354
+     *
355
+     * @since 1.0.19
356
+     * @param  bool $allow_quantities
357
+     */
358
+    public function set_allow_quantities( $allow_quantities ) {
359
+        $this->allow_quantities = (bool) $allow_quantities;
360
+    }
361
+
362
+    /**
363
+     * Set whether or not the item is required.
364
+     *
365
+     * @since 1.0.19
366
+     * @param  bool $is_required
367
+     */
368
+    public function set_is_required( $is_required ) {
369
+        $this->is_required = (bool) $is_required;
370
+    }
371
+
372
+    /**
373
+     * Sets the custom item description.
374
+     *
375
+     * @since 1.0.19
376
+     * @param  string $description
377
+     */
378
+    public function set_custom_description( $description ) {
379
+        $this->custom_description = $description;
380
+    }
381 381
 
382 382
     /**
383 383
      * We do not want to save items to the database.
384 384
      *
385
-	 * @return int item id
385
+     * @return int item id
386 386
      */
387 387
     public function save( $data = array() ) {
388 388
         return $this->get_id();
389
-	}
389
+    }
390 390
 
391 391
     /*
392 392
 	|--------------------------------------------------------------------------
@@ -398,23 +398,23 @@  discard block
 block discarded – undo
398 398
 	*/
399 399
 
400 400
     /**
401
-	 * Checks whether the item has enabled dynamic pricing.
402
-	 *
403
-	 * @since 1.0.19
404
-	 * @return bool
405
-	 */
406
-	public function is_required() {
401
+     * Checks whether the item has enabled dynamic pricing.
402
+     *
403
+     * @since 1.0.19
404
+     * @return bool
405
+     */
406
+    public function is_required() {
407 407
         return (bool) $this->get_is_required();
408
-	}
409
-
410
-	/**
411
-	 * Checks whether users can edit the quantities.
412
-	 *
413
-	 * @since 1.0.19
414
-	 * @return bool
415
-	 */
416
-	public function allows_quantities() {
408
+    }
409
+
410
+    /**
411
+     * Checks whether users can edit the quantities.
412
+     *
413
+     * @since 1.0.19
414
+     * @return bool
415
+     */
416
+    public function allows_quantities() {
417 417
         return (bool) $this->get_allow_quantities();
418
-	}
418
+    }
419 419
 
420 420
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-discount.php 1 patch
Indentation   +159 added lines, -159 removed lines patch added patch discarded remove patch
@@ -12,167 +12,167 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Payment_Form_Submission_Discount {
14 14
 
15
-	/**
16
-	 * Submission discounts.
17
-	 * @var array
18
-	 */
19
-	public $discounts = array();
15
+    /**
16
+     * Submission discounts.
17
+     * @var array
18
+     */
19
+    public $discounts = array();
20
+
21
+    /**
22
+     * Class constructor
23
+     *
24
+     * @param GetPaid_Payment_Form_Submission $submission
25
+     * @param float                           $initial_total
26
+     * @param float                           $recurring_total
27
+     */
28
+    public function __construct( $submission, $initial_total, $recurring_total ) {
29
+
30
+        // Process any existing invoice discounts.
31
+        if ( $submission->has_invoice() ) {
32
+            $this->discounts = $submission->get_invoice()->get_discounts();
33
+        }
34
+
35
+        // Do we have a discount?
36
+        $discount = $submission->get_field( 'discount' );
37
+
38
+        if ( empty( $discount ) ) {
39
+
40
+            if ( isset( $this->discounts['discount_code'] ) ) {
41
+                unset( $this->discounts['discount_code'] );
42
+            }
43
+
44
+            return;
45
+        }
46
+
47
+        // Processes the discount code.
48
+        $amount = max( $initial_total, $recurring_total );
49
+        $this->process_discount( $submission, $discount, $amount );
50
+
51
+    }
20 52
 
21 53
     /**
22
-	 * Class constructor
23
-	 *
24
-	 * @param GetPaid_Payment_Form_Submission $submission
25
-	 * @param float                           $initial_total
26
-	 * @param float                           $recurring_total
27
-	 */
28
-	public function __construct( $submission, $initial_total, $recurring_total ) {
29
-
30
-		// Process any existing invoice discounts.
31
-		if ( $submission->has_invoice() ) {
32
-			$this->discounts = $submission->get_invoice()->get_discounts();
33
-		}
34
-
35
-		// Do we have a discount?
36
-		$discount = $submission->get_field( 'discount' );
37
-
38
-		if ( empty( $discount ) ) {
39
-
40
-			if ( isset( $this->discounts['discount_code'] ) ) {
41
-				unset( $this->discounts['discount_code'] );
42
-			}
43
-
44
-			return;
45
-		}
46
-
47
-		// Processes the discount code.
48
-		$amount = max( $initial_total, $recurring_total );
49
-		$this->process_discount( $submission, $discount, $amount );
50
-
51
-	}
52
-
53
-	/**
54
-	 * Processes a submission discount.
55
-	 *
56
-	 * @param GetPaid_Payment_Form_Submission $submission
57
-	 * @param string                          $discount
58
-	 * @param float                           $amount
59
-	 */
60
-	public function process_discount( $submission, $discount, $amount ) {
61
-
62
-		// Fetch the discount.
63
-		$discount = new WPInv_Discount( $discount );
64
-
65
-		// Ensure it is active.
54
+     * Processes a submission discount.
55
+     *
56
+     * @param GetPaid_Payment_Form_Submission $submission
57
+     * @param string                          $discount
58
+     * @param float                           $amount
59
+     */
60
+    public function process_discount( $submission, $discount, $amount ) {
61
+
62
+        // Fetch the discount.
63
+        $discount = new WPInv_Discount( $discount );
64
+
65
+        // Ensure it is active.
66 66
         if ( ! $this->is_discount_active( $discount ) ) {
67
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'Invalid or expired discount code', 'invoicing' ) );
68
-		}
69
-
70
-		// Required items.
71
-		if ( ! $discount->is_required_items_met( array_keys( $submission->get_items() ) ) ) {
72
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You are not allowed to use this discount code.', 'invoicing' ) );
73
-		}
74
-
75
-		// Exceeded limit.
76
-		if ( $discount->has_exceeded_limit() ) {
77
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'This discount code has been used up', 'invoicing' ) );
78
-		}
79
-
80
-		// Validate usages.
81
-		$this->validate_single_use_discount( $submission, $discount );
82
-
83
-		// Validate amount.
84
-		$this->validate_discount_amount( $submission, $discount, $amount );
85
-
86
-		// Save the discount.
87
-		$this->discounts['discount_code'] = $this->calculate_discount( $submission, $discount );
88
-	}
89
-
90
-	/**
91
-	 * Validates a single use discount.
92
-	 *
93
-	 * @param WPInv_Discount                  $discount
94
-	 * @return bool
95
-	 */
96
-	public function is_discount_active( $discount ) {
97
-		return $discount->exists() && $discount->is_active() && $discount->has_started() && ! $discount->is_expired();
98
-	}
99
-
100
-	/**
101
-	 * Returns a user's id or email.
102
-	 *
103
-	 * @param string $email
104
-	 * @return int|string|false
105
-	 */
106
-	public function get_user_id_or_email( $email ) {
107
-
108
-		if ( is_user_logged_in() ) {
109
-			return get_current_user_id();
110
-		}
111
-
112
-		return empty( $email ) ? false : sanitize_email( $email );
113
-	}
114
-
115
-	/**
116
-	 * Validates a single use discount.
117
-	 *
118
-	 * @param GetPaid_Payment_Form_Submission $submission
119
-	 * @param WPInv_Discount                  $discount
120
-	 */
121
-	public function validate_single_use_discount( $submission, $discount ) {
122
-
123
-		// Abort if it is not a single use discount.
124
-		if ( ! $discount->is_single_use() ) {
125
-			return;
126
-		}
127
-
128
-		// Ensure there is a valid billing email.
129
-		$user = $this->get_user_id_or_email( $submission->get_billing_email() );
130
-
131
-		if ( empty( $user ) ) {
132
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You need to either log in or enter your billing email before applying this discount', 'invoicing' ) );
133
-		}
134
-
135
-		// Has the user used this discount code before?
136
-		if ( ! $discount->is_valid_for_user( $user ) ) {
137
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You have already used this discount', 'invoicing' ) );
138
-		}
139
-
140
-	}
141
-
142
-	/**
143
-	 * Validates the discount's amount.
144
-	 *
145
-	 * @param GetPaid_Payment_Form_Submission $submission
146
-	 * @param WPInv_Discount         $discount
147
-	 * @param float                  $amount
148
-	 */
149
-	public function validate_discount_amount( $submission, $discount, $amount ) {
150
-
151
-		// Validate minimum amount.
152
-		if ( ! $discount->is_minimum_amount_met( $amount ) ) {
153
-			$min = wpinv_price( $discount->get_minimum_total(), $submission->get_currency() );
154
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', sprintf( __( 'The minimum total for using this discount is %s', 'invoicing' ), $min ) );
155
-		}
156
-
157
-		// Validate the maximum amount.
158
-		if ( ! $discount->is_maximum_amount_met( $amount ) ) {
159
-			$max = wpinv_price( $discount->get_maximum_total(), $submission->get_currency() );
160
-			throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', sprintf( __( 'The maximum total for using this discount is %s', 'invoicing' ), $max ) );
161
-		}
162
-
163
-	}
164
-
165
-	/**
166
-	 * Calculates the discount code's amount.
167
-	 *
168
-	 * Ensure that the discount exists and has been validated before calling this method.
169
-	 *
170
-	 * @param GetPaid_Payment_Form_Submission $submission
171
-	 * @param WPInv_Discount                  $discount
172
-	 * @return array
173
-	 */
174
-	public function calculate_discount( $submission, $discount ) {
175
-		return getpaid_calculate_invoice_discount( $submission, $discount );
176
-	}
67
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'Invalid or expired discount code', 'invoicing' ) );
68
+        }
69
+
70
+        // Required items.
71
+        if ( ! $discount->is_required_items_met( array_keys( $submission->get_items() ) ) ) {
72
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You are not allowed to use this discount code.', 'invoicing' ) );
73
+        }
74
+
75
+        // Exceeded limit.
76
+        if ( $discount->has_exceeded_limit() ) {
77
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'This discount code has been used up', 'invoicing' ) );
78
+        }
79
+
80
+        // Validate usages.
81
+        $this->validate_single_use_discount( $submission, $discount );
82
+
83
+        // Validate amount.
84
+        $this->validate_discount_amount( $submission, $discount, $amount );
85
+
86
+        // Save the discount.
87
+        $this->discounts['discount_code'] = $this->calculate_discount( $submission, $discount );
88
+    }
89
+
90
+    /**
91
+     * Validates a single use discount.
92
+     *
93
+     * @param WPInv_Discount                  $discount
94
+     * @return bool
95
+     */
96
+    public function is_discount_active( $discount ) {
97
+        return $discount->exists() && $discount->is_active() && $discount->has_started() && ! $discount->is_expired();
98
+    }
99
+
100
+    /**
101
+     * Returns a user's id or email.
102
+     *
103
+     * @param string $email
104
+     * @return int|string|false
105
+     */
106
+    public function get_user_id_or_email( $email ) {
107
+
108
+        if ( is_user_logged_in() ) {
109
+            return get_current_user_id();
110
+        }
111
+
112
+        return empty( $email ) ? false : sanitize_email( $email );
113
+    }
114
+
115
+    /**
116
+     * Validates a single use discount.
117
+     *
118
+     * @param GetPaid_Payment_Form_Submission $submission
119
+     * @param WPInv_Discount                  $discount
120
+     */
121
+    public function validate_single_use_discount( $submission, $discount ) {
122
+
123
+        // Abort if it is not a single use discount.
124
+        if ( ! $discount->is_single_use() ) {
125
+            return;
126
+        }
127
+
128
+        // Ensure there is a valid billing email.
129
+        $user = $this->get_user_id_or_email( $submission->get_billing_email() );
130
+
131
+        if ( empty( $user ) ) {
132
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You need to either log in or enter your billing email before applying this discount', 'invoicing' ) );
133
+        }
134
+
135
+        // Has the user used this discount code before?
136
+        if ( ! $discount->is_valid_for_user( $user ) ) {
137
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', __( 'You have already used this discount', 'invoicing' ) );
138
+        }
139
+
140
+    }
141
+
142
+    /**
143
+     * Validates the discount's amount.
144
+     *
145
+     * @param GetPaid_Payment_Form_Submission $submission
146
+     * @param WPInv_Discount         $discount
147
+     * @param float                  $amount
148
+     */
149
+    public function validate_discount_amount( $submission, $discount, $amount ) {
150
+
151
+        // Validate minimum amount.
152
+        if ( ! $discount->is_minimum_amount_met( $amount ) ) {
153
+            $min = wpinv_price( $discount->get_minimum_total(), $submission->get_currency() );
154
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', sprintf( __( 'The minimum total for using this discount is %s', 'invoicing' ), $min ) );
155
+        }
156
+
157
+        // Validate the maximum amount.
158
+        if ( ! $discount->is_maximum_amount_met( $amount ) ) {
159
+            $max = wpinv_price( $discount->get_maximum_total(), $submission->get_currency() );
160
+            throw new GetPaid_Payment_Exception( '.getpaid-discount-field .getpaid-custom-payment-form-errors', sprintf( __( 'The maximum total for using this discount is %s', 'invoicing' ), $max ) );
161
+        }
162
+
163
+    }
164
+
165
+    /**
166
+     * Calculates the discount code's amount.
167
+     *
168
+     * Ensure that the discount exists and has been validated before calling this method.
169
+     *
170
+     * @param GetPaid_Payment_Form_Submission $submission
171
+     * @param WPInv_Discount                  $discount
172
+     * @return array
173
+     */
174
+    public function calculate_discount( $submission, $discount ) {
175
+        return getpaid_calculate_invoice_discount( $submission, $discount );
176
+    }
177 177
 
178 178
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-fees.php 1 patch
Indentation   +104 added lines, -104 removed lines patch added patch discarded remove patch
@@ -12,113 +12,113 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Payment_Form_Submission_Fees {
14 14
 
15
-	/**
16
-	 * The fee validation error.
17
-	 * @var string
18
-	 */
19
-	public $fee_error;
20
-
21
-	/**
22
-	 * Submission fees.
23
-	 * @var array
24
-	 */
25
-	public $fees = array();
15
+    /**
16
+     * The fee validation error.
17
+     * @var string
18
+     */
19
+    public $fee_error;
20
+
21
+    /**
22
+     * Submission fees.
23
+     * @var array
24
+     */
25
+    public $fees = array();
26 26
 
27 27
     /**
28
-	 * Class constructor
29
-	 *
30
-	 * @param GetPaid_Payment_Form_Submission $submission
31
-	 */
32
-	public function __construct( $submission ) {
33
-
34
-		// Process any existing invoice fees.
35
-		if ( $submission->has_invoice() ) {
36
-			$this->fees = $submission->get_invoice()->get_fees();
37
-		}
38
-
39
-		// Process price fields.
40
-		$data         = $submission->get_data();
41
-		$payment_form = $submission->get_payment_form();
42
-
43
-		foreach ( $payment_form->get_elements() as $element ) {
44
-
45
-			if ( 'price_input' == $element['type'] ) {
46
-				$this->process_price_input( $element, $data, $submission );
47
-			}
48
-
49
-			if ( 'price_select' == $element['type'] ) {
50
-				$this->process_price_select( $element, $data );
51
-			}
28
+     * Class constructor
29
+     *
30
+     * @param GetPaid_Payment_Form_Submission $submission
31
+     */
32
+    public function __construct( $submission ) {
33
+
34
+        // Process any existing invoice fees.
35
+        if ( $submission->has_invoice() ) {
36
+            $this->fees = $submission->get_invoice()->get_fees();
37
+        }
38
+
39
+        // Process price fields.
40
+        $data         = $submission->get_data();
41
+        $payment_form = $submission->get_payment_form();
42
+
43
+        foreach ( $payment_form->get_elements() as $element ) {
44
+
45
+            if ( 'price_input' == $element['type'] ) {
46
+                $this->process_price_input( $element, $data, $submission );
47
+            }
48
+
49
+            if ( 'price_select' == $element['type'] ) {
50
+                $this->process_price_select( $element, $data );
51
+            }
52 52
 }
53 53
 
54
-	}
55
-
56
-	/**
57
-	 * Process a price input field.
58
-	 *
59
-	 * @param array $element
60
-	 * @param array $data
61
-	 * @param GetPaid_Payment_Form_Submission $submission
62
-	 */
63
-	public function process_price_input( $element, $data, $submission ) {
64
-
65
-		// Abort if not passed.
66
-		if ( empty( $data[ $element['id'] ] ) ) {
67
-			return;
68
-		}
69
-
70
-		$amount  = (float) wpinv_sanitize_amount( $data[ $element['id'] ] );
71
-		$minimum = empty( $element['minimum'] ) ? 0 : (float) wpinv_sanitize_amount( $element['minimum'] );
72
-
73
-		if ( $amount < $minimum ) {
74
-			throw new Exception( sprintf( __( 'The minimum allowed amount is %s', 'invoicing' ), getpaid_unstandardize_amount( $minimum, $submission->get_currency() ) ) );
75
-		}
76
-
77
-		$this->fees[ $element['label'] ] = array(
78
-			'name'          => $element['label'],
79
-			'initial_fee'   => $amount,
80
-			'recurring_fee' => 0,
81
-		);
82
-
83
-	}
84
-
85
-	/**
86
-	 * Process a price select field.
87
-	 *
88
-	 * @param array $element
89
-	 * @param array $data
90
-	 */
91
-	public function process_price_select( $element, $data ) {
92
-
93
-		// Abort if not passed.
94
-		if ( empty( $data[ $element['id'] ] ) ) {
95
-			return;
96
-		}
97
-
98
-		$options    = getpaid_convert_price_string_to_options( $element['options'] );
99
-		$selected   = array_filter( array_map( 'trim', explode( ',', $data[ $element['id'] ] ) ) );
100
-		$total      = 0;
101
-		$sub_labels = array();
102
-
103
-		foreach ( $selected as $price ) {
104
-
105
-			if ( ! isset( $options[ $price ] ) ) {
106
-				throw new Exception( __( 'You have selected an invalid amount', 'invoicing' ) );
107
-			}
108
-
109
-			$price = explode( '|', $price );
110
-
111
-			$sub_labels[] = $price[0];
112
-			$total += (float) wpinv_sanitize_amount( $price[1] );
113
-		}
114
-
115
-		$this->fees[ $element['label'] ] = array(
116
-			'name'          => $element['label'],
117
-			'initial_fee'   => $total,
118
-			'recurring_fee' => 0,
119
-			'description'   => implode( ', ', $sub_labels ),
120
-		);
121
-
122
-	}
54
+    }
55
+
56
+    /**
57
+     * Process a price input field.
58
+     *
59
+     * @param array $element
60
+     * @param array $data
61
+     * @param GetPaid_Payment_Form_Submission $submission
62
+     */
63
+    public function process_price_input( $element, $data, $submission ) {
64
+
65
+        // Abort if not passed.
66
+        if ( empty( $data[ $element['id'] ] ) ) {
67
+            return;
68
+        }
69
+
70
+        $amount  = (float) wpinv_sanitize_amount( $data[ $element['id'] ] );
71
+        $minimum = empty( $element['minimum'] ) ? 0 : (float) wpinv_sanitize_amount( $element['minimum'] );
72
+
73
+        if ( $amount < $minimum ) {
74
+            throw new Exception( sprintf( __( 'The minimum allowed amount is %s', 'invoicing' ), getpaid_unstandardize_amount( $minimum, $submission->get_currency() ) ) );
75
+        }
76
+
77
+        $this->fees[ $element['label'] ] = array(
78
+            'name'          => $element['label'],
79
+            'initial_fee'   => $amount,
80
+            'recurring_fee' => 0,
81
+        );
82
+
83
+    }
84
+
85
+    /**
86
+     * Process a price select field.
87
+     *
88
+     * @param array $element
89
+     * @param array $data
90
+     */
91
+    public function process_price_select( $element, $data ) {
92
+
93
+        // Abort if not passed.
94
+        if ( empty( $data[ $element['id'] ] ) ) {
95
+            return;
96
+        }
97
+
98
+        $options    = getpaid_convert_price_string_to_options( $element['options'] );
99
+        $selected   = array_filter( array_map( 'trim', explode( ',', $data[ $element['id'] ] ) ) );
100
+        $total      = 0;
101
+        $sub_labels = array();
102
+
103
+        foreach ( $selected as $price ) {
104
+
105
+            if ( ! isset( $options[ $price ] ) ) {
106
+                throw new Exception( __( 'You have selected an invalid amount', 'invoicing' ) );
107
+            }
108
+
109
+            $price = explode( '|', $price );
110
+
111
+            $sub_labels[] = $price[0];
112
+            $total += (float) wpinv_sanitize_amount( $price[1] );
113
+        }
114
+
115
+        $this->fees[ $element['label'] ] = array(
116
+            'name'          => $element['label'],
117
+            'initial_fee'   => $total,
118
+            'recurring_fee' => 0,
119
+            'description'   => implode( ', ', $sub_labels ),
120
+        );
121
+
122
+    }
123 123
 
124 124
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-refresh-prices.php 1 patch
Indentation   +252 added lines, -252 removed lines patch added patch discarded remove patch
@@ -12,290 +12,290 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Payment_Form_Submission_Refresh_Prices {
14 14
 
15
-	/**
16
-	 * Contains the response for refreshing prices.
17
-	 * @var array
18
-	 */
19
-	public $response = array();
15
+    /**
16
+     * Contains the response for refreshing prices.
17
+     * @var array
18
+     */
19
+    public $response = array();
20 20
 
21 21
     /**
22
-	 * Class constructor
23
-	 *
24
-	 * @param GetPaid_Payment_Form_Submission $submission
25
-	 */
26
-	public function __construct( $submission ) {
27
-
28
-		$this->response = array(
29
-			'submission_id'                    => $submission->id,
22
+     * Class constructor
23
+     *
24
+     * @param GetPaid_Payment_Form_Submission $submission
25
+     */
26
+    public function __construct( $submission ) {
27
+
28
+        $this->response = array(
29
+            'submission_id'                    => $submission->id,
30 30
             'has_recurring'                    => $submission->has_recurring,
31
-			'has_subscription_group'           => $submission->has_subscription_group(),
32
-			'has_multiple_subscription_groups' => $submission->has_multiple_subscription_groups(),
31
+            'has_subscription_group'           => $submission->has_subscription_group(),
32
+            'has_multiple_subscription_groups' => $submission->has_multiple_subscription_groups(),
33 33
             'is_free'                          => ! $submission->should_collect_payment_details(),
34
-		);
35
-
36
-		$this->add_totals( $submission );
37
-		$this->add_texts( $submission );
38
-		$this->add_items( $submission );
39
-		$this->add_fees( $submission );
40
-		$this->add_discounts( $submission );
41
-		$this->add_taxes( $submission );
42
-		$this->add_gateways( $submission );
43
-		$this->add_data( $submission );
44
-
45
-	}
46
-
47
-	/**
48
-	 * Adds totals to a response for submission refresh prices.
49
-	 *
50
-	 * @param GetPaid_Payment_Form_Submission $submission
51
-	 */
52
-	public function add_totals( $submission ) {
53
-
54
-		$this->response = array_merge(
55
-			$this->response,
56
-			array(
57
-
58
-				'totals'      => array(
59
-					'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
60
-					'discount'  => $submission->format_amount( $submission->get_discount() ),
61
-					'fees'      => $submission->format_amount( $submission->get_fee() ),
62
-					'tax'       => $submission->format_amount( $submission->get_tax() ),
63
-					'total'     => $submission->format_amount( $submission->get_total() ),
64
-					'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
65
-				),
66
-
67
-				'recurring'   => array(
68
-					'subtotal' => $submission->format_amount( $submission->get_recurring_subtotal() ),
69
-					'discount' => $submission->format_amount( $submission->get_recurring_discount() ),
70
-					'fees'     => $submission->format_amount( $submission->get_recurring_fee() ),
71
-					'tax'      => $submission->format_amount( $submission->get_recurring_tax() ),
72
-					'total'    => $submission->format_amount( $submission->get_recurring_total() ),
73
-				),
74
-
75
-				'initial_amt' => wpinv_round_amount( $submission->get_total(), null, true ),
76
-				'currency'    => $submission->get_currency(),
77
-
78
-			)
79
-		);
80
-
81
-	}
82
-
83
-	/**
84
-	 * Adds texts to a response for submission refresh prices.
85
-	 *
86
-	 * @param GetPaid_Payment_Form_Submission $submission
87
-	 */
88
-	public function add_texts( $submission ) {
89
-
90
-		$payable = $submission->format_amount( $submission->get_total() );
91
-		$groups  = getpaid_get_subscription_groups( $submission );
92
-
93
-		if ( $submission->has_recurring && 2 > count( $groups ) ) {
94
-
95
-			$recurring = new WPInv_Item( $submission->has_recurring );
96
-			$period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
97
-			$main_item = reset( $groups );
98
-
99
-			if ( $submission->get_total() == $submission->get_recurring_total() ) {
100
-				$payable = "$payable / $period";
101
-			} elseif ( $main_item ) {
102
-
103
-				$main_item = reset( $main_item );
104
-
105
-				// Calculate the next renewal date.
106
-				$_period      = $main_item->get_recurring_period( true );
107
-				$_interval    = $main_item->get_recurring_interval();
108
-
109
-				// If the subscription item has a trial period...
110
-				if ( $main_item->has_free_trial() ) {
111
-					$_period   = $main_item->get_trial_period( true );
112
-					$_interval = $main_item->get_trial_interval();
113
-				}
114
-
115
-				$payable = sprintf(
116
-					__( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
117
-					$submission->format_amount( $submission->get_total() ),
118
-					$submission->format_amount( $submission->get_recurring_total() ),
119
-					$period
120
-				);
121
-
122
-				$payable .= sprintf(
123
-					'<small class="text-muted form-text">%s</small>',
124
-					sprintf(
125
-						__( 'First renewal on %s', 'invoicing' ),
126
-						getpaid_format_date( date( 'Y-m-d H:i:s', strtotime( "+$_interval $_period", current_time( 'timestamp' ) ) ) )
127
-					)
128
-				);
129
-
130
-			} else {
131
-				$payable = sprintf(
132
-					__( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
133
-					$submission->format_amount( $submission->get_total() ),
134
-					$submission->format_amount( $submission->get_recurring_total() ),
135
-					$period
136
-				);
137
-			}
138
-}
34
+        );
139 35
 
140
-		$texts = array(
141
-			'.getpaid-checkout-total-payable' => $payable,
142
-		);
36
+        $this->add_totals( $submission );
37
+        $this->add_texts( $submission );
38
+        $this->add_items( $submission );
39
+        $this->add_fees( $submission );
40
+        $this->add_discounts( $submission );
41
+        $this->add_taxes( $submission );
42
+        $this->add_gateways( $submission );
43
+        $this->add_data( $submission );
143 44
 
144
-		foreach ( $submission->get_items() as $item ) {
145
-			$item_id                                               = $item->get_id();
146
-			$initial_price                                         = $submission->format_amount( $item->get_sub_total() - $item->item_discount );
147
-			$recurring_price                                       = $submission->format_amount( $item->get_recurring_sub_total() - $item->recurring_item_discount );
148
-			$texts[ ".item-$item_id .getpaid-form-item-price-desc" ] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
149
-			$texts[ ".item-$item_id .getpaid-mobile-item-subtotal" ] = sprintf( __( 'Subtotal: %s', 'invoicing' ), $submission->format_amount( $item->get_sub_total() ) );
45
+    }
46
+
47
+    /**
48
+     * Adds totals to a response for submission refresh prices.
49
+     *
50
+     * @param GetPaid_Payment_Form_Submission $submission
51
+     */
52
+    public function add_totals( $submission ) {
53
+
54
+        $this->response = array_merge(
55
+            $this->response,
56
+            array(
57
+
58
+                'totals'      => array(
59
+                    'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
60
+                    'discount'  => $submission->format_amount( $submission->get_discount() ),
61
+                    'fees'      => $submission->format_amount( $submission->get_fee() ),
62
+                    'tax'       => $submission->format_amount( $submission->get_tax() ),
63
+                    'total'     => $submission->format_amount( $submission->get_total() ),
64
+                    'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
65
+                ),
66
+
67
+                'recurring'   => array(
68
+                    'subtotal' => $submission->format_amount( $submission->get_recurring_subtotal() ),
69
+                    'discount' => $submission->format_amount( $submission->get_recurring_discount() ),
70
+                    'fees'     => $submission->format_amount( $submission->get_recurring_fee() ),
71
+                    'tax'      => $submission->format_amount( $submission->get_recurring_tax() ),
72
+                    'total'    => $submission->format_amount( $submission->get_recurring_total() ),
73
+                ),
74
+
75
+                'initial_amt' => wpinv_round_amount( $submission->get_total(), null, true ),
76
+                'currency'    => $submission->get_currency(),
77
+
78
+            )
79
+        );
80
+
81
+    }
150 82
 
151
-			if ( $item->get_quantity() == 1 ) {
152
-				$texts[ ".item-$item_id .getpaid-mobile-item-subtotal" ] = '';
153
-			}
83
+    /**
84
+     * Adds texts to a response for submission refresh prices.
85
+     *
86
+     * @param GetPaid_Payment_Form_Submission $submission
87
+     */
88
+    public function add_texts( $submission ) {
89
+
90
+        $payable = $submission->format_amount( $submission->get_total() );
91
+        $groups  = getpaid_get_subscription_groups( $submission );
92
+
93
+        if ( $submission->has_recurring && 2 > count( $groups ) ) {
94
+
95
+            $recurring = new WPInv_Item( $submission->has_recurring );
96
+            $period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
97
+            $main_item = reset( $groups );
98
+
99
+            if ( $submission->get_total() == $submission->get_recurring_total() ) {
100
+                $payable = "$payable / $period";
101
+            } elseif ( $main_item ) {
102
+
103
+                $main_item = reset( $main_item );
104
+
105
+                // Calculate the next renewal date.
106
+                $_period      = $main_item->get_recurring_period( true );
107
+                $_interval    = $main_item->get_recurring_interval();
108
+
109
+                // If the subscription item has a trial period...
110
+                if ( $main_item->has_free_trial() ) {
111
+                    $_period   = $main_item->get_trial_period( true );
112
+                    $_interval = $main_item->get_trial_interval();
113
+                }
114
+
115
+                $payable = sprintf(
116
+                    __( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
117
+                    $submission->format_amount( $submission->get_total() ),
118
+                    $submission->format_amount( $submission->get_recurring_total() ),
119
+                    $period
120
+                );
121
+
122
+                $payable .= sprintf(
123
+                    '<small class="text-muted form-text">%s</small>',
124
+                    sprintf(
125
+                        __( 'First renewal on %s', 'invoicing' ),
126
+                        getpaid_format_date( date( 'Y-m-d H:i:s', strtotime( "+$_interval $_period", current_time( 'timestamp' ) ) ) )
127
+                    )
128
+                );
129
+
130
+            } else {
131
+                $payable = sprintf(
132
+                    __( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
133
+                    $submission->format_amount( $submission->get_total() ),
134
+                    $submission->format_amount( $submission->get_recurring_total() ),
135
+                    $period
136
+                );
137
+            }
154 138
 }
155 139
 
156
-		$this->response = array_merge( $this->response, array( 'texts' => $texts ) );
140
+        $texts = array(
141
+            '.getpaid-checkout-total-payable' => $payable,
142
+        );
157 143
 
158
-	}
144
+        foreach ( $submission->get_items() as $item ) {
145
+            $item_id                                               = $item->get_id();
146
+            $initial_price                                         = $submission->format_amount( $item->get_sub_total() - $item->item_discount );
147
+            $recurring_price                                       = $submission->format_amount( $item->get_recurring_sub_total() - $item->recurring_item_discount );
148
+            $texts[ ".item-$item_id .getpaid-form-item-price-desc" ] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
149
+            $texts[ ".item-$item_id .getpaid-mobile-item-subtotal" ] = sprintf( __( 'Subtotal: %s', 'invoicing' ), $submission->format_amount( $item->get_sub_total() ) );
150
+
151
+            if ( $item->get_quantity() == 1 ) {
152
+                $texts[ ".item-$item_id .getpaid-mobile-item-subtotal" ] = '';
153
+            }
154
+}
159 155
 
160
-	/**
161
-	 * Adds items to a response for submission refresh prices.
162
-	 *
163
-	 * @param GetPaid_Payment_Form_Submission $submission
164
-	 */
165
-	public function add_items( $submission ) {
156
+        $this->response = array_merge( $this->response, array( 'texts' => $texts ) );
166 157
 
167
-		// Add items.
168
-		$items = array();
158
+    }
159
+
160
+    /**
161
+     * Adds items to a response for submission refresh prices.
162
+     *
163
+     * @param GetPaid_Payment_Form_Submission $submission
164
+     */
165
+    public function add_items( $submission ) {
166
+
167
+        // Add items.
168
+        $items = array();
169 169
 
170 170
         foreach ( $submission->get_items() as $item ) {
171
-			$item_id           = $item->get_id();
172
-			$items[ "$item_id" ] = $submission->format_amount( $item->get_sub_total() );
173
-		}
171
+            $item_id           = $item->get_id();
172
+            $items[ "$item_id" ] = $submission->format_amount( $item->get_sub_total() );
173
+        }
174 174
 
175
-		$this->response = array_merge(
176
-			$this->response,
177
-			array( 'items' => $items )
178
-		);
175
+        $this->response = array_merge(
176
+            $this->response,
177
+            array( 'items' => $items )
178
+        );
179 179
 
180
-	}
180
+    }
181 181
 
182
-	/**
183
-	 * Adds fees to a response for submission refresh prices.
184
-	 *
185
-	 * @param GetPaid_Payment_Form_Submission $submission
186
-	 */
187
-	public function add_fees( $submission ) {
182
+    /**
183
+     * Adds fees to a response for submission refresh prices.
184
+     *
185
+     * @param GetPaid_Payment_Form_Submission $submission
186
+     */
187
+    public function add_fees( $submission ) {
188 188
 
189
-		$fees = array();
189
+        $fees = array();
190 190
 
191 191
         foreach ( $submission->get_fees() as $name => $data ) {
192
-			$fees[ $name ] = $submission->format_amount( $data['initial_fee'] );
193
-		}
192
+            $fees[ $name ] = $submission->format_amount( $data['initial_fee'] );
193
+        }
194 194
 
195
-		$this->response = array_merge(
196
-			$this->response,
197
-			array( 'fees' => $fees )
198
-		);
195
+        $this->response = array_merge(
196
+            $this->response,
197
+            array( 'fees' => $fees )
198
+        );
199 199
 
200
-	}
200
+    }
201 201
 
202
-	/**
203
-	 * Adds discounts to a response for submission refresh prices.
204
-	 *
205
-	 * @param GetPaid_Payment_Form_Submission $submission
206
-	 */
207
-	public function add_discounts( $submission ) {
202
+    /**
203
+     * Adds discounts to a response for submission refresh prices.
204
+     *
205
+     * @param GetPaid_Payment_Form_Submission $submission
206
+     */
207
+    public function add_discounts( $submission ) {
208 208
 
209
-		$discounts = array();
209
+        $discounts = array();
210 210
 
211 211
         foreach ( $submission->get_discounts() as $name => $data ) {
212
-			$discounts[ $name ] = $submission->format_amount( $data['initial_discount'] );
213
-		}
214
-
215
-		$this->response = array_merge(
216
-			$this->response,
217
-			array( 'discounts' => $discounts )
218
-		);
212
+            $discounts[ $name ] = $submission->format_amount( $data['initial_discount'] );
213
+        }
219 214
 
220
-	}
215
+        $this->response = array_merge(
216
+            $this->response,
217
+            array( 'discounts' => $discounts )
218
+        );
221 219
 
222
-	/**
223
-	 * Adds taxes to a response for submission refresh prices.
224
-	 *
225
-	 * @param GetPaid_Payment_Form_Submission $submission
226
-	 */
227
-	public function add_taxes( $submission ) {
220
+    }
228 221
 
229
-		$taxes  = array();
230
-		$markup = '';
222
+    /**
223
+     * Adds taxes to a response for submission refresh prices.
224
+     *
225
+     * @param GetPaid_Payment_Form_Submission $submission
226
+     */
227
+    public function add_taxes( $submission ) {
228
+
229
+        $taxes  = array();
230
+        $markup = '';
231 231
         foreach ( $submission->get_taxes() as $name => $data ) {
232
-			$name          = sanitize_text_field( $name );
233
-			$amount        = $submission->format_amount( $data['initial_tax'] );
234
-			$taxes[ $name ]  = $amount;
235
-			$markup       .= "<small class='form-text'>$name : $amount</small>";
236
-		}
237
-
238
-		if ( wpinv_display_individual_tax_rates() && ! empty( $taxes ) ) {
239
-			$this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
240
-		}
241
-
242
-		$this->response = array_merge(
243
-			$this->response,
244
-			array( 'taxes' => $taxes )
245
-		);
246
-
247
-	}
248
-
249
-	/**
250
-	 * Adds gateways to a response for submission refresh prices.
251
-	 *
252
-	 * @param GetPaid_Payment_Form_Submission $submission
253
-	 */
254
-	public function add_gateways( $submission ) {
255
-
256
-		$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
257
-
258
-		if ( $this->response['has_recurring'] ) {
259
-
260
-			foreach ( $gateways as $i => $gateway ) {
261
-
262
-				if (
263
-					! getpaid_payment_gateway_supports( $gateway, 'subscription' )
264
-					|| ( $this->response['has_subscription_group'] && ! getpaid_payment_gateway_supports( $gateway, 'single_subscription_group' ) )
265
-					|| ( $this->response['has_multiple_subscription_groups'] && ! getpaid_payment_gateway_supports( $gateway, 'multiple_subscription_groups' ) ) ) {
266
-					unset( $gateways[ $i ] );
267
-				}
232
+            $name          = sanitize_text_field( $name );
233
+            $amount        = $submission->format_amount( $data['initial_tax'] );
234
+            $taxes[ $name ]  = $amount;
235
+            $markup       .= "<small class='form-text'>$name : $amount</small>";
236
+        }
237
+
238
+        if ( wpinv_display_individual_tax_rates() && ! empty( $taxes ) ) {
239
+            $this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
240
+        }
241
+
242
+        $this->response = array_merge(
243
+            $this->response,
244
+            array( 'taxes' => $taxes )
245
+        );
246
+
247
+    }
248
+
249
+    /**
250
+     * Adds gateways to a response for submission refresh prices.
251
+     *
252
+     * @param GetPaid_Payment_Form_Submission $submission
253
+     */
254
+    public function add_gateways( $submission ) {
255
+
256
+        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
257
+
258
+        if ( $this->response['has_recurring'] ) {
259
+
260
+            foreach ( $gateways as $i => $gateway ) {
261
+
262
+                if (
263
+                    ! getpaid_payment_gateway_supports( $gateway, 'subscription' )
264
+                    || ( $this->response['has_subscription_group'] && ! getpaid_payment_gateway_supports( $gateway, 'single_subscription_group' ) )
265
+                    || ( $this->response['has_multiple_subscription_groups'] && ! getpaid_payment_gateway_supports( $gateway, 'multiple_subscription_groups' ) ) ) {
266
+                    unset( $gateways[ $i ] );
267
+                }
268 268
 }
269 269
 }
270 270
 
271
-		$gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
272
-		$this->response = array_merge(
273
-			$this->response,
274
-			array( 'gateways' => $gateways )
275
-		);
276
-
277
-	}
278
-
279
-	/**
280
-	 * Adds data to a response for submission refresh prices.
281
-	 *
282
-	 * @param GetPaid_Payment_Form_Submission $submission
283
-	 */
284
-	public function add_data( $submission ) {
285
-
286
-		$this->response = array_merge(
287
-			$this->response,
288
-			array(
289
-				'js_data' => apply_filters(
290
-					'getpaid_submission_js_data',
291
-					array(
292
-						'is_recurring' => $this->response['has_recurring'],
293
-					),
294
-					$submission
295
-				),
296
-			)
297
-		);
298
-
299
-	}
271
+        $gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
272
+        $this->response = array_merge(
273
+            $this->response,
274
+            array( 'gateways' => $gateways )
275
+        );
276
+
277
+    }
278
+
279
+    /**
280
+     * Adds data to a response for submission refresh prices.
281
+     *
282
+     * @param GetPaid_Payment_Form_Submission $submission
283
+     */
284
+    public function add_data( $submission ) {
285
+
286
+        $this->response = array_merge(
287
+            $this->response,
288
+            array(
289
+                'js_data' => apply_filters(
290
+                    'getpaid_submission_js_data',
291
+                    array(
292
+                        'is_recurring' => $this->response['has_recurring'],
293
+                    ),
294
+                    $submission
295
+                ),
296
+            )
297
+        );
298
+
299
+    }
300 300
 
301 301
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-checkout.php 1 patch
Indentation   +298 added lines, -298 removed lines patch added patch discarded remove patch
@@ -12,184 +12,184 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Checkout {
14 14
 
15
-	/**
16
-	 * @var GetPaid_Payment_Form_Submission
17
-	 */
18
-	protected $payment_form_submission;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 * @param GetPaid_Payment_Form_Submission $submission
24
-	 */
25
-	public function __construct( $submission ) {
26
-		$this->payment_form_submission = $submission;
27
-	}
28
-
29
-	/**
30
-	 * Processes the checkout.
31
-	 *
32
-	 */
33
-	public function process_checkout() {
34
-
35
-		// Validate the submission.
36
-		$this->validate_submission();
37
-
38
-		// Prepare the invoice.
39
-		$items      = $this->get_submission_items();
40
-		$invoice    = $this->get_submission_invoice();
41
-		$invoice    = $this->process_submission_invoice( $invoice, $items );
42
-		$prepared   = $this->prepare_submission_data_for_saving();
43
-
44
-		$this->prepare_billing_info( $invoice );
45
-
46
-		$shipping   = $this->prepare_shipping_info( $invoice );
47
-
48
-		// Save the invoice.
49
-		$invoice->set_is_viewed( true );
50
-		$invoice->recalculate_total();
15
+    /**
16
+     * @var GetPaid_Payment_Form_Submission
17
+     */
18
+    protected $payment_form_submission;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     * @param GetPaid_Payment_Form_Submission $submission
24
+     */
25
+    public function __construct( $submission ) {
26
+        $this->payment_form_submission = $submission;
27
+    }
28
+
29
+    /**
30
+     * Processes the checkout.
31
+     *
32
+     */
33
+    public function process_checkout() {
34
+
35
+        // Validate the submission.
36
+        $this->validate_submission();
37
+
38
+        // Prepare the invoice.
39
+        $items      = $this->get_submission_items();
40
+        $invoice    = $this->get_submission_invoice();
41
+        $invoice    = $this->process_submission_invoice( $invoice, $items );
42
+        $prepared   = $this->prepare_submission_data_for_saving();
43
+
44
+        $this->prepare_billing_info( $invoice );
45
+
46
+        $shipping   = $this->prepare_shipping_info( $invoice );
47
+
48
+        // Save the invoice.
49
+        $invoice->set_is_viewed( true );
50
+        $invoice->recalculate_total();
51 51
         $invoice->save();
52 52
 
53
-		do_action( 'getpaid_checkout_invoice_updated', $invoice );
53
+        do_action( 'getpaid_checkout_invoice_updated', $invoice );
54 54
 
55
-		// Send to the gateway.
56
-		$this->post_process_submission( $invoice, $prepared, $shipping );
57
-	}
55
+        // Send to the gateway.
56
+        $this->post_process_submission( $invoice, $prepared, $shipping );
57
+    }
58 58
 
59
-	/**
60
-	 * Validates the submission.
61
-	 *
62
-	 */
63
-	protected function validate_submission() {
59
+    /**
60
+     * Validates the submission.
61
+     *
62
+     */
63
+    protected function validate_submission() {
64 64
 
65
-		$submission = $this->payment_form_submission;
66
-		$data       = $submission->get_data();
65
+        $submission = $this->payment_form_submission;
66
+        $data       = $submission->get_data();
67 67
 
68
-		// Do we have an error?
68
+        // Do we have an error?
69 69
         if ( ! empty( $submission->last_error ) ) {
70
-			wp_send_json_error( $submission->last_error );
70
+            wp_send_json_error( $submission->last_error );
71 71
         }
72 72
 
73
-		// We need a billing email.
73
+        // We need a billing email.
74 74
         if ( ! $submission->has_billing_email() ) {
75 75
             wp_send_json_error( __( 'Provide a valid billing email.', 'invoicing' ) );
76
-		}
76
+        }
77 77
 
78
-		// Non-recurring gateways should not be allowed to process recurring invoices.
79
-		if ( $submission->should_collect_payment_details() && $submission->has_recurring && ! wpinv_gateway_support_subscription( $data['wpi-gateway'] ) ) {
80
-			wp_send_json_error( __( 'The selected payment gateway does not support subscription payments.', 'invoicing' ) );
81
-		}
78
+        // Non-recurring gateways should not be allowed to process recurring invoices.
79
+        if ( $submission->should_collect_payment_details() && $submission->has_recurring && ! wpinv_gateway_support_subscription( $data['wpi-gateway'] ) ) {
80
+            wp_send_json_error( __( 'The selected payment gateway does not support subscription payments.', 'invoicing' ) );
81
+        }
82 82
 
83
-		// Ensure the gateway is active.
84
-		if ( $submission->should_collect_payment_details() && ! wpinv_is_gateway_active( $data['wpi-gateway'] ) ) {
85
-			wp_send_json_error( __( 'The selected payment gateway is not active', 'invoicing' ) );
86
-		}
83
+        // Ensure the gateway is active.
84
+        if ( $submission->should_collect_payment_details() && ! wpinv_is_gateway_active( $data['wpi-gateway'] ) ) {
85
+            wp_send_json_error( __( 'The selected payment gateway is not active', 'invoicing' ) );
86
+        }
87 87
 
88
-		// Clear any existing errors.
89
-		wpinv_clear_errors();
88
+        // Clear any existing errors.
89
+        wpinv_clear_errors();
90 90
 
91
-		// Allow themes and plugins to hook to errors
92
-		do_action( 'getpaid_checkout_error_checks', $submission );
91
+        // Allow themes and plugins to hook to errors
92
+        do_action( 'getpaid_checkout_error_checks', $submission );
93 93
 
94
-		// Do we have any errors?
94
+        // Do we have any errors?
95 95
         if ( wpinv_get_errors() ) {
96 96
             wp_send_json_error( getpaid_get_errors_html() );
97
-		}
97
+        }
98 98
 
99
-	}
99
+    }
100 100
 
101
-	/**
102
-	 * Retrieves submission items.
103
-	 *
104
-	 * @return GetPaid_Form_Item[]
105
-	 */
106
-	protected function get_submission_items() {
101
+    /**
102
+     * Retrieves submission items.
103
+     *
104
+     * @return GetPaid_Form_Item[]
105
+     */
106
+    protected function get_submission_items() {
107 107
 
108
-		$items = $this->payment_form_submission->get_items();
108
+        $items = $this->payment_form_submission->get_items();
109 109
 
110 110
         // Ensure that we have items.
111 111
         if ( empty( $items ) && ! $this->payment_form_submission->has_fees() ) {
112 112
             wp_send_json_error( __( 'Please provide at least one item or amount.', 'invoicing' ) );
113
-		}
114
-
115
-		return $items;
116
-	}
117
-
118
-	/**
119
-	 * Retrieves submission invoice.
120
-	 *
121
-	 * @return WPInv_Invoice
122
-	 */
123
-	protected function get_submission_invoice() {
124
-		$submission = $this->payment_form_submission;
125
-
126
-		if ( ! $submission->has_invoice() ) {
127
-			$invoice = new WPInv_Invoice();
128
-			$invoice->set_created_via( 'payment_form' );
129
-			return $invoice;
130 113
         }
131 114
 
132
-		$invoice = $submission->get_invoice();
115
+        return $items;
116
+    }
117
+
118
+    /**
119
+     * Retrieves submission invoice.
120
+     *
121
+     * @return WPInv_Invoice
122
+     */
123
+    protected function get_submission_invoice() {
124
+        $submission = $this->payment_form_submission;
125
+
126
+        if ( ! $submission->has_invoice() ) {
127
+            $invoice = new WPInv_Invoice();
128
+            $invoice->set_created_via( 'payment_form' );
129
+            return $invoice;
130
+        }
131
+
132
+        $invoice = $submission->get_invoice();
133 133
 
134
-		// Make sure that it is neither paid or refunded.
135
-		if ( $invoice->is_paid() || $invoice->is_refunded() ) {
136
-			wp_send_json_error( __( 'This invoice has already been paid for.', 'invoicing' ) );
137
-		}
134
+        // Make sure that it is neither paid or refunded.
135
+        if ( $invoice->is_paid() || $invoice->is_refunded() ) {
136
+            wp_send_json_error( __( 'This invoice has already been paid for.', 'invoicing' ) );
137
+        }
138 138
 
139
-		return $invoice;
140
-	}
139
+        return $invoice;
140
+    }
141 141
 
142
-	/**
143
-	 * Processes the submission invoice.
144
-	 *
145
-	 * @param WPInv_Invoice $invoice
146
-	 * @param GetPaid_Form_Item[] $items
147
-	 * @return WPInv_Invoice
148
-	 */
149
-	protected function process_submission_invoice( $invoice, $items ) {
142
+    /**
143
+     * Processes the submission invoice.
144
+     *
145
+     * @param WPInv_Invoice $invoice
146
+     * @param GetPaid_Form_Item[] $items
147
+     * @return WPInv_Invoice
148
+     */
149
+    protected function process_submission_invoice( $invoice, $items ) {
150 150
 
151
-		$submission = $this->payment_form_submission;
151
+        $submission = $this->payment_form_submission;
152 152
 
153
-		// Set-up the invoice details.
154
-		$invoice->set_email( sanitize_email( $submission->get_billing_email() ) );
155
-		$invoice->set_user_id( $this->get_submission_customer() );
156
-		$invoice->set_payment_form( absint( $submission->get_payment_form()->get_id() ) );
153
+        // Set-up the invoice details.
154
+        $invoice->set_email( sanitize_email( $submission->get_billing_email() ) );
155
+        $invoice->set_user_id( $this->get_submission_customer() );
156
+        $invoice->set_payment_form( absint( $submission->get_payment_form()->get_id() ) );
157 157
         $invoice->set_items( $items );
158 158
         $invoice->set_fees( $submission->get_fees() );
159 159
         $invoice->set_taxes( $submission->get_taxes() );
160
-		$invoice->set_discounts( $submission->get_discounts() );
161
-		$invoice->set_gateway( $submission->get_field( 'wpi-gateway' ) );
162
-		$invoice->set_currency( $submission->get_currency() );
160
+        $invoice->set_discounts( $submission->get_discounts() );
161
+        $invoice->set_gateway( $submission->get_field( 'wpi-gateway' ) );
162
+        $invoice->set_currency( $submission->get_currency() );
163 163
 
164
-		if ( $submission->has_shipping() ) {
165
-			$invoice->set_shipping( $submission->get_shipping() );
166
-		}
164
+        if ( $submission->has_shipping() ) {
165
+            $invoice->set_shipping( $submission->get_shipping() );
166
+        }
167 167
 
168
-		$address_confirmed = $submission->get_field( 'confirm-address' );
169
-		$invoice->set_address_confirmed( ! empty( $address_confirmed ) );
168
+        $address_confirmed = $submission->get_field( 'confirm-address' );
169
+        $invoice->set_address_confirmed( ! empty( $address_confirmed ) );
170 170
 
171
-		if ( $submission->has_discount_code() ) {
171
+        if ( $submission->has_discount_code() ) {
172 172
             $invoice->set_discount_code( $submission->get_discount_code() );
173
-		}
174
-
175
-		getpaid_maybe_add_default_address( $invoice );
176
-		return $invoice;
177
-	}
178
-
179
-	/**
180
-	 * Retrieves the submission's customer.
181
-	 *
182
-	 * @return int The customer id.
183
-	 */
184
-	protected function get_submission_customer() {
185
-		$submission = $this->payment_form_submission;
186
-
187
-		// If this is an existing invoice...
188
-		if ( $submission->has_invoice() ) {
189
-			return $submission->get_invoice()->get_user_id();
190
-		}
191
-
192
-		// (Maybe) create the user.
173
+        }
174
+
175
+        getpaid_maybe_add_default_address( $invoice );
176
+        return $invoice;
177
+    }
178
+
179
+    /**
180
+     * Retrieves the submission's customer.
181
+     *
182
+     * @return int The customer id.
183
+     */
184
+    protected function get_submission_customer() {
185
+        $submission = $this->payment_form_submission;
186
+
187
+        // If this is an existing invoice...
188
+        if ( $submission->has_invoice() ) {
189
+            return $submission->get_invoice()->get_user_id();
190
+        }
191
+
192
+        // (Maybe) create the user.
193 193
         $user = get_current_user_id();
194 194
 
195 195
         if ( empty( $user ) ) {
@@ -199,11 +199,11 @@  discard block
 block discarded – undo
199 199
         if ( empty( $user ) ) {
200 200
             $user = wpinv_create_user( $submission->get_billing_email() );
201 201
 
202
-			// (Maybe) send new user notification.
203
-			$should_send_notification = wpinv_get_option( 'disable_new_user_emails' );
204
-			if ( ! empty( $user ) && is_numeric( $user ) && apply_filters( 'getpaid_send_new_user_notification', empty( $should_send_notification ), $user ) ) {
205
-				wp_send_new_user_notifications( $user, 'user' );
206
-			}
202
+            // (Maybe) send new user notification.
203
+            $should_send_notification = wpinv_get_option( 'disable_new_user_emails' );
204
+            if ( ! empty( $user ) && is_numeric( $user ) && apply_filters( 'getpaid_send_new_user_notification', empty( $should_send_notification ), $user ) ) {
205
+                wp_send_new_user_notifications( $user, 'user' );
206
+            }
207 207
 }
208 208
 
209 209
         if ( is_wp_error( $user ) ) {
@@ -212,47 +212,47 @@  discard block
 block discarded – undo
212 212
 
213 213
         if ( is_numeric( $user ) ) {
214 214
             return $user;
215
-		}
215
+        }
216 216
 
217
-		return $user->ID;
217
+        return $user->ID;
218 218
 
219
-	}
219
+    }
220 220
 
221
-	/**
221
+    /**
222 222
      * Prepares submission data for saving to the database.
223 223
      *
224
-	 * @return array
224
+     * @return array
225 225
      */
226 226
     public function prepare_submission_data_for_saving() {
227 227
 
228
-		$submission = $this->payment_form_submission;
228
+        $submission = $this->payment_form_submission;
229 229
 
230
-		// Prepared submission details.
230
+        // Prepared submission details.
231 231
         $prepared = array(
232
-			'all'  => array(),
233
-			'meta' => array(),
234
-		);
232
+            'all'  => array(),
233
+            'meta' => array(),
234
+        );
235 235
 
236 236
         // Raw submission details.
237
-		$data     = $submission->get_data();
237
+        $data     = $submission->get_data();
238 238
 
239
-		// Loop through the submitted details.
239
+        // Loop through the submitted details.
240 240
         foreach ( $submission->get_payment_form()->get_elements() as $field ) {
241 241
 
242
-			// Skip premade fields.
242
+            // Skip premade fields.
243 243
             if ( ! empty( $field['premade'] ) ) {
244 244
                 continue;
245 245
             }
246 246
 
247
-			// Ensure address is provided.
248
-			if ( $field['type'] == 'address' ) {
247
+            // Ensure address is provided.
248
+            if ( $field['type'] == 'address' ) {
249 249
                 $address_type = isset( $field['address_type'] ) && 'shipping' === $field['address_type'] ? 'shipping' : 'billing';
250 250
 
251
-				foreach ( $field['fields'] as $address_field ) {
251
+                foreach ( $field['fields'] as $address_field ) {
252 252
 
253
-					if ( ! empty( $address_field['visible'] ) && ! empty( $address_field['required'] ) && '' === trim( $_POST[ $address_type ][ $address_field['name'] ] ) ) {
254
-						wp_send_json_error( __( 'Please fill all required fields.', 'invoicing' ) );
255
-					}
253
+                    if ( ! empty( $address_field['visible'] ) && ! empty( $address_field['required'] ) && '' === trim( $_POST[ $address_type ][ $address_field['name'] ] ) ) {
254
+                        wp_send_json_error( __( 'Please fill all required fields.', 'invoicing' ) );
255
+                    }
256 256
 }
257 257
 }
258 258
 
@@ -264,31 +264,31 @@  discard block
 block discarded – undo
264 264
             // Handle misc fields.
265 265
             if ( isset( $data[ $field['id'] ] ) ) {
266 266
 
267
-				// Uploads.
268
-				if ( $field['type'] == 'file_upload' ) {
269
-					$max_file_num = empty( $field['max_file_num'] ) ? 1 : absint( $field['max_file_num'] );
267
+                // Uploads.
268
+                if ( $field['type'] == 'file_upload' ) {
269
+                    $max_file_num = empty( $field['max_file_num'] ) ? 1 : absint( $field['max_file_num'] );
270 270
 
271
-					if ( count( $data[ $field['id'] ] ) > $max_file_num ) {
272
-						wp_send_json_error( __( 'Maximum number of allowed files exceeded.', 'invoicing' ) );
273
-					}
271
+                    if ( count( $data[ $field['id'] ] ) > $max_file_num ) {
272
+                        wp_send_json_error( __( 'Maximum number of allowed files exceeded.', 'invoicing' ) );
273
+                    }
274 274
 
275
-					$value = array();
275
+                    $value = array();
276 276
 
277
-					foreach ( $data[ $field['id'] ] as $url => $name ) {
278
-						$value[] = sprintf(
279
-							'<a href="%s" target="_blank">%s</a>',
280
-							esc_url_raw( $url ),
281
-							esc_html( $name )
282
-						);
283
-					}
277
+                    foreach ( $data[ $field['id'] ] as $url => $name ) {
278
+                        $value[] = sprintf(
279
+                            '<a href="%s" target="_blank">%s</a>',
280
+                            esc_url_raw( $url ),
281
+                            esc_html( $name )
282
+                        );
283
+                    }
284 284
 
285
-					$value = implode( ' | ', $value );
285
+                    $value = implode( ' | ', $value );
286 286
 
287
-				} elseif ( $field['type'] == 'checkbox' ) {
288
-					$value = isset( $data[ $field['id'] ] ) ? __( 'Yes', 'invoicing' ) : __( 'No', 'invoicing' );
289
-				} else {
290
-					$value = wp_kses_post( $data[ $field['id'] ] );
291
-				}
287
+                } elseif ( $field['type'] == 'checkbox' ) {
288
+                    $value = isset( $data[ $field['id'] ] ) ? __( 'Yes', 'invoicing' ) : __( 'No', 'invoicing' );
289
+                } else {
290
+                    $value = wp_kses_post( $data[ $field['id'] ] );
291
+                }
292 292
 
293 293
                 $label = $field['id'];
294 294
 
@@ -296,188 +296,188 @@  discard block
 block discarded – undo
296 296
                     $label = $field['label'];
297 297
                 }
298 298
 
299
-				if ( ! empty( $field['add_meta'] ) ) {
300
-					$prepared['meta'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
301
-				}
302
-				$prepared['all'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
299
+                if ( ! empty( $field['add_meta'] ) ) {
300
+                    $prepared['meta'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
301
+                }
302
+                $prepared['all'][ wpinv_clean( $label ) ] = wp_kses_post_deep( $value );
303 303
 
304 304
             }
305 305
 }
306 306
 
307
-		return $prepared;
307
+        return $prepared;
308 308
 
309
-	}
309
+    }
310 310
 
311
-	/**
311
+    /**
312 312
      * Retrieves address details.
313 313
      *
314
-	 * @return array
315
-	 * @param WPInv_Invoice $invoice
316
-	 * @param string $type
314
+     * @return array
315
+     * @param WPInv_Invoice $invoice
316
+     * @param string $type
317 317
      */
318 318
     public function prepare_address_details( $invoice, $type = 'billing' ) {
319 319
 
320
-		$data     = $this->payment_form_submission->get_data();
321
-		$type     = sanitize_key( $type );
322
-		$address  = array();
323
-		$prepared = array();
320
+        $data     = $this->payment_form_submission->get_data();
321
+        $type     = sanitize_key( $type );
322
+        $address  = array();
323
+        $prepared = array();
324 324
 
325
-		if ( ! empty( $data[ $type ] ) ) {
326
-			$address = $data[ $type ];
327
-		}
325
+        if ( ! empty( $data[ $type ] ) ) {
326
+            $address = $data[ $type ];
327
+        }
328 328
 
329
-		// Clean address details.
330
-		foreach ( $address as $key => $value ) {
331
-			$key             = sanitize_key( $key );
332
-			$key             = str_replace( 'wpinv_', '', $key );
333
-			$value           = wpinv_clean( $value );
334
-			$prepared[ $key ] = apply_filters( "getpaid_checkout_{$type}_address_$key", $value, $this->payment_form_submission, $invoice );
335
-		}
329
+        // Clean address details.
330
+        foreach ( $address as $key => $value ) {
331
+            $key             = sanitize_key( $key );
332
+            $key             = str_replace( 'wpinv_', '', $key );
333
+            $value           = wpinv_clean( $value );
334
+            $prepared[ $key ] = apply_filters( "getpaid_checkout_{$type}_address_$key", $value, $this->payment_form_submission, $invoice );
335
+        }
336 336
 
337
-		// Filter address details.
338
-		$prepared = apply_filters( "getpaid_checkout_{$type}_address", $prepared, $this->payment_form_submission, $invoice );
337
+        // Filter address details.
338
+        $prepared = apply_filters( "getpaid_checkout_{$type}_address", $prepared, $this->payment_form_submission, $invoice );
339 339
 
340
-		// Remove non-whitelisted values.
341
-		return array_filter( $prepared, 'getpaid_is_address_field_whitelisted', ARRAY_FILTER_USE_KEY );
340
+        // Remove non-whitelisted values.
341
+        return array_filter( $prepared, 'getpaid_is_address_field_whitelisted', ARRAY_FILTER_USE_KEY );
342 342
 
343
-	}
343
+    }
344 344
 
345
-	/**
345
+    /**
346 346
      * Prepares the billing details.
347 347
      *
348
-	 * @return array
349
-	 * @param WPInv_Invoice $invoice
348
+     * @return array
349
+     * @param WPInv_Invoice $invoice
350 350
      */
351 351
     protected function prepare_billing_info( &$invoice ) {
352 352
 
353
-		$billing_address = $this->prepare_address_details( $invoice, 'billing' );
353
+        $billing_address = $this->prepare_address_details( $invoice, 'billing' );
354 354
 
355
-		// Update the invoice with the billing details.
356
-		$invoice->set_props( $billing_address );
355
+        // Update the invoice with the billing details.
356
+        $invoice->set_props( $billing_address );
357 357
 
358
-	}
358
+    }
359 359
 
360
-	/**
360
+    /**
361 361
      * Prepares the shipping details.
362 362
      *
363
-	 * @return array
364
-	 * @param WPInv_Invoice $invoice
363
+     * @return array
364
+     * @param WPInv_Invoice $invoice
365 365
      */
366 366
     protected function prepare_shipping_info( $invoice ) {
367 367
 
368
-		$data = $this->payment_form_submission->get_data();
368
+        $data = $this->payment_form_submission->get_data();
369 369
 
370
-		if ( empty( $data['same-shipping-address'] ) ) {
371
-			return $this->prepare_address_details( $invoice, 'shipping' );
372
-		}
370
+        if ( empty( $data['same-shipping-address'] ) ) {
371
+            return $this->prepare_address_details( $invoice, 'shipping' );
372
+        }
373 373
 
374
-		return $this->prepare_address_details( $invoice, 'billing' );
374
+        return $this->prepare_address_details( $invoice, 'billing' );
375 375
 
376
-	}
376
+    }
377 377
 
378
-	/**
379
-	 * Confirms the submission is valid and send users to the gateway.
380
-	 *
381
-	 * @param WPInv_Invoice $invoice
382
-	 * @param array $prepared_payment_form_data
383
-	 * @param array $shipping
384
-	 */
385
-	protected function post_process_submission( $invoice, $prepared_payment_form_data, $shipping ) {
378
+    /**
379
+     * Confirms the submission is valid and send users to the gateway.
380
+     *
381
+     * @param WPInv_Invoice $invoice
382
+     * @param array $prepared_payment_form_data
383
+     * @param array $shipping
384
+     */
385
+    protected function post_process_submission( $invoice, $prepared_payment_form_data, $shipping ) {
386 386
 
387
-		// Ensure the invoice exists.
387
+        // Ensure the invoice exists.
388 388
         if ( ! $invoice->exists() ) {
389 389
             wp_send_json_error( __( 'An error occured while saving your invoice. Please try again.', 'invoicing' ) );
390 390
         }
391 391
 
392
-		// Save payment form data.
393
-		$prepared_payment_form_data = apply_filters( 'getpaid_prepared_payment_form_data', $prepared_payment_form_data, $invoice );
392
+        // Save payment form data.
393
+        $prepared_payment_form_data = apply_filters( 'getpaid_prepared_payment_form_data', $prepared_payment_form_data, $invoice );
394 394
         delete_post_meta( $invoice->get_id(), 'payment_form_data' );
395
-		delete_post_meta( $invoice->get_id(), 'additional_meta_data' );
396
-		if ( ! empty( $prepared_payment_form_data ) ) {
395
+        delete_post_meta( $invoice->get_id(), 'additional_meta_data' );
396
+        if ( ! empty( $prepared_payment_form_data ) ) {
397 397
 
398
-			if ( ! empty( $prepared_payment_form_data['all'] ) ) {
399
-				update_post_meta( $invoice->get_id(), 'payment_form_data', $prepared_payment_form_data['all'] );
400
-			}
398
+            if ( ! empty( $prepared_payment_form_data['all'] ) ) {
399
+                update_post_meta( $invoice->get_id(), 'payment_form_data', $prepared_payment_form_data['all'] );
400
+            }
401 401
 
402
-			if ( ! empty( $prepared_payment_form_data['meta'] ) ) {
403
-				update_post_meta( $invoice->get_id(), 'additional_meta_data', $prepared_payment_form_data['meta'] );
404
-			}
402
+            if ( ! empty( $prepared_payment_form_data['meta'] ) ) {
403
+                update_post_meta( $invoice->get_id(), 'additional_meta_data', $prepared_payment_form_data['meta'] );
404
+            }
405 405
 }
406 406
 
407
-		// Save payment form data.
408
-		$shipping = apply_filters( 'getpaid_checkout_shipping_details', $shipping, $this->payment_form_submission );
407
+        // Save payment form data.
408
+        $shipping = apply_filters( 'getpaid_checkout_shipping_details', $shipping, $this->payment_form_submission );
409 409
         if ( ! empty( $shipping ) ) {
410 410
             update_post_meta( $invoice->get_id(), 'shipping_address', $shipping );
411
-		}
411
+        }
412 412
 
413
-		// Backwards compatibility.
413
+        // Backwards compatibility.
414 414
         add_filter( 'wp_redirect', array( $this, 'send_redirect_response' ) );
415 415
 
416
-		$this->process_payment( $invoice );
416
+        $this->process_payment( $invoice );
417 417
 
418 418
         // If we are here, there was an error.
419
-		wpinv_send_back_to_checkout( $invoice );
419
+        wpinv_send_back_to_checkout( $invoice );
420 420
 
421
-	}
421
+    }
422 422
 
423
-	/**
424
-	 * Processes the actual payment.
425
-	 *
426
-	 * @param WPInv_Invoice $invoice
427
-	 */
428
-	protected function process_payment( $invoice ) {
423
+    /**
424
+     * Processes the actual payment.
425
+     *
426
+     * @param WPInv_Invoice $invoice
427
+     */
428
+    protected function process_payment( $invoice ) {
429 429
 
430
-		// Clear any checkout errors.
431
-		wpinv_clear_errors();
430
+        // Clear any checkout errors.
431
+        wpinv_clear_errors();
432 432
 
433
-		// No need to send free invoices to the gateway.
434
-		if ( $invoice->is_free() ) {
435
-			$this->process_free_payment( $invoice );
436
-		}
433
+        // No need to send free invoices to the gateway.
434
+        if ( $invoice->is_free() ) {
435
+            $this->process_free_payment( $invoice );
436
+        }
437 437
 
438
-		$submission = $this->payment_form_submission;
438
+        $submission = $this->payment_form_submission;
439 439
 
440
-		// Fires before sending to the gateway.
441
-		do_action( 'getpaid_checkout_before_gateway', $invoice, $submission );
440
+        // Fires before sending to the gateway.
441
+        do_action( 'getpaid_checkout_before_gateway', $invoice, $submission );
442 442
 
443
-		// Allow the sumission data to be modified before it is sent to the gateway.
444
-		$submission_data    = $submission->get_data();
445
-		$submission_gateway = apply_filters( 'getpaid_gateway_submission_gateway', $invoice->get_gateway(), $submission, $invoice );
446
-		$submission_data    = apply_filters( 'getpaid_gateway_submission_data', $submission_data, $submission, $invoice );
443
+        // Allow the sumission data to be modified before it is sent to the gateway.
444
+        $submission_data    = $submission->get_data();
445
+        $submission_gateway = apply_filters( 'getpaid_gateway_submission_gateway', $invoice->get_gateway(), $submission, $invoice );
446
+        $submission_data    = apply_filters( 'getpaid_gateway_submission_data', $submission_data, $submission, $invoice );
447 447
 
448
-		// Validate the currency.
449
-		if ( ! apply_filters( "getpaid_gateway_{$submission_gateway}_is_valid_for_currency", true, $invoice->get_currency() ) ) {
450
-			wpinv_set_error( 'invalid_currency', __( 'The chosen payment gateway does not support this currency', 'invoicing' ) );
451
-		}
448
+        // Validate the currency.
449
+        if ( ! apply_filters( "getpaid_gateway_{$submission_gateway}_is_valid_for_currency", true, $invoice->get_currency() ) ) {
450
+            wpinv_set_error( 'invalid_currency', __( 'The chosen payment gateway does not support this currency', 'invoicing' ) );
451
+        }
452 452
 
453
-		// Check to see if we have any errors.
454
-		if ( wpinv_get_errors() ) {
455
-			wpinv_send_back_to_checkout( $invoice );
456
-		}
453
+        // Check to see if we have any errors.
454
+        if ( wpinv_get_errors() ) {
455
+            wpinv_send_back_to_checkout( $invoice );
456
+        }
457 457
 
458
-		// Send info to the gateway for payment processing
459
-		do_action( "getpaid_gateway_$submission_gateway", $invoice, $submission_data, $submission );
458
+        // Send info to the gateway for payment processing
459
+        do_action( "getpaid_gateway_$submission_gateway", $invoice, $submission_data, $submission );
460 460
 
461
-		// Backwards compatibility.
462
-		wpinv_send_to_gateway( $submission_gateway, $invoice );
461
+        // Backwards compatibility.
462
+        wpinv_send_to_gateway( $submission_gateway, $invoice );
463 463
 
464
-	}
464
+    }
465 465
 
466
-	/**
467
-	 * Marks the invoice as paid in case the checkout is free.
468
-	 *
469
-	 * @param WPInv_Invoice $invoice
470
-	 */
471
-	protected function process_free_payment( $invoice ) {
466
+    /**
467
+     * Marks the invoice as paid in case the checkout is free.
468
+     *
469
+     * @param WPInv_Invoice $invoice
470
+     */
471
+    protected function process_free_payment( $invoice ) {
472 472
 
473
-		$invoice->set_gateway( 'none' );
474
-		$invoice->add_note( __( "This is a free invoice and won't be sent to the payment gateway", 'invoicing' ), false, false, true );
475
-		$invoice->mark_paid();
476
-		wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) );
473
+        $invoice->set_gateway( 'none' );
474
+        $invoice->add_note( __( "This is a free invoice and won't be sent to the payment gateway", 'invoicing' ), false, false, true );
475
+        $invoice->mark_paid();
476
+        wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) );
477 477
 
478
-	}
478
+    }
479 479
 
480
-	/**
480
+    /**
481 481
      * Sends a redrect response to payment details.
482 482
      *
483 483
      */
Please login to merge, or discard this patch.