Passed
Pull Request — master (#834)
by Kiran
11:34 queued 04:44
created
templates/payment-forms/elements/file_upload.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -21,20 +21,20 @@
 block discarded – undo
21 21
 
22 22
 foreach ( $file_types as $file_type ) {
23 23
 
24
-	if ( isset( $all_types[ $file_type ] ) ) {
25
-		$types[]   = $all_types[ $file_type ];
26
-		$file_type = explode( '|', $file_type );
24
+    if ( isset( $all_types[ $file_type ] ) ) {
25
+        $types[]   = $all_types[ $file_type ];
26
+        $file_type = explode( '|', $file_type );
27 27
 
28
-		foreach ( $file_type as $type ) {
29
-			$type     = trim( $type );
30
-			$types[]  = ".$type";
31
-			$_types[] = $type;
32
-		}
28
+        foreach ( $file_type as $type ) {
29
+            $type     = trim( $type );
30
+            $types[]  = ".$type";
31
+            $_types[] = $type;
32
+        }
33 33
 }
34 34
 }
35 35
 
36 36
 if ( ! empty( $required ) ) {
37
-	$label .= "<span class='text-danger'> *</span>";
37
+    $label .= "<span class='text-danger'> *</span>";
38 38
 }
39 39
 ?>
40 40
 <label><span v-html="form_element.label"></span></label>
Please login to merge, or discard this patch.
includes/class-getpaid-post-types.php 1 patch
Indentation   +295 added lines, -295 removed lines patch added patch discarded remove patch
@@ -15,321 +15,321 @@
 block discarded – undo
15 15
 class GetPaid_Post_Types {
16 16
 
17 17
     /**
18
-	 * Hook in methods.
19
-	 */
20
-	public function __construct() {
21
-		add_action( 'init', array( __CLASS__, 'register_post_types' ), 1 );
22
-		add_action( 'init', array( __CLASS__, 'register_post_status' ), 4 );
23
-		add_action( 'getpaid_flush_rewrite_rules', array( __CLASS__, 'flush_rewrite_rules' ) );
24
-		add_action( 'getpaid_after_register_post_types', array( __CLASS__, 'maybe_flush_rewrite_rules' ) );
25
-	}
18
+     * Hook in methods.
19
+     */
20
+    public function __construct() {
21
+        add_action( 'init', array( __CLASS__, 'register_post_types' ), 1 );
22
+        add_action( 'init', array( __CLASS__, 'register_post_status' ), 4 );
23
+        add_action( 'getpaid_flush_rewrite_rules', array( __CLASS__, 'flush_rewrite_rules' ) );
24
+        add_action( 'getpaid_after_register_post_types', array( __CLASS__, 'maybe_flush_rewrite_rules' ) );
25
+    }
26 26
 
27
-	/**
28
-	 * Register core post types.
29
-	 */
30
-	public static function register_post_types() {
27
+    /**
28
+     * Register core post types.
29
+     */
30
+    public static function register_post_types() {
31 31
 
32
-		if ( ! is_blog_installed() || post_type_exists( 'wpi_item' ) ) {
33
-			return;
34
-		}
32
+        if ( ! is_blog_installed() || post_type_exists( 'wpi_item' ) ) {
33
+            return;
34
+        }
35 35
 
36
-		$capabilities = wpinv_current_user_can_manage_invoicing();
36
+        $capabilities = wpinv_current_user_can_manage_invoicing();
37 37
 
38
-		// Fires before registering post types.
39
-		do_action( 'getpaid_register_post_types' );
38
+        // Fires before registering post types.
39
+        do_action( 'getpaid_register_post_types' );
40 40
 
41
-		// Register item post type.
42
-		register_post_type(
43
-			'wpi_item',
44
-			apply_filters(
45
-				'wpinv_register_post_type_invoice_item',
46
-				array(
47
-					'labels'            => array(
48
-						'name'               => _x( 'Items', 'post type general name', 'invoicing' ),
49
-						'singular_name'      => _x( 'Item', 'post type singular name', 'invoicing' ),
50
-						'menu_name'          => _x( 'Items', 'admin menu', 'invoicing' ),
51
-						'name_admin_bar'     => _x( 'Item', 'add new on admin bar', 'invoicing' ),
52
-						'add_new'            => _x( 'Add New', 'Item', 'invoicing' ),
53
-						'add_new_item'       => __( 'Add New Item', 'invoicing' ),
54
-						'new_item'           => __( 'New Item', 'invoicing' ),
55
-						'edit_item'          => __( 'Edit Item', 'invoicing' ),
56
-						'view_item'          => __( 'View Item', 'invoicing' ),
57
-						'all_items'          => __( 'Items', 'invoicing' ),
58
-						'search_items'       => __( 'Search items', 'invoicing' ),
59
-						'parent_item_colon'  => __( 'Parent item:', 'invoicing' ),
60
-						'not_found'          => __( 'No items found.', 'invoicing' ),
61
-						'not_found_in_trash' => __( 'No items found in trash.', 'invoicing' ),
62
-					),
63
-					'description'       => __( 'This is where you can add new invoice items.', 'invoicing' ),
64
-					'public'            => false,
65
-					'has_archive'       => false,
66
-					'_builtin'          => false,
67
-					'show_ui'           => $capabilities ? true : false,
68
-					'show_in_menu'      => $capabilities ? 'wpinv' : false,
69
-					'show_in_nav_menus' => false,
70
-					'supports'          => array( 'title', 'excerpt', 'thumbnail' ),
71
-					'rewrite'           => false,
72
-					'query_var'         => false,
73
-					'map_meta_cap'      => true,
74
-					'show_in_admin_bar' => $capabilities ? true : false,
75
-					'can_export'        => $capabilities ? true : false
76
-				)
77
-			)
78
-		);
41
+        // Register item post type.
42
+        register_post_type(
43
+            'wpi_item',
44
+            apply_filters(
45
+                'wpinv_register_post_type_invoice_item',
46
+                array(
47
+                    'labels'            => array(
48
+                        'name'               => _x( 'Items', 'post type general name', 'invoicing' ),
49
+                        'singular_name'      => _x( 'Item', 'post type singular name', 'invoicing' ),
50
+                        'menu_name'          => _x( 'Items', 'admin menu', 'invoicing' ),
51
+                        'name_admin_bar'     => _x( 'Item', 'add new on admin bar', 'invoicing' ),
52
+                        'add_new'            => _x( 'Add New', 'Item', 'invoicing' ),
53
+                        'add_new_item'       => __( 'Add New Item', 'invoicing' ),
54
+                        'new_item'           => __( 'New Item', 'invoicing' ),
55
+                        'edit_item'          => __( 'Edit Item', 'invoicing' ),
56
+                        'view_item'          => __( 'View Item', 'invoicing' ),
57
+                        'all_items'          => __( 'Items', 'invoicing' ),
58
+                        'search_items'       => __( 'Search items', 'invoicing' ),
59
+                        'parent_item_colon'  => __( 'Parent item:', 'invoicing' ),
60
+                        'not_found'          => __( 'No items found.', 'invoicing' ),
61
+                        'not_found_in_trash' => __( 'No items found in trash.', 'invoicing' ),
62
+                    ),
63
+                    'description'       => __( 'This is where you can add new invoice items.', 'invoicing' ),
64
+                    'public'            => false,
65
+                    'has_archive'       => false,
66
+                    '_builtin'          => false,
67
+                    'show_ui'           => $capabilities ? true : false,
68
+                    'show_in_menu'      => $capabilities ? 'wpinv' : false,
69
+                    'show_in_nav_menus' => false,
70
+                    'supports'          => array( 'title', 'excerpt', 'thumbnail' ),
71
+                    'rewrite'           => false,
72
+                    'query_var'         => false,
73
+                    'map_meta_cap'      => true,
74
+                    'show_in_admin_bar' => $capabilities ? true : false,
75
+                    'can_export'        => $capabilities ? true : false
76
+                )
77
+            )
78
+        );
79 79
 
80
-		// Register payment form post type.
81
-		register_post_type(
82
-			'wpi_payment_form',
83
-			apply_filters(
84
-				'wpinv_register_post_type_payment_form',
85
-				array(
86
-					'labels'            => array(
87
-						'name'               => _x( 'Payment Forms', 'post type general name', 'invoicing' ),
88
-						'singular_name'      => _x( 'Payment Form', 'post type singular name', 'invoicing' ),
89
-						'menu_name'          => _x( 'Payment Forms', 'admin menu', 'invoicing' ),
90
-						'name_admin_bar'     => _x( 'Payment Form', 'add new on admin bar', 'invoicing' ),
91
-						'add_new'            => _x( 'Add New', 'Payment Form', 'invoicing' ),
92
-						'add_new_item'       => __( 'Add New Payment Form', 'invoicing' ),
93
-						'new_item'           => __( 'New Payment Form', 'invoicing' ),
94
-						'edit_item'          => __( 'Edit Payment Form', 'invoicing' ),
95
-						'view_item'          => __( 'View Payment Form', 'invoicing' ),
96
-						'all_items'          => __( 'Payment Forms', 'invoicing' ),
97
-						'search_items'       => __( 'Search Payment Forms', 'invoicing' ),
98
-						'parent_item_colon'  => __( 'Parent Payment Forms:', 'invoicing' ),
99
-						'not_found'          => __( 'No payment forms found.', 'invoicing' ),
100
-						'not_found_in_trash' => __( 'No payment forms found in trash.', 'invoicing' ),
101
-					),
102
-					'description'       => __( 'Add new payment forms.', 'invoicing' ),
103
-					'public'            => false,
104
-					'show_ui'           => $capabilities ? true : false,
105
-					'show_in_menu'      => $capabilities ? 'wpinv' : false,
106
-					'show_in_nav_menus' => false,
107
-					'query_var'         => false,
108
-					'rewrite'           => true,
109
-					'map_meta_cap'      => true,
110
-					'has_archive'       => false,
111
-					'hierarchical'      => false,
112
-					'menu_position'     => null,
113
-					'supports'          => array( 'title' ),
114
-					'menu_icon'         => 'dashicons-media-form',
115
-				)
116
-			)
117
-		);
80
+        // Register payment form post type.
81
+        register_post_type(
82
+            'wpi_payment_form',
83
+            apply_filters(
84
+                'wpinv_register_post_type_payment_form',
85
+                array(
86
+                    'labels'            => array(
87
+                        'name'               => _x( 'Payment Forms', 'post type general name', 'invoicing' ),
88
+                        'singular_name'      => _x( 'Payment Form', 'post type singular name', 'invoicing' ),
89
+                        'menu_name'          => _x( 'Payment Forms', 'admin menu', 'invoicing' ),
90
+                        'name_admin_bar'     => _x( 'Payment Form', 'add new on admin bar', 'invoicing' ),
91
+                        'add_new'            => _x( 'Add New', 'Payment Form', 'invoicing' ),
92
+                        'add_new_item'       => __( 'Add New Payment Form', 'invoicing' ),
93
+                        'new_item'           => __( 'New Payment Form', 'invoicing' ),
94
+                        'edit_item'          => __( 'Edit Payment Form', 'invoicing' ),
95
+                        'view_item'          => __( 'View Payment Form', 'invoicing' ),
96
+                        'all_items'          => __( 'Payment Forms', 'invoicing' ),
97
+                        'search_items'       => __( 'Search Payment Forms', 'invoicing' ),
98
+                        'parent_item_colon'  => __( 'Parent Payment Forms:', 'invoicing' ),
99
+                        'not_found'          => __( 'No payment forms found.', 'invoicing' ),
100
+                        'not_found_in_trash' => __( 'No payment forms found in trash.', 'invoicing' ),
101
+                    ),
102
+                    'description'       => __( 'Add new payment forms.', 'invoicing' ),
103
+                    'public'            => false,
104
+                    'show_ui'           => $capabilities ? true : false,
105
+                    'show_in_menu'      => $capabilities ? 'wpinv' : false,
106
+                    'show_in_nav_menus' => false,
107
+                    'query_var'         => false,
108
+                    'rewrite'           => true,
109
+                    'map_meta_cap'      => true,
110
+                    'has_archive'       => false,
111
+                    'hierarchical'      => false,
112
+                    'menu_position'     => null,
113
+                    'supports'          => array( 'title' ),
114
+                    'menu_icon'         => 'dashicons-media-form',
115
+                )
116
+            )
117
+        );
118 118
 
119
-		// Register invoice post type.
120
-		register_post_type(
121
-			'wpi_invoice',
122
-			apply_filters(
123
-				'wpinv_register_post_type_invoice',
124
-				array(
125
-					'labels'              => array(
126
-						'name'                  => __( 'Invoices', 'invoicing' ),
127
-						'singular_name'         => __( 'Invoice', 'invoicing' ),
128
-						'all_items'             => __( 'Invoices', 'invoicing' ),
129
-						'menu_name'             => _x( 'Invoices', 'Admin menu name', 'invoicing' ),
130
-						'add_new'               => __( 'Add New', 'invoicing' ),
131
-						'add_new_item'          => __( 'Add new invoice', 'invoicing' ),
132
-						'edit'                  => __( 'Edit', 'invoicing' ),
133
-						'edit_item'             => __( 'Edit invoice', 'invoicing' ),
134
-						'new_item'              => __( 'New invoice', 'invoicing' ),
135
-						'view_item'             => __( 'View invoice', 'invoicing' ),
136
-						'view_items'            => __( 'View Invoices', 'invoicing' ),
137
-						'search_items'          => __( 'Search invoices', 'invoicing' ),
138
-						'not_found'             => __( 'No invoices found', 'invoicing' ),
139
-						'not_found_in_trash'    => __( 'No invoices found in trash', 'invoicing' ),
140
-						'parent'                => __( 'Parent invoice', 'invoicing' ),
141
-						'featured_image'        => __( 'Invoice image', 'invoicing' ),
142
-						'set_featured_image'    => __( 'Set invoice image', 'invoicing' ),
143
-						'remove_featured_image' => __( 'Remove invoice image', 'invoicing' ),
144
-						'use_featured_image'    => __( 'Use as invoice image', 'invoicing' ),
145
-						'insert_into_item'      => __( 'Insert into invoice', 'invoicing' ),
146
-						'uploaded_to_this_item' => __( 'Uploaded to this invoice', 'invoicing' ),
147
-						'filter_items_list'     => __( 'Filter invoices', 'invoicing' ),
148
-						'items_list_navigation' => __( 'Invoices navigation', 'invoicing' ),
149
-						'items_list'            => __( 'Invoices list', 'invoicing' ),
150
-					),
151
-					'description'         => __( 'This is where invoices are stored.', 'invoicing' ),
152
-					'public'              => true,
153
-					'has_archive'         => false,
154
-					'publicly_queryable'  => true,
155
-        			'exclude_from_search' => true,
156
-        			'show_ui'             => $capabilities ? true : false,
157
-					'show_in_menu'        => $capabilities ? 'wpinv' : false,
158
-					'show_in_nav_menus'   => false,
159
-					'supports'            => array( 'title', 'author', 'excerpt' ),
160
-					'rewrite'             => array(
161
-						'slug'       => 'invoice',
162
-						'with_front' => false,
163
-					),
164
-					'query_var'           => false,
165
-					'map_meta_cap'        => true,
166
-					'show_in_admin_bar'   => $capabilities ? true : false,
167
-					'can_export'          => $capabilities ? true : false,
168
-					'hierarchical'        => false,
169
-					'menu_position'       => null,
170
-					'menu_icon'           => 'dashicons-media-spreadsheet',
171
-				)
172
-			)
173
-		);
119
+        // Register invoice post type.
120
+        register_post_type(
121
+            'wpi_invoice',
122
+            apply_filters(
123
+                'wpinv_register_post_type_invoice',
124
+                array(
125
+                    'labels'              => array(
126
+                        'name'                  => __( 'Invoices', 'invoicing' ),
127
+                        'singular_name'         => __( 'Invoice', 'invoicing' ),
128
+                        'all_items'             => __( 'Invoices', 'invoicing' ),
129
+                        'menu_name'             => _x( 'Invoices', 'Admin menu name', 'invoicing' ),
130
+                        'add_new'               => __( 'Add New', 'invoicing' ),
131
+                        'add_new_item'          => __( 'Add new invoice', 'invoicing' ),
132
+                        'edit'                  => __( 'Edit', 'invoicing' ),
133
+                        'edit_item'             => __( 'Edit invoice', 'invoicing' ),
134
+                        'new_item'              => __( 'New invoice', 'invoicing' ),
135
+                        'view_item'             => __( 'View invoice', 'invoicing' ),
136
+                        'view_items'            => __( 'View Invoices', 'invoicing' ),
137
+                        'search_items'          => __( 'Search invoices', 'invoicing' ),
138
+                        'not_found'             => __( 'No invoices found', 'invoicing' ),
139
+                        'not_found_in_trash'    => __( 'No invoices found in trash', 'invoicing' ),
140
+                        'parent'                => __( 'Parent invoice', 'invoicing' ),
141
+                        'featured_image'        => __( 'Invoice image', 'invoicing' ),
142
+                        'set_featured_image'    => __( 'Set invoice image', 'invoicing' ),
143
+                        'remove_featured_image' => __( 'Remove invoice image', 'invoicing' ),
144
+                        'use_featured_image'    => __( 'Use as invoice image', 'invoicing' ),
145
+                        'insert_into_item'      => __( 'Insert into invoice', 'invoicing' ),
146
+                        'uploaded_to_this_item' => __( 'Uploaded to this invoice', 'invoicing' ),
147
+                        'filter_items_list'     => __( 'Filter invoices', 'invoicing' ),
148
+                        'items_list_navigation' => __( 'Invoices navigation', 'invoicing' ),
149
+                        'items_list'            => __( 'Invoices list', 'invoicing' ),
150
+                    ),
151
+                    'description'         => __( 'This is where invoices are stored.', 'invoicing' ),
152
+                    'public'              => true,
153
+                    'has_archive'         => false,
154
+                    'publicly_queryable'  => true,
155
+                    'exclude_from_search' => true,
156
+                    'show_ui'             => $capabilities ? true : false,
157
+                    'show_in_menu'        => $capabilities ? 'wpinv' : false,
158
+                    'show_in_nav_menus'   => false,
159
+                    'supports'            => array( 'title', 'author', 'excerpt' ),
160
+                    'rewrite'             => array(
161
+                        'slug'       => 'invoice',
162
+                        'with_front' => false,
163
+                    ),
164
+                    'query_var'           => false,
165
+                    'map_meta_cap'        => true,
166
+                    'show_in_admin_bar'   => $capabilities ? true : false,
167
+                    'can_export'          => $capabilities ? true : false,
168
+                    'hierarchical'        => false,
169
+                    'menu_position'       => null,
170
+                    'menu_icon'           => 'dashicons-media-spreadsheet',
171
+                )
172
+            )
173
+        );
174 174
 
175
-		// Register discount post type.
176
-		register_post_type(
177
-			'wpi_discount',
178
-			apply_filters(
179
-				'wpinv_register_post_type_discount',
180
-				array(
181
-					'labels'              => array(
182
-						'name'                  => __( 'Discounts', 'invoicing' ),
183
-						'singular_name'         => __( 'Discount', 'invoicing' ),
184
-						'all_items'             => __( 'Discounts', 'invoicing' ),
185
-						'menu_name'             => _x( 'Discounts', 'Admin menu name', 'invoicing' ),
186
-						'add_new'               => __( 'Add New', 'invoicing' ),
187
-						'add_new_item'          => __( 'Add new discount', 'invoicing' ),
188
-						'edit'                  => __( 'Edit', 'invoicing' ),
189
-						'edit_item'             => __( 'Edit discount', 'invoicing' ),
190
-						'new_item'              => __( 'New discount', 'invoicing' ),
191
-						'view_item'             => __( 'View discount', 'invoicing' ),
192
-						'view_items'            => __( 'View Discounts', 'invoicing' ),
193
-						'search_items'          => __( 'Search discounts', 'invoicing' ),
194
-						'not_found'             => __( 'No discounts found', 'invoicing' ),
195
-						'not_found_in_trash'    => __( 'No discounts found in trash', 'invoicing' ),
196
-						'parent'                => __( 'Parent discount', 'invoicing' ),
197
-						'featured_image'        => __( 'Discount image', 'invoicing' ),
198
-						'set_featured_image'    => __( 'Set discount image', 'invoicing' ),
199
-						'remove_featured_image' => __( 'Remove discount image', 'invoicing' ),
200
-						'use_featured_image'    => __( 'Use as discount image', 'invoicing' ),
201
-						'insert_into_item'      => __( 'Insert into discount', 'invoicing' ),
202
-						'uploaded_to_this_item' => __( 'Uploaded to this discount', 'invoicing' ),
203
-						'filter_items_list'     => __( 'Filter discounts', 'invoicing' ),
204
-						'items_list_navigation' => __( 'Discount navigation', 'invoicing' ),
205
-						'items_list'            => __( 'Discounts list', 'invoicing' ),
206
-					),
207
-					'description'         => __( 'This is where you can add new discounts that users can use in invoices.', 'invoicing' ),
208
-					'public'              => false,
209
-					'can_export'          => $capabilities ? true : false,
210
-					'_builtin'            => false,
211
-					'publicly_queryable'  => false,
212
-					'exclude_from_search' => true,
213
-					'show_ui'             => $capabilities ? true : false,
214
-					'show_in_menu'        => $capabilities ? 'wpinv' : false,
215
-					'query_var'           => false,
216
-					'rewrite'             => false,
217
-					'map_meta_cap'        => true,
218
-					'has_archive'         => false,
219
-					'hierarchical'        => false,
220
-					'supports'            => array( 'title', 'excerpt' ),
221
-					'show_in_nav_menus'   => false,
222
-					'show_in_admin_bar'   => $capabilities ? true : false,
223
-					'menu_position'       => null,
224
-				)
225
-			)
226
-		);
175
+        // Register discount post type.
176
+        register_post_type(
177
+            'wpi_discount',
178
+            apply_filters(
179
+                'wpinv_register_post_type_discount',
180
+                array(
181
+                    'labels'              => array(
182
+                        'name'                  => __( 'Discounts', 'invoicing' ),
183
+                        'singular_name'         => __( 'Discount', 'invoicing' ),
184
+                        'all_items'             => __( 'Discounts', 'invoicing' ),
185
+                        'menu_name'             => _x( 'Discounts', 'Admin menu name', 'invoicing' ),
186
+                        'add_new'               => __( 'Add New', 'invoicing' ),
187
+                        'add_new_item'          => __( 'Add new discount', 'invoicing' ),
188
+                        'edit'                  => __( 'Edit', 'invoicing' ),
189
+                        'edit_item'             => __( 'Edit discount', 'invoicing' ),
190
+                        'new_item'              => __( 'New discount', 'invoicing' ),
191
+                        'view_item'             => __( 'View discount', 'invoicing' ),
192
+                        'view_items'            => __( 'View Discounts', 'invoicing' ),
193
+                        'search_items'          => __( 'Search discounts', 'invoicing' ),
194
+                        'not_found'             => __( 'No discounts found', 'invoicing' ),
195
+                        'not_found_in_trash'    => __( 'No discounts found in trash', 'invoicing' ),
196
+                        'parent'                => __( 'Parent discount', 'invoicing' ),
197
+                        'featured_image'        => __( 'Discount image', 'invoicing' ),
198
+                        'set_featured_image'    => __( 'Set discount image', 'invoicing' ),
199
+                        'remove_featured_image' => __( 'Remove discount image', 'invoicing' ),
200
+                        'use_featured_image'    => __( 'Use as discount image', 'invoicing' ),
201
+                        'insert_into_item'      => __( 'Insert into discount', 'invoicing' ),
202
+                        'uploaded_to_this_item' => __( 'Uploaded to this discount', 'invoicing' ),
203
+                        'filter_items_list'     => __( 'Filter discounts', 'invoicing' ),
204
+                        'items_list_navigation' => __( 'Discount navigation', 'invoicing' ),
205
+                        'items_list'            => __( 'Discounts list', 'invoicing' ),
206
+                    ),
207
+                    'description'         => __( 'This is where you can add new discounts that users can use in invoices.', 'invoicing' ),
208
+                    'public'              => false,
209
+                    'can_export'          => $capabilities ? true : false,
210
+                    '_builtin'            => false,
211
+                    'publicly_queryable'  => false,
212
+                    'exclude_from_search' => true,
213
+                    'show_ui'             => $capabilities ? true : false,
214
+                    'show_in_menu'        => $capabilities ? 'wpinv' : false,
215
+                    'query_var'           => false,
216
+                    'rewrite'             => false,
217
+                    'map_meta_cap'        => true,
218
+                    'has_archive'         => false,
219
+                    'hierarchical'        => false,
220
+                    'supports'            => array( 'title', 'excerpt' ),
221
+                    'show_in_nav_menus'   => false,
222
+                    'show_in_admin_bar'   => $capabilities ? true : false,
223
+                    'menu_position'       => null,
224
+                )
225
+            )
226
+        );
227 227
 
228
-		do_action( 'getpaid_after_register_post_types' );
229
-	}
228
+        do_action( 'getpaid_after_register_post_types' );
229
+    }
230 230
 
231
-	/**
232
-	 * Register our custom post statuses.
233
-	 */
234
-	public static function register_post_status() {
231
+    /**
232
+     * Register our custom post statuses.
233
+     */
234
+    public static function register_post_status() {
235 235
 
236
-		$invoice_statuses = apply_filters(
237
-			'getpaid_register_invoice_post_statuses',
238
-			array(
236
+        $invoice_statuses = apply_filters(
237
+            'getpaid_register_invoice_post_statuses',
238
+            array(
239 239
 
240
-				'wpi-pending'    => array(
241
-					'label'                     => _x( 'Pending Payment', 'Invoice status', 'invoicing' ),
242
-        			'public'                    => true,
243
-        			'exclude_from_search'       => true,
244
-        			'show_in_admin_all_list'    => true,
245
-					'show_in_admin_status_list' => true,
246
-					/* translators: %s: number of invoices */
247
-        			'label_count'               => _n_noop( 'Pending Payment <span class="count">(%s)</span>', 'Pending Payment <span class="count">(%s)</span>', 'invoicing' ),
248
-				),
240
+                'wpi-pending'    => array(
241
+                    'label'                     => _x( 'Pending Payment', 'Invoice status', 'invoicing' ),
242
+                    'public'                    => true,
243
+                    'exclude_from_search'       => true,
244
+                    'show_in_admin_all_list'    => true,
245
+                    'show_in_admin_status_list' => true,
246
+                    /* translators: %s: number of invoices */
247
+                    'label_count'               => _n_noop( 'Pending Payment <span class="count">(%s)</span>', 'Pending Payment <span class="count">(%s)</span>', 'invoicing' ),
248
+                ),
249 249
 
250
-				'wpi-processing' => array(
251
-					'label'                     => _x( 'Processing', 'Invoice status', 'invoicing' ),
252
-        			'public'                    => true,
253
-        			'exclude_from_search'       => true,
254
-        			'show_in_admin_all_list'    => true,
255
-					'show_in_admin_status_list' => true,
256
-					/* translators: %s: number of invoices */
257
-        			'label_count'               => _n_noop( 'Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing' ),
258
-				),
250
+                'wpi-processing' => array(
251
+                    'label'                     => _x( 'Processing', 'Invoice status', 'invoicing' ),
252
+                    'public'                    => true,
253
+                    'exclude_from_search'       => true,
254
+                    'show_in_admin_all_list'    => true,
255
+                    'show_in_admin_status_list' => true,
256
+                    /* translators: %s: number of invoices */
257
+                    'label_count'               => _n_noop( 'Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing' ),
258
+                ),
259 259
 
260
-				'wpi-onhold'     => array(
261
-					'label'                     => _x( 'On Hold', 'Invoice status', 'invoicing' ),
262
-        			'public'                    => true,
263
-        			'exclude_from_search'       => true,
264
-        			'show_in_admin_all_list'    => true,
265
-					'show_in_admin_status_list' => true,
266
-					/* translators: %s: number of invoices */
267
-        			'label_count'               => _n_noop( 'On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing' ),
268
-				),
260
+                'wpi-onhold'     => array(
261
+                    'label'                     => _x( 'On Hold', 'Invoice status', 'invoicing' ),
262
+                    'public'                    => true,
263
+                    'exclude_from_search'       => true,
264
+                    'show_in_admin_all_list'    => true,
265
+                    'show_in_admin_status_list' => true,
266
+                    /* translators: %s: number of invoices */
267
+                    'label_count'               => _n_noop( 'On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing' ),
268
+                ),
269 269
 
270
-				'wpi-cancelled'  => array(
271
-					'label'                     => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
272
-        			'public'                    => true,
273
-        			'exclude_from_search'       => true,
274
-        			'show_in_admin_all_list'    => true,
275
-					'show_in_admin_status_list' => true,
276
-					/* translators: %s: number of invoices */
277
-        			'label_count'               => _n_noop( 'Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing' ),
278
-				),
270
+                'wpi-cancelled'  => array(
271
+                    'label'                     => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
272
+                    'public'                    => true,
273
+                    'exclude_from_search'       => true,
274
+                    'show_in_admin_all_list'    => true,
275
+                    'show_in_admin_status_list' => true,
276
+                    /* translators: %s: number of invoices */
277
+                    'label_count'               => _n_noop( 'Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing' ),
278
+                ),
279 279
 
280
-				'wpi-refunded'   => array(
281
-					'label'                     => _x( 'Refunded', 'Invoice status', 'invoicing' ),
282
-        			'public'                    => true,
283
-        			'exclude_from_search'       => true,
284
-        			'show_in_admin_all_list'    => true,
285
-					'show_in_admin_status_list' => true,
286
-					/* translators: %s: number of invoices */
287
-        			'label_count'               => _n_noop( 'Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing' ),
288
-				),
280
+                'wpi-refunded'   => array(
281
+                    'label'                     => _x( 'Refunded', 'Invoice status', 'invoicing' ),
282
+                    'public'                    => true,
283
+                    'exclude_from_search'       => true,
284
+                    'show_in_admin_all_list'    => true,
285
+                    'show_in_admin_status_list' => true,
286
+                    /* translators: %s: number of invoices */
287
+                    'label_count'               => _n_noop( 'Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing' ),
288
+                ),
289 289
 
290
-				'wpi-failed'     => array(
291
-					'label'                     => _x( 'Failed', 'Invoice status', 'invoicing' ),
292
-        			'public'                    => true,
293
-        			'exclude_from_search'       => true,
294
-        			'show_in_admin_all_list'    => true,
295
-					'show_in_admin_status_list' => true,
296
-					/* translators: %s: number of invoices */
297
-        			'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing' ),
298
-				),
290
+                'wpi-failed'     => array(
291
+                    'label'                     => _x( 'Failed', 'Invoice status', 'invoicing' ),
292
+                    'public'                    => true,
293
+                    'exclude_from_search'       => true,
294
+                    'show_in_admin_all_list'    => true,
295
+                    'show_in_admin_status_list' => true,
296
+                    /* translators: %s: number of invoices */
297
+                    'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing' ),
298
+                ),
299 299
 
300
-				'wpi-renewal'    => array(
301
-					'label'                     => _x( 'Renewal', 'Invoice status', 'invoicing' ),
302
-        			'public'                    => true,
303
-        			'exclude_from_search'       => true,
304
-        			'show_in_admin_all_list'    => true,
305
-					'show_in_admin_status_list' => true,
306
-					/* translators: %s: number of invoices */
307
-        			'label_count'               => _n_noop( 'Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing' ),
308
-				),
309
-			)
310
-		);
300
+                'wpi-renewal'    => array(
301
+                    'label'                     => _x( 'Renewal', 'Invoice status', 'invoicing' ),
302
+                    'public'                    => true,
303
+                    'exclude_from_search'       => true,
304
+                    'show_in_admin_all_list'    => true,
305
+                    'show_in_admin_status_list' => true,
306
+                    /* translators: %s: number of invoices */
307
+                    'label_count'               => _n_noop( 'Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing' ),
308
+                ),
309
+            )
310
+        );
311 311
 
312
-		foreach ( $invoice_statuses as $invoice_statuse => $args ) {
313
-			register_post_status( $invoice_statuse, $args );
314
-		}
315
-	}
312
+        foreach ( $invoice_statuses as $invoice_statuse => $args ) {
313
+            register_post_status( $invoice_statuse, $args );
314
+        }
315
+    }
316 316
 
317
-	/**
318
-	 * Flush rewrite rules.
319
-	 */
320
-	public static function flush_rewrite_rules() {
321
-		flush_rewrite_rules();
322
-	}
317
+    /**
318
+     * Flush rewrite rules.
319
+     */
320
+    public static function flush_rewrite_rules() {
321
+        flush_rewrite_rules();
322
+    }
323 323
 
324
-	/**
325
-	 * Flush rules to prevent 404.
326
-	 *
327
-	 */
328
-	public static function maybe_flush_rewrite_rules() {
329
-		if ( ! get_option( 'getpaid_flushed_rewrite_rules' ) ) {
330
-			update_option( 'getpaid_flushed_rewrite_rules', '1' );
331
-			self::flush_rewrite_rules();
332
-		}
333
-	}
324
+    /**
325
+     * Flush rules to prevent 404.
326
+     *
327
+     */
328
+    public static function maybe_flush_rewrite_rules() {
329
+        if ( ! get_option( 'getpaid_flushed_rewrite_rules' ) ) {
330
+            update_option( 'getpaid_flushed_rewrite_rules', '1' );
331
+            self::flush_rewrite_rules();
332
+        }
333
+    }
334 334
 
335 335
 }
Please login to merge, or discard this patch.
includes/admin/register-settings.php 1 patch
Indentation   +360 added lines, -360 removed lines patch added patch discarded remove patch
@@ -25,8 +25,8 @@  discard block
 block discarded – undo
25 25
                     $defaults[ $key ] = $setting['std'];
26 26
                 }
27 27
             }
28
-		}
29
-	}
28
+        }
29
+    }
30 30
 
31 31
     return $defaults;
32 32
 
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
  *
145 145
  */
146 146
 function wpinv_register_settings() {
147
-	do_action( 'getpaid_before_register_settings' );
147
+    do_action( 'getpaid_before_register_settings' );
148 148
 
149 149
     // Loop through all tabs.
150 150
     foreach ( wpinv_get_registered_settings() as $tab => $sections ) {
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
                 $settings = $sections;
160 160
             }
161 161
 
162
-			do_action( "getpaid_register_{$tab}_{$section}" );
162
+            do_action( "getpaid_register_{$tab}_{$section}" );
163 163
 
164 164
             // Register the setting section.
165 165
             add_settings_section(
@@ -180,7 +180,7 @@  discard block
 block discarded – undo
180 180
     // Creates our settings in the options table.
181 181
     register_setting( 'wpinv_settings', 'wpinv_settings', 'wpinv_settings_sanitize' );
182 182
 
183
-	do_action( 'getpaid_after_register_settings' );
183
+    do_action( 'getpaid_after_register_settings' );
184 184
 }
185 185
 add_action( 'admin_init', 'wpinv_register_settings' );
186 186
 
@@ -197,13 +197,13 @@  discard block
 block discarded – undo
197 197
     $name       = isset( $option['name'] ) ? $option['name'] : '';
198 198
     $cb         = "wpinv_{$option['type']}_callback";
199 199
     $section    = "wpinv_settings_{$tab}_$section";
200
-	$is_wizzard = is_admin() && isset( $_GET['page'] ) && 'gp-setup' == $_GET['page'];
200
+    $is_wizzard = is_admin() && isset( $_GET['page'] ) && 'gp-setup' == $_GET['page'];
201 201
 
202
-	if ( isset( $option['desc'] ) && ( ! $is_wizzard && ! empty( $option['help-tip'] ) ) ) {
203
-		$tip   = wpinv_clean( $option['desc'] );
204
-		$name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
205
-		unset( $option['desc'] );
206
-	}
202
+    if ( isset( $option['desc'] ) && ( ! $is_wizzard && ! empty( $option['help-tip'] ) ) ) {
203
+        $tip   = wpinv_clean( $option['desc'] );
204
+        $name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
205
+        unset( $option['desc'] );
206
+    }
207 207
 
208 208
     // Loop through all tabs.
209 209
     add_settings_field(
@@ -230,9 +230,9 @@  discard block
 block discarded – undo
230 230
             'faux'            => isset( $option['faux'] ) ? $option['faux'] : false,
231 231
             'onchange'        => isset( $option['onchange'] ) ? $option['onchange'] : '',
232 232
             'custom'          => isset( $option['custom'] ) ? $option['custom'] : '',
233
-			'default_content' => isset( $option['default_content'] ) ? $option['default_content'] : '',
234
-			'class'           => isset( $option['class'] ) ? $option['class'] : '',
235
-			'style'           => isset( $option['style'] ) ? $option['style'] : '',
233
+            'default_content' => isset( $option['default_content'] ) ? $option['default_content'] : '',
234
+            'class'           => isset( $option['class'] ) ? $option['class'] : '',
235
+            'style'           => isset( $option['style'] ) ? $option['style'] : '',
236 236
             'cols'            => isset( $option['cols'] ) && (int) $option['cols'] > 0 ? (int) $option['cols'] : 50,
237 237
             'rows'            => isset( $option['rows'] ) && (int) $option['rows'] > 0 ? (int) $option['rows'] : 5,
238 238
         )
@@ -246,7 +246,7 @@  discard block
 block discarded – undo
246 246
  * @return array
247 247
  */
248 248
 function wpinv_get_registered_settings() {
249
-	return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
249
+    return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
250 250
 }
251 251
 
252 252
 /**
@@ -265,18 +265,18 @@  discard block
 block discarded – undo
265 265
  */
266 266
 function wpinv_settings_sanitize( $input = array() ) {
267 267
 
268
-	$wpinv_options = wpinv_get_options();
269
-	$raw_referrer  = wp_get_raw_referer();
268
+    $wpinv_options = wpinv_get_options();
269
+    $raw_referrer  = wp_get_raw_referer();
270 270
 
271 271
     if ( empty( $raw_referrer ) ) {
272
-		return array_merge( $wpinv_options, $input );
272
+        return array_merge( $wpinv_options, $input );
273 273
     }
274 274
 
275 275
     wp_parse_str( $raw_referrer, $referrer );
276 276
 
277
-	if ( in_array( 'gp-setup', $referrer ) ) {
278
-		return array_merge( $wpinv_options, $input );
279
-	}
277
+    if ( in_array( 'gp-setup', $referrer ) ) {
278
+        return array_merge( $wpinv_options, $input );
279
+    }
280 280
 
281 281
     $settings = wpinv_get_registered_settings();
282 282
     $tab      = isset( $referrer['tab'] ) ? $referrer['tab'] : 'general';
@@ -298,10 +298,10 @@  discard block
 block discarded – undo
298 298
         }
299 299
 
300 300
         // General filter
301
-		$input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
301
+        $input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
302 302
 
303
-		// Key specific filter.
304
-		$input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
303
+        // Key specific filter.
304
+        $input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
305 305
     }
306 306
 
307 307
     // Loop through the whitelist and unset any that are empty for the tab being saved
@@ -344,14 +344,14 @@  discard block
 block discarded – undo
344 344
 
345 345
     foreach ( $new_rates as $rate ) {
346 346
 
347
-		$rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
348
-		$rate['name']    = sanitize_text_field( $rate['name'] );
349
-		$rate['state']   = sanitize_text_field( $rate['state'] );
350
-		$rate['country'] = sanitize_text_field( $rate['country'] );
351
-		$rate['global']  = empty( $rate['state'] );
352
-		$tax_rates[]     = $rate;
347
+        $rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
348
+        $rate['name']    = sanitize_text_field( $rate['name'] );
349
+        $rate['state']   = sanitize_text_field( $rate['state'] );
350
+        $rate['country'] = sanitize_text_field( $rate['country'] );
351
+        $rate['global']  = empty( $rate['state'] );
352
+        $tax_rates[]     = $rate;
353 353
 
354
-	}
354
+    }
355 355
 
356 356
     update_option( 'wpinv_tax_rates', $tax_rates );
357 357
 
@@ -364,21 +364,21 @@  discard block
 block discarded – undo
364 364
         return $input;
365 365
     }
366 366
 
367
-	if ( empty( $_POST['wpinv_tax_rules_nonce'] ) || ! wp_verify_nonce( $_POST['wpinv_tax_rules_nonce'], 'wpinv_tax_rules' ) ) {
368
-		return $input;
369
-	}
367
+    if ( empty( $_POST['wpinv_tax_rules_nonce'] ) || ! wp_verify_nonce( $_POST['wpinv_tax_rules_nonce'], 'wpinv_tax_rules' ) ) {
368
+        return $input;
369
+    }
370 370
 
371 371
     $new_rules = ! empty( $_POST['tax_rules'] ) ? wp_kses_post_deep( array_values( $_POST['tax_rules'] ) ) : array();
372 372
     $tax_rules = array();
373 373
 
374 374
     foreach ( $new_rules as $rule ) {
375 375
 
376
-		$rule['key']      = sanitize_title_with_dashes( $rule['key'] );
377
-		$rule['label']    = sanitize_text_field( $rule['label'] );
378
-		$rule['tax_base'] = sanitize_text_field( $rule['tax_base'] );
379
-		$tax_rules[]      = $rule;
376
+        $rule['key']      = sanitize_title_with_dashes( $rule['key'] );
377
+        $rule['label']    = sanitize_text_field( $rule['label'] );
378
+        $rule['tax_base'] = sanitize_text_field( $rule['tax_base'] );
379
+        $tax_rules[]      = $rule;
380 380
 
381
-	}
381
+    }
382 382
 
383 383
     update_option( 'wpinv_tax_rules', $tax_rules );
384 384
 
@@ -391,11 +391,11 @@  discard block
 block discarded – undo
391 391
     $tabs['general']  = __( 'General', 'invoicing' );
392 392
     $tabs['gateways'] = __( 'Payment Gateways', 'invoicing' );
393 393
     $tabs['taxes']    = __( 'Taxes', 'invoicing' );
394
-	$tabs['emails']   = __( 'Emails', 'invoicing' );
394
+    $tabs['emails']   = __( 'Emails', 'invoicing' );
395 395
 
396
-	if ( count( getpaid_get_integration_settings() ) > 0 ) {
397
-		$tabs['integrations'] = __( 'Integrations', 'invoicing' );
398
-	}
396
+    if ( count( getpaid_get_integration_settings() ) > 0 ) {
397
+        $tabs['integrations'] = __( 'Integrations', 'invoicing' );
398
+    }
399 399
 
400 400
     $tabs['privacy']  = __( 'Privacy', 'invoicing' );
401 401
     $tabs['misc']     = __( 'Misc', 'invoicing' );
@@ -426,53 +426,53 @@  discard block
 block discarded – undo
426 426
         'general'      => apply_filters(
427 427
             'wpinv_settings_sections_general',
428 428
             array(
429
-				'main'             => __( 'General Settings', 'invoicing' ),
430
-				'page_section'     => __( 'Page Settings', 'invoicing' ),
431
-				'currency_section' => __( 'Currency Settings', 'invoicing' ),
432
-				'labels'           => __( 'Label Texts', 'invoicing' ),
429
+                'main'             => __( 'General Settings', 'invoicing' ),
430
+                'page_section'     => __( 'Page Settings', 'invoicing' ),
431
+                'currency_section' => __( 'Currency Settings', 'invoicing' ),
432
+                'labels'           => __( 'Label Texts', 'invoicing' ),
433 433
             )
434 434
         ),
435 435
         'gateways'     => apply_filters(
436 436
             'wpinv_settings_sections_gateways',
437 437
             array(
438
-				'main' => __( 'Gateway Settings', 'invoicing' ),
438
+                'main' => __( 'Gateway Settings', 'invoicing' ),
439 439
             )
440 440
         ),
441 441
         'taxes'        => apply_filters(
442 442
             'wpinv_settings_sections_taxes',
443 443
             array(
444
-				'main'  => __( 'Tax Settings', 'invoicing' ),
445
-				'rules' => __( 'Tax Rules', 'invoicing' ),
446
-				'rates' => __( 'Tax Rates', 'invoicing' ),
447
-				'vat'   => __( 'EU VAT Settings', 'invoicing' ),
444
+                'main'  => __( 'Tax Settings', 'invoicing' ),
445
+                'rules' => __( 'Tax Rules', 'invoicing' ),
446
+                'rates' => __( 'Tax Rates', 'invoicing' ),
447
+                'vat'   => __( 'EU VAT Settings', 'invoicing' ),
448 448
             )
449 449
         ),
450 450
         'emails'       => apply_filters(
451 451
             'wpinv_settings_sections_emails',
452 452
             array(
453
-				'main' => __( 'Email Settings', 'invoicing' ),
453
+                'main' => __( 'Email Settings', 'invoicing' ),
454 454
             )
455 455
         ),
456 456
 
457
-		'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
457
+        'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
458 458
 
459 459
         'privacy'      => apply_filters(
460 460
             'wpinv_settings_sections_privacy',
461 461
             array(
462
-				'main' => __( 'Privacy policy', 'invoicing' ),
462
+                'main' => __( 'Privacy policy', 'invoicing' ),
463 463
             )
464 464
         ),
465 465
         'misc'         => apply_filters(
466 466
             'wpinv_settings_sections_misc',
467 467
             array(
468
-				'main'       => __( 'Miscellaneous', 'invoicing' ),
469
-				'custom-css' => __( 'Custom CSS', 'invoicing' ),
468
+                'main'       => __( 'Miscellaneous', 'invoicing' ),
469
+                'custom-css' => __( 'Custom CSS', 'invoicing' ),
470 470
             )
471 471
         ),
472 472
         'tools'        => apply_filters(
473 473
             'wpinv_settings_sections_tools',
474 474
             array(
475
-				'main' => __( 'Diagnostic Tools', 'invoicing' ),
475
+                'main' => __( 'Diagnostic Tools', 'invoicing' ),
476 476
             )
477 477
         ),
478 478
     );
@@ -525,7 +525,7 @@  discard block
 block discarded – undo
525 525
     // Prepare the SQL query to include the excluded pages only if we have placeholders
526 526
     $pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
527 527
 
528
-	$pages_options = array();
528
+    $pages_options = array();
529 529
 
530 530
     if ( $pages ) {
531 531
         foreach ( $pages as $page ) {
@@ -542,32 +542,32 @@  discard block
 block discarded – undo
542 542
         $pages_options = array( '' => $default_label ) + $pages_options; // Blank option
543 543
     }
544 544
 
545
-	return $pages_options;
545
+    return $pages_options;
546 546
 }
547 547
 
548 548
 function wpinv_header_callback( $args ) {
549
-	if ( ! empty( $args['desc'] ) ) {
549
+    if ( ! empty( $args['desc'] ) ) {
550 550
         echo wp_kses_post( $args['desc'] );
551 551
     }
552 552
 }
553 553
 
554 554
 function wpinv_hidden_callback( $args ) {
555 555
 
556
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
557
-	$value   = wpinv_get_option( $args['id'], $std );
556
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
557
+    $value   = wpinv_get_option( $args['id'], $std );
558 558
 
559
-	if ( isset( $args['set_value'] ) ) {
560
-		$value = $args['set_value'];
561
-	}
559
+    if ( isset( $args['set_value'] ) ) {
560
+        $value = $args['set_value'];
561
+    }
562 562
 
563
-	if ( isset( $args['faux'] ) && true === $args['faux'] ) {
564
-		$args['readonly'] = true;
565
-		$name  = '';
566
-	} else {
567
-		$name = 'wpinv_settings[' . esc_attr( $args['id'] ) . ']';
568
-	}
563
+    if ( isset( $args['faux'] ) && true === $args['faux'] ) {
564
+        $args['readonly'] = true;
565
+        $name  = '';
566
+    } else {
567
+        $name = 'wpinv_settings[' . esc_attr( $args['id'] ) . ']';
568
+    }
569 569
 
570
-	echo '<input type="hidden" id="wpinv_settings[' . esc_attr( $args['id'] ) . ']" name="' . esc_attr( $name ) . '" value="' . esc_attr( stripslashes( $value ) ) . '" />';
570
+    echo '<input type="hidden" id="wpinv_settings[' . esc_attr( $args['id'] ) . ']" name="' . esc_attr( $name ) . '" value="' . esc_attr( stripslashes( $value ) ) . '" />';
571 571
 
572 572
 }
573 573
 
@@ -576,12 +576,12 @@  discard block
 block discarded – undo
576 576
  */
577 577
 function wpinv_checkbox_callback( $args ) {
578 578
 
579
-	$std = isset( $args['std'] ) ? $args['std'] : '';
580
-	$std = wpinv_get_option( $args['id'], $std );
581
-	$id  = esc_attr( $args['id'] );
579
+    $std = isset( $args['std'] ) ? $args['std'] : '';
580
+    $std = wpinv_get_option( $args['id'], $std );
581
+    $id  = esc_attr( $args['id'] );
582 582
 
583
-	getpaid_hidden_field( "wpinv_settings[$id]", '0' );
584
-	?>
583
+    getpaid_hidden_field( "wpinv_settings[$id]", '0' );
584
+    ?>
585 585
 		<label>
586 586
 			<input id="wpinv-settings-<?php echo esc_attr( $id ); ?>" name="wpinv_settings[<?php echo esc_attr( $id ); ?>]" <?php checked( empty( $std ), false ); ?> value="1" type="checkbox" />
587 587
 			<?php echo wp_kses_post( $args['desc'] ); ?>
@@ -591,75 +591,75 @@  discard block
 block discarded – undo
591 591
 
592 592
 function wpinv_multicheck_callback( $args ) {
593 593
 
594
-	$sanitize_id = wpinv_sanitize_key( $args['id'] );
595
-	$class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
594
+    $sanitize_id = wpinv_sanitize_key( $args['id'] );
595
+    $class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
596 596
 
597
-	if ( ! empty( $args['options'] ) ) {
597
+    if ( ! empty( $args['options'] ) ) {
598 598
 
599
-		$std     = isset( $args['std'] ) ? $args['std'] : array();
600
-		$value   = wpinv_get_option( $args['id'], $std );
599
+        $std     = isset( $args['std'] ) ? $args['std'] : array();
600
+        $value   = wpinv_get_option( $args['id'], $std );
601 601
 
602
-		echo '<div class="wpi-mcheck-rows wpi-mcheck-' . esc_attr( $sanitize_id . $class ) . '">';
602
+        echo '<div class="wpi-mcheck-rows wpi-mcheck-' . esc_attr( $sanitize_id . $class ) . '">';
603 603
         foreach ( $args['options'] as $key => $option ) :
604
-			$sanitize_key = esc_attr( wpinv_sanitize_key( $key ) );
605
-			if ( in_array( $sanitize_key, $value ) ) {
606
-				$enabled = $sanitize_key;
607
-			} else {
608
-				$enabled = null;
609
-			}
610
-			echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
611
-			echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']">' . wp_kses_post( $option ) . '</label></div>';
612
-		endforeach;
613
-		echo '</div>';
614
-		echo '<p class="description">' . wp_kses_post( $args['desc'] ) . '</p>';
615
-	}
604
+            $sanitize_key = esc_attr( wpinv_sanitize_key( $key ) );
605
+            if ( in_array( $sanitize_key, $value ) ) {
606
+                $enabled = $sanitize_key;
607
+            } else {
608
+                $enabled = null;
609
+            }
610
+            echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
611
+            echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']">' . wp_kses_post( $option ) . '</label></div>';
612
+        endforeach;
613
+        echo '</div>';
614
+        echo '<p class="description">' . wp_kses_post( $args['desc'] ) . '</p>';
615
+    }
616 616
 }
617 617
 
618 618
 function wpinv_payment_icons_callback( $args ) {
619 619
 
620 620
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
621
-	$value   = wpinv_get_option( $args['id'], false );
621
+    $value   = wpinv_get_option( $args['id'], false );
622 622
 
623
-	if ( ! empty( $args['options'] ) ) {
624
-		foreach ( $args['options'] as $key => $option ) {
623
+    if ( ! empty( $args['options'] ) ) {
624
+        foreach ( $args['options'] as $key => $option ) {
625 625
             $sanitize_key = wpinv_sanitize_key( $key );
626 626
 
627
-			if ( empty( $value ) ) {
628
-				$enabled = $option;
629
-			} else {
630
-				$enabled = null;
631
-			}
632
-
633
-			echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
634
-
635
-				echo '<input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
636
-
637
-				if ( wpinv_string_is_image_url( $key ) ) {
638
-				echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
639
-				} else {
640
-				$card = strtolower( str_replace( ' ', '', $option ) );
641
-
642
-				if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
643
-					$image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
644
-					} else {
645
-					$image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
646
-					$content_dir = WP_CONTENT_DIR;
647
-
648
-					if ( function_exists( 'wp_normalize_path' ) ) {
649
-						// Replaces backslashes with forward slashes for Windows systems
650
-						$image = wp_normalize_path( $image );
651
-						$content_dir = wp_normalize_path( $content_dir );
652
-						}
653
-
654
-					$image = str_replace( $content_dir, content_url(), $image );
655
-					}
656
-
657
-				echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
658
-				}
659
-			echo wp_kses_post( $option ) . '</label>';
660
-		}
661
-		echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
662
-	}
627
+            if ( empty( $value ) ) {
628
+                $enabled = $option;
629
+            } else {
630
+                $enabled = null;
631
+            }
632
+
633
+            echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
634
+
635
+                echo '<input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
636
+
637
+                if ( wpinv_string_is_image_url( $key ) ) {
638
+                echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
639
+                } else {
640
+                $card = strtolower( str_replace( ' ', '', $option ) );
641
+
642
+                if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
643
+                    $image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
644
+                    } else {
645
+                    $image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
646
+                    $content_dir = WP_CONTENT_DIR;
647
+
648
+                    if ( function_exists( 'wp_normalize_path' ) ) {
649
+                        // Replaces backslashes with forward slashes for Windows systems
650
+                        $image = wp_normalize_path( $image );
651
+                        $content_dir = wp_normalize_path( $content_dir );
652
+                        }
653
+
654
+                    $image = str_replace( $content_dir, content_url(), $image );
655
+                    }
656
+
657
+                echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
658
+                }
659
+            echo wp_kses_post( $option ) . '</label>';
660
+        }
661
+        echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
662
+    }
663 663
 }
664 664
 
665 665
 /**
@@ -667,9 +667,9 @@  discard block
 block discarded – undo
667 667
  */
668 668
 function wpinv_radio_callback( $args ) {
669 669
 
670
-	$std = isset( $args['std'] ) ? $args['std'] : '';
671
-	$std = wpinv_get_option( $args['id'], $std );
672
-	?>
670
+    $std = isset( $args['std'] ) ? $args['std'] : '';
671
+    $std = wpinv_get_option( $args['id'], $std );
672
+    ?>
673 673
 		<fieldset>
674 674
 			<ul id="wpinv-settings-<?php echo esc_attr( $args['id'] ); ?>" style="margin-top: 0;">
675 675
 				<?php foreach ( $args['options'] as $key => $option ) : ?>
@@ -683,7 +683,7 @@  discard block
 block discarded – undo
683 683
 			</ul>
684 684
 		</fieldset>
685 685
 	<?php
686
-	getpaid_settings_description_callback( $args );
686
+    getpaid_settings_description_callback( $args );
687 687
 }
688 688
 
689 689
 /**
@@ -691,10 +691,10 @@  discard block
 block discarded – undo
691 691
  */
692 692
 function getpaid_settings_description_callback( $args ) {
693 693
 
694
-	if ( ! empty( $args['desc'] ) ) {
695
-		$description = $args['desc'];
696
-		echo wp_kses_post( "<p class='description'>$description</p>" );
697
-	}
694
+    if ( ! empty( $args['desc'] ) ) {
695
+        $description = $args['desc'];
696
+        echo wp_kses_post( "<p class='description'>$description</p>" );
697
+    }
698 698
 
699 699
 }
700 700
 
@@ -703,7 +703,7 @@  discard block
 block discarded – undo
703 703
  */
704 704
 function wpinv_gateways_callback() {
705 705
 
706
-	?>
706
+    ?>
707 707
 		</td>
708 708
 	</tr>
709 709
 	<tr class="bsui">
@@ -717,26 +717,26 @@  discard block
 block discarded – undo
717 717
 
718 718
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
719 719
     $class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
720
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
721
-	$value   = wpinv_get_option( $args['id'], $std );
720
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
721
+    $value   = wpinv_get_option( $args['id'], $std );
722 722
 
723
-	echo '<select name="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" class="' . esc_attr( $class ) . '" >';
723
+    echo '<select name="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" class="' . esc_attr( $class ) . '" >';
724 724
 
725
-	foreach ( $args['options'] as $key => $option ) :
725
+    foreach ( $args['options'] as $key => $option ) :
726 726
 
727
-		echo '<option value="' . esc_attr( $key ) . '" ';
727
+        echo '<option value="' . esc_attr( $key ) . '" ';
728 728
 
729
-		if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
729
+        if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
730 730
             selected( $key, $args['selected'] );
731 731
         } else {
732 732
             selected( $key, $value );
733 733
         }
734 734
 
735
-		echo '>' . esc_html( $option['admin_label'] ) . '</option>';
736
-	endforeach;
735
+        echo '>' . esc_html( $option['admin_label'] ) . '</option>';
736
+    endforeach;
737 737
 
738
-	echo '</select>';
739
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
738
+    echo '</select>';
739
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
740 740
 }
741 741
 
742 742
 /**
@@ -747,38 +747,38 @@  discard block
 block discarded – undo
747 747
  */
748 748
 function wpinv_settings_attrs_helper( $args ) {
749 749
 
750
-	$value = isset( $args['std'] ) ? $args['std'] : '';
751
-	$id    = esc_attr( $args['id'] );
752
-	$value = is_scalar( $value ) ? $value : '';
753
-
754
-	$attrs = array(
755
-		'name'     => ! empty( $args['faux'] ) ? false : "wpinv_settings[$id]",
756
-		'readonly' => ! empty( $args['faux'] ),
757
-		'value'    => ! empty( $args['faux'] ) ? $value : wpinv_get_option( $args['id'], $value ),
758
-		'id'       => 'wpinv-settings-' . $args['id'],
759
-		'style'    => $args['style'],
760
-		'class'    => $args['class'],
761
-		'placeholder' => $args['placeholder'],
762
-		'data-placeholder' => $args['placeholder'],
763
-	);
750
+    $value = isset( $args['std'] ) ? $args['std'] : '';
751
+    $id    = esc_attr( $args['id'] );
752
+    $value = is_scalar( $value ) ? $value : '';
753
+
754
+    $attrs = array(
755
+        'name'     => ! empty( $args['faux'] ) ? false : "wpinv_settings[$id]",
756
+        'readonly' => ! empty( $args['faux'] ),
757
+        'value'    => ! empty( $args['faux'] ) ? $value : wpinv_get_option( $args['id'], $value ),
758
+        'id'       => 'wpinv-settings-' . $args['id'],
759
+        'style'    => $args['style'],
760
+        'class'    => $args['class'],
761
+        'placeholder' => $args['placeholder'],
762
+        'data-placeholder' => $args['placeholder'],
763
+    );
764 764
 
765
-	if ( ! empty( $args['onchange'] ) ) {
766
-		$attrs['onchange'] = $args['onchange'];
767
-	}
765
+    if ( ! empty( $args['onchange'] ) ) {
766
+        $attrs['onchange'] = $args['onchange'];
767
+    }
768 768
 
769
-	foreach ( $attrs as $key => $value ) {
769
+    foreach ( $attrs as $key => $value ) {
770 770
 
771
-		if ( false === $value ) {
772
-			continue;
773
-		}
771
+        if ( false === $value ) {
772
+            continue;
773
+        }
774 774
 
775
-		if ( true === $value ) {
776
-			echo ' ' . esc_attr( $key );
777
-		} else {
778
-			echo ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
779
-		}
775
+        if ( true === $value ) {
776
+            echo ' ' . esc_attr( $key );
777
+        } else {
778
+            echo ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
779
+        }
780 780
 
781
-	}
781
+    }
782 782
 
783 783
 }
784 784
 
@@ -787,7 +787,7 @@  discard block
 block discarded – undo
787 787
  */
788 788
 function wpinv_text_callback( $args ) {
789 789
 
790
-	?>
790
+    ?>
791 791
 		<label style="width: 100%;">
792 792
 			<input type="text" <?php wpinv_settings_attrs_helper( $args ); ?>>
793 793
 			<?php getpaid_settings_description_callback( $args ); ?>
@@ -801,7 +801,7 @@  discard block
 block discarded – undo
801 801
  */
802 802
 function wpinv_number_callback( $args ) {
803 803
 
804
-	?>
804
+    ?>
805 805
 		<label style="width: 100%;">
806 806
 			<input type="number" step="<?php echo esc_attr( $args['step'] ); ?>" max="<?php echo intval( $args['max'] ); ?>" min="<?php echo intval( $args['min'] ); ?>" <?php wpinv_settings_attrs_helper( $args ); ?>>
807 807
 			<?php getpaid_settings_description_callback( $args ); ?>
@@ -813,34 +813,34 @@  discard block
 block discarded – undo
813 813
 function wpinv_textarea_callback( $args ) {
814 814
 
815 815
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
816
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
817
-	$value   = wpinv_get_option( $args['id'], $std );
816
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
817
+    $value   = wpinv_get_option( $args['id'], $std );
818 818
 
819 819
     $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
820 820
     $class = ( isset( $args['class'] ) && ! is_null( $args['class'] ) ) ? $args['class'] : 'large-text';
821 821
 
822
-	echo '<textarea class="' . esc_attr( $class ) . ' txtarea-' . esc_attr( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . esc_attr( $args['cols'] ) . '" rows="' . esc_attr( $args['rows'] ) . '" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
823
-	echo '<br /><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
822
+    echo '<textarea class="' . esc_attr( $class ) . ' txtarea-' . esc_attr( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . esc_attr( $args['cols'] ) . '" rows="' . esc_attr( $args['rows'] ) . '" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
823
+    echo '<br /><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
824 824
 
825 825
 }
826 826
 
827 827
 function wpinv_password_callback( $args ) {
828 828
 
829 829
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
830
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
831
-	$value   = wpinv_get_option( $args['id'], $std );
830
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
831
+    $value   = wpinv_get_option( $args['id'], $std );
832 832
 
833
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
834
-	echo '<input type="password" class="' . esc_attr( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
835
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
833
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
834
+    echo '<input type="password" class="' . esc_attr( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
835
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
836 836
 
837 837
 }
838 838
 
839 839
 function wpinv_missing_callback( $args ) {
840
-	printf(
841
-		esc_html__( 'The callback function used for the %s setting is missing.', 'invoicing' ),
842
-		'<strong>' . esc_html( $args['id'] ) . '</strong>'
843
-	);
840
+    printf(
841
+        esc_html__( 'The callback function used for the %s setting is missing.', 'invoicing' ),
842
+        '<strong>' . esc_html( $args['id'] ) . '</strong>'
843
+    );
844 844
 }
845 845
 
846 846
 /**
@@ -848,13 +848,13 @@  discard block
 block discarded – undo
848 848
  */
849 849
 function wpinv_select_callback( $args ) {
850 850
 
851
-	$desc   = wp_kses_post( $args['desc'] );
852
-	$desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
853
-	$value  = isset( $args['std'] ) ? $args['std'] : '';
854
-	$value  = wpinv_get_option( $args['id'], $value );
855
-	$rand   = uniqid( 'random_id' );
851
+    $desc   = wp_kses_post( $args['desc'] );
852
+    $desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
853
+    $value  = isset( $args['std'] ) ? $args['std'] : '';
854
+    $value  = wpinv_get_option( $args['id'], $value );
855
+    $rand   = uniqid( 'random_id' );
856 856
 
857
-	?>
857
+    ?>
858 858
 		<label style="width: 100%;">
859 859
 			<select <?php wpinv_settings_attrs_helper( $args ); ?> data-allow-clear="true">
860 860
 				<?php foreach ( $args['options'] as $option => $name ) : ?>
@@ -887,50 +887,50 @@  discard block
 block discarded – undo
887 887
 function wpinv_color_select_callback( $args ) {
888 888
 
889 889
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
890
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
891
-	$value   = wpinv_get_option( $args['id'], $std );
890
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
891
+    $value   = wpinv_get_option( $args['id'], $std );
892 892
 
893
-	echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
893
+    echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
894 894
 
895
-	foreach ( $args['options'] as $option => $color ) {
896
-		echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $color['label'] ) . '</option>';
897
-	}
895
+    foreach ( $args['options'] as $option => $color ) {
896
+        echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $color['label'] ) . '</option>';
897
+    }
898 898
 
899
-	echo '</select>';
900
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
899
+    echo '</select>';
900
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
901 901
 
902 902
 }
903 903
 
904 904
 function wpinv_rich_editor_callback( $args ) {
905
-	global $wp_version;
905
+    global $wp_version;
906 906
 
907 907
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
908 908
 
909
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
910
-	$value   = wpinv_get_option( $args['id'], $std );
909
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
910
+    $value   = wpinv_get_option( $args['id'], $std );
911 911
 
912
-	if ( ! empty( $args['allow_blank'] ) && empty( $value ) ) {
913
-		$value = $std;
914
-	}
912
+    if ( ! empty( $args['allow_blank'] ) && empty( $value ) ) {
913
+        $value = $std;
914
+    }
915 915
 
916
-	$rows = isset( $args['size'] ) ? $args['size'] : 20;
916
+    $rows = isset( $args['size'] ) ? $args['size'] : 20;
917 917
 
918
-	echo '<div class="getpaid-settings-editor-input">';
919
-	if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
920
-		wp_editor(
918
+    echo '<div class="getpaid-settings-editor-input">';
919
+    if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
920
+        wp_editor(
921 921
             stripslashes( $value ),
922 922
             'wpinv_settings_' . esc_attr( $args['id'] ),
923 923
             array(
924
-				'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']',
925
-				'textarea_rows' => absint( $rows ),
926
-				'media_buttons' => false,
924
+                'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']',
925
+                'textarea_rows' => absint( $rows ),
926
+                'media_buttons' => false,
927 927
             )
928 928
         );
929
-	} else {
930
-		echo '<textarea class="large-text" rows="10" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
931
-	}
929
+    } else {
930
+        echo '<textarea class="large-text" rows="10" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
931
+    }
932 932
 
933
-	echo '</div><br/><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
933
+    echo '</div><br/><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
934 934
 
935 935
 }
936 936
 
@@ -938,51 +938,51 @@  discard block
 block discarded – undo
938 938
 
939 939
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
940 940
 
941
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
942
-	$value   = wpinv_get_option( $args['id'], $std );
941
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
942
+    $value   = wpinv_get_option( $args['id'], $std );
943 943
 
944
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
945
-	echo '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
946
-	echo '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . esc_attr__( 'Upload File', 'invoicing' ) . '"/></span>';
947
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
944
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
945
+    echo '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
946
+    echo '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . esc_attr__( 'Upload File', 'invoicing' ) . '"/></span>';
947
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
948 948
 
949 949
 }
950 950
 
951 951
 function wpinv_color_callback( $args ) {
952 952
 
953
-	$std         = isset( $args['std'] ) ? $args['std'] : '';
954
-	$value       = wpinv_get_option( $args['id'], $std );
953
+    $std         = isset( $args['std'] ) ? $args['std'] : '';
954
+    $value       = wpinv_get_option( $args['id'], $std );
955 955
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
956 956
 
957
-	echo '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $std ) . '" />';
958
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
957
+    echo '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $std ) . '" />';
958
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
959 959
 
960 960
 }
961 961
 
962 962
 function wpinv_country_states_callback( $args ) {
963 963
 
964
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
965
-	$value   = wpinv_get_option( $args['id'], $std );
964
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
965
+    $value   = wpinv_get_option( $args['id'], $std );
966 966
 
967 967
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
968 968
 
969
-	if ( isset( $args['placeholder'] ) ) {
970
-		$placeholder = $args['placeholder'];
971
-	} else {
972
-		$placeholder = '';
973
-	}
969
+    if ( isset( $args['placeholder'] ) ) {
970
+        $placeholder = $args['placeholder'];
971
+    } else {
972
+        $placeholder = '';
973
+    }
974 974
 
975
-	$states = wpinv_get_country_states();
975
+    $states = wpinv_get_country_states();
976 976
 
977
-	$class = empty( $states ) ? 'wpinv-no-states' : 'wpi_select2';
978
-	echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="' . esc_attr( $class ) . '" data-placeholder="' . esc_html( $placeholder ) . '"/>';
977
+    $class = empty( $states ) ? 'wpinv-no-states' : 'wpi_select2';
978
+    echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="' . esc_attr( $class ) . '" data-placeholder="' . esc_html( $placeholder ) . '"/>';
979 979
 
980
-	foreach ( $states as $option => $name ) {
981
-		echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $name ) . '</option>';
982
-	}
980
+    foreach ( $states as $option => $name ) {
981
+        echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $name ) . '</option>';
982
+    }
983 983
 
984
-	echo '</select>';
985
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
984
+    echo '</select>';
985
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
986 986
 
987 987
 }
988 988
 
@@ -991,7 +991,7 @@  discard block
 block discarded – undo
991 991
  */
992 992
 function wpinv_tax_rates_callback() {
993 993
 
994
-	?>
994
+    ?>
995 995
 		</td>
996 996
 	</tr>
997 997
 	<tr class="bsui">
@@ -1007,9 +1007,9 @@  discard block
 block discarded – undo
1007 1007
  */
1008 1008
 function wpinv_tax_rate_callback( $tax_rate, $key ) {
1009 1009
 
1010
-	$key                      = sanitize_key( $key );
1011
-	$tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
1012
-	include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
1010
+    $key                      = sanitize_key( $key );
1011
+    $tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
1012
+    include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
1013 1013
 
1014 1014
 }
1015 1015
 
@@ -1018,7 +1018,7 @@  discard block
 block discarded – undo
1018 1018
  */
1019 1019
 function wpinv_tax_rules_callback() {
1020 1020
 
1021
-	?>
1021
+    ?>
1022 1022
 		</td>
1023 1023
 	</tr>
1024 1024
 	<tr class="bsui">
@@ -1056,14 +1056,14 @@  discard block
 block discarded – undo
1056 1056
                 <td>
1057 1057
 					<a href="
1058 1058
                     <?php
1059
-						echo esc_url(
1060
-							wp_nonce_url(
1061
-								add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
1062
-								'getpaid-nonce',
1063
-								'getpaid-nonce'
1064
-							)
1065
-						);
1066
-					?>
1059
+                        echo esc_url(
1060
+                            wp_nonce_url(
1061
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
1062
+                                'getpaid-nonce',
1063
+                                'getpaid-nonce'
1064
+                            )
1065
+                        );
1066
+                    ?>
1067 1067
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1068 1068
                 </td>
1069 1069
             </tr>
@@ -1075,14 +1075,14 @@  discard block
 block discarded – undo
1075 1075
                 <td>
1076 1076
 					<a href="
1077 1077
                     <?php
1078
-						echo esc_url(
1079
-							wp_nonce_url(
1080
-								add_query_arg( 'getpaid-admin-action', 'refresh_permalinks' ),
1081
-								'getpaid-nonce',
1082
-								'getpaid-nonce'
1083
-							)
1084
-						);
1085
-					?>
1078
+                        echo esc_url(
1079
+                            wp_nonce_url(
1080
+                                add_query_arg( 'getpaid-admin-action', 'refresh_permalinks' ),
1081
+                                'getpaid-nonce',
1082
+                                'getpaid-nonce'
1083
+                            )
1084
+                        );
1085
+                    ?>
1086 1086
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1087 1087
                 </td>
1088 1088
             </tr>
@@ -1094,14 +1094,14 @@  discard block
 block discarded – undo
1094 1094
                 <td>
1095 1095
 					<a href="
1096 1096
                     <?php
1097
-						echo esc_url(
1098
-							wp_nonce_url(
1099
-								add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1100
-								'getpaid-nonce',
1101
-								'getpaid-nonce'
1102
-							)
1103
-						);
1104
-					?>
1097
+                        echo esc_url(
1098
+                            wp_nonce_url(
1099
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1100
+                                'getpaid-nonce',
1101
+                                'getpaid-nonce'
1102
+                            )
1103
+                        );
1104
+                    ?>
1105 1105
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1106 1106
                 </td>
1107 1107
             </tr>
@@ -1113,14 +1113,14 @@  discard block
 block discarded – undo
1113 1113
                 <td>
1114 1114
 					<a href="
1115 1115
                     <?php
1116
-						echo esc_url(
1117
-							wp_nonce_url(
1118
-								add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1119
-								'getpaid-nonce',
1120
-								'getpaid-nonce'
1121
-							)
1122
-						);
1123
-					?>
1116
+                        echo esc_url(
1117
+                            wp_nonce_url(
1118
+                                add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1119
+                                'getpaid-nonce',
1120
+                                'getpaid-nonce'
1121
+                            )
1122
+                        );
1123
+                    ?>
1124 1124
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1125 1125
                 </td>
1126 1126
             </tr>
@@ -1133,14 +1133,14 @@  discard block
 block discarded – undo
1133 1133
                 <td>
1134 1134
 					<a href="
1135 1135
                     <?php
1136
-						echo esc_url(
1137
-							wp_nonce_url(
1138
-								add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1139
-								'getpaid-nonce',
1140
-								'getpaid-nonce'
1141
-							)
1142
-						);
1143
-					?>
1136
+                        echo esc_url(
1137
+                            wp_nonce_url(
1138
+                                add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1139
+                                'getpaid-nonce',
1140
+                                'getpaid-nonce'
1141
+                            )
1142
+                        );
1143
+                    ?>
1144 1144
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1145 1145
                 </td>
1146 1146
             </tr>
@@ -1153,8 +1153,8 @@  discard block
 block discarded – undo
1153 1153
                 <td>
1154 1154
 					<a href="
1155 1155
                     <?php
1156
-						echo esc_url( admin_url( 'index.php?page=gp-setup' ) );
1157
-					?>
1156
+                        echo esc_url( admin_url( 'index.php?page=gp-setup' ) );
1157
+                    ?>
1158 1158
                     " class="button button-primary"><?php esc_html_e( 'Launch', 'invoicing' ); ?></a>
1159 1159
                 </td>
1160 1160
             </tr>
@@ -1168,19 +1168,19 @@  discard block
 block discarded – undo
1168 1168
 
1169 1169
 
1170 1170
 function wpinv_descriptive_text_callback( $args ) {
1171
-	echo wp_kses_post( $args['desc'] );
1171
+    echo wp_kses_post( $args['desc'] );
1172 1172
 }
1173 1173
 
1174 1174
 function wpinv_raw_html_callback( $args ) {
1175
-	echo wp_kses( $args['desc'], getpaid_allowed_html() );
1175
+    echo wp_kses( $args['desc'], getpaid_allowed_html() );
1176 1176
 }
1177 1177
 
1178 1178
 function wpinv_hook_callback( $args ) {
1179
-	do_action( 'wpinv_' . $args['id'], $args );
1179
+    do_action( 'wpinv_' . $args['id'], $args );
1180 1180
 }
1181 1181
 
1182 1182
 function wpinv_set_settings_cap() {
1183
-	return wpinv_get_capability();
1183
+    return wpinv_get_capability();
1184 1184
 }
1185 1185
 add_filter( 'option_page_capability_wpinv_settings', 'wpinv_set_settings_cap' );
1186 1186
 
@@ -1206,47 +1206,47 @@  discard block
 block discarded – undo
1206 1206
  * @return array
1207 1207
  */
1208 1208
 function wpinv_get_email_merge_tags( $subscription = false ) {
1209
-	$merge_tags = array(
1210
-		'{site_title}'           => __( 'Site Title', 'invoicing' ),
1211
-		'{name}'                 => __( "Customer's full name", 'invoicing' ),
1212
-		'{first_name}'           => __( "Customer's first name", 'invoicing' ),
1213
-		'{last_name}'            => __( "Customer's last name", 'invoicing' ),
1214
-		'{email}'                => __( "Customer's email address", 'invoicing' ),
1215
-		'{invoice_number}'       => __( 'The invoice number', 'invoicing' ),
1216
-		'{invoice_currency}'     => __( 'The invoice currency', 'invoicing' ),
1217
-		'{invoice_total}'        => __( 'The invoice total', 'invoicing' ),
1218
-		'{invoice_link}'         => __( 'The invoice link', 'invoicing' ),
1219
-		'{invoice_pay_link}'     => __( 'The payment link', 'invoicing' ),
1220
-		'{invoice_receipt_link}' => __( 'The receipt link', 'invoicing' ),
1221
-		'{invoice_date}'         => __( 'The date the invoice was created', 'invoicing' ),
1222
-		'{invoice_due_date}'     => __( 'The date the invoice is due', 'invoicing' ),
1223
-		'{date}'                 => __( "Today's date", 'invoicing' ),
1224
-		'{is_was}'               => __( 'If due date of invoice is past, displays "was" otherwise displays "is"', 'invoicing' ),
1225
-		'{invoice_label}'        => __( 'Invoices/quotes singular name. Ex: Invoice/Quote', 'invoicing' ),
1226
-		'{invoice_quote}'        => __( 'Invoices/quotes singular name in small letters. Ex: invoice/quote', 'invoicing' ),
1227
-		'{invoice_description}'  => __( 'The description of the invoice', 'invoicing' ),
1228
-	);
1229
-
1230
-	if ( $subscription ) {
1231
-		$merge_tags = array_merge(
1232
-			$merge_tags,
1233
-			array(
1234
-				'{subscription_renewal_date}'     => __( 'The next renewal date of the subscription', 'invoicing' ),
1235
-				'{subscription_created}'          => __( "The subscription's creation date", 'invoicing' ),
1236
-				'{subscription_status}'           => __( "The subscription's status", 'invoicing' ),
1237
-				'{subscription_profile_id}'       => __( "The subscription's remote profile id", 'invoicing' ),
1238
-				'{subscription_id}'               => __( "The subscription's id", 'invoicing' ),
1239
-				'{subscription_recurring_amount}' => __( 'The renewal amount of the subscription', 'invoicing' ),
1240
-				'{subscription_initial_amount}'   => __( 'The initial amount of the subscription', 'invoicing' ),
1241
-				'{subscription_recurring_period}' => __( 'The recurring period of the subscription (e.g 1 year)', 'invoicing' ),
1242
-				'{subscription_bill_times}'       => __( 'The maximum number of times the subscription can be renewed', 'invoicing' ),
1243
-				'{subscription_url}'              => __( 'The URL to manage a subscription', 'invoicing' ),
1244
-				'{subscription_name}'             => __( 'The name of the recurring item', 'invoicing' ),
1245
-			)
1246
-		);
1247
-	}
1248
-
1249
-	return $merge_tags;
1209
+    $merge_tags = array(
1210
+        '{site_title}'           => __( 'Site Title', 'invoicing' ),
1211
+        '{name}'                 => __( "Customer's full name", 'invoicing' ),
1212
+        '{first_name}'           => __( "Customer's first name", 'invoicing' ),
1213
+        '{last_name}'            => __( "Customer's last name", 'invoicing' ),
1214
+        '{email}'                => __( "Customer's email address", 'invoicing' ),
1215
+        '{invoice_number}'       => __( 'The invoice number', 'invoicing' ),
1216
+        '{invoice_currency}'     => __( 'The invoice currency', 'invoicing' ),
1217
+        '{invoice_total}'        => __( 'The invoice total', 'invoicing' ),
1218
+        '{invoice_link}'         => __( 'The invoice link', 'invoicing' ),
1219
+        '{invoice_pay_link}'     => __( 'The payment link', 'invoicing' ),
1220
+        '{invoice_receipt_link}' => __( 'The receipt link', 'invoicing' ),
1221
+        '{invoice_date}'         => __( 'The date the invoice was created', 'invoicing' ),
1222
+        '{invoice_due_date}'     => __( 'The date the invoice is due', 'invoicing' ),
1223
+        '{date}'                 => __( "Today's date", 'invoicing' ),
1224
+        '{is_was}'               => __( 'If due date of invoice is past, displays "was" otherwise displays "is"', 'invoicing' ),
1225
+        '{invoice_label}'        => __( 'Invoices/quotes singular name. Ex: Invoice/Quote', 'invoicing' ),
1226
+        '{invoice_quote}'        => __( 'Invoices/quotes singular name in small letters. Ex: invoice/quote', 'invoicing' ),
1227
+        '{invoice_description}'  => __( 'The description of the invoice', 'invoicing' ),
1228
+    );
1229
+
1230
+    if ( $subscription ) {
1231
+        $merge_tags = array_merge(
1232
+            $merge_tags,
1233
+            array(
1234
+                '{subscription_renewal_date}'     => __( 'The next renewal date of the subscription', 'invoicing' ),
1235
+                '{subscription_created}'          => __( "The subscription's creation date", 'invoicing' ),
1236
+                '{subscription_status}'           => __( "The subscription's status", 'invoicing' ),
1237
+                '{subscription_profile_id}'       => __( "The subscription's remote profile id", 'invoicing' ),
1238
+                '{subscription_id}'               => __( "The subscription's id", 'invoicing' ),
1239
+                '{subscription_recurring_amount}' => __( 'The renewal amount of the subscription', 'invoicing' ),
1240
+                '{subscription_initial_amount}'   => __( 'The initial amount of the subscription', 'invoicing' ),
1241
+                '{subscription_recurring_period}' => __( 'The recurring period of the subscription (e.g 1 year)', 'invoicing' ),
1242
+                '{subscription_bill_times}'       => __( 'The maximum number of times the subscription can be renewed', 'invoicing' ),
1243
+                '{subscription_url}'              => __( 'The URL to manage a subscription', 'invoicing' ),
1244
+                '{subscription_name}'             => __( 'The name of the recurring item', 'invoicing' ),
1245
+            )
1246
+        );
1247
+    }
1248
+
1249
+    return $merge_tags;
1250 1250
 }
1251 1251
 
1252 1252
 
@@ -1258,28 +1258,28 @@  discard block
 block discarded – undo
1258 1258
  * @return string
1259 1259
  */
1260 1260
 function wpinv_get_merge_tags_help_text( $subscription = false ) {
1261
-	$merge_tags = wpinv_get_email_merge_tags( $subscription );
1261
+    $merge_tags = wpinv_get_email_merge_tags( $subscription );
1262 1262
 
1263
-	$output = '<div class="bsui">';
1263
+    $output = '<div class="bsui">';
1264 1264
 
1265
-	$link = sprintf(
1266
-		'<strong class="getpaid-merge-tags text-primary" role="button">%s</strong>',
1267
-		esc_html__( 'View available merge tags.', 'invoicing' )
1268
-	);
1265
+    $link = sprintf(
1266
+        '<strong class="getpaid-merge-tags text-primary" role="button">%s</strong>',
1267
+        esc_html__( 'View available merge tags.', 'invoicing' )
1268
+    );
1269 1269
 
1270
-	$description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1270
+    $description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1271 1271
 	
1272
-	$output .= "$description $link";
1272
+    $output .= "$description $link";
1273 1273
 
1274
-	$output .= '<div class="getpaid-merge-tags-content mt-2 p-1 d-none">';
1275
-	$output .= '<p class="mb-2">' . esc_html__( 'The following wildcards can be used in email subjects, heading and content:', 'invoicing' ) . '</p>';
1274
+    $output .= '<div class="getpaid-merge-tags-content mt-2 p-1 d-none">';
1275
+    $output .= '<p class="mb-2">' . esc_html__( 'The following wildcards can be used in email subjects, heading and content:', 'invoicing' ) . '</p>';
1276 1276
 
1277
-	$output .= '<ul class="p-0 m-0">';
1278
-	foreach($merge_tags as $tag => $tag_description) {
1279
-		$output .= "<li class='mb-2'><strong class='text-dark'>$tag</strong> &mdash; $tag_description</li>";
1280
-	}
1277
+    $output .= '<ul class="p-0 m-0">';
1278
+    foreach($merge_tags as $tag => $tag_description) {
1279
+        $output .= "<li class='mb-2'><strong class='text-dark'>$tag</strong> &mdash; $tag_description</li>";
1280
+    }
1281 1281
 
1282
-	$output .= '</ul></div></div>';
1282
+    $output .= '</ul></div></div>';
1283 1283
 
1284
-	return $output;
1284
+    return $output;
1285 1285
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-payment-gateway.php 1 patch
Indentation   +616 added lines, -616 removed lines patch added patch discarded remove patch
@@ -13,464 +13,464 @@  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
-
141
-		do_action( 'getpaid_before_init_payment_gateway_' . $this->id, $this );
142
-
143
-		// Register gateway.
144
-		add_filter( 'wpinv_payment_gateways', array( $this, 'register_gateway' ) );
145
-
146
-		$this->enabled = wpinv_is_gateway_active( $this->id );
147
-
148
-		// Add support for various features.
149
-		foreach ( $this->supports as $feature ) {
150
-			add_filter( "wpinv_{$this->id}_support_{$feature}", '__return_true' );
151
-			add_filter( "getpaid_{$this->id}_support_{$feature}", '__return_true' );
152
-			add_filter( "getpaid_{$this->id}_supports_{$feature}", '__return_true' );
153
-		}
154
-
155
-		// Invoice addons.
156
-		if ( $this->supports( 'addons' ) ) {
157
-			add_action( "getpaid_process_{$this->id}_invoice_addons", array( $this, 'process_addons' ), 10, 2 );
158
-		}
159
-
160
-		// Gateway settings.
161
-		add_filter( "wpinv_gateway_settings_{$this->id}", array( $this, 'admin_settings' ) );
162
-
163
-		// Gateway checkout fields.
164
-		add_action( "wpinv_{$this->id}_cc_form", array( $this, 'payment_fields' ), 10, 2 );
165
-
166
-		// Process payment.
167
-		add_action( "getpaid_gateway_{$this->id}", array( $this, 'process_payment' ), 10, 3 );
168
-
169
-		// Change the checkout button text.
170
-		if ( ! empty( $this->checkout_button_text ) ) {
171
-			add_filter( "getpaid_gateway_{$this->id}_checkout_button_label", array( $this, 'rename_checkout_button' ) );
172
-		}
173
-
174
-		// Check if a gateway is valid for a given currency.
175
-		add_filter( "getpaid_gateway_{$this->id}_is_valid_for_currency", array( $this, 'validate_currency' ), 10, 2 );
176
-
177
-		// Generate the transaction url.
178
-		add_filter( "getpaid_gateway_{$this->id}_transaction_url", array( $this, 'filter_transaction_url' ), 10, 2 );
179
-
180
-		// Generate the subscription url.
181
-		add_filter( 'getpaid_remote_subscription_profile_url', array( $this, 'generate_subscription_url' ), 10, 2 );
182
-
183
-		// Confirm payments.
184
-		add_filter( "wpinv_payment_confirm_{$this->id}", array( $this, 'confirm_payment' ), 10, 2 );
185
-
186
-		// Verify IPNs.
187
-		add_action( "wpinv_verify_{$this->id}_ipn", array( $this, 'verify_ipn' ) );
188
-
189
-	}
190
-
191
-	/**
192
-	 * Checks if this gateway is a given gateway.
193
-	 *
194
-	 * @since 1.0.19
195
-	 * @return bool
196
-	 */
197
-	public function is( $gateway ) {
198
-		return $gateway == $this->id;
199
-	}
200
-
201
-	/**
202
-	 * Returns a users saved tokens for this gateway.
203
-	 *
204
-	 * @since 1.0.19
205
-	 * @return array
206
-	 */
207
-	public function get_tokens( $sandbox = null ) {
208
-
209
-		if ( is_user_logged_in() && $this->supports( 'tokens' ) && 0 == count( $this->tokens ) ) {
210
-			$tokens = get_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", true );
211
-
212
-			if ( is_array( $tokens ) ) {
213
-				$this->tokens = $tokens;
214
-			}
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
+
141
+        do_action( 'getpaid_before_init_payment_gateway_' . $this->id, $this );
142
+
143
+        // Register gateway.
144
+        add_filter( 'wpinv_payment_gateways', array( $this, 'register_gateway' ) );
145
+
146
+        $this->enabled = wpinv_is_gateway_active( $this->id );
147
+
148
+        // Add support for various features.
149
+        foreach ( $this->supports as $feature ) {
150
+            add_filter( "wpinv_{$this->id}_support_{$feature}", '__return_true' );
151
+            add_filter( "getpaid_{$this->id}_support_{$feature}", '__return_true' );
152
+            add_filter( "getpaid_{$this->id}_supports_{$feature}", '__return_true' );
153
+        }
154
+
155
+        // Invoice addons.
156
+        if ( $this->supports( 'addons' ) ) {
157
+            add_action( "getpaid_process_{$this->id}_invoice_addons", array( $this, 'process_addons' ), 10, 2 );
158
+        }
159
+
160
+        // Gateway settings.
161
+        add_filter( "wpinv_gateway_settings_{$this->id}", array( $this, 'admin_settings' ) );
162
+
163
+        // Gateway checkout fields.
164
+        add_action( "wpinv_{$this->id}_cc_form", array( $this, 'payment_fields' ), 10, 2 );
165
+
166
+        // Process payment.
167
+        add_action( "getpaid_gateway_{$this->id}", array( $this, 'process_payment' ), 10, 3 );
168
+
169
+        // Change the checkout button text.
170
+        if ( ! empty( $this->checkout_button_text ) ) {
171
+            add_filter( "getpaid_gateway_{$this->id}_checkout_button_label", array( $this, 'rename_checkout_button' ) );
172
+        }
173
+
174
+        // Check if a gateway is valid for a given currency.
175
+        add_filter( "getpaid_gateway_{$this->id}_is_valid_for_currency", array( $this, 'validate_currency' ), 10, 2 );
176
+
177
+        // Generate the transaction url.
178
+        add_filter( "getpaid_gateway_{$this->id}_transaction_url", array( $this, 'filter_transaction_url' ), 10, 2 );
179
+
180
+        // Generate the subscription url.
181
+        add_filter( 'getpaid_remote_subscription_profile_url', array( $this, 'generate_subscription_url' ), 10, 2 );
182
+
183
+        // Confirm payments.
184
+        add_filter( "wpinv_payment_confirm_{$this->id}", array( $this, 'confirm_payment' ), 10, 2 );
185
+
186
+        // Verify IPNs.
187
+        add_action( "wpinv_verify_{$this->id}_ipn", array( $this, 'verify_ipn' ) );
188
+
189
+    }
190
+
191
+    /**
192
+     * Checks if this gateway is a given gateway.
193
+     *
194
+     * @since 1.0.19
195
+     * @return bool
196
+     */
197
+    public function is( $gateway ) {
198
+        return $gateway == $this->id;
199
+    }
200
+
201
+    /**
202
+     * Returns a users saved tokens for this gateway.
203
+     *
204
+     * @since 1.0.19
205
+     * @return array
206
+     */
207
+    public function get_tokens( $sandbox = null ) {
208
+
209
+        if ( is_user_logged_in() && $this->supports( 'tokens' ) && 0 == count( $this->tokens ) ) {
210
+            $tokens = get_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", true );
211
+
212
+            if ( is_array( $tokens ) ) {
213
+                $this->tokens = $tokens;
214
+            }
215 215
 }
216 216
 
217
-		if ( ! is_bool( $sandbox ) ) {
218
-			return $this->tokens;
219
-		}
220
-
221
-		// Filter tokens.
222
-		$args = array( 'type' => $sandbox ? 'sandbox' : 'live' );
223
-		return wp_list_filter( $this->tokens, $args );
224
-
225
-	}
226
-
227
-	/**
228
-	 * Saves a token for this gateway.
229
-	 *
230
-	 * @since 1.0.19
231
-	 */
232
-	public function save_token( $token ) {
233
-
234
-		$tokens   = $this->get_tokens();
235
-		$tokens[] = $token;
236
-
237
-		update_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", $tokens );
238
-
239
-		$this->tokens = $tokens;
240
-
241
-	}
242
-
243
-	/**
244
-	 * Return the title for admin screens.
245
-	 *
246
-	 * @return string
247
-	 */
248
-	public function get_method_title() {
249
-		return apply_filters( 'getpaid_gateway_method_title', $this->method_title, $this );
250
-	}
251
-
252
-	/**
253
-	 * Return the description for admin screens.
254
-	 *
255
-	 * @return string
256
-	 */
257
-	public function get_method_description() {
258
-		return apply_filters( 'getpaid_gateway_method_description', $this->method_description, $this );
259
-	}
260
-
261
-	/**
262
-	 * Get the success url.
263
-	 *
264
-	 * @param WPInv_Invoice $invoice Invoice object.
265
-	 * @return string
266
-	 */
267
-	public function get_return_url( $invoice ) {
268
-
269
-		// Payment success url
270
-		$return_url = add_query_arg(
271
-			array(
272
-				'payment-confirm' => $this->id,
273
-				'invoice_key'     => $invoice->get_key(),
274
-				'utm_nooverride'  => 1,
275
-			),
276
-			wpinv_get_success_page_uri()
277
-		);
278
-
279
-		return apply_filters( 'getpaid_gateway_success_url', $return_url, $invoice, $this );
280
-	}
281
-
282
-	/**
283
-	 * Confirms payments when rendering the success page.
284
-	 *
285
-	 * @param string $content Success page content.
286
-	 * @return string
287
-	 */
288
-	public function confirm_payment( $content ) {
289
-
290
-		// Retrieve the invoice.
291
-		$invoice_id = getpaid_get_current_invoice_id();
292
-		$invoice    = wpinv_get_invoice( $invoice_id );
293
-
294
-		// Ensure that it exists and that it is pending payment.
295
-		if ( empty( $invoice_id ) || ! $invoice->needs_payment() ) {
296
-			return $content;
297
-		}
298
-
299
-		// Can the user view this invoice??
300
-		if ( ! wpinv_user_can_view_invoice( $invoice ) ) {
301
-			return $content;
302
-		}
303
-
304
-		// Show payment processing indicator.
305
-		return wpinv_get_template_html( 'wpinv-payment-processing.php', compact( 'invoice' ) );
306
-	}
307
-
308
-	/**
309
-	 * Processes ipns and marks payments as complete.
310
-	 *
311
-	 * @return void
312
-	 */
313
-	public function verify_ipn() {}
314
-
315
-	/**
316
-	 * Processes invoice addons.
317
-	 *
318
-	 * @param WPInv_Invoice $invoice
319
-	 * @param GetPaid_Form_Item[] $items
320
-	 * @return WPInv_Invoice
321
-	 */
322
-	public function process_addons( $invoice, $items ) {
323
-
324
-	}
325
-
326
-	/**
327
-	 * Get a link to the transaction on the 3rd party gateway site (if applicable).
328
-	 *
329
-	 * @param string $transaction_url transaction url.
330
-	 * @param WPInv_Invoice $invoice Invoice object.
331
-	 * @return string transaction URL, or empty string.
332
-	 */
333
-	public function filter_transaction_url( $transaction_url, $invoice ) {
334
-
335
-		$transaction_id  = $invoice->get_transaction_id();
336
-
337
-		if ( ! empty( $this->view_transaction_url ) && ! empty( $transaction_id ) ) {
338
-			$transaction_url = sprintf( $this->view_transaction_url, $transaction_id );
339
-			$replace         = $this->is_sandbox( $invoice ) ? 'sandbox.' : '';
340
-			$transaction_url = str_replace( '{sandbox}', $replace, $transaction_url );
341
-		}
342
-
343
-		return $transaction_url;
344
-	}
345
-
346
-	/**
347
-	 * Get a link to the subscription on the 3rd party gateway site (if applicable).
348
-	 *
349
-	 * @param string $subscription_url transaction url.
350
-	 * @param WPInv_Subscription $subscription Subscription object.
351
-	 * @return string subscription URL, or empty string.
352
-	 */
353
-	public function generate_subscription_url( $subscription_url, $subscription ) {
354
-
355
-		$profile_id      = $subscription->get_profile_id();
356
-
357
-		if ( $this->id == $subscription->get_gateway() && ! empty( $this->view_subscription_url ) && ! empty( $profile_id ) ) {
358
-
359
-			$subscription_url = sprintf( $this->view_subscription_url, $profile_id );
360
-			$replace          = $this->is_sandbox( $subscription->get_parent_invoice() ) ? 'sandbox.' : '';
361
-			$subscription_url = str_replace( '{sandbox}', $replace, $subscription_url );
362
-
363
-		}
364
-
365
-		return $subscription_url;
366
-	}
367
-
368
-	/**
369
-	 * Check if the gateway is available for use.
370
-	 *
371
-	 * @return bool
372
-	 */
373
-	public function is_available() {
374
-		return ! empty( $this->enabled );
375
-	}
376
-
377
-	/**
378
-	 * Return the gateway's title.
379
-	 *
380
-	 * @return string
381
-	 */
382
-	public function get_title() {
383
-		return apply_filters( 'getpaid_gateway_title', $this->title, $this );
384
-	}
385
-
386
-	/**
387
-	 * Return the gateway's description.
388
-	 *
389
-	 * @return string
390
-	 */
391
-	public function get_description() {
392
-		return apply_filters( 'getpaid_gateway_description', $this->description, $this );
393
-	}
394
-
395
-	/**
396
-	 * Process Payment.
397
-	 *
398
-	 *
399
-	 * @param WPInv_Invoice $invoice Invoice.
400
-	 * @param array $submission_data Posted checkout fields.
401
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
402
-	 * @return void
403
-	 */
404
-	public function process_payment( $invoice, $submission_data, $submission ) {
405
-		// Process the payment then either redirect to the success page or the gateway.
406
-		do_action( 'getpaid_process_invoice_payment_' . $this->id, $invoice, $submission_data, $submission );
407
-	}
408
-
409
-	/**
410
-	 * Process refund.
411
-	 *
412
-	 * If the gateway declares 'refunds' support, this will allow it to refund.
413
-	 * a passed in amount.
414
-	 *
415
-	 * @param WPInv_Invoice $invoice Invoice.
416
-	 * @param  float  $amount Refund amount.
417
-	 * @param  string $reason Refund reason.
418
-	 * @return WP_Error|bool True or false based on success, or a WP_Error object.
419
-	 */
420
-	public function process_refund( $invoice, $amount = null, $reason = '' ) {
421
-		return apply_filters( 'getpaid_process_invoice_refund_' . $this->id, false, $invoice, $amount, $reason );
422
-	}
423
-
424
-	/**
425
-	 * Displays the payment fields, credit cards etc.
426
-	 *
427
-	 * @param int $invoice_id 0 or invoice id.
428
-	 * @param GetPaid_Payment_Form $form Current payment form.
429
-	 */
430
-	public function payment_fields( $invoice_id, $form ) {
431
-		do_action( 'getpaid_getpaid_gateway_payment_fields_' . $this->id, $invoice_id, $form );
432
-	}
433
-
434
-	/**
435
-	 * Filters the gateway settings.
436
-	 *
437
-	 * @param array $admin_settings
438
-	 */
439
-	public function admin_settings( $admin_settings ) {
440
-		return $admin_settings;
441
-	}
442
-
443
-	/**
444
-	 * Retrieves the value of a gateway setting.
445
-	 *
446
-	 * @param string $option
447
-	 */
448
-	public function get_option( $option, $default = false ) {
449
-		return wpinv_get_option( $this->id . '_' . $option, $default );
450
-	}
451
-
452
-	/**
453
-	 * Check if a gateway supports a given feature.
454
-	 *
455
-	 * Gateways should override this to declare support (or lack of support) for a feature.
456
-	 * For backward compatibility, gateways support 'products' by default, but nothing else.
457
-	 *
458
-	 * @param string $feature string The name of a feature to test support for.
459
-	 * @return bool True if the gateway supports the feature, false otherwise.
460
-	 * @since 1.0.19
461
-	 */
462
-	public function supports( $feature ) {
463
-		return getpaid_payment_gateway_supports( $this->id, $feature );
464
-	}
465
-
466
-	/**
467
-	 * Returns the credit card form html.
468
-	 *
469
-	 * @param bool $save whether or not to display the save button.
470
-	 */
217
+        if ( ! is_bool( $sandbox ) ) {
218
+            return $this->tokens;
219
+        }
220
+
221
+        // Filter tokens.
222
+        $args = array( 'type' => $sandbox ? 'sandbox' : 'live' );
223
+        return wp_list_filter( $this->tokens, $args );
224
+
225
+    }
226
+
227
+    /**
228
+     * Saves a token for this gateway.
229
+     *
230
+     * @since 1.0.19
231
+     */
232
+    public function save_token( $token ) {
233
+
234
+        $tokens   = $this->get_tokens();
235
+        $tokens[] = $token;
236
+
237
+        update_user_meta( get_current_user_id(), "getpaid_{$this->id}_tokens", $tokens );
238
+
239
+        $this->tokens = $tokens;
240
+
241
+    }
242
+
243
+    /**
244
+     * Return the title for admin screens.
245
+     *
246
+     * @return string
247
+     */
248
+    public function get_method_title() {
249
+        return apply_filters( 'getpaid_gateway_method_title', $this->method_title, $this );
250
+    }
251
+
252
+    /**
253
+     * Return the description for admin screens.
254
+     *
255
+     * @return string
256
+     */
257
+    public function get_method_description() {
258
+        return apply_filters( 'getpaid_gateway_method_description', $this->method_description, $this );
259
+    }
260
+
261
+    /**
262
+     * Get the success url.
263
+     *
264
+     * @param WPInv_Invoice $invoice Invoice object.
265
+     * @return string
266
+     */
267
+    public function get_return_url( $invoice ) {
268
+
269
+        // Payment success url
270
+        $return_url = add_query_arg(
271
+            array(
272
+                'payment-confirm' => $this->id,
273
+                'invoice_key'     => $invoice->get_key(),
274
+                'utm_nooverride'  => 1,
275
+            ),
276
+            wpinv_get_success_page_uri()
277
+        );
278
+
279
+        return apply_filters( 'getpaid_gateway_success_url', $return_url, $invoice, $this );
280
+    }
281
+
282
+    /**
283
+     * Confirms payments when rendering the success page.
284
+     *
285
+     * @param string $content Success page content.
286
+     * @return string
287
+     */
288
+    public function confirm_payment( $content ) {
289
+
290
+        // Retrieve the invoice.
291
+        $invoice_id = getpaid_get_current_invoice_id();
292
+        $invoice    = wpinv_get_invoice( $invoice_id );
293
+
294
+        // Ensure that it exists and that it is pending payment.
295
+        if ( empty( $invoice_id ) || ! $invoice->needs_payment() ) {
296
+            return $content;
297
+        }
298
+
299
+        // Can the user view this invoice??
300
+        if ( ! wpinv_user_can_view_invoice( $invoice ) ) {
301
+            return $content;
302
+        }
303
+
304
+        // Show payment processing indicator.
305
+        return wpinv_get_template_html( 'wpinv-payment-processing.php', compact( 'invoice' ) );
306
+    }
307
+
308
+    /**
309
+     * Processes ipns and marks payments as complete.
310
+     *
311
+     * @return void
312
+     */
313
+    public function verify_ipn() {}
314
+
315
+    /**
316
+     * Processes invoice addons.
317
+     *
318
+     * @param WPInv_Invoice $invoice
319
+     * @param GetPaid_Form_Item[] $items
320
+     * @return WPInv_Invoice
321
+     */
322
+    public function process_addons( $invoice, $items ) {
323
+
324
+    }
325
+
326
+    /**
327
+     * Get a link to the transaction on the 3rd party gateway site (if applicable).
328
+     *
329
+     * @param string $transaction_url transaction url.
330
+     * @param WPInv_Invoice $invoice Invoice object.
331
+     * @return string transaction URL, or empty string.
332
+     */
333
+    public function filter_transaction_url( $transaction_url, $invoice ) {
334
+
335
+        $transaction_id  = $invoice->get_transaction_id();
336
+
337
+        if ( ! empty( $this->view_transaction_url ) && ! empty( $transaction_id ) ) {
338
+            $transaction_url = sprintf( $this->view_transaction_url, $transaction_id );
339
+            $replace         = $this->is_sandbox( $invoice ) ? 'sandbox.' : '';
340
+            $transaction_url = str_replace( '{sandbox}', $replace, $transaction_url );
341
+        }
342
+
343
+        return $transaction_url;
344
+    }
345
+
346
+    /**
347
+     * Get a link to the subscription on the 3rd party gateway site (if applicable).
348
+     *
349
+     * @param string $subscription_url transaction url.
350
+     * @param WPInv_Subscription $subscription Subscription object.
351
+     * @return string subscription URL, or empty string.
352
+     */
353
+    public function generate_subscription_url( $subscription_url, $subscription ) {
354
+
355
+        $profile_id      = $subscription->get_profile_id();
356
+
357
+        if ( $this->id == $subscription->get_gateway() && ! empty( $this->view_subscription_url ) && ! empty( $profile_id ) ) {
358
+
359
+            $subscription_url = sprintf( $this->view_subscription_url, $profile_id );
360
+            $replace          = $this->is_sandbox( $subscription->get_parent_invoice() ) ? 'sandbox.' : '';
361
+            $subscription_url = str_replace( '{sandbox}', $replace, $subscription_url );
362
+
363
+        }
364
+
365
+        return $subscription_url;
366
+    }
367
+
368
+    /**
369
+     * Check if the gateway is available for use.
370
+     *
371
+     * @return bool
372
+     */
373
+    public function is_available() {
374
+        return ! empty( $this->enabled );
375
+    }
376
+
377
+    /**
378
+     * Return the gateway's title.
379
+     *
380
+     * @return string
381
+     */
382
+    public function get_title() {
383
+        return apply_filters( 'getpaid_gateway_title', $this->title, $this );
384
+    }
385
+
386
+    /**
387
+     * Return the gateway's description.
388
+     *
389
+     * @return string
390
+     */
391
+    public function get_description() {
392
+        return apply_filters( 'getpaid_gateway_description', $this->description, $this );
393
+    }
394
+
395
+    /**
396
+     * Process Payment.
397
+     *
398
+     *
399
+     * @param WPInv_Invoice $invoice Invoice.
400
+     * @param array $submission_data Posted checkout fields.
401
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
402
+     * @return void
403
+     */
404
+    public function process_payment( $invoice, $submission_data, $submission ) {
405
+        // Process the payment then either redirect to the success page or the gateway.
406
+        do_action( 'getpaid_process_invoice_payment_' . $this->id, $invoice, $submission_data, $submission );
407
+    }
408
+
409
+    /**
410
+     * Process refund.
411
+     *
412
+     * If the gateway declares 'refunds' support, this will allow it to refund.
413
+     * a passed in amount.
414
+     *
415
+     * @param WPInv_Invoice $invoice Invoice.
416
+     * @param  float  $amount Refund amount.
417
+     * @param  string $reason Refund reason.
418
+     * @return WP_Error|bool True or false based on success, or a WP_Error object.
419
+     */
420
+    public function process_refund( $invoice, $amount = null, $reason = '' ) {
421
+        return apply_filters( 'getpaid_process_invoice_refund_' . $this->id, false, $invoice, $amount, $reason );
422
+    }
423
+
424
+    /**
425
+     * Displays the payment fields, credit cards etc.
426
+     *
427
+     * @param int $invoice_id 0 or invoice id.
428
+     * @param GetPaid_Payment_Form $form Current payment form.
429
+     */
430
+    public function payment_fields( $invoice_id, $form ) {
431
+        do_action( 'getpaid_getpaid_gateway_payment_fields_' . $this->id, $invoice_id, $form );
432
+    }
433
+
434
+    /**
435
+     * Filters the gateway settings.
436
+     *
437
+     * @param array $admin_settings
438
+     */
439
+    public function admin_settings( $admin_settings ) {
440
+        return $admin_settings;
441
+    }
442
+
443
+    /**
444
+     * Retrieves the value of a gateway setting.
445
+     *
446
+     * @param string $option
447
+     */
448
+    public function get_option( $option, $default = false ) {
449
+        return wpinv_get_option( $this->id . '_' . $option, $default );
450
+    }
451
+
452
+    /**
453
+     * Check if a gateway supports a given feature.
454
+     *
455
+     * Gateways should override this to declare support (or lack of support) for a feature.
456
+     * For backward compatibility, gateways support 'products' by default, but nothing else.
457
+     *
458
+     * @param string $feature string The name of a feature to test support for.
459
+     * @return bool True if the gateway supports the feature, false otherwise.
460
+     * @since 1.0.19
461
+     */
462
+    public function supports( $feature ) {
463
+        return getpaid_payment_gateway_supports( $this->id, $feature );
464
+    }
465
+
466
+    /**
467
+     * Returns the credit card form html.
468
+     *
469
+     * @param bool $save whether or not to display the save button.
470
+     */
471 471
     public function get_cc_form( $save = false ) {
472 472
 
473
-		ob_start();
473
+        ob_start();
474 474
 
475 475
         $id_prefix = esc_attr( uniqid( $this->id ) );
476 476
 
@@ -488,7 +488,7 @@  discard block
 block discarded – undo
488 488
             '11' => __( 'November', 'invoicing' ),
489 489
             '12' => __( 'December', 'invoicing' ),
490 490
         );
491
-		$months = apply_filters( 'getpaid_cc_months', $months, $this );
491
+        $months = apply_filters( 'getpaid_cc_months', $months, $this );
492 492
 
493 493
         $year  = (int) current_time( 'Y' );
494 494
         $years = array();
@@ -497,7 +497,7 @@  discard block
 block discarded – undo
497 497
             $years[ $year + $i ] = $year + $i;
498 498
         }
499 499
 
500
-		$years = apply_filters( 'getpaid_cc_years', $years, $this );
500
+        $years = apply_filters( 'getpaid_cc_years', $years, $this );
501 501
 
502 502
         ?>
503 503
             <div class="<?php echo esc_attr( $this->id ); ?>-cc-form getpaid-cc-form mt-1">
@@ -531,7 +531,7 @@  discard block
 block discarded – undo
531 531
                                             <option disabled selected="selected"><?php esc_html_e( 'MM', 'invoicing' ); ?></option>
532 532
                                             <?php
533 533
                                                 foreach ( $months as $key => $month ) {
534
-												echo "<option value='" . esc_attr( $key ) . "'>" . esc_html( $month ) . '</option>';
534
+                                                echo "<option value='" . esc_attr( $key ) . "'>" . esc_html( $month ) . '</option>';
535 535
                                                 }
536 536
                                             ?>
537 537
                                         </select>
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
                                             <option disabled selected="selected"><?php esc_html_e( 'YY', 'invoicing' ); ?></option>
542 542
                                             <?php
543 543
                                                 foreach ( $years as $key => $year ) {
544
-												echo "<option value='" . esc_attr( $key ) . "'>" . esc_html( $year ) . '</option>';
544
+                                                echo "<option value='" . esc_attr( $key ) . "'>" . esc_html( $year ) . '</option>';
545 545
                                                 }
546 546
                                             ?>
547 547
                                         </select>
@@ -556,203 +556,203 @@  discard block
 block discarded – undo
556 556
                                         'name'             => $this->id . '[cc_cvv2]',
557 557
                                         'id'               => "$id_prefix-cc-cvv2",
558 558
                                         'label'            => __( 'CCV', 'invoicing' ),
559
-										'label_type'       => 'vertical',
560
-										'class'            => 'form-control-sm',
561
-										'extra_attributes' => array(
562
-											'autocomplete' => 'cc-csc',
563
-											'maxlength' => 4
564
-										),
559
+                                        'label_type'       => 'vertical',
560
+                                        'class'            => 'form-control-sm',
561
+                                        'extra_attributes' => array(
562
+                                            'autocomplete' => 'cc-csc',
563
+                                            'maxlength' => 4
564
+                                        ),
565 565
                                     ),
566
-									true
566
+                                    true
567 567
                                 );
568 568
                             ?>
569 569
                         </div>
570 570
 					</div>
571 571
 					<?php
572
-						if ( $save ) {
573
-							$this->save_payment_method_checkbox();
574
-						}
575
-					?>
572
+                        if ( $save ) {
573
+                            $this->save_payment_method_checkbox();
574
+                        }
575
+                    ?>
576 576
                 </div>
577 577
             </div>
578 578
 		<?php
579 579
 
580
-		return ob_get_clean();
580
+        return ob_get_clean();
581
+
582
+    }
583
+
584
+    /**
585
+     * Displays a new payment method entry form.
586
+     *
587
+     * @since 1.0.19
588
+     */
589
+    public function new_payment_method_entry( $form ) {
590
+        echo "<div class='getpaid-new-payment-method-form' style='display:none;'> " . wp_kses( $form, getpaid_allowed_html() ) . '</div>';
591
+    }
592
+
593
+    /**
594
+     * Grab and display our saved payment methods.
595
+     *
596
+     * @since 1.0.19
597
+     */
598
+    public function saved_payment_methods() {
599
+        echo '<ul class="getpaid-saved-payment-methods list-unstyled m-0 mt-2" data-count="' . esc_attr( count( $this->get_tokens( $this->is_sandbox() ) ) ) . '">';
600
+
601
+        foreach ( $this->get_tokens( $this->is_sandbox() ) as $token ) {
602
+            $this->get_saved_payment_method_option_html( $token );
603
+        }
604
+
605
+        $this->get_new_payment_method_option_html();
606
+        echo '</ul>';
581 607
 
582 608
     }
583 609
 
584
-	/**
585
-	 * Displays a new payment method entry form.
586
-	 *
587
-	 * @since 1.0.19
588
-	 */
589
-	public function new_payment_method_entry( $form ) {
590
-		echo "<div class='getpaid-new-payment-method-form' style='display:none;'> " . wp_kses( $form, getpaid_allowed_html() ) . '</div>';
591
-	}
592
-
593
-	/**
594
-	 * Grab and display our saved payment methods.
595
-	 *
596
-	 * @since 1.0.19
597
-	 */
598
-	public function saved_payment_methods() {
599
-		echo '<ul class="getpaid-saved-payment-methods list-unstyled m-0 mt-2" data-count="' . esc_attr( count( $this->get_tokens( $this->is_sandbox() ) ) ) . '">';
600
-
601
-		foreach ( $this->get_tokens( $this->is_sandbox() ) as $token ) {
602
-			$this->get_saved_payment_method_option_html( $token );
603
-		}
604
-
605
-		$this->get_new_payment_method_option_html();
606
-		echo '</ul>';
607
-
608
-	}
609
-
610
-	/**
611
-	 * Gets saved payment method HTML from a token.
612
-	 *
613
-	 * @since 1.0.19
614
-	 * @param  array $token Payment Token.
615
-	 * @return string Generated payment method HTML
616
-	 */
617
-	public function get_saved_payment_method_option_html( $token ) {
618
-
619
-		printf(
620
-			'<li class="getpaid-payment-method form-group mb-3">
610
+    /**
611
+     * Gets saved payment method HTML from a token.
612
+     *
613
+     * @since 1.0.19
614
+     * @param  array $token Payment Token.
615
+     * @return string Generated payment method HTML
616
+     */
617
+    public function get_saved_payment_method_option_html( $token ) {
618
+
619
+        printf(
620
+            '<li class="getpaid-payment-method form-group mb-3">
621 621
 				<label>
622 622
 					<input name="getpaid-%1$s-payment-method" type="radio" value="%2$s" data-currency="%5$s" style="width:auto;" class="getpaid-saved-payment-method-token-input" %4$s />
623 623
 					<span>%3$s</span>
624 624
 				</label>
625 625
 			</li>',
626
-			esc_attr( $this->id ),
627
-			esc_attr( $token['id'] ),
628
-			esc_html( $token['name'] ),
629
-			checked( empty( $token['default'] ), false, false ),
630
-			empty( $token['currency'] ) ? 'none' : esc_attr( $token['currency'] )
631
-		);
632
-
633
-	}
634
-
635
-	/**
636
-	 * Displays a radio button for entering a new payment method (new CC details) instead of using a saved method.
637
-	 *
638
-	 * @since 1.0.19
639
-	 */
640
-	public function get_new_payment_method_option_html() {
641
-
642
-		$label = apply_filters( 'getpaid_new_payment_method_label', $this->new_method_label ? $this->new_method_label : __( 'Use a new payment method', 'invoicing' ), $this );
643
-
644
-		printf(
645
-			'<li class="getpaid-new-payment-method">
626
+            esc_attr( $this->id ),
627
+            esc_attr( $token['id'] ),
628
+            esc_html( $token['name'] ),
629
+            checked( empty( $token['default'] ), false, false ),
630
+            empty( $token['currency'] ) ? 'none' : esc_attr( $token['currency'] )
631
+        );
632
+
633
+    }
634
+
635
+    /**
636
+     * Displays a radio button for entering a new payment method (new CC details) instead of using a saved method.
637
+     *
638
+     * @since 1.0.19
639
+     */
640
+    public function get_new_payment_method_option_html() {
641
+
642
+        $label = apply_filters( 'getpaid_new_payment_method_label', $this->new_method_label ? $this->new_method_label : __( 'Use a new payment method', 'invoicing' ), $this );
643
+
644
+        printf(
645
+            '<li class="getpaid-new-payment-method">
646 646
 				<label>
647 647
 					<input name="getpaid-%1$s-payment-method" type="radio" data-currency="none" value="new" style="width:auto;" />
648 648
 					<span>%2$s</span>
649 649
 				</label>
650 650
 			</li>',
651
-			esc_attr( $this->id ),
652
-			esc_html( $label )
653
-		);
654
-
655
-	}
656
-
657
-	/**
658
-	 * Outputs a checkbox for saving a new payment method to the database.
659
-	 *
660
-	 * @since 1.0.19
661
-	 */
662
-	public function save_payment_method_checkbox() {
663
-
664
-		aui()->input(
665
-			array(
666
-				'type'       => 'checkbox',
667
-				'name'       => esc_attr( "getpaid-$this->id-new-payment-method" ),
668
-				'id'         => esc_attr( uniqid( $this->id ) ),
669
-				'required'   => false,
670
-				'label'      => esc_html__( 'Save payment method', 'invoicing' ),
671
-				'value'      => 'true',
672
-				'checked'    => true,
673
-				'wrap_class' => 'getpaid-save-payment-method pt-1 pb-1',
674
-			),
675
-			true
676
-		);
677
-
678
-	}
679
-
680
-	/**
681
-	 * Registers the gateway.
682
-	 *
683
-	 * @return array
684
-	 */
685
-	public function register_gateway( $gateways ) {
686
-
687
-		$gateways[ $this->id ] = array(
688
-
689
-			'admin_label'    => $this->method_title,
651
+            esc_attr( $this->id ),
652
+            esc_html( $label )
653
+        );
654
+
655
+    }
656
+
657
+    /**
658
+     * Outputs a checkbox for saving a new payment method to the database.
659
+     *
660
+     * @since 1.0.19
661
+     */
662
+    public function save_payment_method_checkbox() {
663
+
664
+        aui()->input(
665
+            array(
666
+                'type'       => 'checkbox',
667
+                'name'       => esc_attr( "getpaid-$this->id-new-payment-method" ),
668
+                'id'         => esc_attr( uniqid( $this->id ) ),
669
+                'required'   => false,
670
+                'label'      => esc_html__( 'Save payment method', 'invoicing' ),
671
+                'value'      => 'true',
672
+                'checked'    => true,
673
+                'wrap_class' => 'getpaid-save-payment-method pt-1 pb-1',
674
+            ),
675
+            true
676
+        );
677
+
678
+    }
679
+
680
+    /**
681
+     * Registers the gateway.
682
+     *
683
+     * @return array
684
+     */
685
+    public function register_gateway( $gateways ) {
686
+
687
+        $gateways[ $this->id ] = array(
688
+
689
+            'admin_label'    => $this->method_title,
690 690
             'checkout_label' => $this->title,
691
-			'ordering'       => $this->order,
691
+            'ordering'       => $this->order,
692 692
 
693
-		);
693
+        );
694 694
 
695
-		return $gateways;
695
+        return $gateways;
696 696
 
697
-	}
697
+    }
698 698
 
699
-	/**
700
-	 * Checks whether or not this is a sandbox request.
701
-	 *
702
-	 * @param  WPInv_Invoice|null $invoice Invoice object or null.
703
-	 * @return bool
704
-	 */
705
-	public function is_sandbox( $invoice = null ) {
699
+    /**
700
+     * Checks whether or not this is a sandbox request.
701
+     *
702
+     * @param  WPInv_Invoice|null $invoice Invoice object or null.
703
+     * @return bool
704
+     */
705
+    public function is_sandbox( $invoice = null ) {
706 706
 
707
-		if ( is_a( $invoice, 'WPInv_Invoice' ) && ! $invoice->needs_payment() ) {
708
-			return $invoice->get_mode() === 'test';
709
-		}
707
+        if ( is_a( $invoice, 'WPInv_Invoice' ) && ! $invoice->needs_payment() ) {
708
+            return $invoice->get_mode() === 'test';
709
+        }
710 710
 
711
-		return wpinv_is_test_mode( $this->id );
711
+        return wpinv_is_test_mode( $this->id );
712 712
 
713
-	}
713
+    }
714 714
 
715
-	/**
716
-	 * Renames the checkout button
717
-	 *
718
-	 * @return string
719
-	 */
720
-	public function rename_checkout_button() {
721
-		return $this->checkout_button_text;
722
-	}
715
+    /**
716
+     * Renames the checkout button
717
+     *
718
+     * @return string
719
+     */
720
+    public function rename_checkout_button() {
721
+        return $this->checkout_button_text;
722
+    }
723 723
 
724
-	/**
725
-	 * Validate gateway currency
726
-	 *
727
-	 * @return bool
728
-	 */
729
-	public function validate_currency( $validation, $currency ) {
724
+    /**
725
+     * Validate gateway currency
726
+     *
727
+     * @return bool
728
+     */
729
+    public function validate_currency( $validation, $currency ) {
730 730
 
731
-		// Required currencies.
732
-		if ( ! empty( $this->currencies ) && ! in_array( $currency, $this->currencies ) ) {
733
-			return false;
734
-		}
731
+        // Required currencies.
732
+        if ( ! empty( $this->currencies ) && ! in_array( $currency, $this->currencies ) ) {
733
+            return false;
734
+        }
735 735
 
736
-		// Excluded currencies.
737
-		if ( ! empty( $this->exclude_currencies ) && in_array( $currency, $this->exclude_currencies ) ) {
738
-			return false;
739
-		}
736
+        // Excluded currencies.
737
+        if ( ! empty( $this->exclude_currencies ) && in_array( $currency, $this->exclude_currencies ) ) {
738
+            return false;
739
+        }
740 740
 
741
-		return $validation;
742
-	}
741
+        return $validation;
742
+    }
743 743
 
744
-	/**
745
-	 * Displays an error
746
-	 *
747
-	 */
748
-	public function show_error( $code, $message, $type ) {
744
+    /**
745
+     * Displays an error
746
+     *
747
+     */
748
+    public function show_error( $code, $message, $type ) {
749 749
 
750
-		if ( is_admin() ) {
751
-			getpaid_admin()->{"show_$type"}( $message );
752
-		}
750
+        if ( is_admin() ) {
751
+            getpaid_admin()->{"show_$type"}( $message );
752
+        }
753 753
 
754
-		wpinv_set_error( $code, $message, $type );
754
+        wpinv_set_error( $code, $message, $type );
755 755
 
756
-	}
756
+    }
757 757
 
758 758
 }
Please login to merge, or discard this patch.
includes/admin/meta-boxes/class-getpaid-meta-box-item-details.php 1 patch
Indentation   +41 added lines, -41 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  */
9 9
 
10 10
 if ( ! defined( 'ABSPATH' ) ) {
11
-	exit; // Exit if accessed directly
11
+    exit; // Exit if accessed directly
12 12
 }
13 13
 
14 14
 /**
@@ -17,12 +17,12 @@  discard block
 block discarded – undo
17 17
 class GetPaid_Meta_Box_Item_Details {
18 18
 
19 19
     /**
20
-	 * Output the metabox.
21
-	 *
22
-	 * @param WP_Post $post
23
-	 */
20
+     * Output the metabox.
21
+     *
22
+     * @param WP_Post $post
23
+     */
24 24
     public static function output( $post ) {
25
-		global $aui_bs5;
25
+        global $aui_bs5;
26 26
 
27 27
         // Prepare the item.
28 28
         $item = new WPInv_Item( $post );
@@ -119,24 +119,24 @@  discard block
 block discarded – undo
119 119
                                 // Dynamic pricing.
120 120
                                 if ( $item->supports_dynamic_pricing() ) {
121 121
 
122
-								do_action( 'wpinv_item_details_metabox_before_dynamic_pricing_checkbox', $item );
122
+                                do_action( 'wpinv_item_details_metabox_before_dynamic_pricing_checkbox', $item );
123 123
 
124
-								// NYP toggle.
125
-								aui()->input(
124
+                                // NYP toggle.
125
+                                aui()->input(
126 126
                                     array(
127
-										'id'      => 'wpinv_name_your_price',
128
-										'name'    => 'wpinv_name_your_price',
129
-										'type'    => 'checkbox',
130
-										'label'   => apply_filters( 'wpinv_name_your_price_toggle_text', __( 'Let customers name their price', 'invoicing' ) ),
131
-										'value'   => '1',
132
-										'checked' => $item->user_can_set_their_price(),
133
-										'no_wrap' => true,
134
-										'switch'  => 'sm',
127
+                                        'id'      => 'wpinv_name_your_price',
128
+                                        'name'    => 'wpinv_name_your_price',
129
+                                        'type'    => 'checkbox',
130
+                                        'label'   => apply_filters( 'wpinv_name_your_price_toggle_text', __( 'Let customers name their price', 'invoicing' ) ),
131
+                                        'value'   => '1',
132
+                                        'checked' => $item->user_can_set_their_price(),
133
+                                        'no_wrap' => true,
134
+                                        'switch'  => 'sm',
135 135
                                     ),
136 136
                                     true
137 137
                                 );
138 138
 
139
-							do_action( 'wpinv_item_details_metabox_dynamic_pricing_checkbox', $item );
139
+                            do_action( 'wpinv_item_details_metabox_dynamic_pricing_checkbox', $item );
140 140
 
141 141
                                 }
142 142
 
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
                                         'value'   => '1',
152 152
                                         'checked' => $item->is_recurring(),
153 153
                                         'no_wrap' => true,
154
-										'switch'  => 'sm',
154
+                                        'switch'  => 'sm',
155 155
                                     ),
156 156
                                     true
157 157
                                 );
@@ -293,35 +293,35 @@  discard block
 block discarded – undo
293 293
     }
294 294
 
295 295
     /**
296
-	 * Save meta box data.
297
-	 *
298
-	 * @param int $post_id
299
-	 */
300
-	public static function save( $post_id ) {
296
+     * Save meta box data.
297
+     *
298
+     * @param int $post_id
299
+     */
300
+    public static function save( $post_id ) {
301 301
 
302 302
         // Prepare the item.
303 303
         $item = new WPInv_Item( $post_id );
304 304
 
305 305
         // Load new data.
306 306
         $item->set_props(
307
-			array(
308
-				'price'              => isset( $_POST['wpinv_item_price'] ) ? getpaid_standardize_amount( $_POST['wpinv_item_price'] ) : null,
309
-				'vat_rule'           => isset( $_POST['wpinv_vat_rules'] ) ? wpinv_clean( $_POST['wpinv_vat_rules'] ) : null,
310
-				'vat_class'          => isset( $_POST['wpinv_vat_class'] ) ? wpinv_clean( $_POST['wpinv_vat_class'] ) : null,
311
-				'type'               => isset( $_POST['wpinv_item_type'] ) ? wpinv_clean( $_POST['wpinv_item_type'] ) : null,
312
-				'is_dynamic_pricing' => ! empty( $_POST['wpinv_name_your_price'] ),
307
+            array(
308
+                'price'              => isset( $_POST['wpinv_item_price'] ) ? getpaid_standardize_amount( $_POST['wpinv_item_price'] ) : null,
309
+                'vat_rule'           => isset( $_POST['wpinv_vat_rules'] ) ? wpinv_clean( $_POST['wpinv_vat_rules'] ) : null,
310
+                'vat_class'          => isset( $_POST['wpinv_vat_class'] ) ? wpinv_clean( $_POST['wpinv_vat_class'] ) : null,
311
+                'type'               => isset( $_POST['wpinv_item_type'] ) ? wpinv_clean( $_POST['wpinv_item_type'] ) : null,
312
+                'is_dynamic_pricing' => ! empty( $_POST['wpinv_name_your_price'] ),
313 313
                 'minimum_price'      => isset( $_POST['wpinv_minimum_price'] ) ? getpaid_standardize_amount( $_POST['wpinv_minimum_price'] ) : null,
314
-				'is_recurring'       => ! empty( $_POST['wpinv_is_recurring'] ),
315
-				'recurring_period'   => isset( $_POST['wpinv_recurring_period'] ) ? wpinv_clean( $_POST['wpinv_recurring_period'] ) : null,
316
-				'recurring_interval' => isset( $_POST['wpinv_recurring_interval'] ) ? (int) $_POST['wpinv_recurring_interval'] : 1,
317
-				'recurring_limit'    => isset( $_POST['wpinv_recurring_limit'] ) ? (int) $_POST['wpinv_recurring_limit'] : null,
318
-				'is_free_trial'      => isset( $_POST['wpinv_trial_interval'] ) ? ( 0 != (int) $_POST['wpinv_trial_interval'] ) : null,
319
-				'trial_period'       => isset( $_POST['wpinv_trial_period'] ) ? wpinv_clean( $_POST['wpinv_trial_period'] ) : null,
320
-				'trial_interval'     => isset( $_POST['wpinv_trial_interval'] ) ? (int) $_POST['wpinv_trial_interval'] : null,
321
-			)
314
+                'is_recurring'       => ! empty( $_POST['wpinv_is_recurring'] ),
315
+                'recurring_period'   => isset( $_POST['wpinv_recurring_period'] ) ? wpinv_clean( $_POST['wpinv_recurring_period'] ) : null,
316
+                'recurring_interval' => isset( $_POST['wpinv_recurring_interval'] ) ? (int) $_POST['wpinv_recurring_interval'] : 1,
317
+                'recurring_limit'    => isset( $_POST['wpinv_recurring_limit'] ) ? (int) $_POST['wpinv_recurring_limit'] : null,
318
+                'is_free_trial'      => isset( $_POST['wpinv_trial_interval'] ) ? ( 0 != (int) $_POST['wpinv_trial_interval'] ) : null,
319
+                'trial_period'       => isset( $_POST['wpinv_trial_period'] ) ? wpinv_clean( $_POST['wpinv_trial_period'] ) : null,
320
+                'trial_interval'     => isset( $_POST['wpinv_trial_interval'] ) ? (int) $_POST['wpinv_trial_interval'] : null,
321
+            )
322 322
         );
323 323
 
324
-		$item->save();
325
-		do_action( 'getpaid_item_metabox_save', $post_id, $item );
326
-	}
324
+        $item->save();
325
+        do_action( 'getpaid_item_metabox_save', $post_id, $item );
326
+    }
327 327
 }
Please login to merge, or discard this patch.
includes/admin/class-wpinv-subscriptions-list-table.php 1 patch
Indentation   +467 added lines, -467 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
 }
9 9
 
10 10
 if ( ! class_exists( 'WP_List_Table' ) ) {
11
-	include_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
11
+    include_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
12 12
 }
13 13
 
14 14
 /**
@@ -16,471 +16,471 @@  discard block
 block discarded – undo
16 16
  */
17 17
 class WPInv_Subscriptions_List_Table extends WP_List_Table {
18 18
 
19
-	/**
20
-	 * URL of this page
21
-	 *
22
-	 * @var   string
23
-	 * @since 1.0.19
24
-	 */
25
-	public $base_url;
26
-
27
-	/**
28
-	 * Query
29
-	 *
30
-	 * @var   GetPaid_Subscriptions_Query
31
-	 * @since 1.0.19
32
-	 */
33
-	public $query;
34
-
35
-	/**
36
-	 * Total subscriptions
37
-	 *
38
-	 * @var   string
39
-	 * @since 1.0.0
40
-	 */
41
-	public $total_count;
42
-
43
-	/**
44
-	 * Current status subscriptions
45
-	 *
46
-	 * @var   string
47
-	 * @since 1.0.0
48
-	 */
49
-	public $current_total_count;
50
-
51
-	/**
52
-	 * Status counts
53
-	 *
54
-	 * @var   array
55
-	 * @since 1.0.19
56
-	 */
57
-	public $status_counts;
58
-
59
-	/**
60
-	 * Number of results to show per page
61
-	 *
62
-	 * @var   int
63
-	 * @since 1.0.0
64
-	 */
65
-	public $per_page = 10;
66
-
67
-	/**
68
-	 *  Constructor function.
69
-	 */
70
-	public function __construct() {
71
-
72
-		parent::__construct(
73
-			array(
74
-				'singular' => 'subscription',
75
-				'plural'   => 'subscriptions',
76
-			)
77
-		);
78
-
79
-		$this->process_bulk_action();
80
-
81
-		$this->prepare_query();
82
-
83
-		$this->base_url = remove_query_arg( 'status' );
84
-
85
-	}
86
-
87
-	/**
88
-	 *  Prepares the display query
89
-	 */
90
-	public function prepare_query() {
91
-
92
-		// Prepare query args.
93
-		$query = array(
94
-			'number'      => $this->per_page,
95
-			'paged'       => $this->get_paged(),
96
-			'status'      => ( isset( $_GET['status'] ) && array_key_exists( $_GET['status'], getpaid_get_subscription_statuses() ) ) ? sanitize_text_field( $_GET['status'] ) : 'all',
97
-			'orderby'     => ( isset( $_GET['orderby'] ) ) ? sanitize_text_field( $_GET['orderby'] ) : 'id',
98
-			'order'       => ( isset( $_GET['order'] ) ) ? sanitize_text_field( $_GET['order'] ) : 'DESC',
99
-			'customer_in' => $this->get_user_in(),
100
-		);
101
-
102
-		if ( is_array( $query['customer_in'] ) && empty( $query['customer_in'] ) ) {
103
-			$this->total_count         = 0;
104
-			$this->current_total_count = 0;
105
-			$this->items               = array();
106
-			$this->status_counts       = array();
107
-			return;
108
-		}
109
-
110
-		// Prepare class properties.
111
-		$this->query               = new GetPaid_Subscriptions_Query( $query );
112
-		$this->total_count         = $this->query->get_total();
113
-		$this->current_total_count = $this->query->get_total();
114
-		$this->items               = $this->query->get_results();
115
-		$this->status_counts       = getpaid_get_subscription_status_counts( $query );
116
-
117
-		if ( 'all' != $query['status'] ) {
118
-			unset( $query['status'] );
119
-			$this->total_count   = getpaid_get_subscriptions( $query, 'count' );
120
-		}
121
-
122
-	}
123
-
124
-	/**
125
-	 * Get user in.
126
-	 *
127
-	 */
128
-	public function get_user_in() {
129
-
130
-		// Abort if no user.
131
-		if ( empty( $_GET['s'] ) ) {
132
-			return null;
133
-		}
134
-
135
-		// Or invalid user.
136
-		$user = wp_unslash( sanitize_text_field( $_REQUEST['s'] ) );
137
-
138
-		if ( empty( $user ) ) {
139
-			return null;
140
-		}
141
-
142
-		// Search matching users.
143
-		$user  = '*' . $user . '*';
144
-		$users = new WP_User_Query(
145
-			array(
146
-				'fields'      => 'ID',
147
-				'search'      => $user,
148
-				'count_total' => false,
149
-			)
150
-		);
151
-
152
-		return $users->get_results();
153
-	}
154
-
155
-	/**
156
-	 * Gets the list of views available on this table.
157
-	 *
158
-	 * The format is an associative array:
159
-	 * - `'id' => 'link'`
160
-	 *
161
-	 * @since 1.0.0
162
-	 *
163
-	 * @return array
164
-	 */
165
-	public function get_views() {
166
-
167
-		$current  = isset( $_GET['status'] ) ? sanitize_text_field( $_GET['status'] ) : 'all';
168
-		$views    = array(
169
-
170
-			'all' => sprintf(
171
-				'<a href="%s" %s>%s&nbsp;<span class="count">(%d)</span></a>',
172
-				esc_url( add_query_arg( 'status', false, $this->base_url ) ),
173
-				$current === 'all' ? ' class="current"' : '',
174
-				__( 'All', 'invoicing' ),
175
-				$this->total_count
176
-			),
177
-
178
-		);
179
-
180
-		foreach ( array_filter( $this->status_counts ) as $status => $count ) {
181
-
182
-			$views[ $status ] = sprintf(
183
-				'<a href="%s" %s>%s&nbsp;<span class="count">(%d)</span></a>',
184
-				esc_url( add_query_arg( 'status', urlencode( $status ), $this->base_url ) ),
185
-				$current === $status ? ' class="current"' : '',
186
-				esc_html( getpaid_get_subscription_status_label( $status ) ),
187
-				$count
188
-			);
189
-
190
-		}
191
-
192
-		return $views;
193
-
194
-	}
195
-
196
-	/**
197
-	 * Render most columns
198
-	 *
199
-	 * @access      private
200
-	 * @since       1.0.0
201
-	 * @return      string
202
-	 */
203
-	public function column_default( $item, $column_name ) {
204
-		return apply_filters( "getpaid_subscriptions_table_column_$column_name", $item->$column_name );
205
-	}
206
-
207
-	/**
208
-	 * This is how checkbox column renders.
209
-	 *
210
-	 * @param WPInv_Subscription $item
211
-	 * @return string
212
-	 */
213
-	public function column_cb( $item ) {
214
-		return sprintf( '<input type="checkbox" name="id[]" value="%s" />', esc_html( $item->get_id() ) );
215
-	}
216
-
217
-	/**
218
-	 * Status column
219
-	 *
220
-	 * @param WPInv_Subscription $item
221
-	 * @since       1.0.0
222
-	 * @return      string
223
-	 */
224
-	public function column_status( $item ) {
225
-		return $item->get_status_label_html();
226
-	}
227
-
228
-	/**
229
-	 * Subscription column
230
-	 *
231
-	 * @param WPInv_Subscription $item
232
-	 * @since       1.0.0
233
-	 * @return      string
234
-	 */
235
-	public function column_subscription( $item ) {
236
-
237
-		$username = __( '(Missing User)', 'invoicing' );
238
-
239
-		$user = get_userdata( $item->get_customer_id() );
240
-		$capabilities = wpinv_current_user_can_manage_invoicing();
241
-
242
-		if ( $user ) {
243
-			$username = sprintf(
244
-				'<a href="user-edit.php?user_id=%s">%s</a>',
245
-				absint( $user->ID ),
246
-				! empty( $user->display_name ) ? esc_html( $user->display_name ) : sanitize_email( $user->user_email )
247
-			);
248
-		}
249
-
250
-		// translators: $1: is opening link, $2: is subscription id number, $3: is closing link tag, $4: is user's name
251
-		$column_content = sprintf(
252
-			_x( '%1$s#%2$s%3$s for %4$s', 'Subscription title on admin table. (e.g.: #211 for John Doe)', 'invoicing' ),
253
-			'<a href="' . esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $item->get_id() ) ) ) . '">',
254
-			'<strong>' . esc_attr( $item->get_id() ) . '</strong>',
255
-			'</a>',
256
-			$username
257
-		);
258
-
259
-		$row_actions = array();
260
-
261
-		// View subscription.
262
-		$view_url    = esc_url( add_query_arg( 'id', $item->get_id(), admin_url( 'admin.php?page=wpinv-subscriptions' ) ) );
263
-		$row_actions['view'] = '<a href="' . $view_url . '">' . __( 'View Subscription', 'invoicing' ) . '</a>';
264
-
265
-		// View invoice.
266
-		$invoice = get_post( $item->get_parent_invoice_id() );
267
-
268
-		if ( ! empty( $invoice ) ) {
269
-			$invoice_url            = get_edit_post_link( $invoice );
270
-			$row_actions['invoice'] = '<a href="' . $invoice_url . '">' . __( 'View Invoice', 'invoicing' ) . '</a>';
271
-		}
272
-
273
-		$delete_url            = esc_url(
274
-			wp_nonce_url(
275
-				add_query_arg(
276
-					array(
277
-						'getpaid-admin-action' => 'subscription_manual_delete',
278
-						'id'                   => $item->get_id(),
279
-					)
280
-				),
281
-				'getpaid-nonce',
282
-				'getpaid-nonce'
283
-			)
284
-		);
285
-		$row_actions['delete'] = '<a class="text-danger" href="' . $delete_url . '">' . __( 'Delete Subscription', 'invoicing' ) . '</a>';
286
-
287
-		if ( ! $capabilities ) {
288
-			$row_actions = array();
289
-		}
290
-
291
-		$row_actions = $this->row_actions( apply_filters( 'getpaid_subscription_table_row_actions', $row_actions, $item ) );
292
-
293
-		return "<strong>$column_content</strong>" . $this->column_amount( $item ) . $row_actions;
294
-	}
295
-
296
-	/**
297
-	 * Renewal date column
298
-	 *
299
-	 * @param WPInv_Subscription $item
300
-	 * @since       1.0.0
301
-	 * @return      string
302
-	 */
303
-	public function column_renewal_date( $item ) {
304
-		return getpaid_format_date_value( $item->get_expiration() );
305
-	}
306
-
307
-	/**
308
-	 * Start date column
309
-	 *
310
-	 * @param WPInv_Subscription $item
311
-	 * @since       1.0.0
312
-	 * @return      string
313
-	 */
314
-	public function column_start_date( $item ) {
315
-
316
-		$gateway = $item->get_parent_invoice()->get_gateway_title();
317
-
318
-		if ( empty( $gateway ) ) {
319
-			return getpaid_format_date_value( $item->get_date_created() );
320
-		}
321
-
322
-		$url = apply_filters( 'getpaid_remote_subscription_profile_url', '', $item );
323
-		if ( ! empty( $url ) ) {
324
-
325
-			return getpaid_format_date_value( $item->get_date_created() ) . '<br>' . sprintf(
326
-				__( 'Via %s', 'invoicing' ),
327
-				'<strong><a href="' . esc_url( $url ) . '" target="_blank">' . esc_html( $item->get_parent_invoice()->get_gateway_title() ) . '</a></strong>'
328
-			);
329
-
330
-		}
331
-
332
-		return getpaid_format_date_value( $item->get_date_created() ) . '<br>' . sprintf(
333
-			__( 'Via %s', 'invoicing' ),
334
-			'<strong>' . esc_html( $item->get_parent_invoice()->get_gateway_title() ) . '</strong>'
335
-		);
336
-
337
-	}
338
-
339
-	/**
340
-	 * Amount column
341
-	 *
342
-	 * @param WPInv_Subscription $item
343
-	 * @since       1.0.19
344
-	 * @return      string
345
-	 */
346
-	public static function column_amount( $item ) {
347
-		$amount = getpaid_get_formatted_subscription_amount( $item );
348
-		return "<span class='text-muted form-text mt-2 mb-2 ms-1 ml-1'>$amount</span>";
349
-	}
350
-
351
-	/**
352
-	 * Billing Times column
353
-	 *
354
-	 * @param WPInv_Subscription $item
355
-	 * @since       1.0.0
356
-	 * @return      string
357
-	 */
358
-	public function column_renewals( $item ) {
359
-		$max_bills = $item->get_bill_times();
360
-		return $item->get_times_billed() . ' / ' . ( empty( $max_bills ) ? '&infin;' : $max_bills );
361
-	}
362
-
363
-	/**
364
-	 * Product ID column
365
-	 *
366
-	 * @param WPInv_Subscription $item
367
-	 * @since       1.0.0
368
-	 * @return      string
369
-	 */
370
-	public function column_item( $item ) {
371
-		$subscription_group = getpaid_get_invoice_subscription_group( $item->get_parent_invoice_id(), $item->get_id() );
372
-
373
-		if ( empty( $subscription_group ) ) {
374
-			return $this->generate_item_markup( $item->get_product_id() );
375
-		}
376
-
377
-		$markup = array_map( array( $this, 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
378
-		return implode( ' | ', $markup );
379
-
380
-	}
381
-
382
-	/**
383
-	 * Generates the items markup.
384
-	 *
385
-	 * @param int $item_id
386
-	 * @since       1.0.0
387
-	 * @return      string
388
-	 */
389
-	public static function generate_item_markup( $item_id ) {
390
-		$item = get_post( $item_id );
391
-
392
-		if ( ! empty( $item ) ) {
393
-			$link = get_edit_post_link( $item );
394
-			$name = esc_html( get_the_title( $item ) );
395
-			return wpinv_current_user_can_manage_invoicing() ? "<a href='" . ( $link ? esc_url( $link ) : '#' ) . "'>$name</a>" : $name;
396
-		} else {
397
-			return sprintf( __( 'Item #%s', 'invoicing' ), $item_id );
398
-		}
399
-
400
-	}
401
-
402
-	/**
403
-	 * Retrieve the current page number
404
-	 *
405
-	 * @return      int
406
-	 */
407
-	public function get_paged() {
408
-		return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
409
-	}
410
-
411
-	/**
412
-	 * Setup the final data for the table
413
-	 *
414
-	 */
415
-	public function prepare_items() {
416
-
417
-		$columns  = $this->get_columns();
418
-		$hidden   = array();
419
-		$sortable = $this->get_sortable_columns();
420
-
421
-		$this->_column_headers = array( $columns, $hidden, $sortable );
422
-
423
-		$this->set_pagination_args(
424
-			array(
425
-				'total_items' => $this->current_total_count,
426
-				'per_page'    => $this->per_page,
427
-				'total_pages' => ceil( $this->current_total_count / $this->per_page ),
428
-			)
429
-		);
430
-	}
431
-
432
-	/**
433
-	 * Table columns
434
-	 *
435
-	 * @return array
436
-	 */
437
-	public function get_columns() {
438
-		$columns = array(
439
-			'cb'           => '<input type="checkbox" />',
440
-			'subscription' => __( 'Subscription', 'invoicing' ),
441
-			'start_date'   => __( 'Start Date', 'invoicing' ),
442
-			'renewal_date' => __( 'Next Payment', 'invoicing' ),
443
-			'renewals'     => __( 'Payments', 'invoicing' ),
444
-			'item'         => __( 'Items', 'invoicing' ),
445
-			'status'       => __( 'Status', 'invoicing' ),
446
-		);
447
-
448
-		return apply_filters( 'manage_getpaid_subscriptions_table_columns', $columns );
449
-	}
450
-
451
-	/**
452
-	 * Sortable table columns.
453
-	 *
454
-	 * @return array
455
-	 */
456
-	public function get_sortable_columns() {
457
-		$sortable = array(
458
-			'subscription' => array( 'id', true ),
459
-			'start_date'   => array( 'created', true ),
460
-			'renewal_date' => array( 'expiration', true ),
461
-			'renewals'     => array( 'bill_times', true ),
462
-			'item'         => array( 'product_id', true ),
463
-			'status'       => array( 'status', true ),
464
-		);
465
-
466
-		return apply_filters( 'manage_getpaid_subscriptions_sortable_table_columns', $sortable );
467
-	}
468
-
469
-	/**
470
-	 * Whether the table has items to display or not
471
-	 *
472
-	 * @return bool
473
-	 */
474
-	public function has_items() {
475
-		return ! empty( $this->current_total_count );
476
-	}
477
-
478
-	/**
479
-	 * Processes bulk actions.
480
-	 *
481
-	 */
482
-	public function process_bulk_action() {
483
-
484
-	}
19
+    /**
20
+     * URL of this page
21
+     *
22
+     * @var   string
23
+     * @since 1.0.19
24
+     */
25
+    public $base_url;
26
+
27
+    /**
28
+     * Query
29
+     *
30
+     * @var   GetPaid_Subscriptions_Query
31
+     * @since 1.0.19
32
+     */
33
+    public $query;
34
+
35
+    /**
36
+     * Total subscriptions
37
+     *
38
+     * @var   string
39
+     * @since 1.0.0
40
+     */
41
+    public $total_count;
42
+
43
+    /**
44
+     * Current status subscriptions
45
+     *
46
+     * @var   string
47
+     * @since 1.0.0
48
+     */
49
+    public $current_total_count;
50
+
51
+    /**
52
+     * Status counts
53
+     *
54
+     * @var   array
55
+     * @since 1.0.19
56
+     */
57
+    public $status_counts;
58
+
59
+    /**
60
+     * Number of results to show per page
61
+     *
62
+     * @var   int
63
+     * @since 1.0.0
64
+     */
65
+    public $per_page = 10;
66
+
67
+    /**
68
+     *  Constructor function.
69
+     */
70
+    public function __construct() {
71
+
72
+        parent::__construct(
73
+            array(
74
+                'singular' => 'subscription',
75
+                'plural'   => 'subscriptions',
76
+            )
77
+        );
78
+
79
+        $this->process_bulk_action();
80
+
81
+        $this->prepare_query();
82
+
83
+        $this->base_url = remove_query_arg( 'status' );
84
+
85
+    }
86
+
87
+    /**
88
+     *  Prepares the display query
89
+     */
90
+    public function prepare_query() {
91
+
92
+        // Prepare query args.
93
+        $query = array(
94
+            'number'      => $this->per_page,
95
+            'paged'       => $this->get_paged(),
96
+            'status'      => ( isset( $_GET['status'] ) && array_key_exists( $_GET['status'], getpaid_get_subscription_statuses() ) ) ? sanitize_text_field( $_GET['status'] ) : 'all',
97
+            'orderby'     => ( isset( $_GET['orderby'] ) ) ? sanitize_text_field( $_GET['orderby'] ) : 'id',
98
+            'order'       => ( isset( $_GET['order'] ) ) ? sanitize_text_field( $_GET['order'] ) : 'DESC',
99
+            'customer_in' => $this->get_user_in(),
100
+        );
101
+
102
+        if ( is_array( $query['customer_in'] ) && empty( $query['customer_in'] ) ) {
103
+            $this->total_count         = 0;
104
+            $this->current_total_count = 0;
105
+            $this->items               = array();
106
+            $this->status_counts       = array();
107
+            return;
108
+        }
109
+
110
+        // Prepare class properties.
111
+        $this->query               = new GetPaid_Subscriptions_Query( $query );
112
+        $this->total_count         = $this->query->get_total();
113
+        $this->current_total_count = $this->query->get_total();
114
+        $this->items               = $this->query->get_results();
115
+        $this->status_counts       = getpaid_get_subscription_status_counts( $query );
116
+
117
+        if ( 'all' != $query['status'] ) {
118
+            unset( $query['status'] );
119
+            $this->total_count   = getpaid_get_subscriptions( $query, 'count' );
120
+        }
121
+
122
+    }
123
+
124
+    /**
125
+     * Get user in.
126
+     *
127
+     */
128
+    public function get_user_in() {
129
+
130
+        // Abort if no user.
131
+        if ( empty( $_GET['s'] ) ) {
132
+            return null;
133
+        }
134
+
135
+        // Or invalid user.
136
+        $user = wp_unslash( sanitize_text_field( $_REQUEST['s'] ) );
137
+
138
+        if ( empty( $user ) ) {
139
+            return null;
140
+        }
141
+
142
+        // Search matching users.
143
+        $user  = '*' . $user . '*';
144
+        $users = new WP_User_Query(
145
+            array(
146
+                'fields'      => 'ID',
147
+                'search'      => $user,
148
+                'count_total' => false,
149
+            )
150
+        );
151
+
152
+        return $users->get_results();
153
+    }
154
+
155
+    /**
156
+     * Gets the list of views available on this table.
157
+     *
158
+     * The format is an associative array:
159
+     * - `'id' => 'link'`
160
+     *
161
+     * @since 1.0.0
162
+     *
163
+     * @return array
164
+     */
165
+    public function get_views() {
166
+
167
+        $current  = isset( $_GET['status'] ) ? sanitize_text_field( $_GET['status'] ) : 'all';
168
+        $views    = array(
169
+
170
+            'all' => sprintf(
171
+                '<a href="%s" %s>%s&nbsp;<span class="count">(%d)</span></a>',
172
+                esc_url( add_query_arg( 'status', false, $this->base_url ) ),
173
+                $current === 'all' ? ' class="current"' : '',
174
+                __( 'All', 'invoicing' ),
175
+                $this->total_count
176
+            ),
177
+
178
+        );
179
+
180
+        foreach ( array_filter( $this->status_counts ) as $status => $count ) {
181
+
182
+            $views[ $status ] = sprintf(
183
+                '<a href="%s" %s>%s&nbsp;<span class="count">(%d)</span></a>',
184
+                esc_url( add_query_arg( 'status', urlencode( $status ), $this->base_url ) ),
185
+                $current === $status ? ' class="current"' : '',
186
+                esc_html( getpaid_get_subscription_status_label( $status ) ),
187
+                $count
188
+            );
189
+
190
+        }
191
+
192
+        return $views;
193
+
194
+    }
195
+
196
+    /**
197
+     * Render most columns
198
+     *
199
+     * @access      private
200
+     * @since       1.0.0
201
+     * @return      string
202
+     */
203
+    public function column_default( $item, $column_name ) {
204
+        return apply_filters( "getpaid_subscriptions_table_column_$column_name", $item->$column_name );
205
+    }
206
+
207
+    /**
208
+     * This is how checkbox column renders.
209
+     *
210
+     * @param WPInv_Subscription $item
211
+     * @return string
212
+     */
213
+    public function column_cb( $item ) {
214
+        return sprintf( '<input type="checkbox" name="id[]" value="%s" />', esc_html( $item->get_id() ) );
215
+    }
216
+
217
+    /**
218
+     * Status column
219
+     *
220
+     * @param WPInv_Subscription $item
221
+     * @since       1.0.0
222
+     * @return      string
223
+     */
224
+    public function column_status( $item ) {
225
+        return $item->get_status_label_html();
226
+    }
227
+
228
+    /**
229
+     * Subscription column
230
+     *
231
+     * @param WPInv_Subscription $item
232
+     * @since       1.0.0
233
+     * @return      string
234
+     */
235
+    public function column_subscription( $item ) {
236
+
237
+        $username = __( '(Missing User)', 'invoicing' );
238
+
239
+        $user = get_userdata( $item->get_customer_id() );
240
+        $capabilities = wpinv_current_user_can_manage_invoicing();
241
+
242
+        if ( $user ) {
243
+            $username = sprintf(
244
+                '<a href="user-edit.php?user_id=%s">%s</a>',
245
+                absint( $user->ID ),
246
+                ! empty( $user->display_name ) ? esc_html( $user->display_name ) : sanitize_email( $user->user_email )
247
+            );
248
+        }
249
+
250
+        // translators: $1: is opening link, $2: is subscription id number, $3: is closing link tag, $4: is user's name
251
+        $column_content = sprintf(
252
+            _x( '%1$s#%2$s%3$s for %4$s', 'Subscription title on admin table. (e.g.: #211 for John Doe)', 'invoicing' ),
253
+            '<a href="' . esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $item->get_id() ) ) ) . '">',
254
+            '<strong>' . esc_attr( $item->get_id() ) . '</strong>',
255
+            '</a>',
256
+            $username
257
+        );
258
+
259
+        $row_actions = array();
260
+
261
+        // View subscription.
262
+        $view_url    = esc_url( add_query_arg( 'id', $item->get_id(), admin_url( 'admin.php?page=wpinv-subscriptions' ) ) );
263
+        $row_actions['view'] = '<a href="' . $view_url . '">' . __( 'View Subscription', 'invoicing' ) . '</a>';
264
+
265
+        // View invoice.
266
+        $invoice = get_post( $item->get_parent_invoice_id() );
267
+
268
+        if ( ! empty( $invoice ) ) {
269
+            $invoice_url            = get_edit_post_link( $invoice );
270
+            $row_actions['invoice'] = '<a href="' . $invoice_url . '">' . __( 'View Invoice', 'invoicing' ) . '</a>';
271
+        }
272
+
273
+        $delete_url            = esc_url(
274
+            wp_nonce_url(
275
+                add_query_arg(
276
+                    array(
277
+                        'getpaid-admin-action' => 'subscription_manual_delete',
278
+                        'id'                   => $item->get_id(),
279
+                    )
280
+                ),
281
+                'getpaid-nonce',
282
+                'getpaid-nonce'
283
+            )
284
+        );
285
+        $row_actions['delete'] = '<a class="text-danger" href="' . $delete_url . '">' . __( 'Delete Subscription', 'invoicing' ) . '</a>';
286
+
287
+        if ( ! $capabilities ) {
288
+            $row_actions = array();
289
+        }
290
+
291
+        $row_actions = $this->row_actions( apply_filters( 'getpaid_subscription_table_row_actions', $row_actions, $item ) );
292
+
293
+        return "<strong>$column_content</strong>" . $this->column_amount( $item ) . $row_actions;
294
+    }
295
+
296
+    /**
297
+     * Renewal date column
298
+     *
299
+     * @param WPInv_Subscription $item
300
+     * @since       1.0.0
301
+     * @return      string
302
+     */
303
+    public function column_renewal_date( $item ) {
304
+        return getpaid_format_date_value( $item->get_expiration() );
305
+    }
306
+
307
+    /**
308
+     * Start date column
309
+     *
310
+     * @param WPInv_Subscription $item
311
+     * @since       1.0.0
312
+     * @return      string
313
+     */
314
+    public function column_start_date( $item ) {
315
+
316
+        $gateway = $item->get_parent_invoice()->get_gateway_title();
317
+
318
+        if ( empty( $gateway ) ) {
319
+            return getpaid_format_date_value( $item->get_date_created() );
320
+        }
321
+
322
+        $url = apply_filters( 'getpaid_remote_subscription_profile_url', '', $item );
323
+        if ( ! empty( $url ) ) {
324
+
325
+            return getpaid_format_date_value( $item->get_date_created() ) . '<br>' . sprintf(
326
+                __( 'Via %s', 'invoicing' ),
327
+                '<strong><a href="' . esc_url( $url ) . '" target="_blank">' . esc_html( $item->get_parent_invoice()->get_gateway_title() ) . '</a></strong>'
328
+            );
329
+
330
+        }
331
+
332
+        return getpaid_format_date_value( $item->get_date_created() ) . '<br>' . sprintf(
333
+            __( 'Via %s', 'invoicing' ),
334
+            '<strong>' . esc_html( $item->get_parent_invoice()->get_gateway_title() ) . '</strong>'
335
+        );
336
+
337
+    }
338
+
339
+    /**
340
+     * Amount column
341
+     *
342
+     * @param WPInv_Subscription $item
343
+     * @since       1.0.19
344
+     * @return      string
345
+     */
346
+    public static function column_amount( $item ) {
347
+        $amount = getpaid_get_formatted_subscription_amount( $item );
348
+        return "<span class='text-muted form-text mt-2 mb-2 ms-1 ml-1'>$amount</span>";
349
+    }
350
+
351
+    /**
352
+     * Billing Times column
353
+     *
354
+     * @param WPInv_Subscription $item
355
+     * @since       1.0.0
356
+     * @return      string
357
+     */
358
+    public function column_renewals( $item ) {
359
+        $max_bills = $item->get_bill_times();
360
+        return $item->get_times_billed() . ' / ' . ( empty( $max_bills ) ? '&infin;' : $max_bills );
361
+    }
362
+
363
+    /**
364
+     * Product ID column
365
+     *
366
+     * @param WPInv_Subscription $item
367
+     * @since       1.0.0
368
+     * @return      string
369
+     */
370
+    public function column_item( $item ) {
371
+        $subscription_group = getpaid_get_invoice_subscription_group( $item->get_parent_invoice_id(), $item->get_id() );
372
+
373
+        if ( empty( $subscription_group ) ) {
374
+            return $this->generate_item_markup( $item->get_product_id() );
375
+        }
376
+
377
+        $markup = array_map( array( $this, 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
378
+        return implode( ' | ', $markup );
379
+
380
+    }
381
+
382
+    /**
383
+     * Generates the items markup.
384
+     *
385
+     * @param int $item_id
386
+     * @since       1.0.0
387
+     * @return      string
388
+     */
389
+    public static function generate_item_markup( $item_id ) {
390
+        $item = get_post( $item_id );
391
+
392
+        if ( ! empty( $item ) ) {
393
+            $link = get_edit_post_link( $item );
394
+            $name = esc_html( get_the_title( $item ) );
395
+            return wpinv_current_user_can_manage_invoicing() ? "<a href='" . ( $link ? esc_url( $link ) : '#' ) . "'>$name</a>" : $name;
396
+        } else {
397
+            return sprintf( __( 'Item #%s', 'invoicing' ), $item_id );
398
+        }
399
+
400
+    }
401
+
402
+    /**
403
+     * Retrieve the current page number
404
+     *
405
+     * @return      int
406
+     */
407
+    public function get_paged() {
408
+        return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
409
+    }
410
+
411
+    /**
412
+     * Setup the final data for the table
413
+     *
414
+     */
415
+    public function prepare_items() {
416
+
417
+        $columns  = $this->get_columns();
418
+        $hidden   = array();
419
+        $sortable = $this->get_sortable_columns();
420
+
421
+        $this->_column_headers = array( $columns, $hidden, $sortable );
422
+
423
+        $this->set_pagination_args(
424
+            array(
425
+                'total_items' => $this->current_total_count,
426
+                'per_page'    => $this->per_page,
427
+                'total_pages' => ceil( $this->current_total_count / $this->per_page ),
428
+            )
429
+        );
430
+    }
431
+
432
+    /**
433
+     * Table columns
434
+     *
435
+     * @return array
436
+     */
437
+    public function get_columns() {
438
+        $columns = array(
439
+            'cb'           => '<input type="checkbox" />',
440
+            'subscription' => __( 'Subscription', 'invoicing' ),
441
+            'start_date'   => __( 'Start Date', 'invoicing' ),
442
+            'renewal_date' => __( 'Next Payment', 'invoicing' ),
443
+            'renewals'     => __( 'Payments', 'invoicing' ),
444
+            'item'         => __( 'Items', 'invoicing' ),
445
+            'status'       => __( 'Status', 'invoicing' ),
446
+        );
447
+
448
+        return apply_filters( 'manage_getpaid_subscriptions_table_columns', $columns );
449
+    }
450
+
451
+    /**
452
+     * Sortable table columns.
453
+     *
454
+     * @return array
455
+     */
456
+    public function get_sortable_columns() {
457
+        $sortable = array(
458
+            'subscription' => array( 'id', true ),
459
+            'start_date'   => array( 'created', true ),
460
+            'renewal_date' => array( 'expiration', true ),
461
+            'renewals'     => array( 'bill_times', true ),
462
+            'item'         => array( 'product_id', true ),
463
+            'status'       => array( 'status', true ),
464
+        );
465
+
466
+        return apply_filters( 'manage_getpaid_subscriptions_sortable_table_columns', $sortable );
467
+    }
468
+
469
+    /**
470
+     * Whether the table has items to display or not
471
+     *
472
+     * @return bool
473
+     */
474
+    public function has_items() {
475
+        return ! empty( $this->current_total_count );
476
+    }
477
+
478
+    /**
479
+     * Processes bulk actions.
480
+     *
481
+     */
482
+    public function process_bulk_action() {
483
+
484
+    }
485 485
 
486 486
 }
Please login to merge, or discard this patch.
includes/admin/subscriptions.php 1 patch
Indentation   +484 added lines, -484 removed lines patch added patch discarded remove patch
@@ -14,7 +14,7 @@  discard block
 block discarded – undo
14 14
  */
15 15
 function wpinv_subscriptions_page() {
16 16
 
17
-	?>
17
+    ?>
18 18
 
19 19
 	<div class="wrap">
20 20
 		<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
@@ -22,28 +22,28 @@  discard block
 block discarded – undo
22 22
 
23 23
 			<?php
24 24
 
25
-				// Verify user permissions.
26
-				if ( ! wpinv_current_user_can_manage_invoicing() ) {
25
+                // Verify user permissions.
26
+                if ( ! wpinv_current_user_can_manage_invoicing() ) {
27 27
 
28
-				aui()->alert(
28
+                aui()->alert(
29 29
                     array(
30
-						'type'    => 'danger',
31
-						'content' => __( 'You are not permitted to view this page.', 'invoicing' ),
32
-					),
33
-					true
30
+                        'type'    => 'danger',
31
+                        'content' => __( 'You are not permitted to view this page.', 'invoicing' ),
32
+                    ),
33
+                    true
34 34
                 );
35 35
 
36
-				} elseif ( ! empty( $_GET['id'] ) && is_numeric( $_GET['id'] ) ) {
36
+                } elseif ( ! empty( $_GET['id'] ) && is_numeric( $_GET['id'] ) ) {
37 37
 
38
-				// Display a single subscription.
39
-				wpinv_recurring_subscription_details();
40
-				} else {
38
+                // Display a single subscription.
39
+                wpinv_recurring_subscription_details();
40
+                } else {
41 41
 
42
-				// Display a list of available subscriptions.
43
-				getpaid_print_subscriptions_list();
44
-				}
42
+                // Display a list of available subscriptions.
43
+                getpaid_print_subscriptions_list();
44
+                }
45 45
 
46
-			?>
46
+            ?>
47 47
 
48 48
 		</div>
49 49
 	</div>
@@ -60,10 +60,10 @@  discard block
 block discarded – undo
60 60
  */
61 61
 function getpaid_print_subscriptions_list() {
62 62
 
63
-	$subscribers_table = new WPInv_Subscriptions_List_Table();
64
-	$subscribers_table->prepare_items();
63
+    $subscribers_table = new WPInv_Subscriptions_List_Table();
64
+    $subscribers_table->prepare_items();
65 65
 
66
-	?>
66
+    ?>
67 67
 	<?php $subscribers_table->views(); ?>
68 68
 	<form id="subscribers-filter" class="bsui" method="get">
69 69
 		<input type="hidden" name="page" value="wpinv-subscriptions" />
@@ -82,42 +82,42 @@  discard block
 block discarded – undo
82 82
  */
83 83
 function wpinv_recurring_subscription_details() {
84 84
 
85
-	// Fetch the subscription.
86
-	$sub = new WPInv_Subscription( (int) $_GET['id'] );
87
-	if ( ! $sub->exists() ) {
85
+    // Fetch the subscription.
86
+    $sub = new WPInv_Subscription( (int) $_GET['id'] );
87
+    if ( ! $sub->exists() ) {
88 88
 
89
-		aui()->alert(
90
-			array(
91
-				'type'    => 'danger',
92
-				'content' => __( 'Subscription not found.', 'invoicing' ),
93
-			),
94
-			true
95
-		);
89
+        aui()->alert(
90
+            array(
91
+                'type'    => 'danger',
92
+                'content' => __( 'Subscription not found.', 'invoicing' ),
93
+            ),
94
+            true
95
+        );
96 96
 
97
-		return;
98
-	}
97
+        return;
98
+    }
99 99
 
100
-	// Use metaboxes to display the subscription details.
101
-	add_meta_box( 'getpaid_admin_subscription_details_metabox', __( 'Subscription Details', 'invoicing' ), 'getpaid_admin_subscription_details_metabox', get_current_screen(), 'normal', 'high' );
102
-	add_meta_box( 'getpaid_admin_subscription_update_metabox', __( 'Change Status', 'invoicing' ), 'getpaid_admin_subscription_update_metabox', get_current_screen(), 'side' );
100
+    // Use metaboxes to display the subscription details.
101
+    add_meta_box( 'getpaid_admin_subscription_details_metabox', __( 'Subscription Details', 'invoicing' ), 'getpaid_admin_subscription_details_metabox', get_current_screen(), 'normal', 'high' );
102
+    add_meta_box( 'getpaid_admin_subscription_update_metabox', __( 'Change Status', 'invoicing' ), 'getpaid_admin_subscription_update_metabox', get_current_screen(), 'side' );
103 103
 
104
-	$subscription_id     = $sub->get_id();
105
-	$subscription_groups = getpaid_get_invoice_subscription_groups( $sub->get_parent_invoice_id() );
106
-	$subscription_group  = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
104
+    $subscription_id     = $sub->get_id();
105
+    $subscription_groups = getpaid_get_invoice_subscription_groups( $sub->get_parent_invoice_id() );
106
+    $subscription_group  = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
107 107
 
108
-	if ( 1 < count( $subscription_groups ) ) {
109
-		add_meta_box( 'getpaid_admin_subscription_related_subscriptions_metabox', __( 'Related Subscriptions', 'invoicing' ), 'getpaid_admin_subscription_related_subscriptions_metabox', get_current_screen(), 'advanced' );
110
-	}
108
+    if ( 1 < count( $subscription_groups ) ) {
109
+        add_meta_box( 'getpaid_admin_subscription_related_subscriptions_metabox', __( 'Related Subscriptions', 'invoicing' ), 'getpaid_admin_subscription_related_subscriptions_metabox', get_current_screen(), 'advanced' );
110
+    }
111 111
 
112
-	if ( ! empty( $subscription_group ) ) {
113
-		add_meta_box( 'getpaid_admin_subscription_item_details_metabox', __( 'Subscription Items', 'invoicing' ), 'getpaid_admin_subscription_item_details_metabox', get_current_screen(), 'normal', 'low' );
114
-	}
112
+    if ( ! empty( $subscription_group ) ) {
113
+        add_meta_box( 'getpaid_admin_subscription_item_details_metabox', __( 'Subscription Items', 'invoicing' ), 'getpaid_admin_subscription_item_details_metabox', get_current_screen(), 'normal', 'low' );
114
+    }
115 115
 
116
-	add_meta_box( 'getpaid_admin_subscription_invoice_details_metabox', __( 'Related Invoices', 'invoicing' ), 'getpaid_admin_subscription_invoice_details_metabox', get_current_screen(), 'advanced' );
116
+    add_meta_box( 'getpaid_admin_subscription_invoice_details_metabox', __( 'Related Invoices', 'invoicing' ), 'getpaid_admin_subscription_invoice_details_metabox', get_current_screen(), 'advanced' );
117 117
 
118
-	do_action( 'getpaid_admin_single_subscription_register_metabox', $sub );
118
+    do_action( 'getpaid_admin_single_subscription_register_metabox', $sub );
119 119
 
120
-	?>
120
+    ?>
121 121
 
122 122
 		<form method="post" action="<?php echo esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $sub->get_id() ) ) ); ?>">
123 123
 
@@ -157,49 +157,49 @@  discard block
 block discarded – undo
157 157
  */
158 158
 function getpaid_admin_subscription_details_metabox( $sub ) {
159 159
 
160
-	// Subscription items.
161
-	$subscription_group = getpaid_get_invoice_subscription_group( $sub->get_parent_invoice_id(), $sub->get_id() );
162
-	$items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
163
-
164
-	// Prepare subscription detail columns.
165
-	$fields = apply_filters(
166
-		'getpaid_subscription_admin_page_fields',
167
-		array(
168
-			'subscription' => __( 'Subscription', 'invoicing' ),
169
-			'customer'     => __( 'Customer', 'invoicing' ),
170
-			'amount'       => __( 'Amount', 'invoicing' ),
171
-			'start_date'   => __( 'Start Date', 'invoicing' ),
172
-			'renews_on'    => __( 'Next Payment', 'invoicing' ),
173
-			'renewals'     => __( 'Collected Payments', 'invoicing' ),
174
-			'item'         => $items_count > 1 ? __( 'Items', 'invoicing' ) : __( 'Item', 'invoicing' ),
175
-			'gateway'      => __( 'Payment Method', 'invoicing' ),
176
-			'profile_id'   => __( 'Profile ID', 'invoicing' ),
177
-			'status'       => __( 'Status', 'invoicing' ),
178
-		)
179
-	);
180
-
181
-	if ( ! $sub->is_active() ) {
182
-
183
-		if ( isset( $fields['renews_on'] ) ) {
184
-			unset( $fields['renews_on'] );
185
-		}
186
-
187
-		if ( isset( $fields['gateway'] ) ) {
188
-			unset( $fields['gateway'] );
189
-		}
190
-	} elseif ( $sub->is_last_renewal() ) {
191
-
192
-		if ( isset( $fields['renews_on'] ) ) {
193
-			$fields['renews_on'] = __( 'End Date', 'invoicing' );
194
-		}
195
-	}
196
-
197
-	$profile_id = $sub->get_profile_id();
198
-	if ( empty( $profile_id ) && isset( $fields['profile_id'] ) ) {
199
-		unset( $fields['profile_id'] );
200
-	}
201
-
202
-	?>
160
+    // Subscription items.
161
+    $subscription_group = getpaid_get_invoice_subscription_group( $sub->get_parent_invoice_id(), $sub->get_id() );
162
+    $items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
163
+
164
+    // Prepare subscription detail columns.
165
+    $fields = apply_filters(
166
+        'getpaid_subscription_admin_page_fields',
167
+        array(
168
+            'subscription' => __( 'Subscription', 'invoicing' ),
169
+            'customer'     => __( 'Customer', 'invoicing' ),
170
+            'amount'       => __( 'Amount', 'invoicing' ),
171
+            'start_date'   => __( 'Start Date', 'invoicing' ),
172
+            'renews_on'    => __( 'Next Payment', 'invoicing' ),
173
+            'renewals'     => __( 'Collected Payments', 'invoicing' ),
174
+            'item'         => $items_count > 1 ? __( 'Items', 'invoicing' ) : __( 'Item', 'invoicing' ),
175
+            'gateway'      => __( 'Payment Method', 'invoicing' ),
176
+            'profile_id'   => __( 'Profile ID', 'invoicing' ),
177
+            'status'       => __( 'Status', 'invoicing' ),
178
+        )
179
+    );
180
+
181
+    if ( ! $sub->is_active() ) {
182
+
183
+        if ( isset( $fields['renews_on'] ) ) {
184
+            unset( $fields['renews_on'] );
185
+        }
186
+
187
+        if ( isset( $fields['gateway'] ) ) {
188
+            unset( $fields['gateway'] );
189
+        }
190
+    } elseif ( $sub->is_last_renewal() ) {
191
+
192
+        if ( isset( $fields['renews_on'] ) ) {
193
+            $fields['renews_on'] = __( 'End Date', 'invoicing' );
194
+        }
195
+    }
196
+
197
+    $profile_id = $sub->get_profile_id();
198
+    if ( empty( $profile_id ) && isset( $fields['profile_id'] ) ) {
199
+        unset( $fields['profile_id'] );
200
+    }
201
+
202
+    ?>
203 203
 
204 204
 		<table class="table table-borderless" style="font-size: 14px;">
205 205
 			<tbody>
@@ -233,20 +233,20 @@  discard block
 block discarded – undo
233 233
  */
234 234
 function getpaid_admin_subscription_metabox_display_customer( $subscription ) {
235 235
 
236
-	$username = __( '(Missing User)', 'invoicing' );
236
+    $username = __( '(Missing User)', 'invoicing' );
237 237
 
238
-	$user = get_userdata( $subscription->get_customer_id() );
239
-	if ( $user ) {
238
+    $user = get_userdata( $subscription->get_customer_id() );
239
+    if ( $user ) {
240 240
 
241
-		$username = sprintf(
242
-			'<a href="user-edit.php?user_id=%s">%s</a>',
243
-			absint( $user->ID ),
244
-			! empty( $user->display_name ) ? esc_html( $user->display_name ) : sanitize_email( $user->user_email )
245
-		);
241
+        $username = sprintf(
242
+            '<a href="user-edit.php?user_id=%s">%s</a>',
243
+            absint( $user->ID ),
244
+            ! empty( $user->display_name ) ? esc_html( $user->display_name ) : sanitize_email( $user->user_email )
245
+        );
246 246
 
247
-	}
247
+    }
248 248
 
249
-	echo wp_kses_post( $username );
249
+    echo wp_kses_post( $username );
250 250
 }
251 251
 add_action( 'getpaid_subscription_admin_display_customer', 'getpaid_admin_subscription_metabox_display_customer' );
252 252
 
@@ -256,8 +256,8 @@  discard block
 block discarded – undo
256 256
  * @param WPInv_Subscription $subscription
257 257
  */
258 258
 function getpaid_admin_subscription_metabox_display_amount( $subscription ) {
259
-	$amount    = getpaid_get_formatted_subscription_amount( $subscription );
260
-	echo wp_kses_post( "<span>$amount</span>" );
259
+    $amount    = getpaid_get_formatted_subscription_amount( $subscription );
260
+    echo wp_kses_post( "<span>$amount</span>" );
261 261
 }
262 262
 add_action( 'getpaid_subscription_admin_display_amount', 'getpaid_admin_subscription_metabox_display_amount' );
263 263
 
@@ -268,11 +268,11 @@  discard block
 block discarded – undo
268 268
  */
269 269
 function getpaid_admin_subscription_metabox_display_id( $subscription ) {
270 270
 
271
-	printf(
272
-		'<a href="%s">#%s</a>',
273
-		esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $subscription->get_id() ) ) ),
274
-		absint( $subscription->get_id() )
275
-	);
271
+    printf(
272
+        '<a href="%s">#%s</a>',
273
+        esc_url( admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $subscription->get_id() ) ) ),
274
+        absint( $subscription->get_id() )
275
+    );
276 276
 
277 277
 }
278 278
 add_action( 'getpaid_subscription_admin_display_subscription', 'getpaid_admin_subscription_metabox_display_id' );
@@ -284,24 +284,24 @@  discard block
 block discarded – undo
284 284
  */
285 285
 function getpaid_admin_subscription_metabox_display_start_date( $subscription ) {
286 286
 
287
-	if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_date_change' ) ) {
288
-		aui()->input(
289
-			array(
290
-				'type'        => 'text',
291
-				'id'          => 'wpinv_subscription_date_created',
292
-				'name'        => 'wpinv_subscription_date_created',
293
-				'label'       => __( 'Start Date', 'invoicing' ),
294
-				'label_type'  => 'hidden',
295
-				'placeholder' => 'YYYY-MM-DD',
296
-				'value'       => esc_attr( $subscription->get_date_created( 'edit' ) ),
297
-				'no_wrap'     => true,
298
-				'size'        => 'sm',
299
-			),
300
-			true
301
-		);
302
-	} else {
303
-		echo esc_html( getpaid_format_date_value( $subscription->get_date_created() ) );
304
-	}
287
+    if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_date_change' ) ) {
288
+        aui()->input(
289
+            array(
290
+                'type'        => 'text',
291
+                'id'          => 'wpinv_subscription_date_created',
292
+                'name'        => 'wpinv_subscription_date_created',
293
+                'label'       => __( 'Start Date', 'invoicing' ),
294
+                'label_type'  => 'hidden',
295
+                'placeholder' => 'YYYY-MM-DD',
296
+                'value'       => esc_attr( $subscription->get_date_created( 'edit' ) ),
297
+                'no_wrap'     => true,
298
+                'size'        => 'sm',
299
+            ),
300
+            true
301
+        );
302
+    } else {
303
+        echo esc_html( getpaid_format_date_value( $subscription->get_date_created() ) );
304
+    }
305 305
 
306 306
 }
307 307
 add_action( 'getpaid_subscription_admin_display_start_date', 'getpaid_admin_subscription_metabox_display_start_date' );
@@ -313,24 +313,24 @@  discard block
 block discarded – undo
313 313
  */
314 314
 function getpaid_admin_subscription_metabox_display_renews_on( $subscription ) {
315 315
 
316
-	if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_date_change' ) ) {
317
-		aui()->input(
318
-			array(
319
-				'type'        => 'text',
320
-				'id'          => 'wpinv_subscription_expiration',
321
-				'name'        => 'wpinv_subscription_expiration',
322
-				'label'       => __( 'Renews On', 'invoicing' ),
323
-				'label_type'  => 'hidden',
324
-				'placeholder' => 'YYYY-MM-DD',
325
-				'value'       => esc_attr( $subscription->get_expiration( 'edit' ) ),
326
-				'no_wrap'     => true,
327
-				'size'        => 'sm',
328
-			),
329
-			true
330
-		);
331
-	} else {
332
-		echo esc_html( getpaid_format_date_value( $subscription->get_expiration() ) );
333
-	}
316
+    if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_date_change' ) ) {
317
+        aui()->input(
318
+            array(
319
+                'type'        => 'text',
320
+                'id'          => 'wpinv_subscription_expiration',
321
+                'name'        => 'wpinv_subscription_expiration',
322
+                'label'       => __( 'Renews On', 'invoicing' ),
323
+                'label_type'  => 'hidden',
324
+                'placeholder' => 'YYYY-MM-DD',
325
+                'value'       => esc_attr( $subscription->get_expiration( 'edit' ) ),
326
+                'no_wrap'     => true,
327
+                'size'        => 'sm',
328
+            ),
329
+            true
330
+        );
331
+    } else {
332
+        echo esc_html( getpaid_format_date_value( $subscription->get_expiration() ) );
333
+    }
334 334
 }
335 335
 add_action( 'getpaid_subscription_admin_display_renews_on', 'getpaid_admin_subscription_metabox_display_renews_on' );
336 336
 
@@ -341,32 +341,32 @@  discard block
 block discarded – undo
341 341
  */
342 342
 function getpaid_admin_subscription_metabox_display_renewals( $subscription ) {
343 343
 
344
-	$max_bills    = $subscription->get_bill_times();
345
-	$times_billed = (int) $subscription->get_times_billed();
346
-
347
-	if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_bill_times_change' ) ) {
348
-		aui()->input(
349
-			array(
350
-				'type'             => 'number',
351
-				'id'               => 'wpinv_subscription_max_bill_times',
352
-				'name'             => 'wpinv_subscription_max_bill_times',
353
-				'label'            => __( 'Maximum bill times', 'invoicing' ),
354
-				'label_type'       => 'hidden',
355
-				'placeholder'      => __( 'Unlimited', 'invoicing' ),
356
-				'value'            => empty( $max_bills ) ? '' : (int) $max_bills,
357
-				'no_wrap'          => true,
358
-				'size'             => 'sm',
359
-				'input_group_left' => sprintf(
360
-					// translators: %d: Number of times billed
361
-					__( '%d of', 'invoicing' ),
362
-					$times_billed
363
-				),
364
-			),
365
-			true
366
-		);
367
-	} else {
368
-		echo esc_html( $times_billed ) . ' / ' . ( empty( $max_bills ) ? '&infin;' : (int) $max_bills );
369
-	}
344
+    $max_bills    = $subscription->get_bill_times();
345
+    $times_billed = (int) $subscription->get_times_billed();
346
+
347
+    if ( $subscription->has_status( 'active trialling' ) && getpaid_payment_gateway_supports( $subscription->get_gateway(), 'subscription_bill_times_change' ) ) {
348
+        aui()->input(
349
+            array(
350
+                'type'             => 'number',
351
+                'id'               => 'wpinv_subscription_max_bill_times',
352
+                'name'             => 'wpinv_subscription_max_bill_times',
353
+                'label'            => __( 'Maximum bill times', 'invoicing' ),
354
+                'label_type'       => 'hidden',
355
+                'placeholder'      => __( 'Unlimited', 'invoicing' ),
356
+                'value'            => empty( $max_bills ) ? '' : (int) $max_bills,
357
+                'no_wrap'          => true,
358
+                'size'             => 'sm',
359
+                'input_group_left' => sprintf(
360
+                    // translators: %d: Number of times billed
361
+                    __( '%d of', 'invoicing' ),
362
+                    $times_billed
363
+                ),
364
+            ),
365
+            true
366
+        );
367
+    } else {
368
+        echo esc_html( $times_billed ) . ' / ' . ( empty( $max_bills ) ? '&infin;' : (int) $max_bills );
369
+    }
370 370
 }
371 371
 add_action( 'getpaid_subscription_admin_display_renewals', 'getpaid_admin_subscription_metabox_display_renewals' );
372 372
 
@@ -378,13 +378,13 @@  discard block
 block discarded – undo
378 378
  */
379 379
 function getpaid_admin_subscription_metabox_display_item( $subscription, $subscription_group = false ) {
380 380
 
381
-	if ( empty( $subscription_group ) ) {
382
-		echo wp_kses_post( WPInv_Subscriptions_List_Table::generate_item_markup( $subscription->get_product_id() ) );
383
-		return;
384
-	}
381
+    if ( empty( $subscription_group ) ) {
382
+        echo wp_kses_post( WPInv_Subscriptions_List_Table::generate_item_markup( $subscription->get_product_id() ) );
383
+        return;
384
+    }
385 385
 
386
-	$markup = array_map( array( 'WPInv_Subscriptions_List_Table', 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
387
-	echo wp_kses_post( implode( ' | ', $markup ) );
386
+    $markup = array_map( array( 'WPInv_Subscriptions_List_Table', 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
387
+    echo wp_kses_post( implode( ' | ', $markup ) );
388 388
 
389 389
 }
390 390
 add_action( 'getpaid_subscription_admin_display_item', 'getpaid_admin_subscription_metabox_display_item', 10, 2 );
@@ -396,13 +396,13 @@  discard block
 block discarded – undo
396 396
  */
397 397
 function getpaid_admin_subscription_metabox_display_gateway( $subscription ) {
398 398
 
399
-	$gateway = $subscription->get_gateway();
399
+    $gateway = $subscription->get_gateway();
400 400
 
401
-	if ( ! empty( $gateway ) ) {
402
-		echo esc_html( wpinv_get_gateway_admin_label( $gateway ) );
403
-	} else {
404
-		echo '&mdash;';
405
-	}
401
+    if ( ! empty( $gateway ) ) {
402
+        echo esc_html( wpinv_get_gateway_admin_label( $gateway ) );
403
+    } else {
404
+        echo '&mdash;';
405
+    }
406 406
 
407 407
 }
408 408
 add_action( 'getpaid_subscription_admin_display_gateway', 'getpaid_admin_subscription_metabox_display_gateway' );
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
  * @param WPInv_Subscription $subscription
414 414
  */
415 415
 function getpaid_admin_subscription_metabox_display_status( $subscription ) {
416
-	echo wp_kses_post( $subscription->get_status_label_html() );
416
+    echo wp_kses_post( $subscription->get_status_label_html() );
417 417
 }
418 418
 add_action( 'getpaid_subscription_admin_display_status', 'getpaid_admin_subscription_metabox_display_status' );
419 419
 
@@ -424,28 +424,28 @@  discard block
 block discarded – undo
424 424
  */
425 425
 function getpaid_admin_subscription_metabox_display_profile_id( $subscription ) {
426 426
 
427
-	$profile_id = $subscription->get_profile_id();
428
-
429
-	aui()->input(
430
-		array(
431
-			'type'              => 'text',
432
-			'id'                => 'wpinv_subscription_profile_id',
433
-			'name'              => 'wpinv_subscription_profile_id',
434
-			'label'             => __( 'Profile Id', 'invoicing' ),
435
-			'label_type'        => 'hidden',
436
-			'placeholder'       => __( 'Profile Id', 'invoicing' ),
437
-			'value'             => esc_attr( $profile_id ),
438
-			'input_group_right' => '',
439
-			'no_wrap'           => true,
440
-			'size'              => 'sm',
441
-		),
442
-		true
443
-	);
444
-
445
-	$url = apply_filters( 'getpaid_remote_subscription_profile_url', '', $subscription );
446
-	if ( ! empty( $url ) ) {
447
-		echo '&nbsp;<a href="' . esc_url_raw( $url ) . '" title="' . esc_attr__( 'View in Gateway', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-xs fa-fw align-top"></i></a>';
448
-	}
427
+    $profile_id = $subscription->get_profile_id();
428
+
429
+    aui()->input(
430
+        array(
431
+            'type'              => 'text',
432
+            'id'                => 'wpinv_subscription_profile_id',
433
+            'name'              => 'wpinv_subscription_profile_id',
434
+            'label'             => __( 'Profile Id', 'invoicing' ),
435
+            'label_type'        => 'hidden',
436
+            'placeholder'       => __( 'Profile Id', 'invoicing' ),
437
+            'value'             => esc_attr( $profile_id ),
438
+            'input_group_right' => '',
439
+            'no_wrap'           => true,
440
+            'size'              => 'sm',
441
+        ),
442
+        true
443
+    );
444
+
445
+    $url = apply_filters( 'getpaid_remote_subscription_profile_url', '', $subscription );
446
+    if ( ! empty( $url ) ) {
447
+        echo '&nbsp;<a href="' . esc_url_raw( $url ) . '" title="' . esc_attr__( 'View in Gateway', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-xs fa-fw align-top"></i></a>';
448
+    }
449 449
 
450 450
 }
451 451
 add_action( 'getpaid_subscription_admin_display_profile_id', 'getpaid_admin_subscription_metabox_display_profile_id' );
@@ -456,40 +456,40 @@  discard block
 block discarded – undo
456 456
  * @param WPInv_Subscription $subscription
457 457
  */
458 458
 function getpaid_admin_subscription_update_metabox( $subscription ) {
459
-	global $aui_bs5;
459
+    global $aui_bs5;
460 460
 
461
-	?>
461
+    ?>
462 462
 	<div class="mt-3">
463 463
 		<?php
464
-			aui()->select(
465
-				array(
466
-					'options'   => getpaid_get_subscription_statuses(),
467
-					'name'      => 'subscription_status',
468
-					'id'        => 'subscription_status_update_select',
469
-					'required'  => true,
470
-					'no_wrap'   => false,
471
-					'label'     => __( 'Subscription Status', 'invoicing' ),
472
-					'help_text' => __( 'Updating the status will trigger related actions and hooks', 'invoicing' ),
473
-					'select2'   => true,
474
-					'value'     => $subscription->get_status( 'edit' ),
475
-				),
476
-				true
477
-			);
478
-		?>
464
+            aui()->select(
465
+                array(
466
+                    'options'   => getpaid_get_subscription_statuses(),
467
+                    'name'      => 'subscription_status',
468
+                    'id'        => 'subscription_status_update_select',
469
+                    'required'  => true,
470
+                    'no_wrap'   => false,
471
+                    'label'     => __( 'Subscription Status', 'invoicing' ),
472
+                    'help_text' => __( 'Updating the status will trigger related actions and hooks', 'invoicing' ),
473
+                    'select2'   => true,
474
+                    'value'     => $subscription->get_status( 'edit' ),
475
+                ),
476
+                true
477
+            );
478
+        ?>
479 479
 
480 480
 		<div class="mt-2 px-3 py-2 bg-light border-top" style="margin:-12px">
481 481
 		<?php
482
-			submit_button( __( 'Update', 'invoicing' ), 'primary', 'submit', false );
482
+            submit_button( __( 'Update', 'invoicing' ), 'primary', 'submit', false );
483 483
 
484
-			$url    = wp_nonce_url( add_query_arg( 'getpaid-admin-action', 'subscription_manual_renew' ), 'getpaid-nonce', 'getpaid-nonce' );
485
-			$anchor = __( 'Renew Subscription', 'invoicing' );
486
-			$title  = esc_attr__( 'Are you sure you want to extend the subscription and generate a new invoice that will be automatically marked as paid?', 'invoicing' );
484
+            $url    = wp_nonce_url( add_query_arg( 'getpaid-admin-action', 'subscription_manual_renew' ), 'getpaid-nonce', 'getpaid-nonce' );
485
+            $anchor = __( 'Renew Subscription', 'invoicing' );
486
+            $title  = esc_attr__( 'Are you sure you want to extend the subscription and generate a new invoice that will be automatically marked as paid?', 'invoicing' );
487 487
 
488
-			if ( $subscription->is_active() ) {
489
-				echo "<a href='" . esc_url( $url ) . "' class='" . ( $aui_bs5 ? 'float-end' : 'float-right' ) . " button button-secondary' onclick='return confirm(\"" . esc_attr( $title ) . "\")' title='" . esc_attr__( 'Renew subscription manually', 'invoicing' ) . "'>" . esc_html( $anchor ) . "</a>";
490
-			}
488
+            if ( $subscription->is_active() ) {
489
+                echo "<a href='" . esc_url( $url ) . "' class='" . ( $aui_bs5 ? 'float-end' : 'float-right' ) . " button button-secondary' onclick='return confirm(\"" . esc_attr( $title ) . "\")' title='" . esc_attr__( 'Renew subscription manually', 'invoicing' ) . "'>" . esc_html( $anchor ) . "</a>";
490
+            }
491 491
 
492
-	echo '</div></div>';
492
+    echo '</div></div>';
493 493
 }
494 494
 
495 495
 /**
@@ -500,33 +500,33 @@  discard block
 block discarded – undo
500 500
  */
501 501
 function getpaid_admin_subscription_invoice_details_metabox( $subscription, $strict = true ) {
502 502
 
503
-	$columns = apply_filters(
504
-		'getpaid_subscription_related_invoices_columns',
505
-		array(
506
-			'invoice'      => __( 'Invoice', 'invoicing' ),
507
-			'relationship' => __( 'Relationship', 'invoicing' ),
508
-			'date'         => __( 'Date', 'invoicing' ),
509
-			'status'       => __( 'Status', 'invoicing' ),
510
-			'total'        => __( 'Total', 'invoicing' ),
511
-		),
512
-		$subscription
513
-	);
514
-
515
-	// Prepare the invoices.
516
-	$payments = $subscription->get_child_payments( ! is_admin() );
517
-	$parent   = $subscription->get_parent_invoice();
518
-
519
-	if ( $parent->exists() ) {
520
-		$payments = array_merge( array( $parent ), $payments );
521
-	}
522
-
523
-	$table_class = 'w-100 bg-white';
524
-
525
-	if ( ! is_admin() ) {
526
-		$table_class = 'table table-bordered';
527
-	}
528
-
529
-	?>
503
+    $columns = apply_filters(
504
+        'getpaid_subscription_related_invoices_columns',
505
+        array(
506
+            'invoice'      => __( 'Invoice', 'invoicing' ),
507
+            'relationship' => __( 'Relationship', 'invoicing' ),
508
+            'date'         => __( 'Date', 'invoicing' ),
509
+            'status'       => __( 'Status', 'invoicing' ),
510
+            'total'        => __( 'Total', 'invoicing' ),
511
+        ),
512
+        $subscription
513
+    );
514
+
515
+    // Prepare the invoices.
516
+    $payments = $subscription->get_child_payments( ! is_admin() );
517
+    $parent   = $subscription->get_parent_invoice();
518
+
519
+    if ( $parent->exists() ) {
520
+        $payments = array_merge( array( $parent ), $payments );
521
+    }
522
+
523
+    $table_class = 'w-100 bg-white';
524
+
525
+    if ( ! is_admin() ) {
526
+        $table_class = 'table table-bordered';
527
+    }
528
+
529
+    ?>
530 530
 		<div class="m-0" style="overflow: auto;">
531 531
 
532 532
 			<table class="<?php echo esc_attr( $table_class ); ?>">
@@ -534,10 +534,10 @@  discard block
 block discarded – undo
534 534
 				<thead>
535 535
 					<tr>
536 536
 						<?php
537
-							foreach ( $columns as $key => $label ) {
538
-							echo "<th class='subscription-invoice-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
539
-							}
540
-						?>
537
+                            foreach ( $columns as $key => $label ) {
538
+                            echo "<th class='subscription-invoice-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
539
+                            }
540
+                        ?>
541 541
 					</tr>
542 542
 				</thead>
543 543
 
@@ -553,73 +553,73 @@  discard block
 block discarded – undo
553 553
 
554 554
 					<?php
555 555
 
556
-						foreach ( $payments as $payment ) :
556
+                        foreach ( $payments as $payment ) :
557 557
 
558
-						// Ensure that we have an invoice.
559
-						$payment = new WPInv_Invoice( $payment );
558
+                        // Ensure that we have an invoice.
559
+                        $payment = new WPInv_Invoice( $payment );
560 560
 
561
-						// Abort if the invoice is invalid...
562
-						if ( ! $payment->exists() ) {
563
-							continue;
564
-							}
561
+                        // Abort if the invoice is invalid...
562
+                        if ( ! $payment->exists() ) {
563
+                            continue;
564
+                            }
565 565
 
566
-						// ... or belongs to a different subscription.
567
-						if ( $strict && $payment->is_renewal() && $payment->get_subscription_id() && $payment->get_subscription_id() != $subscription->get_id() ) {
568
-							continue;
569
-							}
566
+                        // ... or belongs to a different subscription.
567
+                        if ( $strict && $payment->is_renewal() && $payment->get_subscription_id() && $payment->get_subscription_id() != $subscription->get_id() ) {
568
+                            continue;
569
+                            }
570 570
 
571
-						echo '<tr>';
571
+                        echo '<tr>';
572 572
 
573
-						foreach ( array_keys( $columns ) as $key ) {
573
+                        foreach ( array_keys( $columns ) as $key ) {
574 574
 
575
-							echo "<td class='p-2 text-left'>";
575
+                            echo "<td class='p-2 text-left'>";
576 576
 
577
-								switch ( $key ) {
577
+                                switch ( $key ) {
578 578
 
579
-								case 'total':
580
-										echo '<strong>';
581
-										wpinv_the_price( $payment->get_total(), $payment->get_currency() );
582
-										echo '</strong>';
583
-									break;
579
+                                case 'total':
580
+                                        echo '<strong>';
581
+                                        wpinv_the_price( $payment->get_total(), $payment->get_currency() );
582
+                                        echo '</strong>';
583
+                                    break;
584 584
 
585
-								case 'relationship':
586
-										echo $payment->is_renewal() ? esc_html__( 'Renewal Invoice', 'invoicing' ) : esc_html__( 'Initial Invoice', 'invoicing' );
587
-									break;
585
+                                case 'relationship':
586
+                                        echo $payment->is_renewal() ? esc_html__( 'Renewal Invoice', 'invoicing' ) : esc_html__( 'Initial Invoice', 'invoicing' );
587
+                                    break;
588 588
 
589
-								case 'date':
590
-									echo esc_html( getpaid_format_date_value( $payment->get_date_created() ) );
591
-									break;
589
+                                case 'date':
590
+                                    echo esc_html( getpaid_format_date_value( $payment->get_date_created() ) );
591
+                                    break;
592 592
 
593
-								case 'status':
594
-										$status = $payment->get_status_nicename();
595
-										if ( is_admin() ) {
596
-										$status = $payment->get_status_label_html();
597
-										}
593
+                                case 'status':
594
+                                        $status = $payment->get_status_nicename();
595
+                                        if ( is_admin() ) {
596
+                                        $status = $payment->get_status_label_html();
597
+                                        }
598 598
 
599
-										echo wp_kses_post( $status );
600
-									break;
599
+                                        echo wp_kses_post( $status );
600
+                                    break;
601 601
 
602
-								case 'invoice':
603
-										if ( ! is_admin() ) {
604
-											$link = $payment->get_view_url();
605
-										} else {
606
-											$link = get_edit_post_link( $payment->get_id() );
607
-										}
602
+                                case 'invoice':
603
+                                        if ( ! is_admin() ) {
604
+                                            $link = $payment->get_view_url();
605
+                                        } else {
606
+                                            $link = get_edit_post_link( $payment->get_id() );
607
+                                        }
608 608
 
609
-										$invoice = esc_html( $payment->get_number() );
609
+                                        $invoice = esc_html( $payment->get_number() );
610 610
 
611
-										echo wp_kses_post( "<a href='" . ( $link ? esc_url( $link ) : '#' ) . "'>$invoice</a>" );
612
-									break;
613
-										}
611
+                                        echo wp_kses_post( "<a href='" . ( $link ? esc_url( $link ) : '#' ) . "'>$invoice</a>" );
612
+                                    break;
613
+                                        }
614 614
 
615
-								echo '</td>';
615
+                                echo '</td>';
616 616
 
617
-							}
617
+                            }
618 618
 
619
-						echo '</tr>';
619
+                        echo '</tr>';
620 620
 
621
-						endforeach;
622
-					?>
621
+                        endforeach;
622
+                    ?>
623 623
 
624 624
 				</tbody>
625 625
 
@@ -637,42 +637,42 @@  discard block
 block discarded – undo
637 637
  */
638 638
 function getpaid_admin_subscription_item_details_metabox( $subscription ) {
639 639
 
640
-	// Fetch the subscription group.
641
-	$subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_payment_id(), $subscription->get_id() );
640
+    // Fetch the subscription group.
641
+    $subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_payment_id(), $subscription->get_id() );
642 642
 
643
-	if ( empty( $subscription_group ) || empty( $subscription_group['items'] ) ) {
644
-		return;
645
-	}
643
+    if ( empty( $subscription_group ) || empty( $subscription_group['items'] ) ) {
644
+        return;
645
+    }
646 646
 
647
-	// Prepare table columns.
648
-	$columns = apply_filters(
649
-		'getpaid_subscription_item_details_columns',
650
-		array(
651
-			'item_name' => __( 'Item', 'invoicing' ),
652
-			'price'     => __( 'Price', 'invoicing' ),
653
-			'tax'       => __( 'Tax', 'invoicing' ),
654
-			'discount'  => __( 'Discount', 'invoicing' ),
655
-			//'initial'      => __( 'Initial Amount', 'invoicing' ),
656
-			'recurring' => __( 'Subtotal', 'invoicing' ),
657
-		),
658
-		$subscription
659
-	);
647
+    // Prepare table columns.
648
+    $columns = apply_filters(
649
+        'getpaid_subscription_item_details_columns',
650
+        array(
651
+            'item_name' => __( 'Item', 'invoicing' ),
652
+            'price'     => __( 'Price', 'invoicing' ),
653
+            'tax'       => __( 'Tax', 'invoicing' ),
654
+            'discount'  => __( 'Discount', 'invoicing' ),
655
+            //'initial'      => __( 'Initial Amount', 'invoicing' ),
656
+            'recurring' => __( 'Subtotal', 'invoicing' ),
657
+        ),
658
+        $subscription
659
+    );
660 660
 
661
-	// Prepare the invoices.
661
+    // Prepare the invoices.
662 662
 
663
-	$invoice = $subscription->get_parent_invoice();
663
+    $invoice = $subscription->get_parent_invoice();
664 664
 
665
-	if ( ( ! wpinv_use_taxes() || ! $invoice->is_taxable() ) && isset( $columns['tax'] ) ) {
666
-		unset( $columns['tax'] );
667
-	}
665
+    if ( ( ! wpinv_use_taxes() || ! $invoice->is_taxable() ) && isset( $columns['tax'] ) ) {
666
+        unset( $columns['tax'] );
667
+    }
668 668
 
669
-	$table_class = 'w-100 bg-white';
669
+    $table_class = 'w-100 bg-white';
670 670
 
671
-	if ( ! is_admin() ) {
672
-		$table_class = 'table table-bordered';
673
-	}
671
+    if ( ! is_admin() ) {
672
+        $table_class = 'table table-bordered';
673
+    }
674 674
 
675
-	?>
675
+    ?>
676 676
 		<div class="m-0" style="overflow: auto;">
677 677
 
678 678
 			<table class="<?php echo esc_attr( $table_class ); ?>">
@@ -681,10 +681,10 @@  discard block
 block discarded – undo
681 681
 					<tr>
682 682
 						<?php
683 683
 
684
-							foreach ( $columns as $key => $label ) {
685
-							echo "<th class='subscription-item-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
686
-							}
687
-						?>
684
+                            foreach ( $columns as $key => $label ) {
685
+                            echo "<th class='subscription-item-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
686
+                            }
687
+                        ?>
688 688
 					</tr>
689 689
 				</thead>
690 690
 
@@ -692,106 +692,106 @@  discard block
 block discarded – undo
692 692
 
693 693
 					<?php
694 694
 
695
-						foreach ( $subscription_group['items'] as $subscription_group_item ) :
695
+                        foreach ( $subscription_group['items'] as $subscription_group_item ) :
696 696
 
697
-						echo '<tr>';
697
+                        echo '<tr>';
698 698
 
699
-						foreach ( array_keys( $columns ) as $key ) {
699
+                        foreach ( array_keys( $columns ) as $key ) {
700 700
 
701
-							$class = 'text-left';
701
+                            $class = 'text-left';
702 702
 
703
-							echo "<td class='p-2 text-left'>";
703
+                            echo "<td class='p-2 text-left'>";
704 704
 
705
-								switch ( $key ) {
705
+                                switch ( $key ) {
706 706
 
707
-								case 'item_name':
708
-										$item_name = get_the_title( $subscription_group_item['item_id'] );
709
-										$item_name = empty( $item_name ) ? $subscription_group_item['item_name'] : $item_name;
707
+                                case 'item_name':
708
+                                        $item_name = get_the_title( $subscription_group_item['item_id'] );
709
+                                        $item_name = empty( $item_name ) ? $subscription_group_item['item_name'] : $item_name;
710 710
 
711
-										if ( $invoice->get_template() == 'amount' || 1 == (float) $subscription_group_item['quantity'] ) {
712
-										echo esc_html( $item_name );
713
-										} else {
714
-										printf( '%1$s x %2$d', esc_html( $item_name ), (float) $subscription_group_item['quantity'] );
715
-											}
711
+                                        if ( $invoice->get_template() == 'amount' || 1 == (float) $subscription_group_item['quantity'] ) {
712
+                                        echo esc_html( $item_name );
713
+                                        } else {
714
+                                        printf( '%1$s x %2$d', esc_html( $item_name ), (float) $subscription_group_item['quantity'] );
715
+                                            }
716 716
 
717
-									break;
717
+                                    break;
718 718
 
719
-								case 'price':
720
-									wpinv_the_price( $subscription_group_item['item_price'], $invoice->get_currency() );
721
-									break;
719
+                                case 'price':
720
+                                    wpinv_the_price( $subscription_group_item['item_price'], $invoice->get_currency() );
721
+                                    break;
722 722
 
723
-								case 'tax':
724
-									wpinv_the_price( $subscription_group_item['tax'], $invoice->get_currency() );
725
-									break;
723
+                                case 'tax':
724
+                                    wpinv_the_price( $subscription_group_item['tax'], $invoice->get_currency() );
725
+                                    break;
726 726
 
727
-								case 'discount':
728
-									wpinv_the_price( $subscription_group_item['discount'], $invoice->get_currency() );
729
-									break;
727
+                                case 'discount':
728
+                                    wpinv_the_price( $subscription_group_item['discount'], $invoice->get_currency() );
729
+                                    break;
730 730
 
731
-								case 'initial':
732
-									wpinv_the_price( $subscription_group_item['price'] * $subscription_group_item['quantity'], $invoice->get_currency() );
733
-									break;
731
+                                case 'initial':
732
+                                    wpinv_the_price( $subscription_group_item['price'] * $subscription_group_item['quantity'], $invoice->get_currency() );
733
+                                    break;
734 734
 
735
-								case 'recurring':
736
-										echo wp_kses_post( '<strong>' . wpinv_price( $subscription_group_item['price'] * $subscription_group_item['quantity'], $invoice->get_currency() ) . '</strong>' );
737
-									break;
735
+                                case 'recurring':
736
+                                        echo wp_kses_post( '<strong>' . wpinv_price( $subscription_group_item['price'] * $subscription_group_item['quantity'], $invoice->get_currency() ) . '</strong>' );
737
+                                    break;
738 738
 
739
-										}
739
+                                        }
740 740
 
741
-								echo '</td>';
741
+                                echo '</td>';
742 742
 
743
-							}
743
+                            }
744 744
 
745
-						echo '</tr>';
745
+                        echo '</tr>';
746 746
 
747
-						endforeach;
747
+                        endforeach;
748 748
 
749
-						foreach ( $subscription_group['fees'] as $subscription_group_fee ) :
749
+                        foreach ( $subscription_group['fees'] as $subscription_group_fee ) :
750 750
 
751
-						echo '<tr>';
751
+                        echo '<tr>';
752 752
 
753
-						foreach ( array_keys( $columns ) as $key ) {
753
+                        foreach ( array_keys( $columns ) as $key ) {
754 754
 
755
-							$class = 'text-left';
755
+                            $class = 'text-left';
756 756
 
757
-							echo "<td class='p-2 text-left'>";
757
+                            echo "<td class='p-2 text-left'>";
758 758
 
759
-								switch ( $key ) {
759
+                                switch ( $key ) {
760 760
 
761
-								case 'item_name':
762
-										echo esc_html( $subscription_group_fee['name'] );
763
-									break;
761
+                                case 'item_name':
762
+                                        echo esc_html( $subscription_group_fee['name'] );
763
+                                    break;
764 764
 
765
-								case 'price':
766
-									wpinv_the_price( $subscription_group_fee['initial_fee'], $invoice->get_currency() );
767
-									break;
765
+                                case 'price':
766
+                                    wpinv_the_price( $subscription_group_fee['initial_fee'], $invoice->get_currency() );
767
+                                    break;
768 768
 
769
-								case 'tax':
770
-									echo '&mdash;';
771
-									break;
769
+                                case 'tax':
770
+                                    echo '&mdash;';
771
+                                    break;
772 772
 
773
-								case 'discount':
774
-										echo '&mdash;';
775
-									break;
773
+                                case 'discount':
774
+                                        echo '&mdash;';
775
+                                    break;
776 776
 
777
-								case 'initial':
778
-									wpinv_the_price( $subscription_group_fee['initial_fee'], $invoice->get_currency() );
779
-									break;
777
+                                case 'initial':
778
+                                    wpinv_the_price( $subscription_group_fee['initial_fee'], $invoice->get_currency() );
779
+                                    break;
780 780
 
781
-								case 'recurring':
782
-										echo wp_kses_post( '<strong>' . wpinv_price( $subscription_group_fee['recurring_fee'], $invoice->get_currency() ) . '</strong>' );
783
-									break;
781
+                                case 'recurring':
782
+                                        echo wp_kses_post( '<strong>' . wpinv_price( $subscription_group_fee['recurring_fee'], $invoice->get_currency() ) . '</strong>' );
783
+                                    break;
784 784
 
785
-										}
785
+                                        }
786 786
 
787
-								echo '</td>';
787
+                                echo '</td>';
788 788
 
789
-							}
789
+                            }
790 790
 
791
-						echo '</tr>';
791
+                        echo '</tr>';
792 792
 
793
-						endforeach;
794
-					?>
793
+                        endforeach;
794
+                    ?>
795 795
 
796 796
 				</tbody>
797 797
 
@@ -810,38 +810,38 @@  discard block
 block discarded – undo
810 810
  */
811 811
 function getpaid_admin_subscription_related_subscriptions_metabox( $subscription, $skip_current = true ) {
812 812
 
813
-	// Fetch the subscription groups.
814
-	$subscription_groups = getpaid_get_invoice_subscription_groups( $subscription->get_parent_payment_id() );
815
-
816
-	if ( empty( $subscription_groups ) ) {
817
-		return;
818
-	}
819
-
820
-	// Prepare table columns.
821
-	$columns = apply_filters(
822
-		'getpaid_subscription_related_subscriptions_columns',
823
-		array(
824
-			'subscription' => __( 'Subscription', 'invoicing' ),
825
-			'start_date'   => __( 'Start Date', 'invoicing' ),
826
-			'renewal_date' => __( 'Next Payment', 'invoicing' ),
827
-			'renewals'     => __( 'Payments', 'invoicing' ),
828
-			'item'         => __( 'Items', 'invoicing' ),
829
-			'status'       => __( 'Status', 'invoicing' ),
830
-		),
831
-		$subscription
832
-	);
833
-
834
-	if ( $subscription->get_status() == 'pending' ) {
835
-		unset( $columns['start_date'], $columns['renewal_date'] );
836
-	}
837
-
838
-	$table_class = 'w-100 bg-white';
839
-
840
-	if ( ! is_admin() ) {
841
-		$table_class = 'table table-bordered';
842
-	}
843
-
844
-	?>
813
+    // Fetch the subscription groups.
814
+    $subscription_groups = getpaid_get_invoice_subscription_groups( $subscription->get_parent_payment_id() );
815
+
816
+    if ( empty( $subscription_groups ) ) {
817
+        return;
818
+    }
819
+
820
+    // Prepare table columns.
821
+    $columns = apply_filters(
822
+        'getpaid_subscription_related_subscriptions_columns',
823
+        array(
824
+            'subscription' => __( 'Subscription', 'invoicing' ),
825
+            'start_date'   => __( 'Start Date', 'invoicing' ),
826
+            'renewal_date' => __( 'Next Payment', 'invoicing' ),
827
+            'renewals'     => __( 'Payments', 'invoicing' ),
828
+            'item'         => __( 'Items', 'invoicing' ),
829
+            'status'       => __( 'Status', 'invoicing' ),
830
+        ),
831
+        $subscription
832
+    );
833
+
834
+    if ( $subscription->get_status() == 'pending' ) {
835
+        unset( $columns['start_date'], $columns['renewal_date'] );
836
+    }
837
+
838
+    $table_class = 'w-100 bg-white';
839
+
840
+    if ( ! is_admin() ) {
841
+        $table_class = 'table table-bordered';
842
+    }
843
+
844
+    ?>
845 845
 		<div class="m-0" style="overflow: auto;">
846 846
 
847 847
 			<table class="<?php echo esc_attr( $table_class ); ?>">
@@ -850,10 +850,10 @@  discard block
 block discarded – undo
850 850
 					<tr>
851 851
 						<?php
852 852
 
853
-							foreach ( $columns as $key => $label ) {
854
-							echo "<th class='related-subscription-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
855
-							}
856
-						?>
853
+                            foreach ( $columns as $key => $label ) {
854
+                            echo "<th class='related-subscription-field-" . esc_attr( $key ) . " bg-light p-2 text-left color-dark font-weight-bold'>" . esc_html( $label ) . "</th>";
855
+                            }
856
+                        ?>
857 857
 					</tr>
858 858
 				</thead>
859 859
 
@@ -861,74 +861,74 @@  discard block
 block discarded – undo
861 861
 
862 862
 					<?php
863 863
 
864
-						foreach ( $subscription_groups as $subscription_group ) :
864
+                        foreach ( $subscription_groups as $subscription_group ) :
865 865
 
866
-						// Do not list current subscription.
867
-						if ( $skip_current && (int) $subscription_group['subscription_id'] === $subscription->get_id() ) {
868
-							continue;
869
-							}
866
+                        // Do not list current subscription.
867
+                        if ( $skip_current && (int) $subscription_group['subscription_id'] === $subscription->get_id() ) {
868
+                            continue;
869
+                            }
870 870
 
871
-						// Ensure the subscription exists.
872
-						$_suscription = new WPInv_Subscription( $subscription_group['subscription_id'] );
871
+                        // Ensure the subscription exists.
872
+                        $_suscription = new WPInv_Subscription( $subscription_group['subscription_id'] );
873 873
 
874
-						if ( ! $_suscription->exists() ) {
875
-							continue;
876
-							}
874
+                        if ( ! $_suscription->exists() ) {
875
+                            continue;
876
+                            }
877 877
 
878
-						echo '<tr>';
878
+                        echo '<tr>';
879 879
 
880
-						foreach ( array_keys( $columns ) as $key ) {
880
+                        foreach ( array_keys( $columns ) as $key ) {
881 881
 
882
-							$class = 'text-left';
882
+                            $class = 'text-left';
883 883
 
884
-							echo "<td class='p-2 text-left'>";
884
+                            echo "<td class='p-2 text-left'>";
885 885
 
886
-								switch ( $key ) {
886
+                                switch ( $key ) {
887 887
 
888
-								case 'status':
889
-										echo wp_kses_post( $_suscription->get_status_label_html() );
890
-									break;
888
+                                case 'status':
889
+                                        echo wp_kses_post( $_suscription->get_status_label_html() );
890
+                                    break;
891 891
 
892
-								case 'item':
893
-											$markup = array_map( array( 'WPInv_Subscriptions_List_Table', 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
894
-											echo wp_kses_post( implode( ' | ', $markup ) );
895
-									break;
892
+                                case 'item':
893
+                                            $markup = array_map( array( 'WPInv_Subscriptions_List_Table', 'generate_item_markup' ), array_keys( $subscription_group['items'] ) );
894
+                                            echo wp_kses_post( implode( ' | ', $markup ) );
895
+                                    break;
896 896
 
897
-								case 'renewals':
898
-									$max_bills = $_suscription->get_bill_times();
899
-									echo ( (int) $_suscription->get_times_billed() ) . ' / ' . ( empty( $max_bills ) ? '&infin;' : (int) $max_bills );
900
-									break;
897
+                                case 'renewals':
898
+                                    $max_bills = $_suscription->get_bill_times();
899
+                                    echo ( (int) $_suscription->get_times_billed() ) . ' / ' . ( empty( $max_bills ) ? '&infin;' : (int) $max_bills );
900
+                                    break;
901 901
 
902
-								case 'renewal_date':
903
-										echo $_suscription->is_active() ? esc_html( getpaid_format_date_value( $_suscription->get_expiration() ) ) : '&mdash;';
904
-									break;
902
+                                case 'renewal_date':
903
+                                        echo $_suscription->is_active() ? esc_html( getpaid_format_date_value( $_suscription->get_expiration() ) ) : '&mdash;';
904
+                                    break;
905 905
 
906
-								case 'start_date':
907
-										echo 'pending' == $_suscription->get_status() ? '&mdash;' : esc_html( getpaid_format_date_value( $_suscription->get_date_created() ) );
908
-									break;
906
+                                case 'start_date':
907
+                                        echo 'pending' == $_suscription->get_status() ? '&mdash;' : esc_html( getpaid_format_date_value( $_suscription->get_date_created() ) );
908
+                                    break;
909 909
 
910
-								case 'subscription':
911
-										$url = is_admin() ? admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $_suscription->get_id() ) ) : $_suscription->get_view_url();
912
-										printf(
910
+                                case 'subscription':
911
+                                        $url = is_admin() ? admin_url( 'admin.php?page=wpinv-subscriptions&id=' . absint( $_suscription->get_id() ) ) : $_suscription->get_view_url();
912
+                                        printf(
913 913
                                             '%1$s#%2$s%3$s',
914 914
                                             '<a href="' . esc_url( $url ) . '">',
915 915
                                             '<strong>' . intval( $_suscription->get_id() ) . '</strong>',
916
-											'</a>'
916
+                                            '</a>'
917 917
                                         );
918 918
 
919
-											echo wp_kses_post( WPInv_Subscriptions_List_Table::column_amount( $_suscription ) );
920
-									break;
919
+                                            echo wp_kses_post( WPInv_Subscriptions_List_Table::column_amount( $_suscription ) );
920
+                                    break;
921 921
 
922
-										}
922
+                                        }
923 923
 
924
-								echo '</td>';
924
+                                echo '</td>';
925 925
 
926
-							}
926
+                            }
927 927
 
928
-						echo '</tr>';
928
+                        echo '</tr>';
929 929
 
930
-						endforeach;
931
-					?>
930
+                        endforeach;
931
+                    ?>
932 932
 
933 933
 				</tbody>
934 934
 
Please login to merge, or discard this patch.
includes/subscription-functions.php 1 patch
Indentation   +323 added lines, -323 removed lines patch added patch discarded remove patch
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
  */
51 51
 function getpaid_get_invoice_subscription_group( $invoice_id, $subscription_id ) {
52 52
     $subscription_groups = getpaid_get_invoice_subscription_groups( $invoice_id );
53
-	$matching_group      = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
53
+    $matching_group      = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
54 54
     return reset( $matching_group );
55 55
 }
56 56
 
@@ -63,11 +63,11 @@  discard block
 block discarded – undo
63 63
  */
64 64
 function getpaid_get_subscription( $subscription ) {
65 65
 
66
-	if ( ! is_a( $subscription, 'WPInv_Subscription' ) ) {
67
-		$subscription = new WPInv_Subscription( $subscription );
68
-	}
66
+    if ( ! is_a( $subscription, 'WPInv_Subscription' ) ) {
67
+        $subscription = new WPInv_Subscription( $subscription );
68
+    }
69 69
 
70
-	return $subscription->exists() ? $subscription : false;
70
+    return $subscription->exists() ? $subscription : false;
71 71
 }
72 72
 
73 73
 /**
@@ -81,28 +81,28 @@  discard block
 block discarded – undo
81 81
  */
82 82
 function getpaid_get_subscriptions( $args = array(), $return = 'results' ) {
83 83
 
84
-	// Do not retrieve all fields if we just want the count.
85
-	if ( 'count' == $return ) {
86
-		$args['fields'] = 'id';
87
-		$args['number'] = 1;
88
-	}
84
+    // Do not retrieve all fields if we just want the count.
85
+    if ( 'count' == $return ) {
86
+        $args['fields'] = 'id';
87
+        $args['number'] = 1;
88
+    }
89 89
 
90
-	// Do not count all matches if we just want the results.
91
-	if ( 'results' == $return ) {
92
-		$args['count_total'] = false;
93
-	}
90
+    // Do not count all matches if we just want the results.
91
+    if ( 'results' == $return ) {
92
+        $args['count_total'] = false;
93
+    }
94 94
 
95
-	$query = new GetPaid_Subscriptions_Query( $args );
95
+    $query = new GetPaid_Subscriptions_Query( $args );
96 96
 
97
-	if ( 'results' == $return ) {
98
-		return $query->get_results();
99
-	}
97
+    if ( 'results' == $return ) {
98
+        return $query->get_results();
99
+    }
100 100
 
101
-	if ( 'count' == $return ) {
102
-		return $query->get_total();
103
-	}
101
+    if ( 'count' == $return ) {
102
+        return $query->get_total();
103
+    }
104 104
 
105
-	return $query;
105
+    return $query;
106 106
 }
107 107
 
108 108
 /**
@@ -112,18 +112,18 @@  discard block
 block discarded – undo
112 112
  */
113 113
 function getpaid_get_subscription_statuses() {
114 114
 
115
-	return apply_filters(
116
-		'getpaid_get_subscription_statuses',
117
-		array(
118
-			'pending'   => __( 'Pending', 'invoicing' ),
119
-			'trialling' => __( 'Trialing', 'invoicing' ),
120
-			'active'    => __( 'Active', 'invoicing' ),
121
-			'failing'   => __( 'Failing', 'invoicing' ),
122
-			'expired'   => __( 'Expired', 'invoicing' ),
123
-			'completed' => __( 'Complete', 'invoicing' ),
124
-			'cancelled' => __( 'Cancelled', 'invoicing' ),
125
-		)
126
-	);
115
+    return apply_filters(
116
+        'getpaid_get_subscription_statuses',
117
+        array(
118
+            'pending'   => __( 'Pending', 'invoicing' ),
119
+            'trialling' => __( 'Trialing', 'invoicing' ),
120
+            'active'    => __( 'Active', 'invoicing' ),
121
+            'failing'   => __( 'Failing', 'invoicing' ),
122
+            'expired'   => __( 'Expired', 'invoicing' ),
123
+            'completed' => __( 'Complete', 'invoicing' ),
124
+            'cancelled' => __( 'Cancelled', 'invoicing' ),
125
+        )
126
+    );
127 127
 
128 128
 }
129 129
 
@@ -133,8 +133,8 @@  discard block
 block discarded – undo
133 133
  * @return string
134 134
  */
135 135
 function getpaid_get_subscription_status_label( $status ) {
136
-	$statuses = getpaid_get_subscription_statuses();
137
-	return isset( $statuses[ $status ] ) ? $statuses[ $status ] : ucfirst( sanitize_text_field( $status ) );
136
+    $statuses = getpaid_get_subscription_statuses();
137
+    return isset( $statuses[ $status ] ) ? $statuses[ $status ] : ucfirst( sanitize_text_field( $status ) );
138 138
 }
139 139
 
140 140
 /**
@@ -144,18 +144,18 @@  discard block
 block discarded – undo
144 144
  */
145 145
 function getpaid_get_subscription_status_classes() {
146 146
 
147
-	return apply_filters(
148
-		'getpaid_get_subscription_status_classes',
149
-		array(
150
-			'pending'   => 'bg-dark',
151
-			'trialling' => 'bg-info',
152
-			'active'    => 'bg-success',
153
-			'failing'   => 'bg-warning text-dark',
154
-			'expired'   => 'bg-danger',
155
-			'completed' => 'bg-primary',
156
-			'cancelled' => 'bg-secondary',
157
-		)
158
-	);
147
+    return apply_filters(
148
+        'getpaid_get_subscription_status_classes',
149
+        array(
150
+            'pending'   => 'bg-dark',
151
+            'trialling' => 'bg-info',
152
+            'active'    => 'bg-success',
153
+            'failing'   => 'bg-warning text-dark',
154
+            'expired'   => 'bg-danger',
155
+            'completed' => 'bg-primary',
156
+            'cancelled' => 'bg-secondary',
157
+        )
158
+    );
159 159
 
160 160
 }
161 161
 
@@ -166,15 +166,15 @@  discard block
 block discarded – undo
166 166
  */
167 167
 function getpaid_get_subscription_status_counts( $args = array() ) {
168 168
 
169
-	$statuses = array_keys( getpaid_get_subscription_statuses() );
170
-	$counts   = array();
169
+    $statuses = array_keys( getpaid_get_subscription_statuses() );
170
+    $counts   = array();
171 171
 
172
-	foreach ( $statuses as $status ) {
173
-		$_args             = wp_parse_args( "status=$status", $args );
174
-		$counts[ $status ] = getpaid_get_subscriptions( $_args, 'count' );
175
-	}
172
+    foreach ( $statuses as $status ) {
173
+        $_args             = wp_parse_args( "status=$status", $args );
174
+        $counts[ $status ] = getpaid_get_subscriptions( $_args, 'count' );
175
+    }
176 176
 
177
-	return $counts;
177
+    return $counts;
178 178
 
179 179
 }
180 180
 
@@ -185,32 +185,32 @@  discard block
 block discarded – undo
185 185
  */
186 186
 function getpaid_get_subscription_periods() {
187 187
 
188
-	return apply_filters(
189
-		'getpaid_get_subscription_periods',
190
-		array(
188
+    return apply_filters(
189
+        'getpaid_get_subscription_periods',
190
+        array(
191 191
 
192
-			'day'   => array(
193
-				'singular' => __( '%s day', 'invoicing' ),
194
-				'plural'   => __( '%d days', 'invoicing' ),
195
-			),
192
+            'day'   => array(
193
+                'singular' => __( '%s day', 'invoicing' ),
194
+                'plural'   => __( '%d days', 'invoicing' ),
195
+            ),
196 196
 
197
-			'week'  => array(
198
-				'singular' => __( '%s week', 'invoicing' ),
199
-				'plural'   => __( '%d weeks', 'invoicing' ),
200
-			),
197
+            'week'  => array(
198
+                'singular' => __( '%s week', 'invoicing' ),
199
+                'plural'   => __( '%d weeks', 'invoicing' ),
200
+            ),
201 201
 
202
-			'month' => array(
203
-				'singular' => __( '%s month', 'invoicing' ),
204
-				'plural'   => __( '%d months', 'invoicing' ),
205
-			),
202
+            'month' => array(
203
+                'singular' => __( '%s month', 'invoicing' ),
204
+                'plural'   => __( '%d months', 'invoicing' ),
205
+            ),
206 206
 
207
-			'year'  => array(
208
-				'singular' => __( '%s year', 'invoicing' ),
209
-				'plural'   => __( '%d years', 'invoicing' ),
210
-			),
207
+            'year'  => array(
208
+                'singular' => __( '%s year', 'invoicing' ),
209
+                'plural'   => __( '%d years', 'invoicing' ),
210
+            ),
211 211
 
212
-		)
213
-	);
212
+        )
213
+    );
214 214
 
215 215
 }
216 216
 
@@ -221,7 +221,7 @@  discard block
 block discarded – undo
221 221
  * @return int
222 222
  */
223 223
 function getpaid_get_subscription_trial_period_interval( $trial_period ) {
224
-	return (int) preg_replace( '/[^0-9]/', '', $trial_period );
224
+    return (int) preg_replace( '/[^0-9]/', '', $trial_period );
225 225
 }
226 226
 
227 227
 /**
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
  * @return string
232 232
  */
233 233
 function getpaid_get_subscription_trial_period_period( $trial_period ) {
234
-	return preg_replace( '/[^a-z]/', '', strtolower( $trial_period ) );
234
+    return preg_replace( '/[^a-z]/', '', strtolower( $trial_period ) );
235 235
 }
236 236
 
237 237
 /**
@@ -242,8 +242,8 @@  discard block
 block discarded – undo
242 242
  * @return string
243 243
  */
244 244
 function getpaid_get_subscription_period_label( $period, $interval = 1, $singular_prefix = '1' ) {
245
-	$label = (int) $interval > 1 ? getpaid_get_plural_subscription_period_label( $period, $interval ) : getpaid_get_singular_subscription_period_label( $period, $singular_prefix );
246
-	return strtolower( sanitize_text_field( $label ) );
245
+    $label = (int) $interval > 1 ? getpaid_get_plural_subscription_period_label( $period, $interval ) : getpaid_get_singular_subscription_period_label( $period, $singular_prefix );
246
+    return strtolower( sanitize_text_field( $label ) );
247 247
 }
248 248
 
249 249
 /**
@@ -254,22 +254,22 @@  discard block
 block discarded – undo
254 254
  */
255 255
 function getpaid_get_singular_subscription_period_label( $period, $singular_prefix = '1' ) {
256 256
 
257
-	$periods = getpaid_get_subscription_periods();
258
-	$period  = strtolower( $period );
257
+    $periods = getpaid_get_subscription_periods();
258
+    $period  = strtolower( $period );
259 259
 
260
-	if ( isset( $periods[ $period ] ) ) {
261
-		return sprintf( $periods[ $period ]['singular'], $singular_prefix );
262
-	}
260
+    if ( isset( $periods[ $period ] ) ) {
261
+        return sprintf( $periods[ $period ]['singular'], $singular_prefix );
262
+    }
263 263
 
264
-	// Backwards compatibility.
265
-	foreach ( $periods as $key => $data ) {
266
-		if ( strpos( $key, $period ) === 0 ) {
267
-			return sprintf( $data['singular'], $singular_prefix );
268
-		}
269
-	}
264
+    // Backwards compatibility.
265
+    foreach ( $periods as $key => $data ) {
266
+        if ( strpos( $key, $period ) === 0 ) {
267
+            return sprintf( $data['singular'], $singular_prefix );
268
+        }
269
+    }
270 270
 
271
-	// Invalid string.
272
-	return '';
271
+    // Invalid string.
272
+    return '';
273 273
 }
274 274
 
275 275
 /**
@@ -281,22 +281,22 @@  discard block
 block discarded – undo
281 281
  */
282 282
 function getpaid_get_plural_subscription_period_label( $period, $interval ) {
283 283
 
284
-	$periods = getpaid_get_subscription_periods();
285
-	$period  = strtolower( $period );
284
+    $periods = getpaid_get_subscription_periods();
285
+    $period  = strtolower( $period );
286 286
 
287
-	if ( isset( $periods[ $period ] ) ) {
288
-		return sprintf( $periods[ $period ]['plural'], $interval );
289
-	}
287
+    if ( isset( $periods[ $period ] ) ) {
288
+        return sprintf( $periods[ $period ]['plural'], $interval );
289
+    }
290 290
 
291
-	// Backwards compatibility.
292
-	foreach ( $periods as $key => $data ) {
293
-		if ( strpos( $key, $period ) === 0 ) {
294
-			return sprintf( $data['plural'], $interval );
295
-		}
296
-	}
291
+    // Backwards compatibility.
292
+    foreach ( $periods as $key => $data ) {
293
+        if ( strpos( $key, $period ) === 0 ) {
294
+            return sprintf( $data['plural'], $interval );
295
+        }
296
+    }
297 297
 
298
-	// Invalid string.
299
-	return '';
298
+    // Invalid string.
299
+    return '';
300 300
 }
301 301
 
302 302
 /**
@@ -307,92 +307,92 @@  discard block
 block discarded – undo
307 307
  */
308 308
 function getpaid_get_formatted_subscription_amount( $subscription ) {
309 309
 
310
-	$initial    = wpinv_price( $subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency() );
311
-	$recurring  = wpinv_price( $subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency() );
312
-	$period     = getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' );
313
-	$bill_times = $subscription->get_bill_times();
314
-	$bill_times_less = $bill_times - 1;
315
-
316
-	if ( ! empty( $bill_times ) ) {
317
-		$bill_times = $subscription->get_frequency() * $bill_times;
318
-		$bill_times_less = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times - $subscription->get_frequency() );
319
-		$bill_times = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times );
320
-	}
321
-
322
-	// Trial periods.
323
-	if ( $subscription->has_trial_period() ) {
324
-
325
-		$trial_period   = getpaid_get_subscription_trial_period_period( $subscription->get_trial_period() );
326
-		$trial_interval = getpaid_get_subscription_trial_period_interval( $subscription->get_trial_period() );
327
-
328
-		if ( empty( $bill_times ) ) {
329
-
330
-			return sprintf(
331
-				// translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period
332
-				_x( '%1$s trial for %2$s then %3$s / %4$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year)', 'invoicing' ),
333
-				$initial,
334
-				getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
335
-				$recurring,
336
-				$period
337
-			);
338
-
339
-		}
340
-
341
-		return sprintf(
342
-			// translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period, $5: is the bill times
343
-			_x( '%1$s trial for %2$s then %3$s / %4$s for %5$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year for 4 years)', 'invoicing' ),
344
-			$initial,
345
-			getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
346
-			$recurring,
347
-			$period,
348
-			$bill_times
349
-		);
350
-
351
-	}
352
-
353
-	if ( $initial != $recurring ) {
354
-
355
-		if ( empty( $bill_times ) ) {
356
-
357
-			return sprintf(
358
-				// translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period
359
-				_x( 'Initial payment of %1$s which renews at %2$s / %3$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year)', 'invoicing' ),
360
-				$initial,
361
-				$recurring,
362
-				$period
363
-			);
364
-
365
-		}
366
-
367
-		return sprintf(
368
-			// translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period, $4: is the bill times
369
-			_x( 'Initial payment of %1$s which renews at %2$s / %3$s for %4$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year for 5 years)', 'invoicing' ),
370
-			$initial,
371
-			$recurring,
372
-			$period,
373
-			$bill_times_less
374
-		);
375
-
376
-	}
377
-
378
-	if ( empty( $bill_times ) ) {
379
-
380
-		return sprintf(
381
-			// translators: $1: is the recurring amount, $2: is the recurring period
382
-			_x( '%1$s / %2$s', 'Subscription amount. (e.g.: $120 / year)', 'invoicing' ),
383
-			$initial,
384
-			$period
385
-		);
386
-
387
-	}
388
-
389
-	return sprintf(
390
-		// translators: $1: is the bill times, $2: is the recurring amount, $3: is the recurring period
391
-		_x( '%2$s / %3$s for %1$s', 'Subscription amount. (e.g.: $120 / year for 5 years)', 'invoicing' ),
392
-		$bill_times,
393
-		$initial,
394
-		$period
395
-	);
310
+    $initial    = wpinv_price( $subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency() );
311
+    $recurring  = wpinv_price( $subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency() );
312
+    $period     = getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' );
313
+    $bill_times = $subscription->get_bill_times();
314
+    $bill_times_less = $bill_times - 1;
315
+
316
+    if ( ! empty( $bill_times ) ) {
317
+        $bill_times = $subscription->get_frequency() * $bill_times;
318
+        $bill_times_less = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times - $subscription->get_frequency() );
319
+        $bill_times = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times );
320
+    }
321
+
322
+    // Trial periods.
323
+    if ( $subscription->has_trial_period() ) {
324
+
325
+        $trial_period   = getpaid_get_subscription_trial_period_period( $subscription->get_trial_period() );
326
+        $trial_interval = getpaid_get_subscription_trial_period_interval( $subscription->get_trial_period() );
327
+
328
+        if ( empty( $bill_times ) ) {
329
+
330
+            return sprintf(
331
+                // translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period
332
+                _x( '%1$s trial for %2$s then %3$s / %4$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year)', 'invoicing' ),
333
+                $initial,
334
+                getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
335
+                $recurring,
336
+                $period
337
+            );
338
+
339
+        }
340
+
341
+        return sprintf(
342
+            // translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period, $5: is the bill times
343
+            _x( '%1$s trial for %2$s then %3$s / %4$s for %5$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year for 4 years)', 'invoicing' ),
344
+            $initial,
345
+            getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
346
+            $recurring,
347
+            $period,
348
+            $bill_times
349
+        );
350
+
351
+    }
352
+
353
+    if ( $initial != $recurring ) {
354
+
355
+        if ( empty( $bill_times ) ) {
356
+
357
+            return sprintf(
358
+                // translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period
359
+                _x( 'Initial payment of %1$s which renews at %2$s / %3$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year)', 'invoicing' ),
360
+                $initial,
361
+                $recurring,
362
+                $period
363
+            );
364
+
365
+        }
366
+
367
+        return sprintf(
368
+            // translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period, $4: is the bill times
369
+            _x( 'Initial payment of %1$s which renews at %2$s / %3$s for %4$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year for 5 years)', 'invoicing' ),
370
+            $initial,
371
+            $recurring,
372
+            $period,
373
+            $bill_times_less
374
+        );
375
+
376
+    }
377
+
378
+    if ( empty( $bill_times ) ) {
379
+
380
+        return sprintf(
381
+            // translators: $1: is the recurring amount, $2: is the recurring period
382
+            _x( '%1$s / %2$s', 'Subscription amount. (e.g.: $120 / year)', 'invoicing' ),
383
+            $initial,
384
+            $period
385
+        );
386
+
387
+    }
388
+
389
+    return sprintf(
390
+        // translators: $1: is the bill times, $2: is the recurring amount, $3: is the recurring period
391
+        _x( '%2$s / %3$s for %1$s', 'Subscription amount. (e.g.: $120 / year for 5 years)', 'invoicing' ),
392
+        $bill_times,
393
+        $initial,
394
+        $period
395
+    );
396 396
 
397 397
 }
398 398
 
@@ -403,7 +403,7 @@  discard block
 block discarded – undo
403 403
  * @return WPInv_Subscription|false
404 404
  */
405 405
 function getpaid_get_invoice_subscription( $invoice ) {
406
-	return getpaid_subscriptions()->get_invoice_subscription( $invoice );
406
+    return getpaid_subscriptions()->get_invoice_subscription( $invoice );
407 407
 }
408 408
 
409 409
 /**
@@ -412,10 +412,10 @@  discard block
 block discarded – undo
412 412
  * @param WPInv_Invoice $invoice
413 413
  */
414 414
 function getpaid_activate_invoice_subscription( $invoice ) {
415
-	$subscription = getpaid_get_invoice_subscription( $invoice );
416
-	if ( is_a( $subscription, 'WPInv_Subscription' ) ) {
417
-		$subscription->activate();
418
-	}
415
+    $subscription = getpaid_get_invoice_subscription( $invoice );
416
+    if ( is_a( $subscription, 'WPInv_Subscription' ) ) {
417
+        $subscription->activate();
418
+    }
419 419
 }
420 420
 
421 421
 /**
@@ -424,7 +424,7 @@  discard block
 block discarded – undo
424 424
  * @return WPInv_Subscriptions
425 425
  */
426 426
 function getpaid_subscriptions() {
427
-	return getpaid()->get( 'subscriptions' );
427
+    return getpaid()->get( 'subscriptions' );
428 428
 }
429 429
 
430 430
 /**
@@ -443,15 +443,15 @@  discard block
 block discarded – undo
443 443
         return false;
444 444
     }
445 445
 
446
-	// Fetch the invoice subscription.
447
-	$subscription = getpaid_get_subscriptions(
448
-		array(
449
-			'invoice_in' => $invoice->is_renewal() ? $invoice->get_parent_id() : $invoice->get_id(),
450
-			'number'     => 1,
451
-		)
452
-	);
446
+    // Fetch the invoice subscription.
447
+    $subscription = getpaid_get_subscriptions(
448
+        array(
449
+            'invoice_in' => $invoice->is_renewal() ? $invoice->get_parent_id() : $invoice->get_id(),
450
+            'number'     => 1,
451
+        )
452
+    );
453 453
 
454
-	return empty( $subscription ) ? false : $subscription[0];
454
+    return empty( $subscription ) ? false : $subscription[0];
455 455
 
456 456
 }
457 457
 
@@ -468,48 +468,48 @@  discard block
 block discarded – undo
468 468
  */
469 469
 function getpaid_get_recurring_item_key( $cart_item ) {
470 470
 
471
-	$cart_key     = 'renews_';
472
-	$interval     = $cart_item->get_recurring_interval();
473
-	$period       = $cart_item->get_recurring_period( true );
474
-	$length       = $cart_item->get_recurring_limit() * $interval;
475
-	$trial_period = $cart_item->get_trial_period( true );
476
-	$trial_length = $cart_item->get_trial_interval();
477
-
478
-	// First start with the billing interval and period
479
-	switch ( $interval ) {
480
-		case 1:
481
-			if ( 'day' == $period ) {
482
-				$cart_key .= 'daily';
483
-			} else {
484
-				$cart_key .= sprintf( '%sly', $period );
485
-			}
486
-			break;
487
-		case 2:
488
-			$cart_key .= sprintf( 'every_2nd_%s', $period );
489
-			break;
490
-		case 3:
491
-			$cart_key .= sprintf( 'every_3rd_%s', $period );
492
-		    break;
493
-		default:
494
-			$cart_key .= sprintf( 'every_%dth_%s', $interval, $period );
495
-			break;
496
-	}
497
-
498
-	// Maybe add the optional maximum billing periods...
499
-	if ( $length > 0 ) {
500
-		$cart_key .= '_for_';
501
-		$cart_key .= sprintf( '%d_%s', $length, $period );
502
-		if ( $length > 1 ) {
503
-			$cart_key .= 's';
504
-		}
505
-	}
506
-
507
-	// And an optional free trial.
508
-	if ( $cart_item->has_free_trial() ) {
509
-		$cart_key .= sprintf( '_after_a_%d_%s_trial', $trial_length, $trial_period );
510
-	}
511
-
512
-	return apply_filters( 'getpaid_get_recurring_item_key', $cart_key, $cart_item );
471
+    $cart_key     = 'renews_';
472
+    $interval     = $cart_item->get_recurring_interval();
473
+    $period       = $cart_item->get_recurring_period( true );
474
+    $length       = $cart_item->get_recurring_limit() * $interval;
475
+    $trial_period = $cart_item->get_trial_period( true );
476
+    $trial_length = $cart_item->get_trial_interval();
477
+
478
+    // First start with the billing interval and period
479
+    switch ( $interval ) {
480
+        case 1:
481
+            if ( 'day' == $period ) {
482
+                $cart_key .= 'daily';
483
+            } else {
484
+                $cart_key .= sprintf( '%sly', $period );
485
+            }
486
+            break;
487
+        case 2:
488
+            $cart_key .= sprintf( 'every_2nd_%s', $period );
489
+            break;
490
+        case 3:
491
+            $cart_key .= sprintf( 'every_3rd_%s', $period );
492
+            break;
493
+        default:
494
+            $cart_key .= sprintf( 'every_%dth_%s', $interval, $period );
495
+            break;
496
+    }
497
+
498
+    // Maybe add the optional maximum billing periods...
499
+    if ( $length > 0 ) {
500
+        $cart_key .= '_for_';
501
+        $cart_key .= sprintf( '%d_%s', $length, $period );
502
+        if ( $length > 1 ) {
503
+            $cart_key .= 's';
504
+        }
505
+    }
506
+
507
+    // And an optional free trial.
508
+    if ( $cart_item->has_free_trial() ) {
509
+        $cart_key .= sprintf( '_after_a_%d_%s_trial', $trial_length, $trial_period );
510
+    }
511
+
512
+    return apply_filters( 'getpaid_get_recurring_item_key', $cart_key, $cart_item );
513 513
 }
514 514
 
515 515
 /**
@@ -520,16 +520,16 @@  discard block
 block discarded – undo
520 520
  */
521 521
 function getpaid_get_subscription_groups( $invoice ) {
522 522
 
523
-	// Generate subscription groups.
524
-	$subscription_groups = array();
525
-	foreach ( $invoice->get_items() as $item ) {
523
+    // Generate subscription groups.
524
+    $subscription_groups = array();
525
+    foreach ( $invoice->get_items() as $item ) {
526 526
 
527
-		if ( $item->is_recurring() ) {
528
-			$subscription_groups[ getpaid_get_recurring_item_key( $item ) ][] = $item;
529
-		}
527
+        if ( $item->is_recurring() ) {
528
+            $subscription_groups[ getpaid_get_recurring_item_key( $item ) ][] = $item;
529
+        }
530 530
 }
531 531
 
532
-	return $subscription_groups;
532
+    return $subscription_groups;
533 533
 }
534 534
 
535 535
 /**
@@ -543,56 +543,56 @@  discard block
 block discarded – undo
543 543
  */
544 544
 function getpaid_calculate_subscription_totals( $invoice ) {
545 545
 
546
-	// Generate subscription groups.
547
-	$subscription_groups = getpaid_get_subscription_groups( $invoice );
546
+    // Generate subscription groups.
547
+    $subscription_groups = getpaid_get_subscription_groups( $invoice );
548 548
 
549
-	// Now let's calculate the totals for each group of subscriptions
550
-	$subscription_totals = array();
549
+    // Now let's calculate the totals for each group of subscriptions
550
+    $subscription_totals = array();
551 551
 
552
-	foreach ( $subscription_groups as $subscription_key => $items ) {
552
+    foreach ( $subscription_groups as $subscription_key => $items ) {
553 553
 
554
-		if ( empty( $subscription_totals[ $subscription_key ] ) ) {
554
+        if ( empty( $subscription_totals[ $subscription_key ] ) ) {
555 555
 
556
-			$subscription_totals[ $subscription_key ] = array(
557
-				'initial_total'   => 0,
558
-				'recurring_total' => 0,
559
-				'items'           => array(),
560
-				'trialling'       => false,
561
-			);
556
+            $subscription_totals[ $subscription_key ] = array(
557
+                'initial_total'   => 0,
558
+                'recurring_total' => 0,
559
+                'items'           => array(),
560
+                'trialling'       => false,
561
+            );
562 562
 
563
-		}
563
+        }
564 564
 
565
-		/**
566
-		 * Get the totals of the group.
567
-		 * @var GetPaid_Form_Item $item
568
-		 */
569
-		foreach ( $items as $item ) {
565
+        /**
566
+         * Get the totals of the group.
567
+         * @var GetPaid_Form_Item $item
568
+         */
569
+        foreach ( $items as $item ) {
570 570
 
571
-			$subscription_totals[ $subscription_key ]['items'][ $item->get_id() ]  = $item->prepare_data_for_saving();
572
-			$subscription_totals[ $subscription_key ]['item_id']                 = $item->get_id();
573
-			$subscription_totals[ $subscription_key ]['period']                  = $item->get_recurring_period( true );
574
-			$subscription_totals[ $subscription_key ]['interval']                = $item->get_recurring_interval();
575
-			$subscription_totals[ $subscription_key ]['initial_total']          += $item->get_sub_total() + $item->item_tax - $item->item_discount;
576
-			$subscription_totals[ $subscription_key ]['recurring_total']        += $item->get_recurring_sub_total() + $item->item_tax - $item->recurring_item_discount;
577
-			$subscription_totals[ $subscription_key ]['recurring_limit']         = $item->get_recurring_limit();
571
+            $subscription_totals[ $subscription_key ]['items'][ $item->get_id() ]  = $item->prepare_data_for_saving();
572
+            $subscription_totals[ $subscription_key ]['item_id']                 = $item->get_id();
573
+            $subscription_totals[ $subscription_key ]['period']                  = $item->get_recurring_period( true );
574
+            $subscription_totals[ $subscription_key ]['interval']                = $item->get_recurring_interval();
575
+            $subscription_totals[ $subscription_key ]['initial_total']          += $item->get_sub_total() + $item->item_tax - $item->item_discount;
576
+            $subscription_totals[ $subscription_key ]['recurring_total']        += $item->get_recurring_sub_total() + $item->item_tax - $item->recurring_item_discount;
577
+            $subscription_totals[ $subscription_key ]['recurring_limit']         = $item->get_recurring_limit();
578 578
 
579
-			// Calculate the next renewal date.
580
-			$period       = $item->get_recurring_period( true );
581
-			$interval     = $item->get_recurring_interval();
579
+            // Calculate the next renewal date.
580
+            $period       = $item->get_recurring_period( true );
581
+            $interval     = $item->get_recurring_interval();
582 582
 
583
-			// If the subscription item has a trial period...
584
-			if ( $item->has_free_trial() ) {
585
-				$period   = $item->get_trial_period( true );
586
-				$interval = $item->get_trial_interval();
587
-				$subscription_totals[ $subscription_key ]['trialling'] = $interval . ' ' . $period;
588
-			}
583
+            // If the subscription item has a trial period...
584
+            if ( $item->has_free_trial() ) {
585
+                $period   = $item->get_trial_period( true );
586
+                $interval = $item->get_trial_interval();
587
+                $subscription_totals[ $subscription_key ]['trialling'] = $interval . ' ' . $period;
588
+            }
589 589
 
590
-			$subscription_totals[ $subscription_key ]['renews_on'] = date( 'Y-m-d H:i:s', strtotime( "+$interval $period", current_time( 'timestamp' ) ) );
590
+            $subscription_totals[ $subscription_key ]['renews_on'] = date( 'Y-m-d H:i:s', strtotime( "+$interval $period", current_time( 'timestamp' ) ) );
591 591
 
592
-		}
592
+        }
593 593
 }
594 594
 
595
-	return apply_filters( 'getpaid_calculate_subscription_totals', $subscription_totals, $invoice );
595
+    return apply_filters( 'getpaid_calculate_subscription_totals', $subscription_totals, $invoice );
596 596
 }
597 597
 
598 598
 /**
@@ -603,16 +603,16 @@  discard block
 block discarded – undo
603 603
  */
604 604
 function getpaid_should_group_subscriptions( $invoice ) {
605 605
 
606
-	$recurring_items = 0;
606
+    $recurring_items = 0;
607 607
 
608
-	foreach ( $invoice->get_items() as $item ) {
608
+    foreach ( $invoice->get_items() as $item ) {
609 609
 
610
-		if ( $item->is_recurring() ) {
611
-			$recurring_items ++;
612
-		}
610
+        if ( $item->is_recurring() ) {
611
+            $recurring_items ++;
612
+        }
613 613
 }
614 614
 
615
-	return apply_filters( 'getpaid_should_group_subscriptions', $recurring_items > 1, $invoice );
615
+    return apply_filters( 'getpaid_should_group_subscriptions', $recurring_items > 1, $invoice );
616 616
 }
617 617
 
618 618
 /**
@@ -623,39 +623,39 @@  discard block
 block discarded – undo
623 623
  * @return int
624 624
  */
625 625
 function getpaid_count_subscription_invoices( $parent_invoice_id, $subscription_id = false ) {
626
-	global $wpdb;
626
+    global $wpdb;
627 627
 
628
-	$parent_invoice_id = (int) $parent_invoice_id;
628
+    $parent_invoice_id = (int) $parent_invoice_id;
629 629
 
630
-	if ( false === $subscription_id || ! (bool) get_post_meta( $parent_invoice_id, '_wpinv_subscription_id', true ) ) {
630
+    if ( false === $subscription_id || ! (bool) get_post_meta( $parent_invoice_id, '_wpinv_subscription_id', true ) ) {
631 631
 
632
-		return (int) $wpdb->get_var(
633
-			$wpdb->prepare(
634
-				"SELECT COUNT(ID) FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
635
-				$parent_invoice_id,
636
-				$parent_invoice_id
637
-			)
638
-		);
632
+        return (int) $wpdb->get_var(
633
+            $wpdb->prepare(
634
+                "SELECT COUNT(ID) FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
635
+                $parent_invoice_id,
636
+                $parent_invoice_id
637
+            )
638
+        );
639 639
 
640
-	}
640
+    }
641 641
 
642
-	$invoice_ids = $wpdb->get_col(
643
-		$wpdb->prepare(
644
-			"SELECT ID FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
645
-			$parent_invoice_id,
646
-			$parent_invoice_id
647
-		)
648
-	);
642
+    $invoice_ids = $wpdb->get_col(
643
+        $wpdb->prepare(
644
+            "SELECT ID FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
645
+            $parent_invoice_id,
646
+            $parent_invoice_id
647
+        )
648
+    );
649 649
 
650
-	$count = 0;
650
+    $count = 0;
651 651
 
652
-	foreach ( wp_parse_id_list( $invoice_ids ) as $invoice_id ) {
652
+    foreach ( wp_parse_id_list( $invoice_ids ) as $invoice_id ) {
653 653
 
654
-		if ( $invoice_id == $parent_invoice_id || $subscription_id == (int) get_post_meta( $invoice_id, '_wpinv_subscription_id', true ) ) {
655
-			$count ++;
656
-			continue;
657
-		}
654
+        if ( $invoice_id == $parent_invoice_id || $subscription_id == (int) get_post_meta( $invoice_id, '_wpinv_subscription_id', true ) ) {
655
+            $count ++;
656
+            continue;
657
+        }
658 658
 }
659 659
 
660
-	return $count;
660
+    return $count;
661 661
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports.php 1 patch
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -12,49 +12,49 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports {
14 14
 
15
-	/**
16
-	 * Class constructor.
17
-	 *
18
-	 */
19
-	public function __construct() {
20
-		add_action( 'admin_menu', array( $this, 'register_reports_page' ), 20 );
21
-		add_action( 'wpinv_reports_tab_reports', array( $this, 'display_reports_tab' ) );
22
-		add_action( 'wpinv_reports_tab_export', array( $this, 'display_exports_tab' ) );
23
-		add_action( 'getpaid_authenticated_admin_action_download_graph', array( $this, 'download_graph' ) );
24
-		add_action( 'getpaid_authenticated_admin_action_export_invoices', array( $this, 'export_invoices' ) );
25
-
26
-	}
27
-
28
-	/**
29
-	 * Registers the reports page.
30
-	 *
31
-	 */
32
-	public function register_reports_page() {
33
-
34
-		add_submenu_page(
15
+    /**
16
+     * Class constructor.
17
+     *
18
+     */
19
+    public function __construct() {
20
+        add_action( 'admin_menu', array( $this, 'register_reports_page' ), 20 );
21
+        add_action( 'wpinv_reports_tab_reports', array( $this, 'display_reports_tab' ) );
22
+        add_action( 'wpinv_reports_tab_export', array( $this, 'display_exports_tab' ) );
23
+        add_action( 'getpaid_authenticated_admin_action_download_graph', array( $this, 'download_graph' ) );
24
+        add_action( 'getpaid_authenticated_admin_action_export_invoices', array( $this, 'export_invoices' ) );
25
+
26
+    }
27
+
28
+    /**
29
+     * Registers the reports page.
30
+     *
31
+     */
32
+    public function register_reports_page() {
33
+
34
+        add_submenu_page(
35 35
             'wpinv',
36 36
             __( 'Reports', 'invoicing' ),
37 37
             __( 'Reports', 'invoicing' ),
38 38
             wpinv_get_capability(),
39 39
             'wpinv-reports',
40 40
             array( $this, 'display_reports_page' )
41
-		);
41
+        );
42 42
 
43
-	}
43
+    }
44 44
 
45
-	/**
46
-	 * Displays the reports page.
47
-	 *
48
-	 */
49
-	public function display_reports_page() {
45
+    /**
46
+     * Displays the reports page.
47
+     *
48
+     */
49
+    public function display_reports_page() {
50 50
 
51
-		// Prepare variables.
52
-		$tabs        = $this->get_tabs();
53
-		$current_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'reports';
54
-		$current_tab = array_key_exists( $current_tab, $tabs ) ? $current_tab : 'reports';
51
+        // Prepare variables.
52
+        $tabs        = $this->get_tabs();
53
+        $current_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'reports';
54
+        $current_tab = array_key_exists( $current_tab, $tabs ) ? $current_tab : 'reports';
55 55
 
56
-		// Display the current tab.
57
-		?>
56
+        // Display the current tab.
57
+        ?>
58 58
 
59 59
         <div class="wrap">
60 60
 
@@ -63,19 +63,19 @@  discard block
 block discarded – undo
63 63
 			<nav class="nav-tab-wrapper">
64 64
 
65 65
 				<?php
66
-					foreach ( $tabs as $key => $label ) {
66
+                    foreach ( $tabs as $key => $label ) {
67 67
 
68
-					$key   = sanitize_key( $key );
69
-					$label = esc_html( $label );
70
-					$class = $key == $current_tab ? 'nav-tab nav-tab-active' : 'nav-tab ';
71
-					$url   = esc_url(
68
+                    $key   = sanitize_key( $key );
69
+                    $label = esc_html( $label );
70
+                    $class = $key == $current_tab ? 'nav-tab nav-tab-active' : 'nav-tab ';
71
+                    $url   = esc_url(
72 72
                         add_query_arg( 'tab', $key, admin_url( 'admin.php?page=wpinv-reports' ) )
73 73
                     );
74 74
 
75
-				echo wp_kses_post( "\n\t\t\t<a href='$url' class='" . $class . "'>$label</a>" );
75
+                echo wp_kses_post( "\n\t\t\t<a href='$url' class='" . $class . "'>$label</a>" );
76 76
 
77
-					}
78
-				?>
77
+                    }
78
+                ?>
79 79
 
80 80
 			</nav>
81 81
 
@@ -86,82 +86,82 @@  discard block
 block discarded – undo
86 86
         </div>
87 87
 		<?php
88 88
 
89
-			// Wordfence loads an unsupported version of chart js on our page.
90
-			wp_deregister_style( 'chart-js' );
91
-			wp_deregister_script( 'chart-js' );
92
-			wp_enqueue_script( 'chart-js', WPINV_PLUGIN_URL . 'assets/js/chart.min.js', array( 'jquery' ), '3.7.1', true );
89
+            // Wordfence loads an unsupported version of chart js on our page.
90
+            wp_deregister_style( 'chart-js' );
91
+            wp_deregister_script( 'chart-js' );
92
+            wp_enqueue_script( 'chart-js', WPINV_PLUGIN_URL . 'assets/js/chart.min.js', array( 'jquery' ), '3.7.1', true );
93 93
 
94
-	}
94
+    }
95 95
 
96
-	/**
97
-	 * Retrieves reports page tabs.
98
-	 *
99
-	 * @return array
100
-	 */
101
-	public function get_tabs() {
96
+    /**
97
+     * Retrieves reports page tabs.
98
+     *
99
+     * @return array
100
+     */
101
+    public function get_tabs() {
102 102
 
103
-		$tabs = array(
104
-			'reports' => __( 'Reports', 'invoicing' ),
105
-			'export'  => __( 'Export', 'invoicing' ),
106
-		);
103
+        $tabs = array(
104
+            'reports' => __( 'Reports', 'invoicing' ),
105
+            'export'  => __( 'Export', 'invoicing' ),
106
+        );
107 107
 
108
-		return apply_filters( 'getpaid_report_tabs', $tabs );
109
-	}
108
+        return apply_filters( 'getpaid_report_tabs', $tabs );
109
+    }
110 110
 
111
-	/**
112
-	 * Displays the reports tab.
113
-	 *
114
-	 */
115
-	public function display_reports_tab() {
111
+    /**
112
+     * Displays the reports tab.
113
+     *
114
+     */
115
+    public function display_reports_tab() {
116 116
 
117
-		$reports = new GetPaid_Reports_Report();
118
-		$reports->display();
117
+        $reports = new GetPaid_Reports_Report();
118
+        $reports->display();
119 119
 
120
-	}
120
+    }
121 121
 
122
-	/**
123
-	 * Displays the exports tab.
124
-	 *
125
-	 */
126
-	public function display_exports_tab() {
122
+    /**
123
+     * Displays the exports tab.
124
+     *
125
+     */
126
+    public function display_exports_tab() {
127 127
 
128
-		$exports = new GetPaid_Reports_Export();
129
-		$exports->display();
128
+        $exports = new GetPaid_Reports_Export();
129
+        $exports->display();
130 130
 
131
-	}
131
+    }
132 132
 
133
-	/**
134
-	 * Donwnloads a graph.
135
-	 *
136
-	 * @param array $args
137
-	 */
138
-	public function download_graph( $args ) {
133
+    /**
134
+     * Donwnloads a graph.
135
+     *
136
+     * @param array $args
137
+     */
138
+    public function download_graph( $args ) {
139 139
 
140
-		if ( ! empty( $args['graph'] ) ) {
141
-			$downloader = new GetPaid_Graph_Downloader();
142
-			$downloader->download( $args['graph'] );
143
-		}
140
+        if ( ! empty( $args['graph'] ) ) {
141
+            $downloader = new GetPaid_Graph_Downloader();
142
+            $downloader->download( $args['graph'] );
143
+        }
144 144
 
145
-	}
145
+    }
146 146
 
147
-	/**
148
-	 * Exports invoices.
149
-	 *
150
-	 * @param array $args
151
-	 */
152
-	public function export_invoices( $args ) {
147
+    /**
148
+     * Exports invoices.
149
+     *
150
+     * @param array $args
151
+     */
152
+    public function export_invoices( $args ) {
153 153
 
154
-		if ( ! empty( $args['post_type'] ) ) {
154
+        if ( ! empty( $args['post_type'] ) ) {
155 155
 
156
-			if ( 'subscriptions' === $args['post_type'] ) {
157
-				$downloader = new GetPaid_Subscription_Exporter();
158
-			} else {
159
-				$downloader = new GetPaid_Invoice_Exporter();
160
-			}
156
+            if ( 'subscriptions' === $args['post_type'] ) {
157
+                $downloader = new GetPaid_Subscription_Exporter();
158
+            } else {
159
+                $downloader = new GetPaid_Invoice_Exporter();
160
+            }
161 161
 
162
-			$downloader->export( $args['post_type'], $args );
163
-		}
162
+            $downloader->export( $args['post_type'], $args );
163
+        }
164 164
 
165
-	}
165
+    }
166 166
 
167 167
 }
Please login to merge, or discard this patch.