Passed
Push — master ( 5a5a47...c0eaca )
by Brian
04:37
created
includes/payments/class-getpaid-payment-form-submission-refresh-prices.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -12,257 +12,257 @@
 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 31
             'is_free'       => ! $submission->should_collect_payment_details(),
32
-		);
33
-
34
-		$this->add_totals( $submission );
35
-		$this->add_texts( $submission );
36
-		$this->add_items( $submission );
37
-		$this->add_fees( $submission );
38
-		$this->add_discounts( $submission );
39
-		$this->add_taxes( $submission );
40
-		$this->add_gateways( $submission );
41
-
42
-	}
43
-
44
-	/**
45
-	 * Adds totals to a response for submission refresh prices.
46
-	 *
47
-	 * @param GetPaid_Payment_Form_Submission $submission
48
-	 */
49
-	public function add_totals( $submission ) {
50
-
51
-		$this->response = array_merge(
52
-			$this->response,
53
-			array(
54
-
55
-				'totals'        => array(
56
-					'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
57
-					'discount'  => $submission->format_amount( $submission->get_discount() ),
58
-					'fees'      => $submission->format_amount( $submission->get_fee() ),
59
-					'tax'       => $submission->format_amount( $submission->get_tax() ),
60
-					'total'     => $submission->format_amount( $submission->get_total() ),
61
-					'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
62
-				),
63
-
64
-				'recurring'     => array(
65
-					'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
66
-					'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
67
-					'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
68
-					'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
69
-					'total'     => $submission->format_amount( $submission->get_recurring_total() ),
70
-				),
71
-
72
-				'initial_amt'   => wpinv_round_amount( $submission->get_total(), null, true ),
73
-				'currency'      => $submission->get_currency(),
74
-
75
-			)
76
-		);
77
-
78
-	}
79
-
80
-	/**
81
-	 * Adds texts to a response for submission refresh prices.
82
-	 *
83
-	 * @param GetPaid_Payment_Form_Submission $submission
84
-	 */
85
-	public function add_texts( $submission ) {
86
-
87
-		$payable = $submission->format_amount( $submission->get_total() );
88
-
89
-		if ( $submission->has_recurring != 0 ) {
90
-
91
-			$recurring = new WPInv_Item( $submission->has_recurring );
92
-			$period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
93
-
94
-			if ( $submission->get_total() == $submission->get_recurring_total() ) {
95
-				$payable = "$payable / $period";
96
-			} else {
97
-				$payable = sprintf(
98
-					__( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
99
-					$submission->format_amount( $submission->get_total() ),
100
-					$submission->format_amount( $submission->get_recurring_total() ),
101
-					$period
102
-				);
103
-			}
104
-
105
-		}
106
-
107
-		$texts = array(
108
-			'.getpaid-checkout-total-payable' => $payable,
109
-		);
110
-
111
-		foreach ( $submission->get_items() as $item ) {
112
-			$item_id                                               = $item->get_id();
113
-			$initial_price                                         = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_sub_total(), $submission->get_discount_code(), false ) );
114
-			$recurring_price                                       = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_recurring_sub_total(), $submission->get_discount_code(), true ) );
115
-			$texts[".item-$item_id .getpaid-form-item-price-desc"] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
116
-		}
117
-
118
-		$this->response = array_merge( $this->response, array( 'texts' => $texts ) );
119
-
120
-	}
121
-
122
-	/**
123
-	 * Adds items to a response for submission refresh prices.
124
-	 *
125
-	 * @param GetPaid_Payment_Form_Submission $submission
126
-	 */
127
-	public function add_items( $submission ) {
128
-
129
-		// Add items.
130
-		$items = array();
32
+        );
33
+
34
+        $this->add_totals( $submission );
35
+        $this->add_texts( $submission );
36
+        $this->add_items( $submission );
37
+        $this->add_fees( $submission );
38
+        $this->add_discounts( $submission );
39
+        $this->add_taxes( $submission );
40
+        $this->add_gateways( $submission );
41
+
42
+    }
43
+
44
+    /**
45
+     * Adds totals to a response for submission refresh prices.
46
+     *
47
+     * @param GetPaid_Payment_Form_Submission $submission
48
+     */
49
+    public function add_totals( $submission ) {
50
+
51
+        $this->response = array_merge(
52
+            $this->response,
53
+            array(
54
+
55
+                'totals'        => array(
56
+                    'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
57
+                    'discount'  => $submission->format_amount( $submission->get_discount() ),
58
+                    'fees'      => $submission->format_amount( $submission->get_fee() ),
59
+                    'tax'       => $submission->format_amount( $submission->get_tax() ),
60
+                    'total'     => $submission->format_amount( $submission->get_total() ),
61
+                    'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
62
+                ),
63
+
64
+                'recurring'     => array(
65
+                    'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
66
+                    'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
67
+                    'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
68
+                    'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
69
+                    'total'     => $submission->format_amount( $submission->get_recurring_total() ),
70
+                ),
71
+
72
+                'initial_amt'   => wpinv_round_amount( $submission->get_total(), null, true ),
73
+                'currency'      => $submission->get_currency(),
74
+
75
+            )
76
+        );
77
+
78
+    }
79
+
80
+    /**
81
+     * Adds texts to a response for submission refresh prices.
82
+     *
83
+     * @param GetPaid_Payment_Form_Submission $submission
84
+     */
85
+    public function add_texts( $submission ) {
86
+
87
+        $payable = $submission->format_amount( $submission->get_total() );
88
+
89
+        if ( $submission->has_recurring != 0 ) {
90
+
91
+            $recurring = new WPInv_Item( $submission->has_recurring );
92
+            $period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
93
+
94
+            if ( $submission->get_total() == $submission->get_recurring_total() ) {
95
+                $payable = "$payable / $period";
96
+            } else {
97
+                $payable = sprintf(
98
+                    __( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
99
+                    $submission->format_amount( $submission->get_total() ),
100
+                    $submission->format_amount( $submission->get_recurring_total() ),
101
+                    $period
102
+                );
103
+            }
104
+
105
+        }
106
+
107
+        $texts = array(
108
+            '.getpaid-checkout-total-payable' => $payable,
109
+        );
131 110
 
132 111
         foreach ( $submission->get_items() as $item ) {
133
-			$item_id           = $item->get_id();
134
-			$items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
135
-		}
112
+            $item_id                                               = $item->get_id();
113
+            $initial_price                                         = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_sub_total(), $submission->get_discount_code(), false ) );
114
+            $recurring_price                                       = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_recurring_sub_total(), $submission->get_discount_code(), true ) );
115
+            $texts[".item-$item_id .getpaid-form-item-price-desc"] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
116
+        }
136 117
 
137
-		$this->response = array_merge(
138
-			$this->response,
139
-			array( 'items' => $items )
140
-		);
118
+        $this->response = array_merge( $this->response, array( 'texts' => $texts ) );
141 119
 
142
-	}
120
+    }
143 121
 
144
-	/**
145
-	 * Adds fees to a response for submission refresh prices.
146
-	 *
147
-	 * @param GetPaid_Payment_Form_Submission $submission
148
-	 */
149
-	public function add_fees( $submission ) {
122
+    /**
123
+     * Adds items to a response for submission refresh prices.
124
+     *
125
+     * @param GetPaid_Payment_Form_Submission $submission
126
+     */
127
+    public function add_items( $submission ) {
128
+
129
+        // Add items.
130
+        $items = array();
131
+
132
+        foreach ( $submission->get_items() as $item ) {
133
+            $item_id           = $item->get_id();
134
+            $items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
135
+        }
150 136
 
151
-		$fees = array();
137
+        $this->response = array_merge(
138
+            $this->response,
139
+            array( 'items' => $items )
140
+        );
141
+
142
+    }
143
+
144
+    /**
145
+     * Adds fees to a response for submission refresh prices.
146
+     *
147
+     * @param GetPaid_Payment_Form_Submission $submission
148
+     */
149
+    public function add_fees( $submission ) {
150
+
151
+        $fees = array();
152 152
 
153 153
         foreach ( $submission->get_fees() as $name => $data ) {
154
-			$fees[$name] = $submission->format_amount( $data['initial_fee'] );
155
-		}
154
+            $fees[$name] = $submission->format_amount( $data['initial_fee'] );
155
+        }
156 156
 
157
-		$this->response = array_merge(
158
-			$this->response,
159
-			array( 'fees' => $fees )
160
-		);
157
+        $this->response = array_merge(
158
+            $this->response,
159
+            array( 'fees' => $fees )
160
+        );
161 161
 
162
-	}
162
+    }
163 163
 
164
-	/**
165
-	 * Adds discounts to a response for submission refresh prices.
166
-	 *
167
-	 * @param GetPaid_Payment_Form_Submission $submission
168
-	 */
169
-	public function add_discounts( $submission ) {
164
+    /**
165
+     * Adds discounts to a response for submission refresh prices.
166
+     *
167
+     * @param GetPaid_Payment_Form_Submission $submission
168
+     */
169
+    public function add_discounts( $submission ) {
170 170
 
171
-		$discounts = array();
171
+        $discounts = array();
172 172
 
173 173
         foreach ( $submission->get_discounts() as $name => $data ) {
174
-			$discounts[$name] = $submission->format_amount( $data['initial_discount'] );
175
-		}
176
-
177
-		$this->response = array_merge(
178
-			$this->response,
179
-			array( 'discounts' => $discounts )
180
-		);
174
+            $discounts[$name] = $submission->format_amount( $data['initial_discount'] );
175
+        }
181 176
 
182
-	}
177
+        $this->response = array_merge(
178
+            $this->response,
179
+            array( 'discounts' => $discounts )
180
+        );
183 181
 
184
-	/**
185
-	 * Adds taxes to a response for submission refresh prices.
186
-	 *
187
-	 * @param GetPaid_Payment_Form_Submission $submission
188
-	 */
189
-	public function add_taxes( $submission ) {
182
+    }
190 183
 
191
-		$taxes  = array();
192
-		$markup = '';
184
+    /**
185
+     * Adds taxes to a response for submission refresh prices.
186
+     *
187
+     * @param GetPaid_Payment_Form_Submission $submission
188
+     */
189
+    public function add_taxes( $submission ) {
190
+
191
+        $taxes  = array();
192
+        $markup = '';
193 193
         foreach ( $submission->get_taxes() as $name => $data ) {
194
-			$name          = sanitize_text_field( $name );
195
-			$amount        = $submission->format_amount( $data['initial_tax'] );
196
-			$taxes[$name]  = $amount;
197
-			$markup       .= "<small class='form-text'>$name : $amount</small>";
198
-		}
194
+            $name          = sanitize_text_field( $name );
195
+            $amount        = $submission->format_amount( $data['initial_tax'] );
196
+            $taxes[$name]  = $amount;
197
+            $markup       .= "<small class='form-text'>$name : $amount</small>";
198
+        }
199 199
 
200
-		if ( wpinv_display_individual_tax_rates() && ! empty( $taxes ) ) {
201
-			$this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
202
-		}
200
+        if ( wpinv_display_individual_tax_rates() && ! empty( $taxes ) ) {
201
+            $this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
202
+        }
203 203
 
204
-		$this->response = array_merge(
205
-			$this->response,
206
-			array( 'taxes' => $taxes )
207
-		);
204
+        $this->response = array_merge(
205
+            $this->response,
206
+            array( 'taxes' => $taxes )
207
+        );
208 208
 
209
-	}
209
+    }
210 210
 
211
-	/**
212
-	 * Adds gateways to a response for submission refresh prices.
213
-	 *
214
-	 * @param GetPaid_Payment_Form_Submission $submission
215
-	 */
216
-	public function add_gateways( $submission ) {
211
+    /**
212
+     * Adds gateways to a response for submission refresh prices.
213
+     *
214
+     * @param GetPaid_Payment_Form_Submission $submission
215
+     */
216
+    public function add_gateways( $submission ) {
217 217
 
218
-		$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
218
+        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
219 219
 
220
-		if ( $this->response['has_recurring'] ) {
220
+        if ( $this->response['has_recurring'] ) {
221 221
 
222
-			foreach ( $gateways as $i => $gateway ) {
222
+            foreach ( $gateways as $i => $gateway ) {
223 223
 
224
-				if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
225
-					unset( $gateways[ $i ] );
226
-				}
224
+                if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
225
+                    unset( $gateways[ $i ] );
226
+                }
227 227
 
228
-			}
228
+            }
229 229
 
230
-		}
230
+        }
231 231
 
232 232
 
233
-		$gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
234
-		$this->response = array_merge(
235
-			$this->response,
236
-			array( 'gateways' => $gateways )
237
-		);
233
+        $gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
234
+        $this->response = array_merge(
235
+            $this->response,
236
+            array( 'gateways' => $gateways )
237
+        );
238 238
 
239
-	}
239
+    }
240 240
 
241
-	/**
242
-	 * Standardizes prices.
243
-	 *
244
-	 * @param int $item_id
245
-	 * @param float $item_total
246
-	 * @param string $discount_code
247
-	 * @param bool $recurring
248
-	 */
249
-	public function standardize_price( $item_id, $item_total, $discount_code, $recurring = false ) {
241
+    /**
242
+     * Standardizes prices.
243
+     *
244
+     * @param int $item_id
245
+     * @param float $item_total
246
+     * @param string $discount_code
247
+     * @param bool $recurring
248
+     */
249
+    public function standardize_price( $item_id, $item_total, $discount_code, $recurring = false ) {
250 250
 
251
-		$standardadized_price = $item_total;
251
+        $standardadized_price = $item_total;
252 252
 
253
-		// Do we have a $discount_code?
254
-		if ( ! empty( $discount_code ) ) {
253
+        // Do we have a $discount_code?
254
+        if ( ! empty( $discount_code ) ) {
255 255
 
256
-			$discount = new WPInv_Discount( $discount_code );
256
+            $discount = new WPInv_Discount( $discount_code );
257 257
 
258
-			if ( $discount->exists() && $discount->is_valid_for_items( $item_id ) && ( ! $recurring || $discount->is_recurring() ) ) {
259
-				$standardadized_price = $item_total - $discount->get_discounted_amount( $item_total );
260
-			}
258
+            if ( $discount->exists() && $discount->is_valid_for_items( $item_id ) && ( ! $recurring || $discount->is_recurring() ) ) {
259
+                $standardadized_price = $item_total - $discount->get_discounted_amount( $item_total );
260
+            }
261 261
 
262
-		}
262
+        }
263 263
 
264
-    	return max( 0, $standardadized_price );
264
+        return max( 0, $standardadized_price );
265 265
 
266
-	}
266
+    }
267 267
 
268 268
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-discount.php 1 patch
Indentation   +154 added lines, -154 removed lines patch added patch discarded remove patch
@@ -12,162 +12,162 @@
 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 Exception( __( 'Invalid or expired discount code', 'invoicing' ) );
68
-		}
69
-
70
-		// Exceeded limit.
71
-		if ( $discount->has_exceeded_limit() ) {
72
-			throw new Exception( __( 'This discount code has been used up', 'invoicing' ) );
73
-		}
74
-
75
-		// Validate usages.
76
-		$this->validate_single_use_discount( $submission, $discount );
77
-
78
-		// Validate amount.
79
-		$this->validate_discount_amount( $submission, $discount, $amount );
80
-
81
-		// Save the discount.
82
-		$this->discounts['discount_code'] = $this->calculate_discount( $submission, $discount );
83
-	}
84
-
85
-	/**
86
-	 * Validates a single use discount.
87
-	 *
88
-	 * @param WPInv_Discount                  $discount
89
-	 * @return bool
90
-	 */
91
-	public function is_discount_active(  $discount ) {
92
-		return $discount->exists() && $discount->is_active() && $discount->has_started() && ! $discount->is_expired();
93
-	}
94
-
95
-	/**
96
-	 * Returns a user's id or email.
97
-	 *
98
-	 * @param string $email
99
-	 * @return int|string|false
100
-	 */
101
-	public function get_user_id_or_email( $email ) {
102
-
103
-		if ( is_user_logged_in() ) {
104
-			return get_current_user_id();
105
-		}
106
-
107
-		return empty( $email ) ? false : sanitize_email( $email );
108
-	}
109
-
110
-	/**
111
-	 * Validates a single use discount.
112
-	 *
113
-	 * @param GetPaid_Payment_Form_Submission $submission
114
-	 * @param WPInv_Discount                  $discount
115
-	 */
116
-	public function validate_single_use_discount( $submission, $discount ) {
117
-
118
-		// Abort if it is not a single use discount.
119
-		if ( ! $discount->is_single_use() ) {
120
-			return;
121
-		}
122
-
123
-		// Ensure there is a valid billing email.
124
-		$user = $this->get_user_id_or_email( $submission->get_billing_email() );
125
-
126
-		if ( empty( $user ) ) {
127
-			throw new Exception( __( 'You need to either log in or enter your billing email before applying this discount', 'invoicing' ) );
128
-		}
129
-
130
-		// Has the user used this discount code before?
131
-		if ( ! $discount->is_valid_for_user( $user ) ) {
132
-			throw new Exception( __( 'You have already used this discount', 'invoicing' ) );
133
-		}
134
-
135
-	}
136
-
137
-	/**
138
-	 * Validates the discount's amount.
139
-	 *
140
-	 * @param GetPaid_Payment_Form_Submission $submission
141
-	 * @param WPInv_Discount         $discount
142
-	 * @param float                  $amount
143
-	 */
144
-	public function validate_discount_amount( $submission, $discount, $amount ) {
145
-
146
-		// Validate minimum amount.
147
-		if ( ! $discount->is_minimum_amount_met( $amount ) ) {
148
-			$min = wpinv_price( $discount->get_minimum_total(), $submission->get_currency() );
149
-			throw new Exception( sprintf( __( 'The minimum total for using this discount is %s', 'invoicing' ), $min ) );
150
-		}
151
-
152
-		// Validate the maximum amount.
153
-		if ( ! $discount->is_maximum_amount_met( $amount ) ) {
154
-			$max = wpinv_price( $discount->get_maximum_total(), $submission->get_currency() );
155
-			throw new Exception( sprintf( __( 'The maximum total for using this discount is %s', 'invoicing' ), $max ) );
156
-		}
157
-
158
-	}
159
-
160
-	/**
161
-	 * Calculates the discount code's amount.
162
-	 *
163
-	 * Ensure that the discount exists and has been validated before calling this method.
164
-	 *
165
-	 * @param GetPaid_Payment_Form_Submission $submission
166
-	 * @param WPInv_Discount                  $discount
167
-	 * @return array
168
-	 */
169
-	public function calculate_discount( $submission, $discount ) {
170
-		return getpaid_calculate_invoice_discount( $submission, $discount );
171
-	}
67
+            throw new Exception( __( 'Invalid or expired discount code', 'invoicing' ) );
68
+        }
69
+
70
+        // Exceeded limit.
71
+        if ( $discount->has_exceeded_limit() ) {
72
+            throw new Exception( __( 'This discount code has been used up', 'invoicing' ) );
73
+        }
74
+
75
+        // Validate usages.
76
+        $this->validate_single_use_discount( $submission, $discount );
77
+
78
+        // Validate amount.
79
+        $this->validate_discount_amount( $submission, $discount, $amount );
80
+
81
+        // Save the discount.
82
+        $this->discounts['discount_code'] = $this->calculate_discount( $submission, $discount );
83
+    }
84
+
85
+    /**
86
+     * Validates a single use discount.
87
+     *
88
+     * @param WPInv_Discount                  $discount
89
+     * @return bool
90
+     */
91
+    public function is_discount_active(  $discount ) {
92
+        return $discount->exists() && $discount->is_active() && $discount->has_started() && ! $discount->is_expired();
93
+    }
94
+
95
+    /**
96
+     * Returns a user's id or email.
97
+     *
98
+     * @param string $email
99
+     * @return int|string|false
100
+     */
101
+    public function get_user_id_or_email( $email ) {
102
+
103
+        if ( is_user_logged_in() ) {
104
+            return get_current_user_id();
105
+        }
106
+
107
+        return empty( $email ) ? false : sanitize_email( $email );
108
+    }
109
+
110
+    /**
111
+     * Validates a single use discount.
112
+     *
113
+     * @param GetPaid_Payment_Form_Submission $submission
114
+     * @param WPInv_Discount                  $discount
115
+     */
116
+    public function validate_single_use_discount( $submission, $discount ) {
117
+
118
+        // Abort if it is not a single use discount.
119
+        if ( ! $discount->is_single_use() ) {
120
+            return;
121
+        }
122
+
123
+        // Ensure there is a valid billing email.
124
+        $user = $this->get_user_id_or_email( $submission->get_billing_email() );
125
+
126
+        if ( empty( $user ) ) {
127
+            throw new Exception( __( 'You need to either log in or enter your billing email before applying this discount', 'invoicing' ) );
128
+        }
129
+
130
+        // Has the user used this discount code before?
131
+        if ( ! $discount->is_valid_for_user( $user ) ) {
132
+            throw new Exception( __( 'You have already used this discount', 'invoicing' ) );
133
+        }
134
+
135
+    }
136
+
137
+    /**
138
+     * Validates the discount's amount.
139
+     *
140
+     * @param GetPaid_Payment_Form_Submission $submission
141
+     * @param WPInv_Discount         $discount
142
+     * @param float                  $amount
143
+     */
144
+    public function validate_discount_amount( $submission, $discount, $amount ) {
145
+
146
+        // Validate minimum amount.
147
+        if ( ! $discount->is_minimum_amount_met( $amount ) ) {
148
+            $min = wpinv_price( $discount->get_minimum_total(), $submission->get_currency() );
149
+            throw new Exception( sprintf( __( 'The minimum total for using this discount is %s', 'invoicing' ), $min ) );
150
+        }
151
+
152
+        // Validate the maximum amount.
153
+        if ( ! $discount->is_maximum_amount_met( $amount ) ) {
154
+            $max = wpinv_price( $discount->get_maximum_total(), $submission->get_currency() );
155
+            throw new Exception( sprintf( __( 'The maximum total for using this discount is %s', 'invoicing' ), $max ) );
156
+        }
157
+
158
+    }
159
+
160
+    /**
161
+     * Calculates the discount code's amount.
162
+     *
163
+     * Ensure that the discount exists and has been validated before calling this method.
164
+     *
165
+     * @param GetPaid_Payment_Form_Submission $submission
166
+     * @param WPInv_Discount                  $discount
167
+     * @return array
168
+     */
169
+    public function calculate_discount( $submission, $discount ) {
170
+        return getpaid_calculate_invoice_discount( $submission, $discount );
171
+    }
172 172
 
173 173
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-taxes.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -12,228 +12,228 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Payment_Form_Submission_Taxes {
14 14
 
15
-	/**
16
-	 * Submission taxes.
17
-	 * @var array
18
-	 */
19
-	public $taxes = array();
20
-
21
-	/**
22
-	 * Whether or not we should skip the taxes.
23
-	 * @var bool
24
-	 */
25
-	protected $skip_taxes = false;
15
+    /**
16
+     * Submission taxes.
17
+     * @var array
18
+     */
19
+    public $taxes = array();
20
+
21
+    /**
22
+     * Whether or not we should skip the taxes.
23
+     * @var bool
24
+     */
25
+    protected $skip_taxes = false;
26
+
27
+    /**
28
+     * Class constructor
29
+     *
30
+     * @param GetPaid_Payment_Form_Submission $submission
31
+     */
32
+    public function __construct( $submission ) {
33
+
34
+        // Validate VAT number.
35
+        $this->validate_vat( $submission );
36
+
37
+        if ( $this->skip_taxes ) {
38
+            return;
39
+        }
40
+
41
+        foreach ( $submission->get_items() as $item ) {
42
+            $this->process_item_tax( $item, $submission );
43
+        }
44
+
45
+        // Process any existing invoice taxes.
46
+        if ( $submission->has_invoice() ) {
47
+            $this->taxes = array_replace( $submission->get_invoice()->get_taxes(), $this->taxes );
48
+        }
49
+
50
+    }
51
+
52
+    /**
53
+     * Maybe process tax.
54
+     *
55
+     * @since 1.0.19
56
+     * @param GetPaid_Form_Item $item
57
+     * @param GetPaid_Payment_Form_Submission $submission
58
+     */
59
+    public function process_item_tax( $item, $submission ) {
60
+
61
+        $rates    = getpaid_get_item_tax_rates( $item, $submission->country, $submission->state );
62
+        $rates    = getpaid_filter_item_tax_rates( $item, $rates );
63
+        $taxes    = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, false ), $rates );
64
+        $r_taxes  = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, true ), $rates );
65
+
66
+        foreach ( $taxes as $name => $amount ) {
67
+            $recurring = isset( $r_taxes[ $name ] ) ? $r_taxes[ $name ] : 0;
68
+            $tax       = getpaid_prepare_item_tax( $item, $name, $amount, $recurring );
69
+
70
+            if ( ! isset( $this->taxes[ $name ] ) ) {
71
+                $this->taxes[ $name ] = $tax;
72
+                continue;
73
+            }
74
+
75
+            $this->taxes[ $name ]['initial_tax']   += $tax['initial_tax'];
76
+            $this->taxes[ $name ]['recurring_tax'] += $tax['recurring_tax'];
77
+
78
+        }
79
+
80
+    }
81
+
82
+    /**
83
+     * Checks if the submission has a digital item.
84
+     *
85
+     * @param GetPaid_Payment_Form_Submission $submission
86
+     * @since 1.0.19
87
+     * @return bool
88
+     */
89
+    public function has_digital_item( $submission ) {
90
+
91
+        foreach ( $submission->get_items() as $item ) {
92
+
93
+            if ( 'digital' == $item->get_vat_rule() ) {
94
+                return true;
95
+            }
96
+
97
+        }
98
+
99
+        return false;
100
+    }
101
+
102
+    /**
103
+     * Checks if this is an eu store.
104
+     *
105
+     * @since 1.0.19
106
+     * @return bool
107
+     */
108
+    public static function is_eu_store() {
109
+        return self::is_eu_country( wpinv_get_default_country() );
110
+    }
26 111
 
27 112
     /**
28
-	 * Class constructor
29
-	 *
30
-	 * @param GetPaid_Payment_Form_Submission $submission
31
-	 */
32
-	public function __construct( $submission ) {
33
-
34
-		// Validate VAT number.
35
-		$this->validate_vat( $submission );
36
-
37
-		if ( $this->skip_taxes ) {
38
-			return;
39
-		}
40
-
41
-		foreach ( $submission->get_items() as $item ) {
42
-			$this->process_item_tax( $item, $submission );
43
-		}
44
-
45
-		// Process any existing invoice taxes.
46
-		if ( $submission->has_invoice() ) {
47
-			$this->taxes = array_replace( $submission->get_invoice()->get_taxes(), $this->taxes );
48
-		}
49
-
50
-	}
51
-
52
-	/**
53
-	 * Maybe process tax.
54
-	 *
55
-	 * @since 1.0.19
56
-	 * @param GetPaid_Form_Item $item
57
-	 * @param GetPaid_Payment_Form_Submission $submission
58
-	 */
59
-	public function process_item_tax( $item, $submission ) {
60
-
61
-		$rates    = getpaid_get_item_tax_rates( $item, $submission->country, $submission->state );
62
-		$rates    = getpaid_filter_item_tax_rates( $item, $rates );
63
-		$taxes    = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, false ), $rates );
64
-		$r_taxes  = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, true ), $rates );
65
-
66
-		foreach ( $taxes as $name => $amount ) {
67
-			$recurring = isset( $r_taxes[ $name ] ) ? $r_taxes[ $name ] : 0;
68
-			$tax       = getpaid_prepare_item_tax( $item, $name, $amount, $recurring );
69
-
70
-			if ( ! isset( $this->taxes[ $name ] ) ) {
71
-				$this->taxes[ $name ] = $tax;
72
-				continue;
73
-			}
74
-
75
-			$this->taxes[ $name ]['initial_tax']   += $tax['initial_tax'];
76
-			$this->taxes[ $name ]['recurring_tax'] += $tax['recurring_tax'];
77
-
78
-		}
79
-
80
-	}
81
-
82
-	/**
83
-	 * Checks if the submission has a digital item.
84
-	 *
85
-	 * @param GetPaid_Payment_Form_Submission $submission
86
-	 * @since 1.0.19
87
-	 * @return bool
88
-	 */
89
-	public function has_digital_item( $submission ) {
90
-
91
-		foreach ( $submission->get_items() as $item ) {
92
-
93
-			if ( 'digital' == $item->get_vat_rule() ) {
94
-				return true;
95
-			}
96
-
97
-		}
98
-
99
-		return false;
100
-	}
101
-
102
-	/**
103
-	 * Checks if this is an eu store.
104
-	 *
105
-	 * @since 1.0.19
106
-	 * @return bool
107
-	 */
108
-	public static function is_eu_store() {
109
-		return self::is_eu_country( wpinv_get_default_country() );
110
-	}
111
-
112
-	/**
113
-	 * Checks if this is an eu country.
114
-	 *
115
-	 * @param string $country
116
-	 * @since 1.0.19
117
-	 * @return bool
118
-	 */
119
-	public static function is_eu_country( $country ) {
120
-		return getpaid_is_eu_state( $country ) || getpaid_is_gst_country( $country );
121
-	}
122
-
123
-	/**
124
-	 * Checks if this is an eu purchase.
125
-	 *
126
-	 * @param string $customer_country
127
-	 * @since 1.0.19
128
-	 * @return bool
129
-	 */
130
-	public static function is_eu_transaction( $customer_country ) {
131
-		return self::is_eu_country( $customer_country ) && self::is_eu_store();
132
-	}
133
-
134
-	/**
135
-	 * Retrieves the vat number.
136
-	 *
137
-	 * @param GetPaid_Payment_Form_Submission $submission
138
-	 * @since 1.0.19
139
-	 * @return string
140
-	 */
141
-	public function get_vat_number( $submission ) {
142
-
143
-		// Retrieve from the posted number.
144
-		$vat_number = $submission->get_field( 'wpinv_vat_number', 'billing' );
145
-		if ( ! is_null( $vat_number ) ) {
146
-			return wpinv_clean( $vat_number );
147
-		}
148
-
149
-		return $submission->has_invoice() ? $submission->get_invoice()->get_vat_number() : '';
150
-	}
151
-
152
-	/**
153
-	 * Retrieves the company.
154
-	 *
155
-	 * @param GetPaid_Payment_Form_Submission $submission
156
-	 * @since 1.0.19
157
-	 * @return string
158
-	 */
159
-	public function get_company( $submission ) {
160
-
161
-		// Retrieve from the posted data.
162
-		$company = $submission->get_field( 'wpinv_company', 'billing' );
163
-		if ( ! empty( $company ) ) {
164
-			return wpinv_clean( $company );
165
-		}
166
-
167
-		// Retrieve from the invoice.
168
-		return $submission->has_invoice() ? $submission->get_invoice()->get_company() : '';
169
-	}
170
-
171
-	/**
172
-	 * Checks if we require a VAT number.
173
-	 *
174
-	 * @param bool $ip_in_eu Whether the customer IP is from the EU
175
-	 * @param bool $country_in_eu Whether the customer country is from the EU
176
-	 * @since 1.0.19
177
-	 * @return string
178
-	 */
179
-	public function requires_vat( $ip_in_eu, $country_in_eu ) {
180
-
181
-		$prevent_b2c = wpinv_get_option( 'vat_prevent_b2c_purchase' );
182
-		$prevent_b2c = ! empty( $prevent_b2c );
183
-		$is_eu       = $ip_in_eu || $country_in_eu;
184
-
185
-		return $prevent_b2c && $is_eu;
186
-	}
187
-
188
-	/**
189
-	 * Validate VAT data.
190
-	 *
191
-	 * @param GetPaid_Payment_Form_Submission $submission
192
-	 * @since 1.0.19
193
-	 */
194
-	public function validate_vat( $submission ) {
195
-
196
-		$in_eu = $this->is_eu_transaction( $submission->country );
197
-
198
-		// Abort if we are not validating vat numbers.
199
-		if ( ! $in_eu ) {
113
+     * Checks if this is an eu country.
114
+     *
115
+     * @param string $country
116
+     * @since 1.0.19
117
+     * @return bool
118
+     */
119
+    public static function is_eu_country( $country ) {
120
+        return getpaid_is_eu_state( $country ) || getpaid_is_gst_country( $country );
121
+    }
122
+
123
+    /**
124
+     * Checks if this is an eu purchase.
125
+     *
126
+     * @param string $customer_country
127
+     * @since 1.0.19
128
+     * @return bool
129
+     */
130
+    public static function is_eu_transaction( $customer_country ) {
131
+        return self::is_eu_country( $customer_country ) && self::is_eu_store();
132
+    }
133
+
134
+    /**
135
+     * Retrieves the vat number.
136
+     *
137
+     * @param GetPaid_Payment_Form_Submission $submission
138
+     * @since 1.0.19
139
+     * @return string
140
+     */
141
+    public function get_vat_number( $submission ) {
142
+
143
+        // Retrieve from the posted number.
144
+        $vat_number = $submission->get_field( 'wpinv_vat_number', 'billing' );
145
+        if ( ! is_null( $vat_number ) ) {
146
+            return wpinv_clean( $vat_number );
147
+        }
148
+
149
+        return $submission->has_invoice() ? $submission->get_invoice()->get_vat_number() : '';
150
+    }
151
+
152
+    /**
153
+     * Retrieves the company.
154
+     *
155
+     * @param GetPaid_Payment_Form_Submission $submission
156
+     * @since 1.0.19
157
+     * @return string
158
+     */
159
+    public function get_company( $submission ) {
160
+
161
+        // Retrieve from the posted data.
162
+        $company = $submission->get_field( 'wpinv_company', 'billing' );
163
+        if ( ! empty( $company ) ) {
164
+            return wpinv_clean( $company );
165
+        }
166
+
167
+        // Retrieve from the invoice.
168
+        return $submission->has_invoice() ? $submission->get_invoice()->get_company() : '';
169
+    }
170
+
171
+    /**
172
+     * Checks if we require a VAT number.
173
+     *
174
+     * @param bool $ip_in_eu Whether the customer IP is from the EU
175
+     * @param bool $country_in_eu Whether the customer country is from the EU
176
+     * @since 1.0.19
177
+     * @return string
178
+     */
179
+    public function requires_vat( $ip_in_eu, $country_in_eu ) {
180
+
181
+        $prevent_b2c = wpinv_get_option( 'vat_prevent_b2c_purchase' );
182
+        $prevent_b2c = ! empty( $prevent_b2c );
183
+        $is_eu       = $ip_in_eu || $country_in_eu;
184
+
185
+        return $prevent_b2c && $is_eu;
186
+    }
187
+
188
+    /**
189
+     * Validate VAT data.
190
+     *
191
+     * @param GetPaid_Payment_Form_Submission $submission
192
+     * @since 1.0.19
193
+     */
194
+    public function validate_vat( $submission ) {
195
+
196
+        $in_eu = $this->is_eu_transaction( $submission->country );
197
+
198
+        // Abort if we are not validating vat numbers.
199
+        if ( ! $in_eu ) {
200 200
             return;
201
-		}
201
+        }
202 202
 
203
-		// Prepare variables.
204
-		$vat_number  = $this->get_vat_number( $submission );
205
-		$ip_country  = getpaid_get_ip_country();
203
+        // Prepare variables.
204
+        $vat_number  = $this->get_vat_number( $submission );
205
+        $ip_country  = getpaid_get_ip_country();
206 206
         $is_eu       = $this->is_eu_country( $submission->country );
207 207
         $is_ip_eu    = $this->is_eu_country( $ip_country );
208 208
 
209
-		// Maybe abort early for initial fetches.
210
-		if ( $submission->is_initial_fetch() && empty( $vat_number ) ) {
211
-			return;
212
-		}
209
+        // Maybe abort early for initial fetches.
210
+        if ( $submission->is_initial_fetch() && empty( $vat_number ) ) {
211
+            return;
212
+        }
213 213
 
214
-		// If we're preventing business to consumer purchases,
215
-		if ( $this->requires_vat( $is_ip_eu, $is_eu ) && empty( $vat_number ) ) {
214
+        // If we're preventing business to consumer purchases,
215
+        if ( $this->requires_vat( $is_ip_eu, $is_eu ) && empty( $vat_number ) ) {
216 216
 
217
-			// Ensure that a vat number has been specified.
218
-			throw new Exception(
219
-				__( 'Please enter your VAT number to verify your purchase is by an EU business.', 'invoicing' )
220
-			);
217
+            // Ensure that a vat number has been specified.
218
+            throw new Exception(
219
+                __( 'Please enter your VAT number to verify your purchase is by an EU business.', 'invoicing' )
220
+            );
221 221
 
222
-		}
222
+        }
223 223
 
224
-		if ( empty( $vat_number ) ) {
225
-			return;
226
-		}
224
+        if ( empty( $vat_number ) ) {
225
+            return;
226
+        }
227 227
 
228
-		if ( wpinv_should_validate_vat_number() && ! wpinv_validate_vat_number( $vat_number, $submission->country ) ) {
229
-			throw new Exception( __( 'Your VAT number is invalid', 'invoicing' ) );
230
-		}
228
+        if ( wpinv_should_validate_vat_number() && ! wpinv_validate_vat_number( $vat_number, $submission->country ) ) {
229
+            throw new Exception( __( 'Your VAT number is invalid', 'invoicing' ) );
230
+        }
231 231
 
232
-		if (  wpinv_default_billing_country() == $submission->country && 'vat_too' == wpinv_get_option( 'vat_same_country_rule', 'vat_too' ) ) {
233
-			return;
234
-		}
232
+        if (  wpinv_default_billing_country() == $submission->country && 'vat_too' == wpinv_get_option( 'vat_same_country_rule', 'vat_too' ) ) {
233
+            return;
234
+        }
235 235
 
236
-		$this->skip_taxes = true;
237
-	}
236
+        $this->skip_taxes = true;
237
+    }
238 238
 
239 239
 }
Please login to merge, or discard this patch.
includes/payments/class-getpaid-form-item.php 1 patch
Indentation   +363 added lines, -363 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,234 +88,234 @@  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 ( empty( $quantity ) || 1 > $quantity ) {
174
-			$quantity = 1;
175
-		}
176
-
177
-		if ( 'view' == $context ) {
178
-			return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
179
-		}
180
-
181
-		return $quantity;
182
-
183
-	}
184
-
185
-	/**
186
-	 * Get the item meta data.
187
-	 *
188
-	 * @since 1.0.19
189
-	 * @param  string $context View or edit context.
190
-	 * @return meta
191
-	 */
192
-	public function get_item_meta( $context = 'view' ) {
193
-		$meta = $this->meta;
194
-
195
-		if ( 'view' == $context ) {
196
-			return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
197
-		}
198
-
199
-		return $meta;
200
-
201
-	}
202
-
203
-	/**
204
-	 * Returns whether or not customers can update the item quantity.
205
-	 *
206
-	 * @since 1.0.19
207
-	 * @param  string $context View or edit context.
208
-	 * @return bool
209
-	 */
210
-	public function get_allow_quantities( $context = 'view' ) {
211
-		$allow_quantities = (bool) $this->allow_quantities;
212
-
213
-		if ( 'view' == $context ) {
214
-			return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
215
-		}
216
-
217
-		return $allow_quantities;
218
-
219
-	}
220
-
221
-	/**
222
-	 * Returns whether or not the item is required.
223
-	 *
224
-	 * @since 1.0.19
225
-	 * @param  string $context View or edit context.
226
-	 * @return bool
227
-	 */
228
-	public function get_is_required( $context = 'view' ) {
229
-		$is_required = (bool) $this->is_required;
230
-
231
-		if ( 'view' == $context ) {
232
-			return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
233
-		}
234
-
235
-		return $is_required;
236
-
237
-	}
238
-
239
-	/**
240
-	 * Prepares form data for use.
241
-	 *
242
-	 * @since 1.0.19
243
-	 * @return array
244
-	 */
245
-	public function prepare_data_for_use( $required = null ) {
246
-
247
-		$required = is_null( $required ) ? $this->is_required() : $required;
248
-		return array(
249
-			'title'            => strip_tags( $this->get_name() ),
250
-			'id'               => $this->get_id(),
251
-			'price'            => $this->get_price(),
252
-			'recurring'        => $this->is_recurring(),
253
-			'description'      => $this->get_description(),
254
-			'allow_quantities' => $this->allows_quantities(),
255
-			'required'         => $required,
256
-		);
257
-
258
-	}
259
-
260
-	/**
261
-	 * Prepares form data for ajax use.
262
-	 *
263
-	 * @since 1.0.19
264
-	 * @return array
265
-	 */
266
-	public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
267
-
268
-		$description = getpaid_item_recurring_price_help_text( $this, $currency );
269
-
270
-		if ( $description ) {
271
-			$description = "<div class='getpaid-subscription-help-text'>$description</div>";
272
-		}
273
-
274
-		$price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
275
-		$subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
276
-		return array(
277
-			'id'     => $this->get_id(),
278
-			'texts'  => array(
279
-				'item-name'        => sanitize_text_field( $this->get_name() ),
280
-				'item-description' => wp_kses_post( $this->get_description() ) . $description,
281
-				'item-quantity'    => floatval( $this->get_quantity() ),
282
-				'item-price'       => wpinv_price( $price, $currency ),
283
-				'item-total'       => wpinv_price( $subtotal, $currency ),
284
-			),
285
-			'inputs' => array(
286
-				'item-id'          => $this->get_id(),
287
-				'item-name'        => sanitize_text_field( $this->get_name() ),
288
-				'item-description' => wp_kses_post( $this->get_description() ),
289
-				'item-quantity'    => floatval( $this->get_quantity() ),
290
-				'item-price'       => $price,
291
-			)
292
-		);
293
-
294
-	}
295
-
296
-	/**
297
-	 * Prepares form data for saving (cart_details).
298
-	 *
299
-	 * @since 1.0.19
300
-	 * @return array
301
-	 */
302
-	public function prepare_data_for_saving() {
303
-
304
-		return array(
305
-			'post_id'           => $this->invoice_id,
306
-			'item_id'           => $this->get_id(),
307
-			'item_name'         => sanitize_text_field( $this->get_raw_name() ),
308
-			'item_description'  => $this->get_description(),
309
-			'tax'               => $this->item_tax,
310
-			'item_price'        => $this->get_price(),
311
-			'quantity'          => (float) $this->get_quantity(),
312
-			'discount'          => $this->item_discount,
313
-			'subtotal'          => $this->get_sub_total(),
314
-			'price'             => $this->get_sub_total() + $this->item_tax - $this->item_discount,
315
-			'meta'              => $this->get_item_meta(),
316
-		);
317
-
318
-	}
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 ( empty( $quantity ) || 1 > $quantity ) {
174
+            $quantity = 1;
175
+        }
176
+
177
+        if ( 'view' == $context ) {
178
+            return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
179
+        }
180
+
181
+        return $quantity;
182
+
183
+    }
184
+
185
+    /**
186
+     * Get the item meta data.
187
+     *
188
+     * @since 1.0.19
189
+     * @param  string $context View or edit context.
190
+     * @return meta
191
+     */
192
+    public function get_item_meta( $context = 'view' ) {
193
+        $meta = $this->meta;
194
+
195
+        if ( 'view' == $context ) {
196
+            return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
197
+        }
198
+
199
+        return $meta;
200
+
201
+    }
202
+
203
+    /**
204
+     * Returns whether or not customers can update the item quantity.
205
+     *
206
+     * @since 1.0.19
207
+     * @param  string $context View or edit context.
208
+     * @return bool
209
+     */
210
+    public function get_allow_quantities( $context = 'view' ) {
211
+        $allow_quantities = (bool) $this->allow_quantities;
212
+
213
+        if ( 'view' == $context ) {
214
+            return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
215
+        }
216
+
217
+        return $allow_quantities;
218
+
219
+    }
220
+
221
+    /**
222
+     * Returns whether or not the item is required.
223
+     *
224
+     * @since 1.0.19
225
+     * @param  string $context View or edit context.
226
+     * @return bool
227
+     */
228
+    public function get_is_required( $context = 'view' ) {
229
+        $is_required = (bool) $this->is_required;
230
+
231
+        if ( 'view' == $context ) {
232
+            return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
233
+        }
234
+
235
+        return $is_required;
236
+
237
+    }
238
+
239
+    /**
240
+     * Prepares form data for use.
241
+     *
242
+     * @since 1.0.19
243
+     * @return array
244
+     */
245
+    public function prepare_data_for_use( $required = null ) {
246
+
247
+        $required = is_null( $required ) ? $this->is_required() : $required;
248
+        return array(
249
+            'title'            => strip_tags( $this->get_name() ),
250
+            'id'               => $this->get_id(),
251
+            'price'            => $this->get_price(),
252
+            'recurring'        => $this->is_recurring(),
253
+            'description'      => $this->get_description(),
254
+            'allow_quantities' => $this->allows_quantities(),
255
+            'required'         => $required,
256
+        );
257
+
258
+    }
259
+
260
+    /**
261
+     * Prepares form data for ajax use.
262
+     *
263
+     * @since 1.0.19
264
+     * @return array
265
+     */
266
+    public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
267
+
268
+        $description = getpaid_item_recurring_price_help_text( $this, $currency );
269
+
270
+        if ( $description ) {
271
+            $description = "<div class='getpaid-subscription-help-text'>$description</div>";
272
+        }
273
+
274
+        $price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
275
+        $subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
276
+        return array(
277
+            'id'     => $this->get_id(),
278
+            'texts'  => array(
279
+                'item-name'        => sanitize_text_field( $this->get_name() ),
280
+                'item-description' => wp_kses_post( $this->get_description() ) . $description,
281
+                'item-quantity'    => floatval( $this->get_quantity() ),
282
+                'item-price'       => wpinv_price( $price, $currency ),
283
+                'item-total'       => wpinv_price( $subtotal, $currency ),
284
+            ),
285
+            'inputs' => array(
286
+                'item-id'          => $this->get_id(),
287
+                'item-name'        => sanitize_text_field( $this->get_name() ),
288
+                'item-description' => wp_kses_post( $this->get_description() ),
289
+                'item-quantity'    => floatval( $this->get_quantity() ),
290
+                'item-price'       => $price,
291
+            )
292
+        );
293
+
294
+    }
295
+
296
+    /**
297
+     * Prepares form data for saving (cart_details).
298
+     *
299
+     * @since 1.0.19
300
+     * @return array
301
+     */
302
+    public function prepare_data_for_saving() {
303
+
304
+        return array(
305
+            'post_id'           => $this->invoice_id,
306
+            'item_id'           => $this->get_id(),
307
+            'item_name'         => sanitize_text_field( $this->get_raw_name() ),
308
+            'item_description'  => $this->get_description(),
309
+            'tax'               => $this->item_tax,
310
+            'item_price'        => $this->get_price(),
311
+            'quantity'          => (float) $this->get_quantity(),
312
+            'discount'          => $this->item_discount,
313
+            'subtotal'          => $this->get_sub_total(),
314
+            'price'             => $this->get_sub_total() + $this->item_tax - $this->item_discount,
315
+            'meta'              => $this->get_item_meta(),
316
+        );
317
+
318
+    }
319 319
 
320 320
     /*
321 321
 	|--------------------------------------------------------------------------
@@ -327,70 +327,70 @@  discard block
 block discarded – undo
327 327
 	| object.
328 328
     */
329 329
 
330
-	/**
331
-	 * Set the item qantity.
332
-	 *
333
-	 * @since 1.0.19
334
-	 * @param  float $quantity The item quantity.
335
-	 */
336
-	public function set_quantity( $quantity ) {
337
-
338
-		if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
339
-			$quantity = 1;
340
-		}
341
-
342
-		$this->quantity = (float) $quantity;
343
-
344
-	}
345
-
346
-	/**
347
-	 * Set the item meta data.
348
-	 *
349
-	 * @since 1.0.19
350
-	 * @param  array $meta The item meta data.
351
-	 */
352
-	public function set_item_meta( $meta ) {
353
-		$this->meta = maybe_unserialize( $meta );
354
-	}
355
-
356
-	/**
357
-	 * Set whether or not the quantities are allowed.
358
-	 *
359
-	 * @since 1.0.19
360
-	 * @param  bool $allow_quantities
361
-	 */
362
-	public function set_allow_quantities( $allow_quantities ) {
363
-		$this->allow_quantities = (bool) $allow_quantities;
364
-	}
365
-
366
-	/**
367
-	 * Set whether or not the item is required.
368
-	 *
369
-	 * @since 1.0.19
370
-	 * @param  bool $is_required
371
-	 */
372
-	public function set_is_required( $is_required ) {
373
-		$this->is_required = (bool) $is_required;
374
-	}
375
-
376
-	/**
377
-	 * Sets the custom item description.
378
-	 *
379
-	 * @since 1.0.19
380
-	 * @param  string $description
381
-	 */
382
-	public function set_custom_description( $description ) {
383
-		$this->custom_description = $description;
384
-	}
330
+    /**
331
+     * Set the item qantity.
332
+     *
333
+     * @since 1.0.19
334
+     * @param  float $quantity The item quantity.
335
+     */
336
+    public function set_quantity( $quantity ) {
337
+
338
+        if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
339
+            $quantity = 1;
340
+        }
341
+
342
+        $this->quantity = (float) $quantity;
343
+
344
+    }
345
+
346
+    /**
347
+     * Set the item meta data.
348
+     *
349
+     * @since 1.0.19
350
+     * @param  array $meta The item meta data.
351
+     */
352
+    public function set_item_meta( $meta ) {
353
+        $this->meta = maybe_unserialize( $meta );
354
+    }
355
+
356
+    /**
357
+     * Set whether or not the quantities are allowed.
358
+     *
359
+     * @since 1.0.19
360
+     * @param  bool $allow_quantities
361
+     */
362
+    public function set_allow_quantities( $allow_quantities ) {
363
+        $this->allow_quantities = (bool) $allow_quantities;
364
+    }
365
+
366
+    /**
367
+     * Set whether or not the item is required.
368
+     *
369
+     * @since 1.0.19
370
+     * @param  bool $is_required
371
+     */
372
+    public function set_is_required( $is_required ) {
373
+        $this->is_required = (bool) $is_required;
374
+    }
375
+
376
+    /**
377
+     * Sets the custom item description.
378
+     *
379
+     * @since 1.0.19
380
+     * @param  string $description
381
+     */
382
+    public function set_custom_description( $description ) {
383
+        $this->custom_description = $description;
384
+    }
385 385
 
386 386
     /**
387 387
      * We do not want to save items to the database.
388 388
      * 
389
-	 * @return int item id
389
+     * @return int item id
390 390
      */
391 391
     public function save( $data = array() ) {
392 392
         return $this->get_id();
393
-	}
393
+    }
394 394
 
395 395
     /*
396 396
 	|--------------------------------------------------------------------------
@@ -402,23 +402,23 @@  discard block
 block discarded – undo
402 402
 	*/
403 403
 
404 404
     /**
405
-	 * Checks whether the item has enabled dynamic pricing.
406
-	 *
407
-	 * @since 1.0.19
408
-	 * @return bool
409
-	 */
410
-	public function is_required() {
405
+     * Checks whether the item has enabled dynamic pricing.
406
+     *
407
+     * @since 1.0.19
408
+     * @return bool
409
+     */
410
+    public function is_required() {
411 411
         return (bool) $this->get_is_required();
412
-	}
413
-
414
-	/**
415
-	 * Checks whether users can edit the quantities.
416
-	 *
417
-	 * @since 1.0.19
418
-	 * @return bool
419
-	 */
420
-	public function allows_quantities() {
412
+    }
413
+
414
+    /**
415
+     * Checks whether users can edit the quantities.
416
+     *
417
+     * @since 1.0.19
418
+     * @return bool
419
+     */
420
+    public function allows_quantities() {
421 421
         return (bool) $this->get_allow_quantities();
422
-	}
422
+    }
423 423
 
424 424
 }
Please login to merge, or discard this patch.