Passed
Push — master ( 9d2707...de43a2 )
by Brian
04:26
created
vendor/ayecode/wp-ayecode-ui/includes/class-aui.php 1 patch
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit; // Exit if accessed directly
4
+    exit; // Exit if accessed directly
5 5
 }
6 6
 
7 7
 /**
@@ -11,231 +11,231 @@  discard block
 block discarded – undo
11 11
  */
12 12
 class AUI {
13 13
 
14
-	/**
15
-	 * Holds the class instance.
16
-	 *
17
-	 * @since 1.0.0
18
-	 * @var null
19
-	 */
20
-	private static $instance = null;
21
-
22
-	/**
23
-	 * Holds the current AUI version number.
24
-	 *
25
-	 * @var string $ver The current version number.
26
-	 */
27
-	public static $ver = '0.1.33';
28
-
29
-	public static $options = null;
30
-
31
-	/**
32
-	 * There can be only one.
33
-	 *
34
-	 * @since 1.0.0
35
-	 * @return AUI|null
36
-	 */
37
-	public static function instance() {
38
-		if ( self::$instance == null ) {
39
-			self::$instance = new AUI();
40
-		}
41
-
42
-		return self::$instance;
43
-	}
44
-
45
-	/**
46
-	 * AUI constructor.
47
-	 *
48
-	 * @since 1.0.0
49
-	 */
50
-	private function __construct() {
51
-		if ( function_exists( "__autoload" ) ) {
52
-			spl_autoload_register( "__autoload" );
53
-		}
54
-		spl_autoload_register( array( $this, 'autoload' ) );
55
-
56
-		// load options
57
-		self::$options = get_option('aui_options');
58
-	}
59
-
60
-	/**
61
-	 * Autoload any components on the fly.
62
-	 *
63
-	 * @since 1.0.0
64
-	 *
65
-	 * @param $classname
66
-	 */
67
-	private function autoload( $classname ) {
68
-		$class     = str_replace( '_', '-', strtolower( $classname ) );
69
-		$file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
-		if ( $file_path && is_readable( $file_path ) ) {
71
-			include_once( $file_path );
72
-		}
73
-	}
74
-
75
-	/**
76
-	 * Get the AUI options.
77
-	 *
78
-	 * @param $option
79
-	 *
80
-	 * @return string|void
81
-	 */
82
-	public function get_option( $option ){
83
-		$result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
-
85
-		if ( ! $result && $option) {
86
-			if( $option == 'color_primary' ){
87
-				$result = AUI_PRIMARY_COLOR;
88
-			}elseif( $option == 'color_secondary' ){
89
-				$result = AUI_SECONDARY_COLOR;
90
-			}
91
-		}
92
-		return $result;
93
-	}
94
-
95
-	public function render( $items = array() ) {
96
-		$output = '';
97
-
98
-		if ( ! empty( $items ) ) {
99
-			foreach ( $items as $args ) {
100
-				$render = isset( $args['render'] ) ? $args['render'] : '';
101
-				if ( $render && method_exists( __CLASS__, $render ) ) {
102
-					$output .= $this->$render( $args );
103
-				}
104
-			}
105
-		}
106
-
107
-		return $output;
108
-	}
109
-
110
-	/**
111
-	 * Render and return a bootstrap alert component.
112
-	 *
113
-	 * @since 1.0.0
114
-	 *
115
-	 * @param array $args
116
-	 *
117
-	 * @return string The rendered component.
118
-	 */
119
-	public function alert( $args = array() ) {
120
-		return AUI_Component_Alert::get( $args );
121
-	}
122
-
123
-	/**
124
-	 * Render and return a bootstrap input component.
125
-	 *
126
-	 * @since 1.0.0
127
-	 *
128
-	 * @param array $args
129
-	 *
130
-	 * @return string The rendered component.
131
-	 */
132
-	public function input( $args = array() ) {
133
-		return AUI_Component_Input::input( $args );
134
-	}
135
-
136
-	/**
137
-	 * Render and return a bootstrap textarea component.
138
-	 *
139
-	 * @since 1.0.0
140
-	 *
141
-	 * @param array $args
142
-	 *
143
-	 * @return string The rendered component.
144
-	 */
145
-	public function textarea( $args = array() ) {
146
-		return AUI_Component_Input::textarea( $args );
147
-	}
148
-
149
-	/**
150
-	 * Render and return a bootstrap button component.
151
-	 *
152
-	 * @since 1.0.0
153
-	 *
154
-	 * @param array $args
155
-	 *
156
-	 * @return string The rendered component.
157
-	 */
158
-	public function button( $args = array() ) {
159
-		return AUI_Component_Button::get( $args );
160
-	}
161
-
162
-	/**
163
-	 * Render and return a bootstrap button component.
164
-	 *
165
-	 * @since 1.0.0
166
-	 *
167
-	 * @param array $args
168
-	 *
169
-	 * @return string The rendered component.
170
-	 */
171
-	public function badge( $args = array() ) {
172
-		$defaults = array(
173
-			'class' => 'badge badge-primary align-middle',
174
-		);
175
-
176
-		// maybe set type
177
-		if ( empty( $args['href'] ) ) {
178
-			$defaults['type'] = 'badge';
179
-		}
180
-
181
-		/**
182
-		 * Parse incoming $args into an array and merge it with $defaults
183
-		 */
184
-		$args = wp_parse_args( $args, $defaults );
185
-
186
-		return AUI_Component_Button::get( $args );
187
-	}
188
-
189
-	/**
190
-	 * Render and return a bootstrap dropdown component.
191
-	 *
192
-	 * @since 1.0.0
193
-	 *
194
-	 * @param array $args
195
-	 *
196
-	 * @return string The rendered component.
197
-	 */
198
-	public function dropdown( $args = array() ) {
199
-		return AUI_Component_Dropdown::get( $args );
200
-	}
201
-
202
-	/**
203
-	 * Render and return a bootstrap select component.
204
-	 *
205
-	 * @since 1.0.0
206
-	 *
207
-	 * @param array $args
208
-	 *
209
-	 * @return string The rendered component.
210
-	 */
211
-	public function select( $args = array() ) {
212
-		return AUI_Component_Input::select( $args );
213
-	}
214
-
215
-	/**
216
-	 * Render and return a bootstrap radio component.
217
-	 *
218
-	 * @since 1.0.0
219
-	 *
220
-	 * @param array $args
221
-	 *
222
-	 * @return string The rendered component.
223
-	 */
224
-	public function radio( $args = array() ) {
225
-		return AUI_Component_Input::radio( $args );
226
-	}
227
-
228
-	/**
229
-	 * Render and return a bootstrap pagination component.
230
-	 *
231
-	 * @since 1.0.0
232
-	 *
233
-	 * @param array $args
234
-	 *
235
-	 * @return string The rendered component.
236
-	 */
237
-	public function pagination( $args = array() ) {
238
-		return AUI_Component_Pagination::get( $args );
239
-	}
14
+    /**
15
+     * Holds the class instance.
16
+     *
17
+     * @since 1.0.0
18
+     * @var null
19
+     */
20
+    private static $instance = null;
21
+
22
+    /**
23
+     * Holds the current AUI version number.
24
+     *
25
+     * @var string $ver The current version number.
26
+     */
27
+    public static $ver = '0.1.33';
28
+
29
+    public static $options = null;
30
+
31
+    /**
32
+     * There can be only one.
33
+     *
34
+     * @since 1.0.0
35
+     * @return AUI|null
36
+     */
37
+    public static function instance() {
38
+        if ( self::$instance == null ) {
39
+            self::$instance = new AUI();
40
+        }
41
+
42
+        return self::$instance;
43
+    }
44
+
45
+    /**
46
+     * AUI constructor.
47
+     *
48
+     * @since 1.0.0
49
+     */
50
+    private function __construct() {
51
+        if ( function_exists( "__autoload" ) ) {
52
+            spl_autoload_register( "__autoload" );
53
+        }
54
+        spl_autoload_register( array( $this, 'autoload' ) );
55
+
56
+        // load options
57
+        self::$options = get_option('aui_options');
58
+    }
59
+
60
+    /**
61
+     * Autoload any components on the fly.
62
+     *
63
+     * @since 1.0.0
64
+     *
65
+     * @param $classname
66
+     */
67
+    private function autoload( $classname ) {
68
+        $class     = str_replace( '_', '-', strtolower( $classname ) );
69
+        $file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
+        if ( $file_path && is_readable( $file_path ) ) {
71
+            include_once( $file_path );
72
+        }
73
+    }
74
+
75
+    /**
76
+     * Get the AUI options.
77
+     *
78
+     * @param $option
79
+     *
80
+     * @return string|void
81
+     */
82
+    public function get_option( $option ){
83
+        $result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
+
85
+        if ( ! $result && $option) {
86
+            if( $option == 'color_primary' ){
87
+                $result = AUI_PRIMARY_COLOR;
88
+            }elseif( $option == 'color_secondary' ){
89
+                $result = AUI_SECONDARY_COLOR;
90
+            }
91
+        }
92
+        return $result;
93
+    }
94
+
95
+    public function render( $items = array() ) {
96
+        $output = '';
97
+
98
+        if ( ! empty( $items ) ) {
99
+            foreach ( $items as $args ) {
100
+                $render = isset( $args['render'] ) ? $args['render'] : '';
101
+                if ( $render && method_exists( __CLASS__, $render ) ) {
102
+                    $output .= $this->$render( $args );
103
+                }
104
+            }
105
+        }
106
+
107
+        return $output;
108
+    }
109
+
110
+    /**
111
+     * Render and return a bootstrap alert component.
112
+     *
113
+     * @since 1.0.0
114
+     *
115
+     * @param array $args
116
+     *
117
+     * @return string The rendered component.
118
+     */
119
+    public function alert( $args = array() ) {
120
+        return AUI_Component_Alert::get( $args );
121
+    }
122
+
123
+    /**
124
+     * Render and return a bootstrap input component.
125
+     *
126
+     * @since 1.0.0
127
+     *
128
+     * @param array $args
129
+     *
130
+     * @return string The rendered component.
131
+     */
132
+    public function input( $args = array() ) {
133
+        return AUI_Component_Input::input( $args );
134
+    }
135
+
136
+    /**
137
+     * Render and return a bootstrap textarea component.
138
+     *
139
+     * @since 1.0.0
140
+     *
141
+     * @param array $args
142
+     *
143
+     * @return string The rendered component.
144
+     */
145
+    public function textarea( $args = array() ) {
146
+        return AUI_Component_Input::textarea( $args );
147
+    }
148
+
149
+    /**
150
+     * Render and return a bootstrap button component.
151
+     *
152
+     * @since 1.0.0
153
+     *
154
+     * @param array $args
155
+     *
156
+     * @return string The rendered component.
157
+     */
158
+    public function button( $args = array() ) {
159
+        return AUI_Component_Button::get( $args );
160
+    }
161
+
162
+    /**
163
+     * Render and return a bootstrap button component.
164
+     *
165
+     * @since 1.0.0
166
+     *
167
+     * @param array $args
168
+     *
169
+     * @return string The rendered component.
170
+     */
171
+    public function badge( $args = array() ) {
172
+        $defaults = array(
173
+            'class' => 'badge badge-primary align-middle',
174
+        );
175
+
176
+        // maybe set type
177
+        if ( empty( $args['href'] ) ) {
178
+            $defaults['type'] = 'badge';
179
+        }
180
+
181
+        /**
182
+         * Parse incoming $args into an array and merge it with $defaults
183
+         */
184
+        $args = wp_parse_args( $args, $defaults );
185
+
186
+        return AUI_Component_Button::get( $args );
187
+    }
188
+
189
+    /**
190
+     * Render and return a bootstrap dropdown component.
191
+     *
192
+     * @since 1.0.0
193
+     *
194
+     * @param array $args
195
+     *
196
+     * @return string The rendered component.
197
+     */
198
+    public function dropdown( $args = array() ) {
199
+        return AUI_Component_Dropdown::get( $args );
200
+    }
201
+
202
+    /**
203
+     * Render and return a bootstrap select component.
204
+     *
205
+     * @since 1.0.0
206
+     *
207
+     * @param array $args
208
+     *
209
+     * @return string The rendered component.
210
+     */
211
+    public function select( $args = array() ) {
212
+        return AUI_Component_Input::select( $args );
213
+    }
214
+
215
+    /**
216
+     * Render and return a bootstrap radio component.
217
+     *
218
+     * @since 1.0.0
219
+     *
220
+     * @param array $args
221
+     *
222
+     * @return string The rendered component.
223
+     */
224
+    public function radio( $args = array() ) {
225
+        return AUI_Component_Input::radio( $args );
226
+    }
227
+
228
+    /**
229
+     * Render and return a bootstrap pagination component.
230
+     *
231
+     * @since 1.0.0
232
+     *
233
+     * @param array $args
234
+     *
235
+     * @return string The rendered component.
236
+     */
237
+    public function pagination( $args = array() ) {
238
+        return AUI_Component_Pagination::get( $args );
239
+    }
240 240
 
241 241
 }
242 242
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,40 +7,40 @@
 block discarded – undo
7 7
  * Bail if we are not in WP.
8 8
  */
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit;
10
+    exit;
11 11
 }
12 12
 
13 13
 /**
14 14
  * Set the version only if its the current newest while loading.
15 15
  */
16 16
 add_action('after_setup_theme', function () {
17
-	global $ayecode_ui_version,$ayecode_ui_file_key;
18
-	$this_version = "0.1.33";
19
-	if(version_compare($this_version , $ayecode_ui_version, '>')){
20
-		$ayecode_ui_version = $this_version ;
21
-		$ayecode_ui_file_key = wp_hash( __FILE__ );
22
-	}
17
+    global $ayecode_ui_version,$ayecode_ui_file_key;
18
+    $this_version = "0.1.33";
19
+    if(version_compare($this_version , $ayecode_ui_version, '>')){
20
+        $ayecode_ui_version = $this_version ;
21
+        $ayecode_ui_file_key = wp_hash( __FILE__ );
22
+    }
23 23
 },0);
24 24
 
25 25
 /**
26 26
  * Load this version of WP Bootstrap Settings only if the file hash is the current one.
27 27
  */
28 28
 add_action('after_setup_theme', function () {
29
-	global $ayecode_ui_file_key;
30
-	if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
-		include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
-		include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
-	}
29
+    global $ayecode_ui_file_key;
30
+    if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
+        include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
+        include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
+    }
34 34
 },1);
35 35
 
36 36
 /**
37 37
  * Add the function that calls the class.
38 38
  */
39 39
 if(!function_exists('aui')){
40
-	function aui(){
41
-		if(!class_exists("AUI",false)){
42
-			return false;
43
-		}
44
-		return AUI::instance();
45
-	}
40
+    function aui(){
41
+        if(!class_exists("AUI",false)){
42
+            return false;
43
+        }
44
+        return AUI::instance();
45
+    }
46 46
 }
47 47
\ No newline at end of file
Please login to merge, or discard this patch.
includes/payments/class-getpaid-form-item.php 1 patch
Indentation   +354 added lines, -354 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,60 +10,60 @@  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 int
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
-	 * Item tax.
63
-	 *
64
-	 * @var float
65
-	 */
66
-	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 int
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
+     * Item tax.
63
+     *
64
+     * @var float
65
+     */
66
+    public $item_tax = 0;
67 67
 
68 68
     /*
69 69
 	|--------------------------------------------------------------------------
@@ -81,232 +81,232 @@  discard block
 block discarded – undo
81 81
     */
82 82
 
83 83
     /**
84
-	 * Get the item name.
85
-	 *
86
-	 * @since 1.0.19
87
-	 * @param  string $context View or edit context.
88
-	 * @return string
89
-	 */
90
-	public function get_name( $context = 'view' ) {
91
-		$name = parent::get_name( $context );
92
-		return $name . wpinv_get_item_suffix( $this );
93
-	}
94
-
95
-	/**
96
-	 * Get the item name without a suffix.
97
-	 *
98
-	 * @since 1.0.19
99
-	 * @param  string $context View or edit context.
100
-	 * @return string
101
-	 */
102
-	public function get_raw_name( $context = 'view' ) {
103
-		return parent::get_name( $context );
104
-	}
105
-
106
-	/**
107
-	 * Get the item description.
108
-	 *
109
-	 * @since 1.0.19
110
-	 * @param  string $context View or edit context.
111
-	 * @return string
112
-	 */
113
-	public function get_description( $context = 'view' ) {
114
-
115
-		if ( isset( $this->custom_description ) ) {
116
-			return $this->custom_description;
117
-		}
118
-
119
-		return parent::get_description( $context );
120
-	}
121
-
122
-	/**
123
-	 * Returns the sub total.
124
-	 *
125
-	 * @since 1.0.19
126
-	 * @param  string $context View or edit context.
127
-	 * @return float
128
-	 */
129
-	public function get_sub_total( $context = 'view' ) {
130
-		return $this->get_quantity( $context ) * $this->get_initial_price( $context );
131
-	}
132
-
133
-	/**
134
-	 * Returns the recurring sub total.
135
-	 *
136
-	 * @since 1.0.19
137
-	 * @param  string $context View or edit context.
138
-	 * @return float
139
-	 */
140
-	public function get_recurring_sub_total( $context = 'view' ) {
141
-
142
-		if ( $this->is_recurring() ) {
143
-			return $this->get_quantity( $context ) * $this->get_price( $context );
144
-		}
145
-
146
-		return 0;
147
-	}
148
-
149
-	/**
150
-	 * @deprecated
151
-	 */
152
-	public function get_qantity( $context = 'view' ) {
153
-		return $this->get_quantity( $context );
154
-	}
155
-
156
-	/**
157
-	 * Get the item quantity.
158
-	 *
159
-	 * @since 1.0.19
160
-	 * @param  string $context View or edit context.
161
-	 * @return int
162
-	 */
163
-	public function get_quantity( $context = 'view' ) {
164
-		$quantity = (int) $this->quantity;
165
-
166
-		if ( empty( $quantity ) || 1 > $quantity ) {
167
-			$quantity = 1;
168
-		}
169
-
170
-		if ( 'view' == $context ) {
171
-			return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
172
-		}
173
-
174
-		return $quantity;
175
-
176
-	}
177
-
178
-	/**
179
-	 * Get the item meta data.
180
-	 *
181
-	 * @since 1.0.19
182
-	 * @param  string $context View or edit context.
183
-	 * @return meta
184
-	 */
185
-	public function get_item_meta( $context = 'view' ) {
186
-		$meta = $this->meta;
187
-
188
-		if ( 'view' == $context ) {
189
-			return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
190
-		}
191
-
192
-		return $meta;
193
-
194
-	}
195
-
196
-	/**
197
-	 * Returns whether or not customers can update the item quantity.
198
-	 *
199
-	 * @since 1.0.19
200
-	 * @param  string $context View or edit context.
201
-	 * @return bool
202
-	 */
203
-	public function get_allow_quantities( $context = 'view' ) {
204
-		$allow_quantities = (bool) $this->allow_quantities;
205
-
206
-		if ( 'view' == $context ) {
207
-			return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
208
-		}
209
-
210
-		return $allow_quantities;
211
-
212
-	}
213
-
214
-	/**
215
-	 * Returns whether or not the item is required.
216
-	 *
217
-	 * @since 1.0.19
218
-	 * @param  string $context View or edit context.
219
-	 * @return bool
220
-	 */
221
-	public function get_is_required( $context = 'view' ) {
222
-		$is_required = (bool) $this->is_required;
223
-
224
-		if ( 'view' == $context ) {
225
-			return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
226
-		}
227
-
228
-		return $is_required;
229
-
230
-	}
231
-
232
-	/**
233
-	 * Prepares form data for use.
234
-	 *
235
-	 * @since 1.0.19
236
-	 * @return array
237
-	 */
238
-	public function prepare_data_for_use( $required = null ) {
239
-
240
-		$required = is_null( $required ) ? $this->is_required() : $required;
241
-		return array(
242
-			'title'            => strip_tags( $this->get_name() ),
243
-			'id'               => $this->get_id(),
244
-			'price'            => $this->get_price(),
245
-			'recurring'        => $this->is_recurring(),
246
-			'description'      => $this->get_description(),
247
-			'allow_quantities' => $this->allows_quantities(),
248
-			'required'         => $required,
249
-		);
250
-
251
-	}
252
-
253
-	/**
254
-	 * Prepares form data for ajax use.
255
-	 *
256
-	 * @since 1.0.19
257
-	 * @return array
258
-	 */
259
-	public function prepare_data_for_invoice_edit_ajax( $currency = '' ) {
260
-
261
-		$description = getpaid_item_recurring_price_help_text( $this, $currency );
262
-
263
-		if ( $description ) {
264
-			$description = "<div class='getpaid-subscription-help-text'>$description</div>";
265
-		}
266
-
267
-		return array(
268
-			'id'     => $this->get_id(),
269
-			'texts'  => array(
270
-				'item-name'        => sanitize_text_field( $this->get_name() ),
271
-				'item-description' => wp_kses_post( $this->get_description() ) . $description,
272
-				'item-quantity'    => absint( $this->get_quantity() ),
273
-				'item-price'       => wpinv_price( wpinv_format_amount ( $this->get_price() ), $currency ),
274
-				'item-total'       => wpinv_price( wpinv_format_amount( $this->get_sub_total() ), $currency ),
275
-			),
276
-			'inputs' => array(
277
-				'item-id'          => $this->get_id(),
278
-				'item-name'        => sanitize_text_field( $this->get_name() ),
279
-				'item-description' => wp_kses_post( $this->get_description() ),
280
-				'item-quantity'    => absint( $this->get_quantity() ),
281
-				'item-price'       => $this->get_price(),
282
-			)
283
-		);
284
-
285
-	}
286
-
287
-	/**
288
-	 * Prepares form data for saving (cart_details).
289
-	 *
290
-	 * @since 1.0.19
291
-	 * @return array
292
-	 */
293
-	public function prepare_data_for_saving() {
294
-
295
-		return array(
296
-			'post_id'           => $this->invoice_id,
297
-			'item_id'           => $this->get_id(),
298
-			'item_name'         => sanitize_text_field( $this->get_raw_name() ),
299
-			'item_description'  => $this->get_description(),
300
-			'tax'               => $this->item_tax,
301
-			'item_price'        => $this->get_price(),
302
-			'quantity'          => (int) $this->get_quantity(),
303
-			'discount'          => $this->item_discount,
304
-			'subtotal'          => $this->get_sub_total(),
305
-			'price'             => $this->get_sub_total() + $this->item_tax + $this->item_discount,
306
-			'meta'              => $this->get_item_meta(),
307
-		);
308
-
309
-	}
84
+     * Get the item name.
85
+     *
86
+     * @since 1.0.19
87
+     * @param  string $context View or edit context.
88
+     * @return string
89
+     */
90
+    public function get_name( $context = 'view' ) {
91
+        $name = parent::get_name( $context );
92
+        return $name . wpinv_get_item_suffix( $this );
93
+    }
94
+
95
+    /**
96
+     * Get the item name without a suffix.
97
+     *
98
+     * @since 1.0.19
99
+     * @param  string $context View or edit context.
100
+     * @return string
101
+     */
102
+    public function get_raw_name( $context = 'view' ) {
103
+        return parent::get_name( $context );
104
+    }
105
+
106
+    /**
107
+     * Get the item description.
108
+     *
109
+     * @since 1.0.19
110
+     * @param  string $context View or edit context.
111
+     * @return string
112
+     */
113
+    public function get_description( $context = 'view' ) {
114
+
115
+        if ( isset( $this->custom_description ) ) {
116
+            return $this->custom_description;
117
+        }
118
+
119
+        return parent::get_description( $context );
120
+    }
121
+
122
+    /**
123
+     * Returns the sub total.
124
+     *
125
+     * @since 1.0.19
126
+     * @param  string $context View or edit context.
127
+     * @return float
128
+     */
129
+    public function get_sub_total( $context = 'view' ) {
130
+        return $this->get_quantity( $context ) * $this->get_initial_price( $context );
131
+    }
132
+
133
+    /**
134
+     * Returns the recurring sub total.
135
+     *
136
+     * @since 1.0.19
137
+     * @param  string $context View or edit context.
138
+     * @return float
139
+     */
140
+    public function get_recurring_sub_total( $context = 'view' ) {
141
+
142
+        if ( $this->is_recurring() ) {
143
+            return $this->get_quantity( $context ) * $this->get_price( $context );
144
+        }
145
+
146
+        return 0;
147
+    }
148
+
149
+    /**
150
+     * @deprecated
151
+     */
152
+    public function get_qantity( $context = 'view' ) {
153
+        return $this->get_quantity( $context );
154
+    }
155
+
156
+    /**
157
+     * Get the item quantity.
158
+     *
159
+     * @since 1.0.19
160
+     * @param  string $context View or edit context.
161
+     * @return int
162
+     */
163
+    public function get_quantity( $context = 'view' ) {
164
+        $quantity = (int) $this->quantity;
165
+
166
+        if ( empty( $quantity ) || 1 > $quantity ) {
167
+            $quantity = 1;
168
+        }
169
+
170
+        if ( 'view' == $context ) {
171
+            return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
172
+        }
173
+
174
+        return $quantity;
175
+
176
+    }
177
+
178
+    /**
179
+     * Get the item meta data.
180
+     *
181
+     * @since 1.0.19
182
+     * @param  string $context View or edit context.
183
+     * @return meta
184
+     */
185
+    public function get_item_meta( $context = 'view' ) {
186
+        $meta = $this->meta;
187
+
188
+        if ( 'view' == $context ) {
189
+            return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
190
+        }
191
+
192
+        return $meta;
193
+
194
+    }
195
+
196
+    /**
197
+     * Returns whether or not customers can update the item quantity.
198
+     *
199
+     * @since 1.0.19
200
+     * @param  string $context View or edit context.
201
+     * @return bool
202
+     */
203
+    public function get_allow_quantities( $context = 'view' ) {
204
+        $allow_quantities = (bool) $this->allow_quantities;
205
+
206
+        if ( 'view' == $context ) {
207
+            return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
208
+        }
209
+
210
+        return $allow_quantities;
211
+
212
+    }
213
+
214
+    /**
215
+     * Returns whether or not the item is required.
216
+     *
217
+     * @since 1.0.19
218
+     * @param  string $context View or edit context.
219
+     * @return bool
220
+     */
221
+    public function get_is_required( $context = 'view' ) {
222
+        $is_required = (bool) $this->is_required;
223
+
224
+        if ( 'view' == $context ) {
225
+            return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
226
+        }
227
+
228
+        return $is_required;
229
+
230
+    }
231
+
232
+    /**
233
+     * Prepares form data for use.
234
+     *
235
+     * @since 1.0.19
236
+     * @return array
237
+     */
238
+    public function prepare_data_for_use( $required = null ) {
239
+
240
+        $required = is_null( $required ) ? $this->is_required() : $required;
241
+        return array(
242
+            'title'            => strip_tags( $this->get_name() ),
243
+            'id'               => $this->get_id(),
244
+            'price'            => $this->get_price(),
245
+            'recurring'        => $this->is_recurring(),
246
+            'description'      => $this->get_description(),
247
+            'allow_quantities' => $this->allows_quantities(),
248
+            'required'         => $required,
249
+        );
250
+
251
+    }
252
+
253
+    /**
254
+     * Prepares form data for ajax use.
255
+     *
256
+     * @since 1.0.19
257
+     * @return array
258
+     */
259
+    public function prepare_data_for_invoice_edit_ajax( $currency = '' ) {
260
+
261
+        $description = getpaid_item_recurring_price_help_text( $this, $currency );
262
+
263
+        if ( $description ) {
264
+            $description = "<div class='getpaid-subscription-help-text'>$description</div>";
265
+        }
266
+
267
+        return array(
268
+            'id'     => $this->get_id(),
269
+            'texts'  => array(
270
+                'item-name'        => sanitize_text_field( $this->get_name() ),
271
+                'item-description' => wp_kses_post( $this->get_description() ) . $description,
272
+                'item-quantity'    => absint( $this->get_quantity() ),
273
+                'item-price'       => wpinv_price( wpinv_format_amount ( $this->get_price() ), $currency ),
274
+                'item-total'       => wpinv_price( wpinv_format_amount( $this->get_sub_total() ), $currency ),
275
+            ),
276
+            'inputs' => array(
277
+                'item-id'          => $this->get_id(),
278
+                'item-name'        => sanitize_text_field( $this->get_name() ),
279
+                'item-description' => wp_kses_post( $this->get_description() ),
280
+                'item-quantity'    => absint( $this->get_quantity() ),
281
+                'item-price'       => $this->get_price(),
282
+            )
283
+        );
284
+
285
+    }
286
+
287
+    /**
288
+     * Prepares form data for saving (cart_details).
289
+     *
290
+     * @since 1.0.19
291
+     * @return array
292
+     */
293
+    public function prepare_data_for_saving() {
294
+
295
+        return array(
296
+            'post_id'           => $this->invoice_id,
297
+            'item_id'           => $this->get_id(),
298
+            'item_name'         => sanitize_text_field( $this->get_raw_name() ),
299
+            'item_description'  => $this->get_description(),
300
+            'tax'               => $this->item_tax,
301
+            'item_price'        => $this->get_price(),
302
+            'quantity'          => (int) $this->get_quantity(),
303
+            'discount'          => $this->item_discount,
304
+            'subtotal'          => $this->get_sub_total(),
305
+            'price'             => $this->get_sub_total() + $this->item_tax + $this->item_discount,
306
+            'meta'              => $this->get_item_meta(),
307
+        );
308
+
309
+    }
310 310
 
311 311
     /*
312 312
 	|--------------------------------------------------------------------------
@@ -318,70 +318,70 @@  discard block
 block discarded – undo
318 318
 	| object.
319 319
     */
320 320
 
321
-	/**
322
-	 * Set the item qantity.
323
-	 *
324
-	 * @since 1.0.19
325
-	 * @param  int $quantity The item quantity.
326
-	 */
327
-	public function set_quantity( $quantity ) {
328
-
329
-		if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
330
-			$quantity = 1;
331
-		}
332
-
333
-		$this->quantity = (int) $quantity;
334
-
335
-	}
336
-
337
-	/**
338
-	 * Set the item meta data.
339
-	 *
340
-	 * @since 1.0.19
341
-	 * @param  array $meta The item meta data.
342
-	 */
343
-	public function set_item_meta( $meta ) {
344
-		$this->meta = maybe_unserialize( $meta );
345
-	}
346
-
347
-	/**
348
-	 * Set whether or not the quantities are allowed.
349
-	 *
350
-	 * @since 1.0.19
351
-	 * @param  bool $allow_quantities
352
-	 */
353
-	public function set_allow_quantities( $allow_quantities ) {
354
-		$this->allow_quantities = (bool) $allow_quantities;
355
-	}
356
-
357
-	/**
358
-	 * Set whether or not the item is required.
359
-	 *
360
-	 * @since 1.0.19
361
-	 * @param  bool $is_required
362
-	 */
363
-	public function set_is_required( $is_required ) {
364
-		$this->is_required = (bool) $is_required;
365
-	}
366
-
367
-	/**
368
-	 * Sets the custom item description.
369
-	 *
370
-	 * @since 1.0.19
371
-	 * @param  string $description
372
-	 */
373
-	public function set_custom_description( $description ) {
374
-		$this->custom_description = $description;
375
-	}
321
+    /**
322
+     * Set the item qantity.
323
+     *
324
+     * @since 1.0.19
325
+     * @param  int $quantity The item quantity.
326
+     */
327
+    public function set_quantity( $quantity ) {
328
+
329
+        if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
330
+            $quantity = 1;
331
+        }
332
+
333
+        $this->quantity = (int) $quantity;
334
+
335
+    }
336
+
337
+    /**
338
+     * Set the item meta data.
339
+     *
340
+     * @since 1.0.19
341
+     * @param  array $meta The item meta data.
342
+     */
343
+    public function set_item_meta( $meta ) {
344
+        $this->meta = maybe_unserialize( $meta );
345
+    }
346
+
347
+    /**
348
+     * Set whether or not the quantities are allowed.
349
+     *
350
+     * @since 1.0.19
351
+     * @param  bool $allow_quantities
352
+     */
353
+    public function set_allow_quantities( $allow_quantities ) {
354
+        $this->allow_quantities = (bool) $allow_quantities;
355
+    }
356
+
357
+    /**
358
+     * Set whether or not the item is required.
359
+     *
360
+     * @since 1.0.19
361
+     * @param  bool $is_required
362
+     */
363
+    public function set_is_required( $is_required ) {
364
+        $this->is_required = (bool) $is_required;
365
+    }
366
+
367
+    /**
368
+     * Sets the custom item description.
369
+     *
370
+     * @since 1.0.19
371
+     * @param  string $description
372
+     */
373
+    public function set_custom_description( $description ) {
374
+        $this->custom_description = $description;
375
+    }
376 376
 
377 377
     /**
378 378
      * We do not want to save items to the database.
379 379
      * 
380
-	 * @return int item id
380
+     * @return int item id
381 381
      */
382 382
     public function save( $data = array() ) {
383 383
         return $this->get_id();
384
-	}
384
+    }
385 385
 
386 386
     /*
387 387
 	|--------------------------------------------------------------------------
@@ -393,23 +393,23 @@  discard block
 block discarded – undo
393 393
 	*/
394 394
 
395 395
     /**
396
-	 * Checks whether the item has enabled dynamic pricing.
397
-	 *
398
-	 * @since 1.0.19
399
-	 * @return bool
400
-	 */
401
-	public function is_required() {
396
+     * Checks whether the item has enabled dynamic pricing.
397
+     *
398
+     * @since 1.0.19
399
+     * @return bool
400
+     */
401
+    public function is_required() {
402 402
         return (bool) $this->get_is_required();
403
-	}
404
-
405
-	/**
406
-	 * Checks whether users can edit the quantities.
407
-	 *
408
-	 * @since 1.0.19
409
-	 * @return bool
410
-	 */
411
-	public function allows_quantities() {
403
+    }
404
+
405
+    /**
406
+     * Checks whether users can edit the quantities.
407
+     *
408
+     * @since 1.0.19
409
+     * @return bool
410
+     */
411
+    public function allows_quantities() {
412 412
         return (bool) $this->get_allow_quantities();
413
-	}
413
+    }
414 414
 
415 415
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-gateway-ipn-handler.php 1 patch
Indentation   +373 added lines, -373 removed lines patch added patch discarded remove patch
@@ -12,432 +12,432 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Paypal_Gateway_IPN_Handler {
14 14
 
15
-	/**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
20
-	protected $id = 'paypal';
21
-
22
-	/**
23
-	 * Payment method object.
24
-	 *
25
-	 * @var GetPaid_Paypal_Gateway
26
-	 */
27
-	protected $gateway;
28
-
29
-	/**
30
-	 * Class constructor.
31
-	 *
32
-	 * @param GetPaid_Paypal_Gateway $gateway
33
-	 */
34
-	public function __construct( $gateway ) {
35
-		$this->gateway = $gateway;
36
-		$this->verify_ipn();
37
-	}
38
-
39
-	/**
40
-	 * Processes ipns and marks payments as complete.
41
-	 *
42
-	 * @return void
43
-	 */
44
-	public function verify_ipn() {
45
-
46
-		wpinv_error_log( 'GetPaid PayPal IPN Handler' );
47
-
48
-		// Validate the IPN.
49
-		if ( empty( $_POST ) || ! $this->validate_ipn() ) {
50
-			wp_die( 'PayPal IPN Request Failure', 500 );
51
-		}
52
-
53
-		// Process the IPN.
54
-		$posted  = wp_unslash( $_POST );
55
-		$invoice = $this->get_ipn_invoice( $posted );
56
-
57
-		// Abort if it was not paid by our gateway.
58
-		if ( $this->id != $invoice->get_gateway() ) {
59
-			wpinv_error_log( 'Aborting, Invoice was not paid via PayPal' );
60
-			wp_die( 'Invoice not paid via PayPal', 500 );
61
-		}
62
-
63
-		$posted['payment_status'] = sanitize_key( strtolower( $posted['payment_status'] ) );
64
-		$posted['txn_type']       = sanitize_key( strtolower( $posted['txn_type'] ) );
65
-
66
-		wpinv_error_log( 'Payment status:' . $posted['payment_status'] );
67
-		wpinv_error_log( 'IPN Type:' . $posted['txn_type'] );
68
-
69
-		if ( $this->gateway->is_sandbox( $invoice ) ) {
70
-			wpinv_error_log( $posted, 'Invoice was processed in sandbox hence logging the posted data' );
71
-		}
72
-
73
-		if ( method_exists( $this, 'ipn_txn_' . $posted['txn_type'] ) ) {
74
-			call_user_func( array( $this, 'ipn_txn_' . $posted['txn_type'] ), $invoice, $posted );
75
-			wpinv_error_log( 'Done processing IPN' );
76
-			wp_die( 'Processed', 200 );
77
-		}
78
-
79
-		wpinv_error_log( 'Aborting, Unsupported IPN type:' . $posted['txn_type'] );
80
-		wp_die( 'Unsupported IPN type', 200 );
81
-
82
-	}
83
-
84
-	/**
85
-	 * Retrieves IPN Invoice.
86
-	 *
87
-	 * @param array $posted
88
-	 * @return WPInv_Invoice
89
-	 */
90
-	protected function get_ipn_invoice( $posted ) {
91
-
92
-		wpinv_error_log( 'Retrieving PayPal IPN Response Invoice' );
93
-
94
-		if ( ! empty( $posted['custom'] ) ) {
95
-			$invoice = new WPInv_Invoice( $posted['custom'] );
96
-
97
-			if ( $invoice->exists() ) {
98
-				wpinv_error_log( 'Found invoice #' . $invoice->get_number() );
99
-				return $invoice;
100
-			}
101
-
102
-		}
103
-
104
-		wpinv_error_log( 'Could not retrieve the associated invoice.' );
105
-		wp_die( 'Could not retrieve the associated invoice.', 500 );
106
-	}
107
-
108
-	/**
109
-	 * Check PayPal IPN validity.
110
-	 */
111
-	protected function validate_ipn() {
112
-
113
-		wpinv_error_log( 'Validating PayPal IPN response' );
114
-
115
-		// Retrieve the associated invoice.
116
-		$posted  = wp_unslash( $_POST );
117
-		$invoice = $this->get_ipn_invoice( $posted );
118
-
119
-		// Validate the IPN.
120
-		$posted['cmd'] = '_notify-validate';
121
-
122
-		// Send back post vars to paypal.
123
-		$params = array(
124
-			'body'        => $posted,
125
-			'timeout'     => 60,
126
-			'httpversion' => '1.1',
127
-			'compress'    => false,
128
-			'decompress'  => false,
129
-			'user-agent'  => 'GetPaid/' . WPINV_VERSION,
130
-		);
131
-
132
-		// Post back to get a response.
133
-		$response = wp_safe_remote_post( $this->gateway->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr', $params );
134
-
135
-		// Check to see if the request was valid.
136
-		if ( ! is_wp_error( $response ) && $response['response']['code'] < 300 && strstr( $response['body'], 'VERIFIED' ) ) {
137
-			wpinv_error_log( $response['body'], 'Received valid response from PayPal IPN' );
138
-			return true;
139
-		}
140
-
141
-		if ( is_wp_error( $response ) ) {
142
-			wpinv_error_log( $response->get_error_message(), 'Received invalid response from PayPal IPN' );
143
-			return false;
144
-		}
15
+    /**
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20
+    protected $id = 'paypal';
21
+
22
+    /**
23
+     * Payment method object.
24
+     *
25
+     * @var GetPaid_Paypal_Gateway
26
+     */
27
+    protected $gateway;
28
+
29
+    /**
30
+     * Class constructor.
31
+     *
32
+     * @param GetPaid_Paypal_Gateway $gateway
33
+     */
34
+    public function __construct( $gateway ) {
35
+        $this->gateway = $gateway;
36
+        $this->verify_ipn();
37
+    }
38
+
39
+    /**
40
+     * Processes ipns and marks payments as complete.
41
+     *
42
+     * @return void
43
+     */
44
+    public function verify_ipn() {
45
+
46
+        wpinv_error_log( 'GetPaid PayPal IPN Handler' );
47
+
48
+        // Validate the IPN.
49
+        if ( empty( $_POST ) || ! $this->validate_ipn() ) {
50
+            wp_die( 'PayPal IPN Request Failure', 500 );
51
+        }
52
+
53
+        // Process the IPN.
54
+        $posted  = wp_unslash( $_POST );
55
+        $invoice = $this->get_ipn_invoice( $posted );
56
+
57
+        // Abort if it was not paid by our gateway.
58
+        if ( $this->id != $invoice->get_gateway() ) {
59
+            wpinv_error_log( 'Aborting, Invoice was not paid via PayPal' );
60
+            wp_die( 'Invoice not paid via PayPal', 500 );
61
+        }
62
+
63
+        $posted['payment_status'] = sanitize_key( strtolower( $posted['payment_status'] ) );
64
+        $posted['txn_type']       = sanitize_key( strtolower( $posted['txn_type'] ) );
65
+
66
+        wpinv_error_log( 'Payment status:' . $posted['payment_status'] );
67
+        wpinv_error_log( 'IPN Type:' . $posted['txn_type'] );
68
+
69
+        if ( $this->gateway->is_sandbox( $invoice ) ) {
70
+            wpinv_error_log( $posted, 'Invoice was processed in sandbox hence logging the posted data' );
71
+        }
72
+
73
+        if ( method_exists( $this, 'ipn_txn_' . $posted['txn_type'] ) ) {
74
+            call_user_func( array( $this, 'ipn_txn_' . $posted['txn_type'] ), $invoice, $posted );
75
+            wpinv_error_log( 'Done processing IPN' );
76
+            wp_die( 'Processed', 200 );
77
+        }
78
+
79
+        wpinv_error_log( 'Aborting, Unsupported IPN type:' . $posted['txn_type'] );
80
+        wp_die( 'Unsupported IPN type', 200 );
81
+
82
+    }
83
+
84
+    /**
85
+     * Retrieves IPN Invoice.
86
+     *
87
+     * @param array $posted
88
+     * @return WPInv_Invoice
89
+     */
90
+    protected function get_ipn_invoice( $posted ) {
91
+
92
+        wpinv_error_log( 'Retrieving PayPal IPN Response Invoice' );
93
+
94
+        if ( ! empty( $posted['custom'] ) ) {
95
+            $invoice = new WPInv_Invoice( $posted['custom'] );
96
+
97
+            if ( $invoice->exists() ) {
98
+                wpinv_error_log( 'Found invoice #' . $invoice->get_number() );
99
+                return $invoice;
100
+            }
101
+
102
+        }
103
+
104
+        wpinv_error_log( 'Could not retrieve the associated invoice.' );
105
+        wp_die( 'Could not retrieve the associated invoice.', 500 );
106
+    }
107
+
108
+    /**
109
+     * Check PayPal IPN validity.
110
+     */
111
+    protected function validate_ipn() {
112
+
113
+        wpinv_error_log( 'Validating PayPal IPN response' );
114
+
115
+        // Retrieve the associated invoice.
116
+        $posted  = wp_unslash( $_POST );
117
+        $invoice = $this->get_ipn_invoice( $posted );
118
+
119
+        // Validate the IPN.
120
+        $posted['cmd'] = '_notify-validate';
121
+
122
+        // Send back post vars to paypal.
123
+        $params = array(
124
+            'body'        => $posted,
125
+            'timeout'     => 60,
126
+            'httpversion' => '1.1',
127
+            'compress'    => false,
128
+            'decompress'  => false,
129
+            'user-agent'  => 'GetPaid/' . WPINV_VERSION,
130
+        );
131
+
132
+        // Post back to get a response.
133
+        $response = wp_safe_remote_post( $this->gateway->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr', $params );
134
+
135
+        // Check to see if the request was valid.
136
+        if ( ! is_wp_error( $response ) && $response['response']['code'] < 300 && strstr( $response['body'], 'VERIFIED' ) ) {
137
+            wpinv_error_log( $response['body'], 'Received valid response from PayPal IPN' );
138
+            return true;
139
+        }
140
+
141
+        if ( is_wp_error( $response ) ) {
142
+            wpinv_error_log( $response->get_error_message(), 'Received invalid response from PayPal IPN' );
143
+            return false;
144
+        }
145 145
 
146
-		wpinv_error_log( $response['body'], 'Received invalid response from PayPal IPN' );
147
-		return false;
148
-
149
-	}
146
+        wpinv_error_log( $response['body'], 'Received invalid response from PayPal IPN' );
147
+        return false;
148
+
149
+    }
150 150
 
151
-	/**
152
-	 * Check currency from IPN matches the invoice.
153
-	 *
154
-	 * @param WPInv_Invoice $invoice          Invoice object.
155
-	 * @param string   $currency currency to validate.
156
-	 */
157
-	protected function validate_ipn_currency( $invoice, $currency ) {
151
+    /**
152
+     * Check currency from IPN matches the invoice.
153
+     *
154
+     * @param WPInv_Invoice $invoice          Invoice object.
155
+     * @param string   $currency currency to validate.
156
+     */
157
+    protected function validate_ipn_currency( $invoice, $currency ) {
158 158
 
159
-		if ( strtolower( $invoice->get_currency() ) !== strtolower( $currency ) ) {
159
+        if ( strtolower( $invoice->get_currency() ) !== strtolower( $currency ) ) {
160 160
 
161
-			/* translators: %s: currency code. */
162
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal currencies do not match (code %s).', 'invoicing' ), $currency ) );
161
+            /* translators: %s: currency code. */
162
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal currencies do not match (code %s).', 'invoicing' ), $currency ) );
163 163
 
164
-			wpinv_error_log( "Currencies do not match: {$currency} instead of {$invoice->get_currency()}", 'IPN Error', __FILE__, __LINE__, true );
165
-		}
164
+            wpinv_error_log( "Currencies do not match: {$currency} instead of {$invoice->get_currency()}", 'IPN Error', __FILE__, __LINE__, true );
165
+        }
166 166
 
167
-		wpinv_error_log( $currency, 'Validated IPN Currency' );
168
-	}
167
+        wpinv_error_log( $currency, 'Validated IPN Currency' );
168
+    }
169 169
 
170
-	/**
171
-	 * Check payment amount from IPN matches the invoice.
172
-	 *
173
-	 * @param WPInv_Invoice $invoice          Invoice object.
174
-	 * @param float   $amount amount to validate.
175
-	 */
176
-	protected function validate_ipn_amount( $invoice, $amount ) {
177
-		if ( number_format( $invoice->get_total(), 2, '.', '' ) !== number_format( $amount, 2, '.', '' ) ) {
170
+    /**
171
+     * Check payment amount from IPN matches the invoice.
172
+     *
173
+     * @param WPInv_Invoice $invoice          Invoice object.
174
+     * @param float   $amount amount to validate.
175
+     */
176
+    protected function validate_ipn_amount( $invoice, $amount ) {
177
+        if ( number_format( $invoice->get_total(), 2, '.', '' ) !== number_format( $amount, 2, '.', '' ) ) {
178 178
 
179
-			/* translators: %s: Amount. */
180
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal amounts do not match (gross %s).', 'invoicing' ), $amount ) );
179
+            /* translators: %s: Amount. */
180
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal amounts do not match (gross %s).', 'invoicing' ), $amount ) );
181 181
 
182
-			wpinv_error_log( "Currencies do not match: {$amount} instead of {$invoice->get_total()}", 'IPN Error', __FILE__, __LINE__, true );
183
-		}
182
+            wpinv_error_log( "Currencies do not match: {$amount} instead of {$invoice->get_total()}", 'IPN Error', __FILE__, __LINE__, true );
183
+        }
184 184
 
185
-		wpinv_error_log( $amount, 'Validated IPN Amount' );
186
-	}
185
+        wpinv_error_log( $amount, 'Validated IPN Amount' );
186
+    }
187 187
 
188
-	/**
189
-	 * Verify receiver email from PayPal.
190
-	 *
191
-	 * @param WPInv_Invoice $invoice          Invoice object.
192
-	 * @param string   $receiver_email Email to validate.
193
-	 */
194
-	protected function validate_ipn_receiver_email( $invoice, $receiver_email ) {
195
-		$paypal_email = wpinv_get_option( 'paypal_email' );
188
+    /**
189
+     * Verify receiver email from PayPal.
190
+     *
191
+     * @param WPInv_Invoice $invoice          Invoice object.
192
+     * @param string   $receiver_email Email to validate.
193
+     */
194
+    protected function validate_ipn_receiver_email( $invoice, $receiver_email ) {
195
+        $paypal_email = wpinv_get_option( 'paypal_email' );
196 196
 
197
-		if ( strcasecmp( trim( $receiver_email ), trim( $paypal_email ) ) !== 0 ) {
198
-			wpinv_record_gateway_error( 'IPN Error', "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}" );
197
+        if ( strcasecmp( trim( $receiver_email ), trim( $paypal_email ) ) !== 0 ) {
198
+            wpinv_record_gateway_error( 'IPN Error', "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}" );
199 199
 
200
-			/* translators: %s: email address . */
201
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal IPN response from a different email address (%s).', 'invoicing' ), $receiver_email ) );
200
+            /* translators: %s: email address . */
201
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal IPN response from a different email address (%s).', 'invoicing' ), $receiver_email ) );
202 202
 
203
-			wpinv_error_log( "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}", 'IPN Error', __FILE__, __LINE__, true );
204
-		}
203
+            wpinv_error_log( "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}", 'IPN Error', __FILE__, __LINE__, true );
204
+        }
205 205
 
206
-		wpinv_error_log( 'Validated PayPal Email' );
207
-	}
206
+        wpinv_error_log( 'Validated PayPal Email' );
207
+    }
208 208
 
209
-	/**
210
-	 * Handles one time payments.
211
-	 *
212
-	 * @param WPInv_Invoice $invoice  Invoice object.
213
-	 * @param array    $posted Posted data.
214
-	 */
215
-	protected function ipn_txn_web_accept( $invoice, $posted ) {
216
-
217
-		// Collect payment details
218
-		$payment_status = strtolower( $posted['payment_status'] );
219
-		$business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
220
-
221
-		$this->validate_ipn_receiver_email( $invoice, $business_email );
222
-		$this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
223
-
224
-		// Update the transaction id.
225
-		if ( ! empty( $posted['txn_id'] ) ) {
226
-			$invoice->set_transaction_id( wpinv_clean( $posted['txn_id'] ) );
227
-			$invoice->save();
228
-		}
209
+    /**
210
+     * Handles one time payments.
211
+     *
212
+     * @param WPInv_Invoice $invoice  Invoice object.
213
+     * @param array    $posted Posted data.
214
+     */
215
+    protected function ipn_txn_web_accept( $invoice, $posted ) {
216
+
217
+        // Collect payment details
218
+        $payment_status = strtolower( $posted['payment_status'] );
219
+        $business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
220
+
221
+        $this->validate_ipn_receiver_email( $invoice, $business_email );
222
+        $this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
223
+
224
+        // Update the transaction id.
225
+        if ( ! empty( $posted['txn_id'] ) ) {
226
+            $invoice->set_transaction_id( wpinv_clean( $posted['txn_id'] ) );
227
+            $invoice->save();
228
+        }
229 229
 
230
-		// Process a refund.
231
-		if ( $payment_status == 'refunded' || $payment_status == 'reversed' ) {
230
+        // Process a refund.
231
+        if ( $payment_status == 'refunded' || $payment_status == 'reversed' ) {
232 232
 
233
-			update_post_meta( $invoice->get_id(), 'refunded_remotely', 1 );
233
+            update_post_meta( $invoice->get_id(), 'refunded_remotely', 1 );
234 234
 
235
-			if ( ! $invoice->is_refunded() ) {
236
-				$invoice->update_status( 'wpi-refunded', $posted['reason_code'] );
237
-			}
235
+            if ( ! $invoice->is_refunded() ) {
236
+                $invoice->update_status( 'wpi-refunded', $posted['reason_code'] );
237
+            }
238 238
 
239
-			return wpinv_error_log( $posted['reason_code'] );
240
-		}
239
+            return wpinv_error_log( $posted['reason_code'] );
240
+        }
241 241
 
242
-		// Process payments.
243
-		if ( $payment_status == 'completed' ) {
242
+        // Process payments.
243
+        if ( $payment_status == 'completed' ) {
244 244
 
245
-			if ( $invoice->is_paid() && 'wpi_processing' != $invoice->get_status() ) {
246
-				return wpinv_error_log( 'Aborting, Invoice #' . $invoice->get_number() . ' is already paid.' );
247
-			}
245
+            if ( $invoice->is_paid() && 'wpi_processing' != $invoice->get_status() ) {
246
+                return wpinv_error_log( 'Aborting, Invoice #' . $invoice->get_number() . ' is already paid.' );
247
+            }
248 248
 
249
-			$this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
249
+            $this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
250 250
 
251
-			$note = '';
252
-
253
-			if ( ! empty( $posted['mc_fee'] ) ) {
254
-				$note = sprintf( __( 'PayPal Transaction Fee %.', 'invoicing' ), sanitize_text_field( $posted['mc_fee'] ) );
255
-			}
251
+            $note = '';
252
+
253
+            if ( ! empty( $posted['mc_fee'] ) ) {
254
+                $note = sprintf( __( 'PayPal Transaction Fee %.', 'invoicing' ), sanitize_text_field( $posted['mc_fee'] ) );
255
+            }
256 256
 
257
-			if ( ! empty( $posted['payer_status'] ) ) {
258
-				$note = ' ' . sprintf( __( 'Buyer status %.', 'invoicing' ), sanitize_text_field( $posted['payer_status'] ) );
259
-			}
257
+            if ( ! empty( $posted['payer_status'] ) ) {
258
+                $note = ' ' . sprintf( __( 'Buyer status %.', 'invoicing' ), sanitize_text_field( $posted['payer_status'] ) );
259
+            }
260 260
 
261
-			$invoice->mark_paid( ( ! empty( $posted['txn_id'] ) ? sanitize_text_field( $posted['txn_id'] ) : '' ), trim( $note ) );
262
-			return wpinv_error_log( 'Invoice marked as paid.' );
261
+            $invoice->mark_paid( ( ! empty( $posted['txn_id'] ) ? sanitize_text_field( $posted['txn_id'] ) : '' ), trim( $note ) );
262
+            return wpinv_error_log( 'Invoice marked as paid.' );
263 263
 
264
-		}
265
-
266
-		// Pending payments.
267
-		if ( $payment_status == 'pending' ) {
264
+        }
265
+
266
+        // Pending payments.
267
+        if ( $payment_status == 'pending' ) {
268 268
 
269
-			/* translators: %s: pending reason. */
270
-			$invoice->update_status( 'wpi-onhold', sprintf( __( 'Payment pending (%s).', 'invoicing' ), $posted['pending_reason'] ) );
271
-
272
-			return wpinv_error_log( 'Invoice marked as "payment held".' );
273
-		}
269
+            /* translators: %s: pending reason. */
270
+            $invoice->update_status( 'wpi-onhold', sprintf( __( 'Payment pending (%s).', 'invoicing' ), $posted['pending_reason'] ) );
271
+
272
+            return wpinv_error_log( 'Invoice marked as "payment held".' );
273
+        }
274 274
 
275
-		/* translators: %s: payment status. */
276
-		$invoice->update_status( 'wpi-failed', sprintf( __( 'Payment %s via IPN.', 'invoicing' ), sanitize_text_field( $posted['payment_status'] ) ) );
275
+        /* translators: %s: payment status. */
276
+        $invoice->update_status( 'wpi-failed', sprintf( __( 'Payment %s via IPN.', 'invoicing' ), sanitize_text_field( $posted['payment_status'] ) ) );
277 277
 
278
-	}
278
+    }
279 279
 
280
-	/**
281
-	 * Handles one time payments.
282
-	 *
283
-	 * @param WPInv_Invoice $invoice  Invoice object.
284
-	 * @param array    $posted Posted data.
285
-	 */
286
-	protected function ipn_txn_cart( $invoice, $posted ) {
287
-		$this->ipn_txn_web_accept( $invoice, $posted );
288
-	}
280
+    /**
281
+     * Handles one time payments.
282
+     *
283
+     * @param WPInv_Invoice $invoice  Invoice object.
284
+     * @param array    $posted Posted data.
285
+     */
286
+    protected function ipn_txn_cart( $invoice, $posted ) {
287
+        $this->ipn_txn_web_accept( $invoice, $posted );
288
+    }
289 289
 
290
-	/**
291
-	 * Handles subscription sign ups.
292
-	 *
293
-	 * @param WPInv_Invoice $invoice  Invoice object.
294
-	 * @param array    $posted Posted data.
295
-	 */
296
-	protected function ipn_txn_subscr_signup( $invoice, $posted ) {
290
+    /**
291
+     * Handles subscription sign ups.
292
+     *
293
+     * @param WPInv_Invoice $invoice  Invoice object.
294
+     * @param array    $posted Posted data.
295
+     */
296
+    protected function ipn_txn_subscr_signup( $invoice, $posted ) {
297 297
 
298
-		wpinv_error_log( $posted, 'Processing subscription signup' );
298
+        wpinv_error_log( $posted, 'Processing subscription signup' );
299 299
 
300
-		// Make sure the invoice has a subscription.
301
-		$subscription = getpaid_get_invoice_subscription( $invoice );
300
+        // Make sure the invoice has a subscription.
301
+        $subscription = getpaid_get_invoice_subscription( $invoice );
302 302
 
303
-		if ( empty( $subscription ) ) {
304
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
305
-		}
303
+        if ( empty( $subscription ) ) {
304
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
305
+        }
306 306
 
307
-		// Validate the IPN.
308
-		$business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
309
-		$this->validate_ipn_receiver_email( $invoice, $business_email );
310
-		$this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
311
-		$this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
307
+        // Validate the IPN.
308
+        $business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
309
+        $this->validate_ipn_receiver_email( $invoice, $business_email );
310
+        $this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
311
+        $this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
312 312
 
313
-		// Activate the subscription.
314
-		$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
315
-		$subscription->set_date_created( current_time( 'mysql' ) );
316
-		$subscription->set_expiration( date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ) );
317
-		$subscription->set_profile_id( sanitize_text_field( $posted['subscr_id'] ) );
318
-		$subscription->activate();
313
+        // Activate the subscription.
314
+        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
315
+        $subscription->set_date_created( current_time( 'mysql' ) );
316
+        $subscription->set_expiration( date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ) );
317
+        $subscription->set_profile_id( sanitize_text_field( $posted['subscr_id'] ) );
318
+        $subscription->activate();
319 319
 
320
-		// Set the transaction id.
321
-		if ( ! empty( $posted['txn_id'] ) ) {
322
-			$invoice->set_transaction_id( $posted['txn_id'] );
323
-		}
320
+        // Set the transaction id.
321
+        if ( ! empty( $posted['txn_id'] ) ) {
322
+            $invoice->set_transaction_id( $posted['txn_id'] );
323
+        }
324 324
 
325
-		// Update the payment status.
326
-		$invoice->mark_paid();
325
+        // Update the payment status.
326
+        $invoice->mark_paid();
327 327
 
328
-		$invoice->add_note( sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
328
+        $invoice->add_note( sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
329 329
 
330
-		wpinv_error_log( 'Subscription started.' );
331
-	}
330
+        wpinv_error_log( 'Subscription started.' );
331
+    }
332 332
 
333
-	/**
334
-	 * Handles subscription renewals.
335
-	 *
336
-	 * @param WPInv_Invoice $invoice  Invoice object.
337
-	 * @param array    $posted Posted data.
338
-	 */
339
-	protected function ipn_txn_subscr_payment( $invoice, $posted ) {
333
+    /**
334
+     * Handles subscription renewals.
335
+     *
336
+     * @param WPInv_Invoice $invoice  Invoice object.
337
+     * @param array    $posted Posted data.
338
+     */
339
+    protected function ipn_txn_subscr_payment( $invoice, $posted ) {
340 340
 
341
-		// Make sure the invoice has a subscription.
342
-		$subscription = wpinv_get_subscription( $invoice );
341
+        // Make sure the invoice has a subscription.
342
+        $subscription = wpinv_get_subscription( $invoice );
343 343
 
344
-		if ( empty( $subscription ) ) {
345
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
346
-		}
344
+        if ( empty( $subscription ) ) {
345
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
346
+        }
347 347
 
348
-		// Abort if this is the first payment.
349
-		if ( date( 'Ynd', $subscription->get_date_created() ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) {
350
-			$invoice->set_transaction_id( sanitize_text_field( $posted['txn_id'] ) );
351
-			$invoice->save();
352
-			return;
353
-		}
354
-
355
-		wpinv_error_log( 'Processing subscription renewal payment for the invoice ' . $invoice->get_id() );
348
+        // Abort if this is the first payment.
349
+        if ( date( 'Ynd', $subscription->get_date_created() ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) {
350
+            $invoice->set_transaction_id( sanitize_text_field( $posted['txn_id'] ) );
351
+            $invoice->save();
352
+            return;
353
+        }
354
+
355
+        wpinv_error_log( 'Processing subscription renewal payment for the invoice ' . $invoice->get_id() );
356 356
 
357
-		// Abort if the payment is already recorded.
358
-		if ( wpinv_get_id_by_transaction_id( $posted['txn_id'] ) ) {
359
-			return wpinv_error_log( 'Aborting, Transaction ' . $posted['txn_id'] .' has already been processed' );
360
-		}
361
-
362
-		$args = array(
363
-			'transaction_id' => $posted['txn_id'],
364
-			'gateway'        => $this->id,
365
-		);
366
-
367
-		$invoice = wpinv_get_invoice( $subscription->add_payment( $args ) );
368
-
369
-		if ( empty( $invoice ) ) {
370
-			return;
371
-		}
372
-
373
-		$invoice->add_note( wp_sprintf( __( 'PayPal Transaction ID: %s', 'invoicing' ) , $posted['txn_id'] ), false, false, true );
374
-		$invoice->add_note( wp_sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
375
-
376
-		$subscription->renew();
377
-		wpinv_error_log( 'Subscription renewed.' );
378
-
379
-	}
380
-
381
-	/**
382
-	 * Handles subscription cancelations.
383
-	 *
384
-	 * @param WPInv_Invoice $invoice  Invoice object.
385
-	 */
386
-	protected function ipn_txn_subscr_cancel( $invoice ) {
387
-
388
-		// Make sure the invoice has a subscription.
389
-		$subscription = wpinv_get_subscription( $invoice );
390
-
391
-		if ( empty( $subscription ) ) {
392
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
393
-		}
394
-
395
-		wpinv_error_log( 'Processing subscription cancellation for the invoice ' . $invoice->get_id() );
396
-		$subscription->cancel();
397
-		wpinv_error_log( 'Subscription cancelled.' );
398
-
399
-	}
400
-
401
-	/**
402
-	 * Handles subscription completions.
403
-	 *
404
-	 * @param WPInv_Invoice $invoice  Invoice object.
405
-	 * @param array    $posted Posted data.
406
-	 */
407
-	protected function ipn_txn_subscr_eot( $invoice ) {
408
-
409
-		// Make sure the invoice has a subscription.
410
-		$subscription = wpinv_get_subscription( $invoice );
357
+        // Abort if the payment is already recorded.
358
+        if ( wpinv_get_id_by_transaction_id( $posted['txn_id'] ) ) {
359
+            return wpinv_error_log( 'Aborting, Transaction ' . $posted['txn_id'] .' has already been processed' );
360
+        }
361
+
362
+        $args = array(
363
+            'transaction_id' => $posted['txn_id'],
364
+            'gateway'        => $this->id,
365
+        );
366
+
367
+        $invoice = wpinv_get_invoice( $subscription->add_payment( $args ) );
368
+
369
+        if ( empty( $invoice ) ) {
370
+            return;
371
+        }
372
+
373
+        $invoice->add_note( wp_sprintf( __( 'PayPal Transaction ID: %s', 'invoicing' ) , $posted['txn_id'] ), false, false, true );
374
+        $invoice->add_note( wp_sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
375
+
376
+        $subscription->renew();
377
+        wpinv_error_log( 'Subscription renewed.' );
378
+
379
+    }
380
+
381
+    /**
382
+     * Handles subscription cancelations.
383
+     *
384
+     * @param WPInv_Invoice $invoice  Invoice object.
385
+     */
386
+    protected function ipn_txn_subscr_cancel( $invoice ) {
387
+
388
+        // Make sure the invoice has a subscription.
389
+        $subscription = wpinv_get_subscription( $invoice );
390
+
391
+        if ( empty( $subscription ) ) {
392
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
393
+        }
394
+
395
+        wpinv_error_log( 'Processing subscription cancellation for the invoice ' . $invoice->get_id() );
396
+        $subscription->cancel();
397
+        wpinv_error_log( 'Subscription cancelled.' );
398
+
399
+    }
400
+
401
+    /**
402
+     * Handles subscription completions.
403
+     *
404
+     * @param WPInv_Invoice $invoice  Invoice object.
405
+     * @param array    $posted Posted data.
406
+     */
407
+    protected function ipn_txn_subscr_eot( $invoice ) {
408
+
409
+        // Make sure the invoice has a subscription.
410
+        $subscription = wpinv_get_subscription( $invoice );
411 411
 
412
-		if ( empty( $subscription ) ) {
413
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
414
-		}
412
+        if ( empty( $subscription ) ) {
413
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
414
+        }
415 415
 
416
-		wpinv_error_log( 'Processing subscription end of life for the invoice ' . $invoice->get_id() );
417
-		$subscription->complete();
418
-		wpinv_error_log( 'Subscription completed.' );
416
+        wpinv_error_log( 'Processing subscription end of life for the invoice ' . $invoice->get_id() );
417
+        $subscription->complete();
418
+        wpinv_error_log( 'Subscription completed.' );
419 419
 
420
-	}
420
+    }
421 421
 
422
-	/**
423
-	 * Handles subscription fails.
424
-	 *
425
-	 * @param WPInv_Invoice $invoice  Invoice object.
426
-	 * @param array    $posted Posted data.
427
-	 */
428
-	protected function ipn_txn_subscr_failed( $invoice ) {
422
+    /**
423
+     * Handles subscription fails.
424
+     *
425
+     * @param WPInv_Invoice $invoice  Invoice object.
426
+     * @param array    $posted Posted data.
427
+     */
428
+    protected function ipn_txn_subscr_failed( $invoice ) {
429 429
 
430
-		// Make sure the invoice has a subscription.
431
-		$subscription = wpinv_get_subscription( $invoice );
430
+        // Make sure the invoice has a subscription.
431
+        $subscription = wpinv_get_subscription( $invoice );
432 432
 
433
-		if ( empty( $subscription ) ) {
434
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
435
-		}
433
+        if ( empty( $subscription ) ) {
434
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found' );
435
+        }
436 436
 
437
-		wpinv_error_log( 'Processing subscription payment failure for the invoice ' . $invoice->get_id() );
438
-		$subscription->failing();
439
-		wpinv_error_log( 'Subscription marked as failing.' );
437
+        wpinv_error_log( 'Processing subscription payment failure for the invoice ' . $invoice->get_id() );
438
+        $subscription->failing();
439
+        wpinv_error_log( 'Subscription marked as failing.' );
440 440
 
441
-	}
441
+    }
442 442
 
443 443
 }
Please login to merge, or discard this patch.
includes/wpinv-gateway-functions.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -232,26 +232,26 @@  discard block
 block discarded – undo
232 232
 }
233 233
 
234 234
 function wpinv_get_chosen_gateway( $invoice_id = 0 ) {
235
-	$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
235
+    $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
236 236
 
237 237
     $chosen = false;
238 238
     if ( $invoice_id > 0 && $invoice = wpinv_get_invoice( $invoice_id ) ) {
239 239
         $chosen = $invoice->get_gateway();
240 240
     }
241 241
 
242
-	$chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
242
+    $chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
243 243
 
244
-	if ( false !== $chosen ) {
245
-		$chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen );
246
-	}
244
+    if ( false !== $chosen ) {
245
+        $chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen );
246
+    }
247 247
 
248
-	if ( ! empty ( $chosen ) ) {
249
-		$enabled_gateway = urldecode( $chosen );
250
-	} else if (  !empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
251
-		$enabled_gateway = 'manual';
252
-	} else {
253
-		$enabled_gateway = wpinv_get_default_gateway();
254
-	}
248
+    if ( ! empty ( $chosen ) ) {
249
+        $enabled_gateway = urldecode( $chosen );
250
+    } else if (  !empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
251
+        $enabled_gateway = 'manual';
252
+    } else {
253
+        $enabled_gateway = wpinv_get_default_gateway();
254
+    }
255 255
     
256 256
     if ( !wpinv_is_gateway_active( $enabled_gateway ) && !empty( $gateways ) ) {
257 257
         if(wpinv_is_gateway_active( wpinv_get_default_gateway()) ){
@@ -262,7 +262,7 @@  discard block
 block discarded – undo
262 262
 
263 263
     }
264 264
 
265
-	return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
265
+    return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
266 266
 }
267 267
 
268 268
 function wpinv_record_gateway_error( $title = '', $message = '' ) {
@@ -270,21 +270,21 @@  discard block
 block discarded – undo
270 270
 }
271 271
 
272 272
 function wpinv_count_sales_by_gateway( $gateway_id = 'paypal', $status = 'publish' ) {
273
-	$ret  = 0;
274
-	$args = array(
275
-		'meta_key'    => '_wpinv_gateway',
276
-		'meta_value'  => $gateway_id,
277
-		'nopaging'    => true,
278
-		'post_type'   => 'wpi_invoice',
279
-		'post_status' => $status,
280
-		'fields'      => 'ids'
281
-	);
282
-
283
-	$payments = new WP_Query( $args );
284
-
285
-	if( $payments )
286
-		$ret = $payments->post_count;
287
-	return $ret;
273
+    $ret  = 0;
274
+    $args = array(
275
+        'meta_key'    => '_wpinv_gateway',
276
+        'meta_value'  => $gateway_id,
277
+        'nopaging'    => true,
278
+        'post_type'   => 'wpi_invoice',
279
+        'post_status' => $status,
280
+        'fields'      => 'ids'
281
+    );
282
+
283
+    $payments = new WP_Query( $args );
284
+
285
+    if( $payments )
286
+        $ret = $payments->post_count;
287
+    return $ret;
288 288
 }
289 289
 
290 290
 function wpinv_settings_update_gateways( $input ) {
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +477 added lines, -477 removed lines patch added patch discarded remove patch
@@ -14,420 +14,420 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * Tax instance.
40
-	 *
41
-	 * @var WPInv_EUVat
42
-	 */
43
-	public $tax;
44
-
45
-	/**
46
-	 * @param array An array of payment gateways.
47
-	 */
48
-	public $gateways;
49
-
50
-	/**
51
-	 * Class constructor.
52
-	 */
53
-	public function __construct() {
54
-		$this->define_constants();
55
-		$this->includes();
56
-		$this->init_hooks();
57
-		$this->set_properties();
58
-	}
59
-
60
-	/**
61
-	 * Sets a custom data property.
62
-	 * 
63
-	 * @param string $prop The prop to set.
64
-	 * @param mixed $value The value to retrieve.
65
-	 */
66
-	public function set( $prop, $value ) {
67
-		$this->data[ $prop ] = $value;
68
-	}
69
-
70
-	/**
71
-	 * Gets a custom data property.
72
-	 *
73
-	 * @param string $prop The prop to set.
74
-	 * @return mixed The value.
75
-	 */
76
-	public function get( $prop ) {
77
-
78
-		if ( isset( $this->data[ $prop ] ) ) {
79
-			return $this->data[ $prop ];
80
-		}
81
-
82
-		return null;
83
-	}
84
-
85
-	/**
86
-	 * Define class properties.
87
-	 */
88
-	public function set_properties() {
89
-
90
-		// Sessions.
91
-		$this->set( 'session', new WPInv_Session_Handler() );
92
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
93
-		$this->tax              = new WPInv_EUVat();
94
-		$this->tax->init();
95
-		$GLOBALS['wpinv_euvat'] = $this->tax; // Backwards compatibility.
96
-
97
-		// Init other objects.
98
-		$this->set( 'reports', new WPInv_Reports() ); // TODO: Refactor.
99
-		$this->set( 'session', new WPInv_Session_Handler() );
100
-		$this->set( 'notes', new WPInv_Notes() );
101
-		$this->set( 'api', new WPInv_API() );
102
-		$this->set( 'post_types', new GetPaid_Post_Types() );
103
-		$this->set( 'template', new GetPaid_Template() );
104
-		$this->set( 'admin', new GetPaid_Admin() );
105
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
106
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
107
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
108
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
109
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
110
-
111
-	}
112
-
113
-	 /**
114
-	 * Define plugin constants.
115
-	 */
116
-	public function define_constants() {
117
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
118
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
119
-		$this->version = WPINV_VERSION;
120
-	}
121
-
122
-	/**
123
-	 * Hook into actions and filters.
124
-	 *
125
-	 * @since 1.0.19
126
-	 */
127
-	protected function init_hooks() {
128
-		/* Internationalize the text strings used. */
129
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
130
-
131
-		// Init the plugin after WordPress inits.
132
-		add_action( 'init', array( $this, 'init' ), 1 );
133
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
134
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
135
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
136
-
137
-		if ( class_exists( 'BuddyPress' ) ) {
138
-			add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
139
-		}
140
-
141
-		add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
142
-		add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
143
-		add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
144
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
145
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
146
-
147
-		// Fires after registering actions.
148
-		do_action( 'wpinv_actions', $this );
149
-		do_action( 'getpaid_actions', $this );
150
-
151
-	}
152
-
153
-	public function plugins_loaded() {
154
-		/* Internationalize the text strings used. */
155
-		$this->load_textdomain();
156
-
157
-		do_action( 'wpinv_loaded' );
158
-
159
-		// Fix oxygen page builder conflict
160
-		if ( function_exists( 'ct_css_output' ) ) {
161
-			wpinv_oxygen_fix_conflict();
162
-		}
163
-	}
164
-
165
-	/**
166
-	 * Load the translation of the plugin.
167
-	 *
168
-	 * @since 1.0
169
-	 */
170
-	public function load_textdomain( $locale = NULL ) {
171
-		if ( empty( $locale ) ) {
172
-			$locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
173
-		}
174
-
175
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
176
-
177
-		unload_textdomain( 'invoicing' );
178
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
179
-		load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
180
-
181
-		/**
182
-		 * Define language constants.
183
-		 */
184
-		require_once( WPINV_PLUGIN_DIR . 'language.php' );
185
-	}
186
-
187
-	/**
188
-	 * Include required core files used in admin and on the frontend.
189
-	 */
190
-	public function includes() {
191
-
192
-		// Start with the settings.
193
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
194
-
195
-		// Packages/libraries.
196
-		require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
197
-		require_once( WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php' );
198
-
199
-		// Load functions.
200
-		require_once( WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php' );
201
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
202
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
203
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
204
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
205
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
206
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
207
-		require_once( WPINV_PLUGIN_DIR . 'includes/invoice-functions.php' );
208
-		require_once( WPINV_PLUGIN_DIR . 'includes/subscription-functions.php' );
209
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
210
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
211
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
212
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
213
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-user-functions.php' );
214
-		require_once( WPINV_PLUGIN_DIR . 'includes/error-functions.php' );
215
-
216
-		// Register autoloader.
217
-		try {
218
-			spl_autoload_register( array( $this, 'autoload' ), true );
219
-		} catch ( Exception $e ) {
220
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
221
-		}
222
-
223
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
224
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
225
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
226
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
227
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-reports.php' );
228
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
229
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
230
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
231
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
232
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
233
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
234
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
235
-		require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
236
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
237
-		require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
238
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
239
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
240
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
241
-		require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
242
-		require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
243
-		require_once( WPINV_PLUGIN_DIR . 'widgets/getpaid.php' );
244
-
245
-		/**
246
-		 * Load the tax class.
247
-		 */
248
-		if ( ! class_exists( 'WPInv_EUVat' ) ) {
249
-			require_once( WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php' );
250
-		}
251
-
252
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
253
-			GetPaid_Post_Types_Admin::init();
254
-
255
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
256
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
257
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php' );
258
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
259
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
260
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
261
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
262
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php' );
263
-			// load the user class only on the users.php page
264
-			global $pagenow;
265
-			if($pagenow=='users.php'){
266
-				new WPInv_Admin_Users();
267
-			}
268
-		}
269
-
270
-		// Register cli commands
271
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
272
-			require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
273
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
274
-		}
275
-
276
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
277
-	}
278
-
279
-	/**
280
-	 * Class autoloader
281
-	 *
282
-	 * @param       string $class_name The name of the class to load.
283
-	 * @access      public
284
-	 * @since       1.0.19
285
-	 * @return      void
286
-	 */
287
-	public function autoload( $class_name ) {
288
-
289
-		// Normalize the class name...
290
-		$class_name  = strtolower( $class_name );
291
-
292
-		// ... and make sure it is our class.
293
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
294
-			return;
295
-		}
296
-
297
-		// Next, prepare the file name from the class.
298
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
299
-
300
-		// Base path of the classes.
301
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
302
-
303
-		// And an array of possible locations in order of importance.
304
-		$locations = array(
305
-			"$plugin_path/includes",
306
-			"$plugin_path/includes/data-stores",
307
-			"$plugin_path/includes/gateways",
308
-			"$plugin_path/includes/payments",
309
-			"$plugin_path/includes/api",
310
-			"$plugin_path/includes/admin",
311
-			"$plugin_path/includes/admin/meta-boxes",
312
-		);
313
-
314
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
315
-
316
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
317
-				include trailingslashit( $location ) . $file_name;
318
-				break;
319
-			}
320
-
321
-		}
322
-
323
-	}
324
-
325
-	/**
326
-	 * Inits hooks etc.
327
-	 */
328
-	public function init() {
329
-
330
-		// Fires before getpaid inits.
331
-		do_action( 'before_getpaid_init', $this );
332
-
333
-		// Load default gateways.
334
-		$gateways = apply_filters(
335
-			'getpaid_default_gateways',
336
-			array(
337
-				'manual'        => 'GetPaid_Manual_Gateway',
338
-				'paypal'        => 'GetPaid_Paypal_Gateway',
339
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
340
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
341
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
342
-			)
343
-		);
344
-
345
-		foreach ( $gateways as $id => $class ) {
346
-			$this->gateways[ $id ] = new $class();
347
-		}
348
-
349
-		// Fires after getpaid inits.
350
-		do_action( 'getpaid_init', $this );
351
-
352
-	}
353
-
354
-	/**
355
-	 * Checks if this is an IPN request and processes it.
356
-	 */
357
-	public function maybe_process_ipn() {
358
-
359
-		// Ensure that this is an IPN request.
360
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
361
-			return;
362
-		}
363
-
364
-		$gateway = wpinv_clean( $_GET['wpi-gateway'] );
365
-
366
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
367
-		do_action( "wpinv_verify_{$gateway}_ipn" );
368
-		exit;
369
-
370
-	}
371
-
372
-	public function enqueue_scripts() {
373
-		$suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
374
-
375
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css' );
376
-		wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version );
377
-		wp_enqueue_style( 'wpinv_front_style' );
378
-
379
-		// Register scripts
380
-		wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
381
-		wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  filemtime( WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js' ) );
382
-
383
-		$localize                         = array();
384
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
385
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
386
-		$localize['currency_symbol']      = wpinv_currency_symbol();
387
-		$localize['currency_pos']         = wpinv_currency_position();
388
-		$localize['thousand_sep']         = wpinv_thousands_separator();
389
-		$localize['decimal_sep']          = wpinv_decimal_separator();
390
-		$localize['decimals']             = wpinv_decimals();
391
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
392
-		$localize['UseTaxes']             = wpinv_use_taxes();
393
-		$localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
394
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
395
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
396
-
397
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
398
-
399
-		wp_enqueue_script( 'jquery-blockui' );
400
-		$autofill_api = wpinv_get_option('address_autofill_api');
401
-		$autofill_active = wpinv_get_option('address_autofill_active');
402
-		if ( isset( $autofill_active ) && 1 == $autofill_active && !empty( $autofill_api ) && wpinv_is_checkout() ) {
403
-			if ( wp_script_is( 'google-maps-api', 'enqueued' ) ) {
404
-				wp_dequeue_script( 'google-maps-api' );
405
-			}
406
-			wp_enqueue_script( 'google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array( 'jquery' ), '', false );
407
-			wp_enqueue_script( 'google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array( 'jquery', 'google-maps-api' ), '', true );
408
-		}
409
-
410
-		wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all' );
411
-		wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
412
-
413
-		wp_enqueue_script( 'wpinv-front-script' );
414
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
415
-
416
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
417
-		wp_enqueue_script( 'wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'wpinv-front-script', 'wp-hooks' ),  $version, true );
418
-	}
419
-
420
-	public function wpinv_actions() {
421
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
422
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
423
-		}
424
-	}
425
-
426
-	/**
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * Tax instance.
40
+     *
41
+     * @var WPInv_EUVat
42
+     */
43
+    public $tax;
44
+
45
+    /**
46
+     * @param array An array of payment gateways.
47
+     */
48
+    public $gateways;
49
+
50
+    /**
51
+     * Class constructor.
52
+     */
53
+    public function __construct() {
54
+        $this->define_constants();
55
+        $this->includes();
56
+        $this->init_hooks();
57
+        $this->set_properties();
58
+    }
59
+
60
+    /**
61
+     * Sets a custom data property.
62
+     * 
63
+     * @param string $prop The prop to set.
64
+     * @param mixed $value The value to retrieve.
65
+     */
66
+    public function set( $prop, $value ) {
67
+        $this->data[ $prop ] = $value;
68
+    }
69
+
70
+    /**
71
+     * Gets a custom data property.
72
+     *
73
+     * @param string $prop The prop to set.
74
+     * @return mixed The value.
75
+     */
76
+    public function get( $prop ) {
77
+
78
+        if ( isset( $this->data[ $prop ] ) ) {
79
+            return $this->data[ $prop ];
80
+        }
81
+
82
+        return null;
83
+    }
84
+
85
+    /**
86
+     * Define class properties.
87
+     */
88
+    public function set_properties() {
89
+
90
+        // Sessions.
91
+        $this->set( 'session', new WPInv_Session_Handler() );
92
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
93
+        $this->tax              = new WPInv_EUVat();
94
+        $this->tax->init();
95
+        $GLOBALS['wpinv_euvat'] = $this->tax; // Backwards compatibility.
96
+
97
+        // Init other objects.
98
+        $this->set( 'reports', new WPInv_Reports() ); // TODO: Refactor.
99
+        $this->set( 'session', new WPInv_Session_Handler() );
100
+        $this->set( 'notes', new WPInv_Notes() );
101
+        $this->set( 'api', new WPInv_API() );
102
+        $this->set( 'post_types', new GetPaid_Post_Types() );
103
+        $this->set( 'template', new GetPaid_Template() );
104
+        $this->set( 'admin', new GetPaid_Admin() );
105
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
106
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
107
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
108
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
109
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
110
+
111
+    }
112
+
113
+        /**
114
+         * Define plugin constants.
115
+         */
116
+    public function define_constants() {
117
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
118
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
119
+        $this->version = WPINV_VERSION;
120
+    }
121
+
122
+    /**
123
+     * Hook into actions and filters.
124
+     *
125
+     * @since 1.0.19
126
+     */
127
+    protected function init_hooks() {
128
+        /* Internationalize the text strings used. */
129
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
130
+
131
+        // Init the plugin after WordPress inits.
132
+        add_action( 'init', array( $this, 'init' ), 1 );
133
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
134
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
135
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
136
+
137
+        if ( class_exists( 'BuddyPress' ) ) {
138
+            add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
139
+        }
140
+
141
+        add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
142
+        add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
143
+        add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
144
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
145
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
146
+
147
+        // Fires after registering actions.
148
+        do_action( 'wpinv_actions', $this );
149
+        do_action( 'getpaid_actions', $this );
150
+
151
+    }
152
+
153
+    public function plugins_loaded() {
154
+        /* Internationalize the text strings used. */
155
+        $this->load_textdomain();
156
+
157
+        do_action( 'wpinv_loaded' );
158
+
159
+        // Fix oxygen page builder conflict
160
+        if ( function_exists( 'ct_css_output' ) ) {
161
+            wpinv_oxygen_fix_conflict();
162
+        }
163
+    }
164
+
165
+    /**
166
+     * Load the translation of the plugin.
167
+     *
168
+     * @since 1.0
169
+     */
170
+    public function load_textdomain( $locale = NULL ) {
171
+        if ( empty( $locale ) ) {
172
+            $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
173
+        }
174
+
175
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
176
+
177
+        unload_textdomain( 'invoicing' );
178
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
179
+        load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
180
+
181
+        /**
182
+         * Define language constants.
183
+         */
184
+        require_once( WPINV_PLUGIN_DIR . 'language.php' );
185
+    }
186
+
187
+    /**
188
+     * Include required core files used in admin and on the frontend.
189
+     */
190
+    public function includes() {
191
+
192
+        // Start with the settings.
193
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
194
+
195
+        // Packages/libraries.
196
+        require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
197
+        require_once( WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php' );
198
+
199
+        // Load functions.
200
+        require_once( WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php' );
201
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
202
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
203
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
204
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
205
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
206
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
207
+        require_once( WPINV_PLUGIN_DIR . 'includes/invoice-functions.php' );
208
+        require_once( WPINV_PLUGIN_DIR . 'includes/subscription-functions.php' );
209
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
210
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
211
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
212
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
213
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-user-functions.php' );
214
+        require_once( WPINV_PLUGIN_DIR . 'includes/error-functions.php' );
215
+
216
+        // Register autoloader.
217
+        try {
218
+            spl_autoload_register( array( $this, 'autoload' ), true );
219
+        } catch ( Exception $e ) {
220
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
221
+        }
222
+
223
+        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
224
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
225
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
226
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
227
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-reports.php' );
228
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
229
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
230
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
231
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
232
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
233
+        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
234
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
235
+        require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
236
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
237
+        require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
238
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
239
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
240
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
241
+        require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
242
+        require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
243
+        require_once( WPINV_PLUGIN_DIR . 'widgets/getpaid.php' );
244
+
245
+        /**
246
+         * Load the tax class.
247
+         */
248
+        if ( ! class_exists( 'WPInv_EUVat' ) ) {
249
+            require_once( WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php' );
250
+        }
251
+
252
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
253
+            GetPaid_Post_Types_Admin::init();
254
+
255
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
256
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
257
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php' );
258
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
259
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
260
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
261
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
262
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php' );
263
+            // load the user class only on the users.php page
264
+            global $pagenow;
265
+            if($pagenow=='users.php'){
266
+                new WPInv_Admin_Users();
267
+            }
268
+        }
269
+
270
+        // Register cli commands
271
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
272
+            require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
273
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
274
+        }
275
+
276
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
277
+    }
278
+
279
+    /**
280
+     * Class autoloader
281
+     *
282
+     * @param       string $class_name The name of the class to load.
283
+     * @access      public
284
+     * @since       1.0.19
285
+     * @return      void
286
+     */
287
+    public function autoload( $class_name ) {
288
+
289
+        // Normalize the class name...
290
+        $class_name  = strtolower( $class_name );
291
+
292
+        // ... and make sure it is our class.
293
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
294
+            return;
295
+        }
296
+
297
+        // Next, prepare the file name from the class.
298
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
299
+
300
+        // Base path of the classes.
301
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
302
+
303
+        // And an array of possible locations in order of importance.
304
+        $locations = array(
305
+            "$plugin_path/includes",
306
+            "$plugin_path/includes/data-stores",
307
+            "$plugin_path/includes/gateways",
308
+            "$plugin_path/includes/payments",
309
+            "$plugin_path/includes/api",
310
+            "$plugin_path/includes/admin",
311
+            "$plugin_path/includes/admin/meta-boxes",
312
+        );
313
+
314
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
315
+
316
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
317
+                include trailingslashit( $location ) . $file_name;
318
+                break;
319
+            }
320
+
321
+        }
322
+
323
+    }
324
+
325
+    /**
326
+     * Inits hooks etc.
327
+     */
328
+    public function init() {
329
+
330
+        // Fires before getpaid inits.
331
+        do_action( 'before_getpaid_init', $this );
332
+
333
+        // Load default gateways.
334
+        $gateways = apply_filters(
335
+            'getpaid_default_gateways',
336
+            array(
337
+                'manual'        => 'GetPaid_Manual_Gateway',
338
+                'paypal'        => 'GetPaid_Paypal_Gateway',
339
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
340
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
341
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
342
+            )
343
+        );
344
+
345
+        foreach ( $gateways as $id => $class ) {
346
+            $this->gateways[ $id ] = new $class();
347
+        }
348
+
349
+        // Fires after getpaid inits.
350
+        do_action( 'getpaid_init', $this );
351
+
352
+    }
353
+
354
+    /**
355
+     * Checks if this is an IPN request and processes it.
356
+     */
357
+    public function maybe_process_ipn() {
358
+
359
+        // Ensure that this is an IPN request.
360
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
361
+            return;
362
+        }
363
+
364
+        $gateway = wpinv_clean( $_GET['wpi-gateway'] );
365
+
366
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
367
+        do_action( "wpinv_verify_{$gateway}_ipn" );
368
+        exit;
369
+
370
+    }
371
+
372
+    public function enqueue_scripts() {
373
+        $suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
374
+
375
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css' );
376
+        wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version );
377
+        wp_enqueue_style( 'wpinv_front_style' );
378
+
379
+        // Register scripts
380
+        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
381
+        wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  filemtime( WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js' ) );
382
+
383
+        $localize                         = array();
384
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
385
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
386
+        $localize['currency_symbol']      = wpinv_currency_symbol();
387
+        $localize['currency_pos']         = wpinv_currency_position();
388
+        $localize['thousand_sep']         = wpinv_thousands_separator();
389
+        $localize['decimal_sep']          = wpinv_decimal_separator();
390
+        $localize['decimals']             = wpinv_decimals();
391
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
392
+        $localize['UseTaxes']             = wpinv_use_taxes();
393
+        $localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
394
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
395
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
396
+
397
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
398
+
399
+        wp_enqueue_script( 'jquery-blockui' );
400
+        $autofill_api = wpinv_get_option('address_autofill_api');
401
+        $autofill_active = wpinv_get_option('address_autofill_active');
402
+        if ( isset( $autofill_active ) && 1 == $autofill_active && !empty( $autofill_api ) && wpinv_is_checkout() ) {
403
+            if ( wp_script_is( 'google-maps-api', 'enqueued' ) ) {
404
+                wp_dequeue_script( 'google-maps-api' );
405
+            }
406
+            wp_enqueue_script( 'google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array( 'jquery' ), '', false );
407
+            wp_enqueue_script( 'google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array( 'jquery', 'google-maps-api' ), '', true );
408
+        }
409
+
410
+        wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all' );
411
+        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
412
+
413
+        wp_enqueue_script( 'wpinv-front-script' );
414
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
415
+
416
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
417
+        wp_enqueue_script( 'wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'wpinv-front-script', 'wp-hooks' ),  $version, true );
418
+    }
419
+
420
+    public function wpinv_actions() {
421
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
422
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
423
+        }
424
+    }
425
+
426
+    /**
427 427
      * Fires an action after verifying that a user can fire them.
428
-	 *
429
-	 * Note: If the action is on an invoice, subscription etc, esure that the
430
-	 * current user owns the invoice/subscription.
428
+     *
429
+     * Note: If the action is on an invoice, subscription etc, esure that the
430
+     * current user owns the invoice/subscription.
431 431
      */
432 432
     public function maybe_do_authenticated_action() {
433 433
 
@@ -438,82 +438,82 @@  discard block
 block discarded – undo
438 438
 
439 439
     }
440 440
 
441
-	public function pre_get_posts( $wp_query ) {
442
-		if ( ! is_admin() && !empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] == 'wpi_invoice' && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
443
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses() );
444
-		}
445
-
446
-		return $wp_query;
447
-	}
448
-
449
-	public function bp_invoicing_init() {
450
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
451
-	}
452
-
453
-	/**
454
-	 * Register widgets
455
-	 *
456
-	 */
457
-	public function register_widgets() {
458
-		$widgets = apply_filters(
459
-			'getpaid_widget_classes',
460
-			array(
461
-				'WPInv_Checkout_Widget',
462
-				'WPInv_History_Widget',
463
-				'WPInv_Receipt_Widget',
464
-				'WPInv_Subscriptions_Widget',
465
-				'WPInv_Buy_Item_Widget',
466
-				'WPInv_Messages_Widget',
467
-				'WPInv_GetPaid_Widget'
468
-			)
469
-		);
470
-
471
-		foreach ( $widgets as $widget ) {
472
-			register_widget( $widget );
473
-		}
441
+    public function pre_get_posts( $wp_query ) {
442
+        if ( ! is_admin() && !empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] == 'wpi_invoice' && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
443
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses() );
444
+        }
445
+
446
+        return $wp_query;
447
+    }
448
+
449
+    public function bp_invoicing_init() {
450
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
451
+    }
452
+
453
+    /**
454
+     * Register widgets
455
+     *
456
+     */
457
+    public function register_widgets() {
458
+        $widgets = apply_filters(
459
+            'getpaid_widget_classes',
460
+            array(
461
+                'WPInv_Checkout_Widget',
462
+                'WPInv_History_Widget',
463
+                'WPInv_Receipt_Widget',
464
+                'WPInv_Subscriptions_Widget',
465
+                'WPInv_Buy_Item_Widget',
466
+                'WPInv_Messages_Widget',
467
+                'WPInv_GetPaid_Widget'
468
+            )
469
+        );
470
+
471
+        foreach ( $widgets as $widget ) {
472
+            register_widget( $widget );
473
+        }
474 474
 		
475
-	}
475
+    }
476 476
 
477
-	/**
478
-	 * Remove our pages from yoast sitemaps.
479
-	 *
480
-	 * @since 1.0.19
481
-	 * @param int[] $excluded_posts_ids
482
-	 */
483
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ){
477
+    /**
478
+     * Remove our pages from yoast sitemaps.
479
+     *
480
+     * @since 1.0.19
481
+     * @param int[] $excluded_posts_ids
482
+     */
483
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ){
484 484
 
485
-		// Ensure that we have an array.
486
-		if ( ! is_array( $excluded_posts_ids ) ) {
487
-			$excluded_posts_ids = array();
488
-		}
485
+        // Ensure that we have an array.
486
+        if ( ! is_array( $excluded_posts_ids ) ) {
487
+            $excluded_posts_ids = array();
488
+        }
489 489
 
490
-		// Prepare our pages.
491
-		$our_pages = array();
490
+        // Prepare our pages.
491
+        $our_pages = array();
492 492
 
493
-		// Checkout page.
494
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
493
+        // Checkout page.
494
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
495 495
 
496
-		// Success page.
497
-		$our_pages[] = wpinv_get_option( 'success_page', false );
496
+        // Success page.
497
+        $our_pages[] = wpinv_get_option( 'success_page', false );
498 498
 
499
-		// Failure page.
500
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
499
+        // Failure page.
500
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
501 501
 
502
-		// History page.
503
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
502
+        // History page.
503
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
504 504
 
505
-		// Subscriptions page.
506
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
505
+        // Subscriptions page.
506
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
507 507
 
508
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
508
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
509 509
 
510
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
511
-		return array_unique( $excluded_posts_ids );
510
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
511
+        return array_unique( $excluded_posts_ids );
512 512
 
513
-	}
513
+    }
514 514
 
515
-	public function wp_footer() {
516
-		echo '
515
+    public function wp_footer() {
516
+        echo '
517 517
 			<div class="bsui">
518 518
 				<div  id="getpaid-payment-modal" class="modal" tabindex="-1" role="dialog">
519 519
 					<div class="modal-dialog modal-dialog-centered modal-lg" role="checkout" style="max-width: 650px;">
@@ -524,6 +524,6 @@  discard block
 block discarded – undo
524 524
 				</div>
525 525
 			</div>
526 526
 		';
527
-	}
527
+    }
528 528
 
529 529
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-payment-gateway.php 1 patch
Indentation   +574 added lines, -574 removed lines patch added patch discarded remove patch
@@ -13,449 +13,449 @@  discard block
 block discarded – undo
13 13
  */
14 14
 abstract class GetPaid_Payment_Gateway {
15 15
 
16
-	/**
17
-	 * Set if the place checkout button should be renamed on selection.
18
-	 *
19
-	 * @var string
20
-	 */
21
-	public $checkout_button_text;
22
-
23
-	/**
24
-	 * Boolean whether the method is enabled.
25
-	 *
26
-	 * @var bool
27
-	 */
28
-	public $enabled = true;
29
-
30
-	/**
31
-	 * Payment method id.
32
-	 *
33
-	 * @var string
34
-	 */
35
-	public $id;
36
-
37
-	/**
38
-	 * Payment method order.
39
-	 *
40
-	 * @var int
41
-	 */
42
-	public $order = 10;
43
-
44
-	/**
45
-	 * Payment method title for the frontend.
46
-	 *
47
-	 * @var string
48
-	 */
49
-	public $title;
50
-
51
-	/**
52
-	 * Payment method description for the frontend.
53
-	 *
54
-	 * @var string
55
-	 */
56
-	public $description;
57
-
58
-	/**
59
-	 * Gateway title.
60
-	 *
61
-	 * @var string
62
-	 */
63
-	public $method_title = '';
64
-
65
-	/**
66
-	 * Gateway description.
67
-	 *
68
-	 * @var string
69
-	 */
70
-	public $method_description = '';
71
-
72
-	/**
73
-	 * Countries this gateway is allowed for.
74
-	 *
75
-	 * @var array
76
-	 */
77
-	public $countries;
78
-
79
-	/**
80
-	 * Currencies this gateway is allowed for.
81
-	 *
82
-	 * @var array
83
-	 */
84
-	public $currencies;
85
-
86
-	/**
87
-	 * Currencies this gateway is not allowed for.
88
-	 *
89
-	 * @var array
90
-	 */
91
-	public $exclude_currencies;
92
-
93
-	/**
94
-	 * Maximum transaction amount, zero does not define a maximum.
95
-	 *
96
-	 * @var int
97
-	 */
98
-	public $max_amount = 0;
99
-
100
-	/**
101
-	 * Optional URL to view a transaction.
102
-	 *
103
-	 * @var string
104
-	 */
105
-	public $view_transaction_url = '';
106
-
107
-	/**
108
-	 * Optional URL to view a subscription.
109
-	 *
110
-	 * @var string
111
-	 */
112
-	public $view_subscription_url = '';
113
-
114
-	/**
115
-	 * Optional label to show for "new payment method" in the payment
116
-	 * method/token selection radio selection.
117
-	 *
118
-	 * @var string
119
-	 */
120
-	public $new_method_label = '';
121
-
122
-	/**
123
-	 * Contains a user's saved tokens for this gateway.
124
-	 *
125
-	 * @var array
126
-	 */
127
-	protected $tokens = array();
128
-
129
-	/**
130
-	 * An array of features that this gateway supports.
131
-	 *
132
-	 * @var array
133
-	 */
134
-	protected $supports = array();
135
-
136
-	/**
137
-	 * Class constructor.
138
-	 */
139
-	public function __construct() {
140
-		$this->enabled = wpinv_is_gateway_active( $this->id );
141
-
142
-		// Register gateway.
143
-		add_filter( 'wpinv_payment_gateways', array( $this, 'register_gateway' ) );
144
-
145
-		// Enable Subscriptions.
146
-		if ( $this->supports( 'subscription' ) ) {
147
-			add_filter( "wpinv_{$this->id}_support_subscription", '__return_true' );
148
-		}
149
-
150
-		// Enable sandbox.
151
-		if ( $this->supports( 'sandbox' ) ) {
152
-			add_filter( "wpinv_{$this->id}_supports_sandbox", '__return_true' );
153
-		}
154
-
155
-		// Gateway settings.
156
-		add_filter( "wpinv_gateway_settings_{$this->id}", array( $this, 'admin_settings' ) );
16
+    /**
17
+     * Set if the place checkout button should be renamed on selection.
18
+     *
19
+     * @var string
20
+     */
21
+    public $checkout_button_text;
22
+
23
+    /**
24
+     * Boolean whether the method is enabled.
25
+     *
26
+     * @var bool
27
+     */
28
+    public $enabled = true;
29
+
30
+    /**
31
+     * Payment method id.
32
+     *
33
+     * @var string
34
+     */
35
+    public $id;
36
+
37
+    /**
38
+     * Payment method order.
39
+     *
40
+     * @var int
41
+     */
42
+    public $order = 10;
43
+
44
+    /**
45
+     * Payment method title for the frontend.
46
+     *
47
+     * @var string
48
+     */
49
+    public $title;
50
+
51
+    /**
52
+     * Payment method description for the frontend.
53
+     *
54
+     * @var string
55
+     */
56
+    public $description;
57
+
58
+    /**
59
+     * Gateway title.
60
+     *
61
+     * @var string
62
+     */
63
+    public $method_title = '';
64
+
65
+    /**
66
+     * Gateway description.
67
+     *
68
+     * @var string
69
+     */
70
+    public $method_description = '';
71
+
72
+    /**
73
+     * Countries this gateway is allowed for.
74
+     *
75
+     * @var array
76
+     */
77
+    public $countries;
78
+
79
+    /**
80
+     * Currencies this gateway is allowed for.
81
+     *
82
+     * @var array
83
+     */
84
+    public $currencies;
85
+
86
+    /**
87
+     * Currencies this gateway is not allowed for.
88
+     *
89
+     * @var array
90
+     */
91
+    public $exclude_currencies;
92
+
93
+    /**
94
+     * Maximum transaction amount, zero does not define a maximum.
95
+     *
96
+     * @var int
97
+     */
98
+    public $max_amount = 0;
99
+
100
+    /**
101
+     * Optional URL to view a transaction.
102
+     *
103
+     * @var string
104
+     */
105
+    public $view_transaction_url = '';
106
+
107
+    /**
108
+     * Optional URL to view a subscription.
109
+     *
110
+     * @var string
111
+     */
112
+    public $view_subscription_url = '';
113
+
114
+    /**
115
+     * Optional label to show for "new payment method" in the payment
116
+     * method/token selection radio selection.
117
+     *
118
+     * @var string
119
+     */
120
+    public $new_method_label = '';
121
+
122
+    /**
123
+     * Contains a user's saved tokens for this gateway.
124
+     *
125
+     * @var array
126
+     */
127
+    protected $tokens = array();
128
+
129
+    /**
130
+     * An array of features that this gateway supports.
131
+     *
132
+     * @var array
133
+     */
134
+    protected $supports = array();
135
+
136
+    /**
137
+     * Class constructor.
138
+     */
139
+    public function __construct() {
140
+        $this->enabled = wpinv_is_gateway_active( $this->id );
141
+
142
+        // Register gateway.
143
+        add_filter( 'wpinv_payment_gateways', array( $this, 'register_gateway' ) );
144
+
145
+        // Enable Subscriptions.
146
+        if ( $this->supports( 'subscription' ) ) {
147
+            add_filter( "wpinv_{$this->id}_support_subscription", '__return_true' );
148
+        }
149
+
150
+        // Enable sandbox.
151
+        if ( $this->supports( 'sandbox' ) ) {
152
+            add_filter( "wpinv_{$this->id}_supports_sandbox", '__return_true' );
153
+        }
154
+
155
+        // Gateway settings.
156
+        add_filter( "wpinv_gateway_settings_{$this->id}", array( $this, 'admin_settings' ) );
157 157
 		
158 158
 
159
-		// Gateway checkout fiellds.
160
-		add_action( "wpinv_{$this->id}_cc_form", array( $this, 'payment_fields' ), 10, 2 );
161
-
162
-		// Process payment.
163
-		add_action( "getpaid_gateway_{$this->id}", array( $this, 'process_payment' ), 10, 3 );
159
+        // Gateway checkout fiellds.
160
+        add_action( "wpinv_{$this->id}_cc_form", array( $this, 'payment_fields' ), 10, 2 );
161
+
162
+        // Process payment.
163
+        add_action( "getpaid_gateway_{$this->id}", array( $this, 'process_payment' ), 10, 3 );
164
+
165
+        // Change the checkout button text.
166
+        if ( ! empty( $this->checkout_button_text ) ) {
167
+            add_filter( "getpaid_gateway_{$this->id}_checkout_button_label", array( $this, 'rename_checkout_button' ) );
168
+        }
169
+
170
+        // Check if a gateway is valid for a given currency.
171
+        add_filter( "getpaid_gateway_{$this->id}_is_valid_for_currency", array( $this, 'validate_currency' ), 10, 2 );
172
+
173
+        // Generate the transaction url.
174
+        add_filter( "getpaid_gateway_{$this->id}_transaction_url", array( $this, 'filter_transaction_url' ), 10, 2 );
175
+
176
+        // Generate the subscription url.
177
+        add_filter( "getpaid_gateway_{$this->id}_subscription_url", array( $this, 'filter_subscription_url' ), 10, 2 );
178
+
179
+        // Confirm payments.
180
+        add_filter( "wpinv_payment_confirm_{$this->id}", array( $this, 'confirm_payment' ), 10, 2 );
181
+
182
+        // Verify IPNs.
183
+        add_action( "wpinv_verify_{$this->id}_ipn", array( $this, 'verify_ipn' ) );
184
+
185
+    }
186
+
187
+    /**
188
+     * Checks if this gateway is a given gateway.
189
+     *
190
+     * @since 1.0.19
191
+     * @return bool
192
+     */
193
+    public function is( $gateway ) {
194
+        return $gateway == $this->id;
195
+    }
196
+
197
+    /**
198
+     * Returns a users saved tokens for this gateway.
199
+     *
200
+     * @since 1.0.19
201
+     * @return array
202
+     */
203
+    public function get_tokens( $sandbox = null ) {
204
+
205
+        if ( is_user_logged_in() && $this->supports( 'tokens' ) && 0 == count( $this->tokens ) ) {
206
+            $tokens = get_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", true );
207
+
208
+            if ( is_array( $tokens ) ) {
209
+                $this->tokens = $tokens;
210
+            }
211
+
212
+        }
213
+
214
+        if ( ! is_bool( $sandbox ) ) {
215
+            return $this->tokens;
216
+        }
217
+
218
+        $args = array( 'type' => $sandbox ? 'sandbox' : 'live' );
219
+        return wp_list_filter( $this->tokens, $args );
220
+
221
+    }
222
+
223
+    /**
224
+     * Saves a token for this gateway.
225
+     *
226
+     * @since 1.0.19
227
+     */
228
+    public function save_token( $token ) {
229
+
230
+        $tokens   = $this->get_tokens();
231
+        $tokens[] = $token;
232
+
233
+        update_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", $tokens );
234
+
235
+        $this->tokens = $tokens;
236
+
237
+    }
238
+
239
+    /**
240
+     * Return the title for admin screens.
241
+     *
242
+     * @return string
243
+     */
244
+    public function get_method_title() {
245
+        return apply_filters( 'getpaid_gateway_method_title', $this->method_title, $this );
246
+    }
247
+
248
+    /**
249
+     * Return the description for admin screens.
250
+     *
251
+     * @return string
252
+     */
253
+    public function get_method_description() {
254
+        return apply_filters( 'getpaid_gateway_method_description', $this->method_description, $this );
255
+    }
256
+
257
+    /**
258
+     * Get the success url.
259
+     *
260
+     * @param WPInv_Invoice $invoice Invoice object.
261
+     * @return string
262
+     */
263
+    public function get_return_url( $invoice ) {
264
+
265
+        // Payment success url
266
+        $return_url = add_query_arg(
267
+            array(
268
+                'payment-confirm' => $this->id,
269
+                'invoice_key'     => $invoice->get_key(),
270
+                'utm_nooverride'  => 1
271
+            ),
272
+            wpinv_get_success_page_uri()
273
+        );
274
+
275
+        return apply_filters( 'getpaid_gateway_success_url', $return_url, $invoice, $this );
276
+    }
277
+
278
+    /**
279
+     * Confirms payments when rendering the success page.
280
+     *
281
+     * @param string $content Success page content.
282
+     * @return string
283
+     */
284
+    public function confirm_payment( $content ) {
285
+
286
+        // Retrieve the invoice.
287
+        $invoice_id = getpaid_get_current_invoice_id();
288
+        $invoice    = wpinv_get_invoice( $invoice_id );
289
+
290
+        // Ensure that it exists and that it is pending payment.
291
+        if ( empty( $invoice_id ) || ! $invoice->needs_payment() ) {
292
+            return $content;
293
+        }
294
+
295
+        // Can the user view this invoice??
296
+        if ( ! wpinv_user_can_view_invoice( $invoice ) ) {
297
+            return $content;
298
+        }
299
+
300
+        // Show payment processing indicator.
301
+        return wpinv_get_template_html( 'wpinv-payment-processing.php', compact( 'invoice' ) );
302
+    }
303
+
304
+    /**
305
+     * Processes ipns and marks payments as complete.
306
+     *
307
+     * @return void
308
+     */
309
+    public function verify_ipn() {}
310
+
311
+    /**
312
+     * Get a link to the transaction on the 3rd party gateway site (if applicable).
313
+     *
314
+     * @param string $transaction_url transaction url.
315
+     * @param WPInv_Invoice $invoice Invoice object.
316
+     * @return string transaction URL, or empty string.
317
+     */
318
+    public function filter_transaction_url( $transaction_url, $invoice ) {
319
+
320
+        $transaction_id  = $invoice->get_transaction_id();
321
+
322
+        if ( ! empty( $this->view_transaction_url ) && ! empty( $transaction_id ) ) {
323
+            $transaction_url = sprintf( $this->view_transaction_url, $transaction_id );
324
+            $replace         = $this->is_sandbox( $invoice ) ? 'sandbox' : '';
325
+            $transaction_url = str_replace( '{sandbox}', $replace, $transaction_url );
326
+        }
327
+
328
+        return $transaction_url;
329
+    }
330
+
331
+    /**
332
+     * Get a link to the subscription on the 3rd party gateway site (if applicable).
333
+     *
334
+     * @param string $subscription_url transaction url.
335
+     * @param WPInv_Invoice $invoice Invoice object.
336
+     * @return string subscription URL, or empty string.
337
+     */
338
+    public function filter_subscription_url( $subscription_url, $invoice ) {
339
+
340
+        $profile_id      = $invoice->get_subscription_id();
341
+
342
+        if ( ! empty( $this->view_subscription_url ) && ! empty( $profile_id ) ) {
343
+
344
+            $subscription_url = sprintf( $this->view_subscription_url, $profile_id );
345
+            $replace          = $this->is_sandbox( $invoice ) ? 'sandbox' : '';
346
+            $subscription_url = str_replace( '{sandbox}', $replace, $subscription_url );
347
+
348
+        }
349
+
350
+        return $subscription_url;
351
+    }
352
+
353
+    /**
354
+     * Check if the gateway is available for use.
355
+     *
356
+     * @return bool
357
+     */
358
+    public function is_available() {
359
+        return ! empty( $this->enabled );
360
+    }
361
+
362
+    /**
363
+     * Return the gateway's title.
364
+     *
365
+     * @return string
366
+     */
367
+    public function get_title() {
368
+        return apply_filters( 'getpaid_gateway_title', $this->title, $this );
369
+    }
370
+
371
+    /**
372
+     * Return the gateway's description.
373
+     *
374
+     * @return string
375
+     */
376
+    public function get_description() {
377
+        return apply_filters( 'getpaid_gateway_description', $this->description, $this );
378
+    }
379
+
380
+    /**
381
+     * Process Payment.
382
+     *
383
+     *
384
+     * @param WPInv_Invoice $invoice Invoice.
385
+     * @param array $submission_data Posted checkout fields.
386
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
387
+     * @return void
388
+     */
389
+    public function process_payment( $invoice, $submission_data, $submission ) {
390
+        // Process the payment then either redirect to the success page or the gateway.
391
+        do_action( 'getpaid_process_invoice_payment_' . $this->id, $invoice, $submission_data, $submission );
392
+    }
393
+
394
+    /**
395
+     * Process refund.
396
+     *
397
+     * If the gateway declares 'refunds' support, this will allow it to refund.
398
+     * a passed in amount.
399
+     *
400
+     * @param WPInv_Invoice $invoice Invoice.
401
+     * @param  float  $amount Refund amount.
402
+     * @param  string $reason Refund reason.
403
+     * @return WP_Error|bool True or false based on success, or a WP_Error object.
404
+     */
405
+    public function process_refund( $invoice, $amount = null, $reason = '' ) {
406
+        return apply_filters( 'getpaid_process_invoice_refund_' . $this->id, false, $invoice, $amount, $reason );
407
+    }
408
+
409
+    /**
410
+     * Displays the payment fields, credit cards etc.
411
+     * 
412
+     * @param int $invoice_id 0 or invoice id.
413
+     * @param GetPaid_Payment_Form $form Current payment form.
414
+     */
415
+    public function payment_fields( $invoice_id, $form ) {
416
+        do_action( 'getpaid_getpaid_gateway_payment_fields_' . $this->id, $invoice_id, $form );
417
+    }
418
+
419
+    /**
420
+     * Filters the gateway settings.
421
+     * 
422
+     * @param array $admin_settings
423
+     */
424
+    public function admin_settings( $admin_settings ) {
425
+        return $admin_settings;
426
+    }
427
+
428
+    /**
429
+     * Retrieves the value of a gateway setting.
430
+     * 
431
+     * @param string $option
432
+     */
433
+    public function get_option( $option, $default = false ) {
434
+        return wpinv_get_option( $this->id . '_' . $option, $default );
435
+    }
436
+
437
+    /**
438
+     * Check if a gateway supports a given feature.
439
+     *
440
+     * Gateways should override this to declare support (or lack of support) for a feature.
441
+     * For backward compatibility, gateways support 'products' by default, but nothing else.
442
+     *
443
+     * @param string $feature string The name of a feature to test support for.
444
+     * @return bool True if the gateway supports the feature, false otherwise.
445
+     * @since 1.0.19
446
+     */
447
+    public function supports( $feature ) {
448
+        return apply_filters( 'getpaid_payment_gateway_supports', in_array( $feature, $this->supports ), $feature, $this );
449
+    }
164 450
 
165
-		// Change the checkout button text.
166
-		if ( ! empty( $this->checkout_button_text ) ) {
167
-			add_filter( "getpaid_gateway_{$this->id}_checkout_button_label", array( $this, 'rename_checkout_button' ) );
168
-		}
169
-
170
-		// Check if a gateway is valid for a given currency.
171
-		add_filter( "getpaid_gateway_{$this->id}_is_valid_for_currency", array( $this, 'validate_currency' ), 10, 2 );
172
-
173
-		// Generate the transaction url.
174
-		add_filter( "getpaid_gateway_{$this->id}_transaction_url", array( $this, 'filter_transaction_url' ), 10, 2 );
175
-
176
-		// Generate the subscription url.
177
-		add_filter( "getpaid_gateway_{$this->id}_subscription_url", array( $this, 'filter_subscription_url' ), 10, 2 );
178
-
179
-		// Confirm payments.
180
-		add_filter( "wpinv_payment_confirm_{$this->id}", array( $this, 'confirm_payment' ), 10, 2 );
181
-
182
-		// Verify IPNs.
183
-		add_action( "wpinv_verify_{$this->id}_ipn", array( $this, 'verify_ipn' ) );
184
-
185
-	}
186
-
187
-	/**
188
-	 * Checks if this gateway is a given gateway.
189
-	 *
190
-	 * @since 1.0.19
191
-	 * @return bool
192
-	 */
193
-	public function is( $gateway ) {
194
-		return $gateway == $this->id;
195
-	}
196
-
197
-	/**
198
-	 * Returns a users saved tokens for this gateway.
199
-	 *
200
-	 * @since 1.0.19
201
-	 * @return array
202
-	 */
203
-	public function get_tokens( $sandbox = null ) {
204
-
205
-		if ( is_user_logged_in() && $this->supports( 'tokens' ) && 0 == count( $this->tokens ) ) {
206
-			$tokens = get_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", true );
207
-
208
-			if ( is_array( $tokens ) ) {
209
-				$this->tokens = $tokens;
210
-			}
211
-
212
-		}
213
-
214
-		if ( ! is_bool( $sandbox ) ) {
215
-			return $this->tokens;
216
-		}
217
-
218
-		$args = array( 'type' => $sandbox ? 'sandbox' : 'live' );
219
-		return wp_list_filter( $this->tokens, $args );
220
-
221
-	}
222
-
223
-	/**
224
-	 * Saves a token for this gateway.
225
-	 *
226
-	 * @since 1.0.19
227
-	 */
228
-	public function save_token( $token ) {
229
-
230
-		$tokens   = $this->get_tokens();
231
-		$tokens[] = $token;
232
-
233
-		update_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", $tokens );
234
-
235
-		$this->tokens = $tokens;
236
-
237
-	}
238
-
239
-	/**
240
-	 * Return the title for admin screens.
241
-	 *
242
-	 * @return string
243
-	 */
244
-	public function get_method_title() {
245
-		return apply_filters( 'getpaid_gateway_method_title', $this->method_title, $this );
246
-	}
247
-
248
-	/**
249
-	 * Return the description for admin screens.
250
-	 *
251
-	 * @return string
252
-	 */
253
-	public function get_method_description() {
254
-		return apply_filters( 'getpaid_gateway_method_description', $this->method_description, $this );
255
-	}
256
-
257
-	/**
258
-	 * Get the success url.
259
-	 *
260
-	 * @param WPInv_Invoice $invoice Invoice object.
261
-	 * @return string
262
-	 */
263
-	public function get_return_url( $invoice ) {
264
-
265
-		// Payment success url
266
-		$return_url = add_query_arg(
267
-			array(
268
-				'payment-confirm' => $this->id,
269
-				'invoice_key'     => $invoice->get_key(),
270
-				'utm_nooverride'  => 1
271
-			),
272
-			wpinv_get_success_page_uri()
273
-		);
274
-
275
-		return apply_filters( 'getpaid_gateway_success_url', $return_url, $invoice, $this );
276
-	}
277
-
278
-	/**
279
-	 * Confirms payments when rendering the success page.
280
-	 *
281
-	 * @param string $content Success page content.
282
-	 * @return string
283
-	 */
284
-	public function confirm_payment( $content ) {
285
-
286
-		// Retrieve the invoice.
287
-		$invoice_id = getpaid_get_current_invoice_id();
288
-		$invoice    = wpinv_get_invoice( $invoice_id );
289
-
290
-		// Ensure that it exists and that it is pending payment.
291
-		if ( empty( $invoice_id ) || ! $invoice->needs_payment() ) {
292
-			return $content;
293
-		}
294
-
295
-		// Can the user view this invoice??
296
-		if ( ! wpinv_user_can_view_invoice( $invoice ) ) {
297
-			return $content;
298
-		}
299
-
300
-		// Show payment processing indicator.
301
-		return wpinv_get_template_html( 'wpinv-payment-processing.php', compact( 'invoice' ) );
302
-	}
303
-
304
-	/**
305
-	 * Processes ipns and marks payments as complete.
306
-	 *
307
-	 * @return void
308
-	 */
309
-	public function verify_ipn() {}
310
-
311
-	/**
312
-	 * Get a link to the transaction on the 3rd party gateway site (if applicable).
313
-	 *
314
-	 * @param string $transaction_url transaction url.
315
-	 * @param WPInv_Invoice $invoice Invoice object.
316
-	 * @return string transaction URL, or empty string.
317
-	 */
318
-	public function filter_transaction_url( $transaction_url, $invoice ) {
319
-
320
-		$transaction_id  = $invoice->get_transaction_id();
321
-
322
-		if ( ! empty( $this->view_transaction_url ) && ! empty( $transaction_id ) ) {
323
-			$transaction_url = sprintf( $this->view_transaction_url, $transaction_id );
324
-			$replace         = $this->is_sandbox( $invoice ) ? 'sandbox' : '';
325
-			$transaction_url = str_replace( '{sandbox}', $replace, $transaction_url );
326
-		}
327
-
328
-		return $transaction_url;
329
-	}
330
-
331
-	/**
332
-	 * Get a link to the subscription on the 3rd party gateway site (if applicable).
333
-	 *
334
-	 * @param string $subscription_url transaction url.
335
-	 * @param WPInv_Invoice $invoice Invoice object.
336
-	 * @return string subscription URL, or empty string.
337
-	 */
338
-	public function filter_subscription_url( $subscription_url, $invoice ) {
339
-
340
-		$profile_id      = $invoice->get_subscription_id();
341
-
342
-		if ( ! empty( $this->view_subscription_url ) && ! empty( $profile_id ) ) {
343
-
344
-			$subscription_url = sprintf( $this->view_subscription_url, $profile_id );
345
-			$replace          = $this->is_sandbox( $invoice ) ? 'sandbox' : '';
346
-			$subscription_url = str_replace( '{sandbox}', $replace, $subscription_url );
347
-
348
-		}
349
-
350
-		return $subscription_url;
351
-	}
352
-
353
-	/**
354
-	 * Check if the gateway is available for use.
355
-	 *
356
-	 * @return bool
357
-	 */
358
-	public function is_available() {
359
-		return ! empty( $this->enabled );
360
-	}
361
-
362
-	/**
363
-	 * Return the gateway's title.
364
-	 *
365
-	 * @return string
366
-	 */
367
-	public function get_title() {
368
-		return apply_filters( 'getpaid_gateway_title', $this->title, $this );
369
-	}
370
-
371
-	/**
372
-	 * Return the gateway's description.
373
-	 *
374
-	 * @return string
375
-	 */
376
-	public function get_description() {
377
-		return apply_filters( 'getpaid_gateway_description', $this->description, $this );
378
-	}
379
-
380
-	/**
381
-	 * Process Payment.
382
-	 *
383
-	 *
384
-	 * @param WPInv_Invoice $invoice Invoice.
385
-	 * @param array $submission_data Posted checkout fields.
386
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
387
-	 * @return void
388
-	 */
389
-	public function process_payment( $invoice, $submission_data, $submission ) {
390
-		// Process the payment then either redirect to the success page or the gateway.
391
-		do_action( 'getpaid_process_invoice_payment_' . $this->id, $invoice, $submission_data, $submission );
392
-	}
393
-
394
-	/**
395
-	 * Process refund.
396
-	 *
397
-	 * If the gateway declares 'refunds' support, this will allow it to refund.
398
-	 * a passed in amount.
399
-	 *
400
-	 * @param WPInv_Invoice $invoice Invoice.
401
-	 * @param  float  $amount Refund amount.
402
-	 * @param  string $reason Refund reason.
403
-	 * @return WP_Error|bool True or false based on success, or a WP_Error object.
404
-	 */
405
-	public function process_refund( $invoice, $amount = null, $reason = '' ) {
406
-		return apply_filters( 'getpaid_process_invoice_refund_' . $this->id, false, $invoice, $amount, $reason );
407
-	}
408
-
409
-	/**
410
-	 * Displays the payment fields, credit cards etc.
411
-	 * 
412
-	 * @param int $invoice_id 0 or invoice id.
413
-	 * @param GetPaid_Payment_Form $form Current payment form.
414
-	 */
415
-	public function payment_fields( $invoice_id, $form ) {
416
-		do_action( 'getpaid_getpaid_gateway_payment_fields_' . $this->id, $invoice_id, $form );
417
-	}
418
-
419
-	/**
420
-	 * Filters the gateway settings.
421
-	 * 
422
-	 * @param array $admin_settings
423
-	 */
424
-	public function admin_settings( $admin_settings ) {
425
-		return $admin_settings;
426
-	}
427
-
428
-	/**
429
-	 * Retrieves the value of a gateway setting.
430
-	 * 
431
-	 * @param string $option
432
-	 */
433
-	public function get_option( $option, $default = false ) {
434
-		return wpinv_get_option( $this->id . '_' . $option, $default );
435
-	}
436
-
437
-	/**
438
-	 * Check if a gateway supports a given feature.
439
-	 *
440
-	 * Gateways should override this to declare support (or lack of support) for a feature.
441
-	 * For backward compatibility, gateways support 'products' by default, but nothing else.
442
-	 *
443
-	 * @param string $feature string The name of a feature to test support for.
444
-	 * @return bool True if the gateway supports the feature, false otherwise.
445
-	 * @since 1.0.19
446
-	 */
447
-	public function supports( $feature ) {
448
-		return apply_filters( 'getpaid_payment_gateway_supports', in_array( $feature, $this->supports ), $feature, $this );
449
-	}
450
-
451
-	/**
452
-	 * Returns the credit card form html.
453
-	 * 
454
-	 * @param bool $save whether or not to display the save button.
455
-	 */
451
+    /**
452
+     * Returns the credit card form html.
453
+     * 
454
+     * @param bool $save whether or not to display the save button.
455
+     */
456 456
     public function get_cc_form( $save = false ) {
457 457
 
458
-		ob_start();
458
+        ob_start();
459 459
 
460 460
         $id_prefix = esc_attr( uniqid( $this->id ) );
461 461
 
@@ -550,8 +550,8 @@  discard block
 block discarded – undo
550 550
                                         'name'              => $this->id . '[cc_cvv2]',
551 551
                                         'id'                => "$id_prefix-cc-cvv2",
552 552
                                         'label'             => __( 'CCV', 'invoicing' ),
553
-										'label_type'        => 'vertical',
554
-										'class'             => 'form-control-sm',
553
+                                        'label_type'        => 'vertical',
554
+                                        'class'             => 'form-control-sm',
555 555
                                     )
556 556
                                 );
557 557
                             ?>
@@ -561,175 +561,175 @@  discard block
 block discarded – undo
561 561
 					
562 562
 					<?php
563 563
 
564
-						if ( $save ) {
565
-							echo $this->save_payment_method_checkbox();
566
-						}
564
+                        if ( $save ) {
565
+                            echo $this->save_payment_method_checkbox();
566
+                        }
567 567
 
568
-					?>
568
+                    ?>
569 569
                 </div>
570 570
 
571 571
             </div>
572 572
 		<?php
573 573
 		
574
-		return ob_get_clean();
574
+        return ob_get_clean();
575 575
 
576 576
     }
577 577
 
578
-	/**
579
-	 * Displays a new payment method entry form.
580
-	 *
581
-	 * @since 1.0.19
582
-	 */
583
-	public function new_payment_method_entry( $form ) {
584
-		echo "<div class='getpaid-new-payment-method-form' style='display:none;'>$form</div>";
585
-	}
586
-
587
-	/**
588
-	 * Grab and display our saved payment methods.
589
-	 *
590
-	 * @since 1.0.19
591
-	 */
592
-	public function saved_payment_methods() {
593
-		$html = '<ul class="getpaid-saved-payment-methods m-0 mt-2" data-count="' . esc_attr( count( $this->get_tokens( $this->is_sandbox() ) ) ) . '">';
594
-
595
-		foreach ( $this->get_tokens( $this->is_sandbox() ) as $token ) {
596
-			$html .= $this->get_saved_payment_method_option_html( $token );
597
-		}
598
-
599
-		$html .= $this->get_new_payment_method_option_html();
600
-		$html .= '</ul>';
601
-
602
-		echo apply_filters( 'getpaid_payment_gateway_form_saved_payment_methods_html', $html, $this );
603
-	}
604
-
605
-	/**
606
-	 * Gets saved payment method HTML from a token.
607
-	 *
608
-	 * @since 1.0.19
609
-	 * @param  array $token Payment Token.
610
-	 * @return string Generated payment method HTML
611
-	 */
612
-	public function get_saved_payment_method_option_html( $token ) {
613
-
614
-		return sprintf(
615
-			'<li class="getpaid-payment-method form-group">
578
+    /**
579
+     * Displays a new payment method entry form.
580
+     *
581
+     * @since 1.0.19
582
+     */
583
+    public function new_payment_method_entry( $form ) {
584
+        echo "<div class='getpaid-new-payment-method-form' style='display:none;'>$form</div>";
585
+    }
586
+
587
+    /**
588
+     * Grab and display our saved payment methods.
589
+     *
590
+     * @since 1.0.19
591
+     */
592
+    public function saved_payment_methods() {
593
+        $html = '<ul class="getpaid-saved-payment-methods m-0 mt-2" data-count="' . esc_attr( count( $this->get_tokens( $this->is_sandbox() ) ) ) . '">';
594
+
595
+        foreach ( $this->get_tokens( $this->is_sandbox() ) as $token ) {
596
+            $html .= $this->get_saved_payment_method_option_html( $token );
597
+        }
598
+
599
+        $html .= $this->get_new_payment_method_option_html();
600
+        $html .= '</ul>';
601
+
602
+        echo apply_filters( 'getpaid_payment_gateway_form_saved_payment_methods_html', $html, $this );
603
+    }
604
+
605
+    /**
606
+     * Gets saved payment method HTML from a token.
607
+     *
608
+     * @since 1.0.19
609
+     * @param  array $token Payment Token.
610
+     * @return string Generated payment method HTML
611
+     */
612
+    public function get_saved_payment_method_option_html( $token ) {
613
+
614
+        return sprintf(
615
+            '<li class="getpaid-payment-method form-group">
616 616
 				<label>
617 617
 					<input name="getpaid-%1$s-payment-method" type="radio" value="%2$s" style="width:auto;" class="getpaid-saved-payment-method-token-input" %4$s />
618 618
 					<span>%3$s</span>
619 619
 				</label>
620 620
 			</li>',
621
-			esc_attr( $this->id ),
622
-			esc_attr( $token['id'] ),
623
-			esc_html( $token['name'] ),
624
-			checked( empty( $token['default'] ), false, false )
625
-		);
621
+            esc_attr( $this->id ),
622
+            esc_attr( $token['id'] ),
623
+            esc_html( $token['name'] ),
624
+            checked( empty( $token['default'] ), false, false )
625
+        );
626 626
 
627
-	}
627
+    }
628 628
 
629
-	/**
630
-	 * Displays a radio button for entering a new payment method (new CC details) instead of using a saved method.
631
-	 *
632
-	 * @since 1.0.19
633
-	 */
634
-	public function get_new_payment_method_option_html() {
629
+    /**
630
+     * Displays a radio button for entering a new payment method (new CC details) instead of using a saved method.
631
+     *
632
+     * @since 1.0.19
633
+     */
634
+    public function get_new_payment_method_option_html() {
635 635
 
636
-		$label = apply_filters( 'getpaid_new_payment_method_label', $this->new_method_label ? $this->new_method_label : __( 'Use a new payment method', 'invoicing' ), $this );
636
+        $label = apply_filters( 'getpaid_new_payment_method_label', $this->new_method_label ? $this->new_method_label : __( 'Use a new payment method', 'invoicing' ), $this );
637 637
 
638
-		return sprintf(
639
-			'<li class="getpaid-new-payment-method">
638
+        return sprintf(
639
+            '<li class="getpaid-new-payment-method">
640 640
 				<label>
641 641
 					<input name="getpaid-%1$s-payment-method" type="radio" value="new" style="width:auto;" />
642 642
 					<span>%2$s</span>
643 643
 				</label>
644 644
 			</li>',
645
-			esc_attr( $this->id ),
646
-			esc_html( $label )
647
-		);
645
+            esc_attr( $this->id ),
646
+            esc_html( $label )
647
+        );
648 648
 
649
-	}
649
+    }
650 650
 
651
-	/**
652
-	 * Outputs a checkbox for saving a new payment method to the database.
653
-	 *
654
-	 * @since 1.0.19
655
-	 */
656
-	public function save_payment_method_checkbox() {
651
+    /**
652
+     * Outputs a checkbox for saving a new payment method to the database.
653
+     *
654
+     * @since 1.0.19
655
+     */
656
+    public function save_payment_method_checkbox() {
657 657
 
658
-		return sprintf(
659
-			'<p class="form-group getpaid-save-payment-method">
658
+        return sprintf(
659
+            '<p class="form-group getpaid-save-payment-method">
660 660
 				<label>
661 661
 					<input name="getpaid-%1$s-new-payment-method" type="checkbox" value="true" style="width:auto;" />
662 662
 					<span>%2$s</span>
663 663
 				</label>
664 664
 			</p>',
665
-			esc_attr( $this->id ),
666
-			esc_html__( 'Save payment method', 'invoicing' )
667
-		);
665
+            esc_attr( $this->id ),
666
+            esc_html__( 'Save payment method', 'invoicing' )
667
+        );
668 668
 
669
-	}
669
+    }
670 670
 
671
-	/**
672
-	 * Registers the gateway.
673
-	 *
674
-	 * @return array
675
-	 */
676
-	public function register_gateway( $gateways ) {
671
+    /**
672
+     * Registers the gateway.
673
+     *
674
+     * @return array
675
+     */
676
+    public function register_gateway( $gateways ) {
677 677
 
678
-		$gateways[ $this->id ] = array(
678
+        $gateways[ $this->id ] = array(
679 679
 
680
-			'admin_label'    => $this->method_title,
680
+            'admin_label'    => $this->method_title,
681 681
             'checkout_label' => $this->title,
682
-			'ordering'       => $this->order,
683
-
684
-		);
685
-
686
-		return $gateways;
687
-
688
-	}
689
-
690
-	/**
691
-	 * Checks whether or not this is a sandbox request.
692
-	 *
693
-	 * @param  WPInv_Invoice|null $invoice Invoice object or null.
694
-	 * @return bool
695
-	 */
696
-	public function is_sandbox( $invoice = null ) {
697
-
698
-		if ( ! empty( $invoice ) && ! $invoice->needs_payment() ) {
699
-			return $invoice->get_mode() == 'test';
700
-		}
701
-
702
-		return wpinv_is_test_mode( $this->id );
703
-
704
-	}
705
-
706
-	/**
707
-	 * Renames the checkout button
708
-	 *
709
-	 * @return string
710
-	 */
711
-	public function rename_checkout_button() {
712
-		return $this->checkout_button_text;
713
-	}
714
-
715
-	/**
716
-	 * Validate gateway currency
717
-	 *
718
-	 * @return bool
719
-	 */
720
-	public function validate_currency( $validation, $currency ) {
721
-
722
-		// Required currencies.
723
-		if ( ! empty( $this->currencies ) && ! in_array( $currency, $this->currencies ) ) {
724
-			return false;
725
-		}
726
-
727
-		// Excluded currencies.
728
-		if ( ! empty( $this->exclude_currencies ) && in_array( $currency, $this->exclude_currencies ) ) {
729
-			return false;
730
-		}
731
-
732
-		return $validation;
733
-	}
682
+            'ordering'       => $this->order,
683
+
684
+        );
685
+
686
+        return $gateways;
687
+
688
+    }
689
+
690
+    /**
691
+     * Checks whether or not this is a sandbox request.
692
+     *
693
+     * @param  WPInv_Invoice|null $invoice Invoice object or null.
694
+     * @return bool
695
+     */
696
+    public function is_sandbox( $invoice = null ) {
697
+
698
+        if ( ! empty( $invoice ) && ! $invoice->needs_payment() ) {
699
+            return $invoice->get_mode() == 'test';
700
+        }
701
+
702
+        return wpinv_is_test_mode( $this->id );
703
+
704
+    }
705
+
706
+    /**
707
+     * Renames the checkout button
708
+     *
709
+     * @return string
710
+     */
711
+    public function rename_checkout_button() {
712
+        return $this->checkout_button_text;
713
+    }
714
+
715
+    /**
716
+     * Validate gateway currency
717
+     *
718
+     * @return bool
719
+     */
720
+    public function validate_currency( $validation, $currency ) {
721
+
722
+        // Required currencies.
723
+        if ( ! empty( $this->currencies ) && ! in_array( $currency, $this->currencies ) ) {
724
+            return false;
725
+        }
726
+
727
+        // Excluded currencies.
728
+        if ( ! empty( $this->exclude_currencies ) && in_array( $currency, $this->exclude_currencies ) ) {
729
+            return false;
730
+        }
731
+
732
+        return $validation;
733
+    }
734 734
 
735 735
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-gateway.php 1 patch
Indentation   +223 added lines, -223 removed lines patch added patch discarded remove patch
@@ -13,94 +13,94 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Paypal_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 = 'paypal';
21 21
 
22 22
     /**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27 27
     protected $supports = array( 'subscription', 'sandbox' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34 34
     public $order = 1;
35 35
 
36 36
     /**
37
-	 * Stores line items to send to PayPal.
38
-	 *
39
-	 * @var array
40
-	 */
37
+     * Stores line items to send to PayPal.
38
+     *
39
+     * @var array
40
+     */
41 41
     protected $line_items = array();
42 42
 
43 43
     /**
44
-	 * Endpoint for requests from PayPal.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	protected $notify_url;
49
-
50
-	/**
51
-	 * Endpoint for requests to PayPal.
52
-	 *
53
-	 * @var string
54
-	 */
44
+     * Endpoint for requests from PayPal.
45
+     *
46
+     * @var string
47
+     */
48
+    protected $notify_url;
49
+
50
+    /**
51
+     * Endpoint for requests to PayPal.
52
+     *
53
+     * @var string
54
+     */
55 55
     protected $endpoint;
56 56
     
57 57
     /**
58
-	 * Currencies this gateway is allowed for.
59
-	 *
60
-	 * @var array
61
-	 */
62
-	public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
58
+     * Currencies this gateway is allowed for.
59
+     *
60
+     * @var array
61
+     */
62
+    public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
63 63
 
64 64
     /**
65
-	 * URL to view a transaction.
66
-	 *
67
-	 * @var string
68
-	 */
65
+     * URL to view a transaction.
66
+     *
67
+     * @var string
68
+     */
69 69
     public $view_transaction_url = 'https://www.{sandbox}paypal.com/activity/payment/%s';
70 70
 
71 71
     /**
72
-	 * URL to view a subscription.
73
-	 *
74
-	 * @var string
75
-	 */
76
-	public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
72
+     * URL to view a subscription.
73
+     *
74
+     * @var string
75
+     */
76
+    public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
77 77
 
78 78
     /**
79
-	 * Class constructor.
80
-	 */
81
-	public function __construct() {
79
+     * Class constructor.
80
+     */
81
+    public function __construct() {
82 82
 
83 83
         $this->title                = __( 'PayPal Standard', 'invoicing' );
84 84
         $this->method_title         = __( 'PayPal Standard', 'invoicing' );
85 85
         $this->checkout_button_text = __( 'Proceed to PayPal', 'invoicing' );
86 86
         $this->notify_url           = wpinv_get_ipn_url( $this->id );
87 87
 
88
-		add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
88
+        add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
89 89
         add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
90 90
 
91 91
         parent::__construct();
92 92
     }
93 93
 
94 94
     /**
95
-	 * Process Payment.
96
-	 *
97
-	 *
98
-	 * @param WPInv_Invoice $invoice Invoice.
99
-	 * @param array $submission_data Posted checkout fields.
100
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
101
-	 * @return array
102
-	 */
103
-	public function process_payment( $invoice, $submission_data, $submission ) {
95
+     * Process Payment.
96
+     *
97
+     *
98
+     * @param WPInv_Invoice $invoice Invoice.
99
+     * @param array $submission_data Posted checkout fields.
100
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
101
+     * @return array
102
+     */
103
+    public function process_payment( $invoice, $submission_data, $submission ) {
104 104
 
105 105
         // Get redirect url.
106 106
         $paypal_redirect = $this->get_request_url( $invoice );
@@ -123,15 +123,15 @@  discard block
 block discarded – undo
123 123
     }
124 124
 
125 125
     /**
126
-	 * Get the PayPal request URL for an invoice.
127
-	 *
128
-	 * @param  WPInv_Invoice $invoice Invoice object.
129
-	 * @return string
130
-	 */
131
-	public function get_request_url( $invoice ) {
126
+     * Get the PayPal request URL for an invoice.
127
+     *
128
+     * @param  WPInv_Invoice $invoice Invoice object.
129
+     * @return string
130
+     */
131
+    public function get_request_url( $invoice ) {
132 132
 
133 133
         // Endpoint for this request
134
-		$this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
134
+        $this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
135 135
 
136 136
         // Retrieve paypal args.
137 137
         $paypal_args       = map_deep( $this->get_paypal_args( $invoice ), 'urlencode' );
@@ -144,44 +144,44 @@  discard block
 block discarded – undo
144 144
 
145 145
         return add_query_arg( $paypal_args, $this->endpoint );
146 146
 
147
-	}
147
+    }
148 148
 
149 149
     /**
150
-	 * Get PayPal Args for passing to PP.
151
-	 *
152
-	 * @param  WPInv_Invoice $invoice Invoice object.
153
-	 * @return array
154
-	 */
155
-	protected function get_paypal_args( $invoice ) {
150
+     * Get PayPal Args for passing to PP.
151
+     *
152
+     * @param  WPInv_Invoice $invoice Invoice object.
153
+     * @return array
154
+     */
155
+    protected function get_paypal_args( $invoice ) {
156 156
 
157 157
         // Whether or not to send the line items as one item.
158
-		$force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', false, $invoice );
159
-
160
-		if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
161
-			$force_one_line_item = true;
162
-		}
163
-
164
-		$paypal_args = apply_filters(
165
-			'getpaid_paypal_args',
166
-			array_merge(
167
-				$this->get_transaction_args( $invoice ),
168
-				$this->get_line_item_args( $invoice, $force_one_line_item )
169
-			),
170
-			$invoice
171
-		);
172
-
173
-		return $this->fix_request_length( $invoice, $paypal_args );
158
+        $force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', false, $invoice );
159
+
160
+        if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
161
+            $force_one_line_item = true;
162
+        }
163
+
164
+        $paypal_args = apply_filters(
165
+            'getpaid_paypal_args',
166
+            array_merge(
167
+                $this->get_transaction_args( $invoice ),
168
+                $this->get_line_item_args( $invoice, $force_one_line_item )
169
+            ),
170
+            $invoice
171
+        );
172
+
173
+        return $this->fix_request_length( $invoice, $paypal_args );
174 174
     }
175 175
 
176 176
     /**
177
-	 * Get transaction args for paypal request.
178
-	 *
179
-	 * @param WPInv_Invoice $invoice Invoice object.
180
-	 * @return array
181
-	 */
182
-	protected function get_transaction_args( $invoice ) {
183
-
184
-		return array(
177
+     * Get transaction args for paypal request.
178
+     *
179
+     * @param WPInv_Invoice $invoice Invoice object.
180
+     * @return array
181
+     */
182
+    protected function get_transaction_args( $invoice ) {
183
+
184
+        return array(
185 185
             'cmd'           => '_cart',
186 186
             'business'      => wpinv_get_option( 'paypal_email', false ),
187 187
             'no_shipping'   => '1',
@@ -206,16 +206,16 @@  discard block
 block discarded – undo
206 206
     }
207 207
 
208 208
     /**
209
-	 * Get line item args for paypal request.
210
-	 *
211
-	 * @param  WPInv_Invoice $invoice Invoice object.
212
-	 * @param  bool     $force_one_line_item Create only one item for this invoice.
213
-	 * @return array
214
-	 */
215
-	protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
209
+     * Get line item args for paypal request.
210
+     *
211
+     * @param  WPInv_Invoice $invoice Invoice object.
212
+     * @param  bool     $force_one_line_item Create only one item for this invoice.
213
+     * @return array
214
+     */
215
+    protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
216 216
 
217 217
         // Maybe send invoice as a single item.
218
-		if ( $force_one_line_item ) {
218
+        if ( $force_one_line_item ) {
219 219
             return $this->get_line_item_args_single_item( $invoice );
220 220
         }
221 221
 
@@ -235,129 +235,129 @@  discard block
 block discarded – undo
235 235
             $line_item_args['discount_amount_cart'] = wpinv_sanitize_amount( (float) $invoice->get_total_discount(), 2 );
236 236
         }
237 237
 
238
-		return array_merge( $line_item_args, $this->get_line_items() );
238
+        return array_merge( $line_item_args, $this->get_line_items() );
239 239
 
240 240
     }
241 241
 
242 242
     /**
243
-	 * Get line item args for paypal request as a single line item.
244
-	 *
245
-	 * @param  WPInv_Invoice $invoice Invoice object.
246
-	 * @return array
247
-	 */
248
-	protected function get_line_item_args_single_item( $invoice ) {
249
-		$this->delete_line_items();
243
+     * Get line item args for paypal request as a single line item.
244
+     *
245
+     * @param  WPInv_Invoice $invoice Invoice object.
246
+     * @return array
247
+     */
248
+    protected function get_line_item_args_single_item( $invoice ) {
249
+        $this->delete_line_items();
250 250
 
251 251
         $item_name = sprintf( __( 'Invoice #%s', 'invoicing' ), $invoice->get_number() );
252
-		$this->add_line_item( $item_name, 1, wpinv_sanitize_amount( (float) $invoice->get_total(), 2 ), $invoice->get_id() );
252
+        $this->add_line_item( $item_name, 1, wpinv_sanitize_amount( (float) $invoice->get_total(), 2 ), $invoice->get_id() );
253 253
 
254
-		return $this->get_line_items();
254
+        return $this->get_line_items();
255 255
     }
256 256
 
257 257
     /**
258
-	 * Return all line items.
259
-	 */
260
-	protected function get_line_items() {
261
-		return $this->line_items;
262
-	}
258
+     * Return all line items.
259
+     */
260
+    protected function get_line_items() {
261
+        return $this->line_items;
262
+    }
263 263
 
264 264
     /**
265
-	 * Remove all line items.
266
-	 */
267
-	protected function delete_line_items() {
268
-		$this->line_items = array();
265
+     * Remove all line items.
266
+     */
267
+    protected function delete_line_items() {
268
+        $this->line_items = array();
269 269
     }
270 270
 
271 271
     /**
272
-	 * Prepare line items to send to paypal.
273
-	 *
274
-	 * @param  WPInv_Invoice $invoice Invoice object.
275
-	 */
276
-	protected function prepare_line_items( $invoice ) {
277
-		$this->delete_line_items();
278
-
279
-		// Items.
280
-		foreach ( $invoice->get_items() as $item ) {
281
-			$amount   = $invoice->get_template() == 'amount' ? $item->get_price() : $item->get_sub_total();
282
-			$quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
283
-			$this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
272
+     * Prepare line items to send to paypal.
273
+     *
274
+     * @param  WPInv_Invoice $invoice Invoice object.
275
+     */
276
+    protected function prepare_line_items( $invoice ) {
277
+        $this->delete_line_items();
278
+
279
+        // Items.
280
+        foreach ( $invoice->get_items() as $item ) {
281
+            $amount   = $invoice->get_template() == 'amount' ? $item->get_price() : $item->get_sub_total();
282
+            $quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
283
+            $this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
284 284
         }
285 285
 
286 286
         // Fees.
287
-		foreach ( $invoice->get_fees() as $fee => $data ) {
287
+        foreach ( $invoice->get_fees() as $fee => $data ) {
288 288
             $this->add_line_item( $fee, 1, wpinv_sanitize_amount( $data['initial_fee'] ) );
289 289
         }
290 290
 
291 291
     }
292 292
 
293 293
     /**
294
-	 * Add PayPal Line Item.
295
-	 *
296
-	 * @param  string $item_name Item name.
297
-	 * @param  int    $quantity Item quantity.
298
-	 * @param  float  $amount Amount.
299
-	 * @param  string $item_number Item number.
300
-	 */
301
-	protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
302
-		$index = ( count( $this->line_items ) / 4 ) + 1;
303
-
304
-		$item = apply_filters(
305
-			'getpaid_paypal_line_item',
306
-			array(
307
-				'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
308
-				'quantity'    => (int) $quantity,
309
-				'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
310
-				'item_number' => $item_number,
311
-			),
312
-			$item_name,
313
-			$quantity,
314
-			$amount,
315
-			$item_number
316
-		);
317
-
318
-		$this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
294
+     * Add PayPal Line Item.
295
+     *
296
+     * @param  string $item_name Item name.
297
+     * @param  int    $quantity Item quantity.
298
+     * @param  float  $amount Amount.
299
+     * @param  string $item_number Item number.
300
+     */
301
+    protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
302
+        $index = ( count( $this->line_items ) / 4 ) + 1;
303
+
304
+        $item = apply_filters(
305
+            'getpaid_paypal_line_item',
306
+            array(
307
+                'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
308
+                'quantity'    => (int) $quantity,
309
+                'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
310
+                'item_number' => $item_number,
311
+            ),
312
+            $item_name,
313
+            $quantity,
314
+            $amount,
315
+            $item_number
316
+        );
317
+
318
+        $this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
319 319
         $this->line_items[ 'quantity_' . $index ]    = $item['quantity'];
320 320
         
321 321
         // The price or amount of the product, service, or contribution, not including shipping, handling, or tax.
322
-		$this->line_items[ 'amount_' . $index ]      = $item['amount'];
323
-		$this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
322
+        $this->line_items[ 'amount_' . $index ]      = $item['amount'];
323
+        $this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
324 324
     }
325 325
 
326 326
     /**
327
-	 * If the default request with line items is too long, generate a new one with only one line item.
328
-	 *
329
-	 * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
330
-	 *
331
-	 * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
332
-	 * @param array    $paypal_args Arguments sent to Paypal in the request.
333
-	 * @return array
334
-	 */
335
-	protected function fix_request_length( $invoice, $paypal_args ) {
336
-		$max_paypal_length = 2083;
337
-		$query_candidate   = http_build_query( $paypal_args, '', '&' );
338
-
339
-		if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
340
-			return $paypal_args;
341
-		}
342
-
343
-		return apply_filters(
344
-			'getpaid_paypal_args',
345
-			array_merge(
346
-				$this->get_transaction_args( $invoice ),
347
-				$this->get_line_item_args( $invoice, true )
348
-			),
349
-			$invoice
350
-		);
327
+     * If the default request with line items is too long, generate a new one with only one line item.
328
+     *
329
+     * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
330
+     *
331
+     * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
332
+     * @param array    $paypal_args Arguments sent to Paypal in the request.
333
+     * @return array
334
+     */
335
+    protected function fix_request_length( $invoice, $paypal_args ) {
336
+        $max_paypal_length = 2083;
337
+        $query_candidate   = http_build_query( $paypal_args, '', '&' );
338
+
339
+        if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
340
+            return $paypal_args;
341
+        }
342
+
343
+        return apply_filters(
344
+            'getpaid_paypal_args',
345
+            array_merge(
346
+                $this->get_transaction_args( $invoice ),
347
+                $this->get_line_item_args( $invoice, true )
348
+            ),
349
+            $invoice
350
+        );
351 351
 
352 352
     }
353 353
     
354 354
     /**
355
-	 * Processes recurring invoices.
356
-	 *
357
-	 * @param  array $paypal_args PayPal args.
358
-	 * @param  WPInv_Invoice    $invoice Invoice object.
359
-	 */
360
-	public function process_subscription( $paypal_args, $invoice ) {
355
+     * Processes recurring invoices.
356
+     *
357
+     * @param  array $paypal_args PayPal args.
358
+     * @param  WPInv_Invoice    $invoice Invoice object.
359
+     */
360
+    public function process_subscription( $paypal_args, $invoice ) {
361 361
 
362 362
         // Make sure this is a subscription.
363 363
         if ( ! $invoice->is_recurring() || ! $subscription = wpinv_get_subscription( $invoice ) ) {
@@ -382,11 +382,11 @@  discard block
 block discarded – undo
382 382
 
383 383
             $paypal_args['a1'] = 0 == $initial_amount ? 0 : $initial_amount;
384 384
 
385
-			// Trial period length.
386
-			$paypal_args['p1'] = $subscription_item->get_trial_interval();
385
+            // Trial period length.
386
+            $paypal_args['p1'] = $subscription_item->get_trial_interval();
387 387
 
388
-			// Trial period.
389
-			$paypal_args['t1'] = $subscription_item->get_trial_period();
388
+            // Trial period.
389
+            $paypal_args['t1'] = $subscription_item->get_trial_period();
390 390
 
391 391
         } else if ( $initial_amount != $recurring_amount ) {
392 392
 
@@ -409,40 +409,40 @@  discard block
 block discarded – undo
409 409
         }
410 410
 
411 411
         // We have a recurring payment
412
-		if ( ! isset( $param_number ) || 1 == $param_number ) {
412
+        if ( ! isset( $param_number ) || 1 == $param_number ) {
413 413
 
414
-			// Subscription price
415
-			$paypal_args['a3'] = $recurring_amount;
414
+            // Subscription price
415
+            $paypal_args['a3'] = $recurring_amount;
416 416
 
417
-			// Subscription duration
418
-			$paypal_args['p3'] = $interval;
417
+            // Subscription duration
418
+            $paypal_args['p3'] = $interval;
419 419
 
420
-			// Subscription period
421
-			$paypal_args['t3'] = $period;
420
+            // Subscription period
421
+            $paypal_args['t3'] = $period;
422 422
 
423 423
         }
424 424
         
425 425
         // Recurring payments
426
-		if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
426
+        if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
427 427
 
428
-			// Non-recurring payments
429
-			$paypal_args['src'] = 0;
428
+            // Non-recurring payments
429
+            $paypal_args['src'] = 0;
430 430
 
431
-		} else {
431
+        } else {
432 432
 
433
-			$paypal_args['src'] = 1;
433
+            $paypal_args['src'] = 1;
434 434
 
435
-			if ( $bill_times > 0 ) {
435
+            if ( $bill_times > 0 ) {
436 436
 
437
-				// An initial period is being used to charge a sign-up fee
438
-				if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
439
-					$bill_times--;
440
-				}
437
+                // An initial period is being used to charge a sign-up fee
438
+                if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
439
+                    $bill_times--;
440
+                }
441 441
 
442 442
                 // Make sure it's not over the max of 52
443 443
                 $paypal_args['srt'] = ( $bill_times <= 52 ? absint( $bill_times ) : 52 );
444 444
 
445
-			}
445
+            }
446 446
         }
447 447
         
448 448
         // Force return URL so that order description & instructions display
@@ -458,19 +458,19 @@  discard block
 block discarded – undo
458 458
         }
459 459
 
460 460
         return apply_filters(
461
-			'getpaid_paypal_subscription_args',
462
-			$paypal_args,
463
-			$invoice
461
+            'getpaid_paypal_subscription_args',
462
+            $paypal_args,
463
+            $invoice
464 464
         );
465 465
 
466 466
     }
467 467
 
468 468
     /**
469
-	 * Processes ipns and marks payments as complete.
470
-	 *
471
-	 * @return void
472
-	 */
473
-	public function verify_ipn() {
469
+     * Processes ipns and marks payments as complete.
470
+     *
471
+     * @return void
472
+     */
473
+    public function verify_ipn() {
474 474
         new GetPaid_Paypal_Gateway_IPN_Handler( $this );
475 475
     }
476 476
 
@@ -480,10 +480,10 @@  discard block
 block discarded – undo
480 480
     public function sandbox_notice() {
481 481
 
482 482
         return sprintf(
483
-			__( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %sPayPal Sandbox Testing Guide%s for more details.', 'invoicing' ),
484
-			'<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
485
-			'</a>'
486
-		);
483
+            __( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %sPayPal Sandbox Testing Guide%s for more details.', 'invoicing' ),
484
+            '<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
485
+            '</a>'
486
+        );
487 487
 
488 488
     }
489 489
 
Please login to merge, or discard this patch.
includes/payments/class-getpaid-payment-form-submission-refresh-prices.php 1 patch
Indentation   +160 added lines, -160 removed lines patch added patch discarded remove patch
@@ -12,216 +12,216 @@
 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
-				),
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
+                ),
62 62
 	
63
-				'recurring'     => array(
64
-					'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
65
-					'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
66
-					'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
67
-					'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
68
-					'total'     => $submission->format_amount( $submission->get_recurring_total() ),
69
-				),
63
+                'recurring'     => array(
64
+                    'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
65
+                    'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
66
+                    'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
67
+                    'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
68
+                    'total'     => $submission->format_amount( $submission->get_recurring_total() ),
69
+                ),
70 70
 
71
-			)
72
-		);
71
+            )
72
+        );
73 73
 
74
-	}
74
+    }
75 75
 
76
-	/**
77
-	 * Adds texts to a response for submission refresh prices.
78
-	 *
79
-	 * @param GetPaid_Payment_Form_Submission $submission
80
-	 */
81
-	public function add_texts( $submission ) {
76
+    /**
77
+     * Adds texts to a response for submission refresh prices.
78
+     *
79
+     * @param GetPaid_Payment_Form_Submission $submission
80
+     */
81
+    public function add_texts( $submission ) {
82 82
 
83
-		$payable = $submission->format_amount( $submission->get_total() );
83
+        $payable = $submission->format_amount( $submission->get_total() );
84 84
 
85
-		if ( $submission->has_recurring != 0 ) {
85
+        if ( $submission->has_recurring != 0 ) {
86 86
 
87
-			$recurring = new WPInv_Item( $submission->has_recurring );
88
-			$period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
87
+            $recurring = new WPInv_Item( $submission->has_recurring );
88
+            $period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
89 89
 
90
-			if ( $submission->get_total() == $submission->get_recurring_total() ) {
91
-				$payable = "$payable / $period";
92
-			} else {
93
-				$payable = sprintf(
94
-					__( '%1$s (renews at %2$s / %3$s)'),
95
-					$submission->format_amount( $submission->get_total() ),
96
-					$submission->format_amount( $submission->get_recurring_total() ),
97
-					$period
98
-				);
99
-			}
90
+            if ( $submission->get_total() == $submission->get_recurring_total() ) {
91
+                $payable = "$payable / $period";
92
+            } else {
93
+                $payable = sprintf(
94
+                    __( '%1$s (renews at %2$s / %3$s)'),
95
+                    $submission->format_amount( $submission->get_total() ),
96
+                    $submission->format_amount( $submission->get_recurring_total() ),
97
+                    $period
98
+                );
99
+            }
100 100
 
101
-		}
101
+        }
102 102
 
103
-		$texts = array(
104
-			'.getpaid-checkout-total-payable' => $payable,
105
-		);
103
+        $texts = array(
104
+            '.getpaid-checkout-total-payable' => $payable,
105
+        );
106 106
 
107
-		foreach ( $submission->get_items() as $item_id => $item ) {
108
-			$texts[".item-$item_id .getpaid-item-initial-price"]   = $submission->format_amount( $item->get_sub_total() );
109
-			$texts[".item-$item_id .getpaid-item-recurring-price"] = $submission->format_amount( $item->get_recurring_sub_total() );
110
-		}
107
+        foreach ( $submission->get_items() as $item_id => $item ) {
108
+            $texts[".item-$item_id .getpaid-item-initial-price"]   = $submission->format_amount( $item->get_sub_total() );
109
+            $texts[".item-$item_id .getpaid-item-recurring-price"] = $submission->format_amount( $item->get_recurring_sub_total() );
110
+        }
111 111
 
112
-		$this->response = array_merge( $this->response, array( 'texts' => $texts ) );
112
+        $this->response = array_merge( $this->response, array( 'texts' => $texts ) );
113 113
 
114
-	}
114
+    }
115 115
 
116
-	/**
117
-	 * Adds items to a response for submission refresh prices.
118
-	 *
119
-	 * @param GetPaid_Payment_Form_Submission $submission
120
-	 */
121
-	public function add_items( $submission ) {
116
+    /**
117
+     * Adds items to a response for submission refresh prices.
118
+     *
119
+     * @param GetPaid_Payment_Form_Submission $submission
120
+     */
121
+    public function add_items( $submission ) {
122 122
 
123
-		// Add items.
124
-		$items = array();
123
+        // Add items.
124
+        $items = array();
125 125
 
126 126
         foreach ( $submission->get_items() as $item_id => $item ) {
127
-			$items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
128
-		}
127
+            $items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
128
+        }
129 129
 
130
-		$this->response = array_merge(
131
-			$this->response,
132
-			array( 'items' => $items )
133
-		);
130
+        $this->response = array_merge(
131
+            $this->response,
132
+            array( 'items' => $items )
133
+        );
134 134
 
135
-	}
135
+    }
136 136
 
137
-	/**
138
-	 * Adds fees to a response for submission refresh prices.
139
-	 *
140
-	 * @param GetPaid_Payment_Form_Submission $submission
141
-	 */
142
-	public function add_fees( $submission ) {
137
+    /**
138
+     * Adds fees to a response for submission refresh prices.
139
+     *
140
+     * @param GetPaid_Payment_Form_Submission $submission
141
+     */
142
+    public function add_fees( $submission ) {
143 143
 
144
-		$fees = array();
144
+        $fees = array();
145 145
 
146 146
         foreach ( $submission->get_fees() as $name => $data ) {
147
-			$fees[$name] = $submission->format_amount( $data['initial_fee'] );
148
-		}
147
+            $fees[$name] = $submission->format_amount( $data['initial_fee'] );
148
+        }
149 149
 
150
-		$this->response = array_merge(
151
-			$this->response,
152
-			array( 'fees' => $fees )
153
-		);
150
+        $this->response = array_merge(
151
+            $this->response,
152
+            array( 'fees' => $fees )
153
+        );
154 154
 
155
-	}
155
+    }
156 156
 
157
-	/**
158
-	 * Adds discounts to a response for submission refresh prices.
159
-	 *
160
-	 * @param GetPaid_Payment_Form_Submission $submission
161
-	 */
162
-	public function add_discounts( $submission ) {
157
+    /**
158
+     * Adds discounts to a response for submission refresh prices.
159
+     *
160
+     * @param GetPaid_Payment_Form_Submission $submission
161
+     */
162
+    public function add_discounts( $submission ) {
163 163
 
164
-		$discounts = array();
164
+        $discounts = array();
165 165
 
166 166
         foreach ( $submission->get_discounts() as $name => $data ) {
167
-			$discounts[$name] = $submission->format_amount( $data['initial_discount'] );
168
-		}
167
+            $discounts[$name] = $submission->format_amount( $data['initial_discount'] );
168
+        }
169 169
 
170
-		$this->response = array_merge(
171
-			$this->response,
172
-			array( 'discounts' => $discounts )
173
-		);
170
+        $this->response = array_merge(
171
+            $this->response,
172
+            array( 'discounts' => $discounts )
173
+        );
174 174
 
175
-	}
175
+    }
176 176
 
177
-	/**
178
-	 * Adds taxes to a response for submission refresh prices.
179
-	 *
180
-	 * @param GetPaid_Payment_Form_Submission $submission
181
-	 */
182
-	public function add_taxes( $submission ) {
177
+    /**
178
+     * Adds taxes to a response for submission refresh prices.
179
+     *
180
+     * @param GetPaid_Payment_Form_Submission $submission
181
+     */
182
+    public function add_taxes( $submission ) {
183 183
 
184
-		$taxes = array();
184
+        $taxes = array();
185 185
 
186 186
         foreach ( $submission->get_taxes() as $name => $data ) {
187
-			$taxes[$name] = $submission->format_amount( $data['initial_tax'] );
188
-		}
187
+            $taxes[$name] = $submission->format_amount( $data['initial_tax'] );
188
+        }
189 189
 
190
-		$this->response = array_merge(
191
-			$this->response,
192
-			array( 'taxes' => $taxes )
193
-		);
190
+        $this->response = array_merge(
191
+            $this->response,
192
+            array( 'taxes' => $taxes )
193
+        );
194 194
 
195
-	}
195
+    }
196 196
 
197
-	/**
198
-	 * Adds gateways to a response for submission refresh prices.
199
-	 *
200
-	 * @param GetPaid_Payment_Form_Submission $submission
201
-	 */
202
-	public function add_gateways( $submission ) {
197
+    /**
198
+     * Adds gateways to a response for submission refresh prices.
199
+     *
200
+     * @param GetPaid_Payment_Form_Submission $submission
201
+     */
202
+    public function add_gateways( $submission ) {
203 203
 
204
-		$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
204
+        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
205 205
 
206
-		if ( $this->response['has_recurring'] ) {
206
+        if ( $this->response['has_recurring'] ) {
207 207
 
208
-			foreach ( $gateways as $i => $gateway ) {
208
+            foreach ( $gateways as $i => $gateway ) {
209 209
 
210
-				if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
211
-					unset( $gateways[ $i ] );
212
-				}
210
+                if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
211
+                    unset( $gateways[ $i ] );
212
+                }
213 213
 
214
-			}
214
+            }
215 215
 
216
-		}
216
+        }
217 217
 
218 218
 
219
-		$gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
220
-		$this->response = array_merge(
221
-			$this->response,
222
-			array( 'gateways' => $gateways )
223
-		);
219
+        $gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
220
+        $this->response = array_merge(
221
+            $this->response,
222
+            array( 'gateways' => $gateways )
223
+        );
224 224
 
225
-	}
225
+    }
226 226
 
227 227
 }
Please login to merge, or discard this patch.