Passed
Push — master ( d2dfab...92055d )
by
unknown
10:00
created
includes/admin/meta-boxes/class-getpaid-meta-box-invoice-payment-meta.php 1 patch
Indentation   +163 added lines, -163 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,10 +17,10 @@  discard block
 block discarded – undo
17 17
 class GetPaid_Meta_Box_Invoice_Payment_Meta {
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 25
 
26 26
         // Prepare the invoice.
@@ -42,167 +42,167 @@  discard block
 block discarded – undo
42 42
 
43 43
                         if ( $invoice->is_draft() ) {
44 44
 
45
-							// Set gateway.
46
-							aui()->select(
47
-								array(
48
-									'id'               => 'wpinv_gateway',
49
-									'name'             => 'wpinv_gateway',
50
-									'label'            => __( 'Gateway:', 'invoicing' ),
51
-									'label_type'       => 'vertical',
52
-									'placeholder'      => __( 'Select Gateway', 'invoicing' ),
53
-									'value'            => wpinv_get_default_gateway(),
54
-									'select2'          => true,
55
-									'data-allow-clear' => 'false',
56
-									'options'          => wp_list_pluck( wpinv_get_enabled_payment_gateways( true ), 'admin_label' ),
57
-								),
58
-								true
59
-							);
45
+                            // Set gateway.
46
+                            aui()->select(
47
+                                array(
48
+                                    'id'               => 'wpinv_gateway',
49
+                                    'name'             => 'wpinv_gateway',
50
+                                    'label'            => __( 'Gateway:', 'invoicing' ),
51
+                                    'label_type'       => 'vertical',
52
+                                    'placeholder'      => __( 'Select Gateway', 'invoicing' ),
53
+                                    'value'            => wpinv_get_default_gateway(),
54
+                                    'select2'          => true,
55
+                                    'data-allow-clear' => 'false',
56
+                                    'options'          => wp_list_pluck( wpinv_get_enabled_payment_gateways( true ), 'admin_label' ),
57
+                                ),
58
+                                true
59
+                            );
60 60
 
61 61
                         } else {
62 62
 
63
-							// Invoice key.
64
-							aui()->input(
65
-								array(
66
-									'type'             => 'text',
67
-									'id'               => 'wpinv_key',
68
-									'name'             => 'wpinv_key',
69
-									'label'            => sprintf(
70
-										// translators: %s: Invoice type.
71
-										__( '%s Key:', 'invoicing' ),
72
-										ucfirst( $invoice->get_invoice_quote_type() )
73
-									),
74
-									'label_type'       => 'vertical',
75
-									'class'            => 'form-control-sm',
76
-									'value'            => $invoice->get_key( 'edit' ),
77
-									'extra_attributes' => array(
78
-										'onclick'  => 'this.select();',
79
-										'readonly' => 'true',
80
-									),
81
-								),
82
-								true
83
-							);
84
-
85
-							// View URL.
86
-							aui()->input(
87
-								array(
88
-									'type'             => 'text',
89
-									'id'               => 'wpinv_view_url',
90
-									'name'             => 'wpinv_view_url',
91
-									'label'            => sprintf(
92
-										// translators: %s: Invoice type.
93
-										__( '%s URL:', 'invoicing' ),
94
-										ucfirst( $invoice->get_invoice_quote_type() )
95
-									) . '&nbsp;<a href="' . esc_url_raw( $invoice->get_view_url() ) . '" title="' . __( 'View invoice', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-fw"></i></a>',
96
-									'label_type'       => 'vertical',
97
-									'class'            => 'form-control-sm',
98
-									'value'            => $invoice->get_view_url(),
99
-									'extra_attributes' => array(
100
-										'onclick'  => 'this.select();',
101
-										'readonly' => 'true',
102
-									),
103
-								),
104
-								true
105
-							);
106
-
107
-							// If the invoice is paid...
108
-							if ( $invoice->is_paid() || $invoice->is_refunded() ) {
109
-
110
-								// Gateway.
111
-								aui()->input(
112
-									array(
113
-										'type'             => 'text',
114
-										'id'               => 'wpinv_gateway',
115
-										'name'             => '',
116
-										'label'            => __( 'Gateway:', 'invoicing' ),
117
-										'label_type'       => 'vertical',
118
-										'class'            => 'form-control-sm',
119
-										'value'            => wpinv_get_gateway_admin_label( $invoice->get_gateway( 'edit' ) ),
120
-										'extra_attributes' => array(
121
-											'onclick'  => 'this.select();',
122
-											'readonly' => 'true',
123
-										),
124
-									),
125
-									true
126
-								);
127
-
128
-								// Transaction ID.
129
-								$transaction_url = $invoice->get_transaction_url();
130
-								aui()->input(
131
-									array(
132
-										'type'             => 'text',
133
-										'id'               => 'wpinv_transaction_id',
134
-										'name'             => 'wpinv_transaction_id',
135
-										'label'            => __( 'Transaction ID:', 'invoicing' ) . ( $transaction_url ? '&nbsp;<a href="' . esc_url( $transaction_url ) . '" title="' . __( 'View details', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-fw"></i></a>' : '' ),
136
-										'label_type'       => 'vertical',
137
-										'class'            => 'form-control-sm',
138
-										'value'            => $invoice->get_transaction_id( 'edit' ),
139
-										'help_text'        => apply_filters( 'wpinv_invoice_transaction_link_' . $invoice->get_gateway( 'edit' ), '', $invoice->get_transaction_id(), $invoice ),
140
-										'extra_attributes' => array(
141
-											'onclick'  => 'this.select();',
142
-											'readonly' => 'true',
143
-										),
144
-									),
145
-									true
146
-								);
147
-
148
-								// Currency.
149
-								aui()->input(
150
-									array(
151
-										'type'             => 'text',
152
-										'id'               => 'wpinv_currency',
153
-										'name'             => 'wpinv_currency',
154
-										'label'            => __( 'Currency:', 'invoicing' ),
155
-										'label_type'       => 'vertical',
156
-										'class'            => 'form-control-sm',
157
-										'value'            => $invoice->get_currency( 'edit' ),
158
-										'extra_attributes' => array(
159
-											'onclick'  => 'this.select();',
160
-											'readonly' => 'true',
161
-										),
162
-									),
163
-									true
164
-								);
165
-
166
-							} else {
167
-
168
-								if ( 'wpi_invoice' === $invoice->get_post_type() ) {
169
-
170
-									// Payment URL.
171
-									aui()->input(
172
-										array(
173
-											'type'             => 'text',
174
-											'id'               => 'wpinv_payment_url',
175
-											'name'             => 'wpinv_payment_url',
176
-											'label'            => __( 'Payment URL:', 'invoicing' ),
177
-											'label_type'       => 'vertical',
178
-											'class'            => 'form-control-sm',
179
-											'value'            => $invoice->get_checkout_payment_url(),
180
-											'extra_attributes' => array(
181
-												'onclick'  => 'this.select();',
182
-												'readonly' => 'true',
183
-											),
184
-										),
185
-										true
186
-									);
187
-
188
-									// Set gateway.
189
-									aui()->select(
190
-										array(
191
-											'id'               => 'wpinv_gateway',
192
-											'name'             => 'wpinv_gateway',
193
-											'label'            => __( 'Gateway:', 'invoicing' ),
194
-											'label_type'       => 'vertical',
195
-											'placeholder'      => __( 'Select Gateway', 'invoicing' ),
196
-											'value'            => $invoice->get_gateway( 'edit' ),
197
-											'select2'          => true,
198
-											'data-allow-clear' => 'false',
199
-											'options'          => wp_list_pluck( wpinv_get_enabled_payment_gateways( true ), 'admin_label' ),
200
-										),
201
-										true
202
-									);
203
-
204
-								}
205
-							}
63
+                            // Invoice key.
64
+                            aui()->input(
65
+                                array(
66
+                                    'type'             => 'text',
67
+                                    'id'               => 'wpinv_key',
68
+                                    'name'             => 'wpinv_key',
69
+                                    'label'            => sprintf(
70
+                                        // translators: %s: Invoice type.
71
+                                        __( '%s Key:', 'invoicing' ),
72
+                                        ucfirst( $invoice->get_invoice_quote_type() )
73
+                                    ),
74
+                                    'label_type'       => 'vertical',
75
+                                    'class'            => 'form-control-sm',
76
+                                    'value'            => $invoice->get_key( 'edit' ),
77
+                                    'extra_attributes' => array(
78
+                                        'onclick'  => 'this.select();',
79
+                                        'readonly' => 'true',
80
+                                    ),
81
+                                ),
82
+                                true
83
+                            );
84
+
85
+                            // View URL.
86
+                            aui()->input(
87
+                                array(
88
+                                    'type'             => 'text',
89
+                                    'id'               => 'wpinv_view_url',
90
+                                    'name'             => 'wpinv_view_url',
91
+                                    'label'            => sprintf(
92
+                                        // translators: %s: Invoice type.
93
+                                        __( '%s URL:', 'invoicing' ),
94
+                                        ucfirst( $invoice->get_invoice_quote_type() )
95
+                                    ) . '&nbsp;<a href="' . esc_url_raw( $invoice->get_view_url() ) . '" title="' . __( 'View invoice', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-fw"></i></a>',
96
+                                    'label_type'       => 'vertical',
97
+                                    'class'            => 'form-control-sm',
98
+                                    'value'            => $invoice->get_view_url(),
99
+                                    'extra_attributes' => array(
100
+                                        'onclick'  => 'this.select();',
101
+                                        'readonly' => 'true',
102
+                                    ),
103
+                                ),
104
+                                true
105
+                            );
106
+
107
+                            // If the invoice is paid...
108
+                            if ( $invoice->is_paid() || $invoice->is_refunded() ) {
109
+
110
+                                // Gateway.
111
+                                aui()->input(
112
+                                    array(
113
+                                        'type'             => 'text',
114
+                                        'id'               => 'wpinv_gateway',
115
+                                        'name'             => '',
116
+                                        'label'            => __( 'Gateway:', 'invoicing' ),
117
+                                        'label_type'       => 'vertical',
118
+                                        'class'            => 'form-control-sm',
119
+                                        'value'            => wpinv_get_gateway_admin_label( $invoice->get_gateway( 'edit' ) ),
120
+                                        'extra_attributes' => array(
121
+                                            'onclick'  => 'this.select();',
122
+                                            'readonly' => 'true',
123
+                                        ),
124
+                                    ),
125
+                                    true
126
+                                );
127
+
128
+                                // Transaction ID.
129
+                                $transaction_url = $invoice->get_transaction_url();
130
+                                aui()->input(
131
+                                    array(
132
+                                        'type'             => 'text',
133
+                                        'id'               => 'wpinv_transaction_id',
134
+                                        'name'             => 'wpinv_transaction_id',
135
+                                        'label'            => __( 'Transaction ID:', 'invoicing' ) . ( $transaction_url ? '&nbsp;<a href="' . esc_url( $transaction_url ) . '" title="' . __( 'View details', 'invoicing' ) . '" target="_blank"><i class="fas fa-external-link-alt fa-fw"></i></a>' : '' ),
136
+                                        'label_type'       => 'vertical',
137
+                                        'class'            => 'form-control-sm',
138
+                                        'value'            => $invoice->get_transaction_id( 'edit' ),
139
+                                        'help_text'        => apply_filters( 'wpinv_invoice_transaction_link_' . $invoice->get_gateway( 'edit' ), '', $invoice->get_transaction_id(), $invoice ),
140
+                                        'extra_attributes' => array(
141
+                                            'onclick'  => 'this.select();',
142
+                                            'readonly' => 'true',
143
+                                        ),
144
+                                    ),
145
+                                    true
146
+                                );
147
+
148
+                                // Currency.
149
+                                aui()->input(
150
+                                    array(
151
+                                        'type'             => 'text',
152
+                                        'id'               => 'wpinv_currency',
153
+                                        'name'             => 'wpinv_currency',
154
+                                        'label'            => __( 'Currency:', 'invoicing' ),
155
+                                        'label_type'       => 'vertical',
156
+                                        'class'            => 'form-control-sm',
157
+                                        'value'            => $invoice->get_currency( 'edit' ),
158
+                                        'extra_attributes' => array(
159
+                                            'onclick'  => 'this.select();',
160
+                                            'readonly' => 'true',
161
+                                        ),
162
+                                    ),
163
+                                    true
164
+                                );
165
+
166
+                            } else {
167
+
168
+                                if ( 'wpi_invoice' === $invoice->get_post_type() ) {
169
+
170
+                                    // Payment URL.
171
+                                    aui()->input(
172
+                                        array(
173
+                                            'type'             => 'text',
174
+                                            'id'               => 'wpinv_payment_url',
175
+                                            'name'             => 'wpinv_payment_url',
176
+                                            'label'            => __( 'Payment URL:', 'invoicing' ),
177
+                                            'label_type'       => 'vertical',
178
+                                            'class'            => 'form-control-sm',
179
+                                            'value'            => $invoice->get_checkout_payment_url(),
180
+                                            'extra_attributes' => array(
181
+                                                'onclick'  => 'this.select();',
182
+                                                'readonly' => 'true',
183
+                                            ),
184
+                                        ),
185
+                                        true
186
+                                    );
187
+
188
+                                    // Set gateway.
189
+                                    aui()->select(
190
+                                        array(
191
+                                            'id'               => 'wpinv_gateway',
192
+                                            'name'             => 'wpinv_gateway',
193
+                                            'label'            => __( 'Gateway:', 'invoicing' ),
194
+                                            'label_type'       => 'vertical',
195
+                                            'placeholder'      => __( 'Select Gateway', 'invoicing' ),
196
+                                            'value'            => $invoice->get_gateway( 'edit' ),
197
+                                            'select2'          => true,
198
+                                            'data-allow-clear' => 'false',
199
+                                            'options'          => wp_list_pluck( wpinv_get_enabled_payment_gateways( true ), 'admin_label' ),
200
+                                        ),
201
+                                        true
202
+                                    );
203
+
204
+                                }
205
+                            }
206 206
                         }
207 207
                     ?>
208 208
                     </div>
Please login to merge, or discard this patch.
includes/admin/class-getpaid-admin.php 1 patch
Indentation   +589 added lines, -589 removed lines patch added patch discarded remove patch
@@ -14,91 +14,91 @@  discard block
 block discarded – undo
14 14
 class GetPaid_Admin {
15 15
 
16 16
     /**
17
-	 * Local path to this plugins admin directory
18
-	 *
19
-	 * @var         string
20
-	 */
21
-	public $admin_path;
22
-
23
-	/**
24
-	 * Web path to this plugins admin directory
25
-	 *
26
-	 * @var         string
27
-	 */
28
-	public $admin_url;
29
-
30
-	/**
31
-	 * Reports components.
32
-	 *
33
-	 * @var GetPaid_Reports
34
-	 */
17
+     * Local path to this plugins admin directory
18
+     *
19
+     * @var         string
20
+     */
21
+    public $admin_path;
22
+
23
+    /**
24
+     * Web path to this plugins admin directory
25
+     *
26
+     * @var         string
27
+     */
28
+    public $admin_url;
29
+
30
+    /**
31
+     * Reports components.
32
+     *
33
+     * @var GetPaid_Reports
34
+     */
35 35
     public $reports;
36 36
 
37 37
     /**
38
-	 * Class constructor.
39
-	 */
40
-	public function __construct() {
38
+     * Class constructor.
39
+     */
40
+    public function __construct() {
41 41
 
42 42
         $this->admin_path  = plugin_dir_path( __FILE__ );
43
-		$this->admin_url   = plugins_url( '/', __FILE__ );
44
-		$this->reports     = new GetPaid_Reports();
43
+        $this->admin_url   = plugins_url( '/', __FILE__ );
44
+        $this->reports     = new GetPaid_Reports();
45 45
 
46 46
         if ( is_admin() ) {
47
-			$this->init_admin_hooks();
47
+            $this->init_admin_hooks();
48 48
         }
49 49
 
50 50
     }
51 51
 
52 52
     /**
53
-	 * Init action and filter hooks
54
-	 *
55
-	 */
56
-	private function init_admin_hooks() {
53
+     * Init action and filter hooks
54
+     *
55
+     */
56
+    private function init_admin_hooks() {
57 57
         add_action( 'admin_enqueue_scripts', array( $this, 'enqeue_scripts' ), 9 );
58 58
         add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
59 59
         add_action( 'admin_init', array( $this, 'init_ayecode_connect_helper' ) );
60 60
         add_action( 'admin_init', array( $this, 'activation_redirect' ) );
61 61
         add_action( 'admin_init', array( $this, 'maybe_do_admin_action' ) );
62
-		add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
-		add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
-		add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
-		add_action( 'getpaid_authenticated_admin_action_duplicate_invoice', array( $this, 'duplicate_invoice' ) );
66
-		add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
67
-		add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
62
+        add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
+        add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
+        add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
+        add_action( 'getpaid_authenticated_admin_action_duplicate_invoice', array( $this, 'duplicate_invoice' ) );
66
+        add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
67
+        add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
68 68
         add_action( 'getpaid_authenticated_admin_action_reset_tax_rates', array( $this, 'admin_reset_tax_rates' ) );
69
-		add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
70
-		add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
71
-		add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
72
-		add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
73
-		add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
74
-		add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
75
-		add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
76
-		add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
77
-		do_action( 'getpaid_init_admin_hooks', $this );
78
-
79
-		// Setup/welcome
80
-		if ( ! empty( $_GET['page'] ) ) {
81
-			switch ( sanitize_text_field( $_GET['page'] ) ) {
82
-				case 'gp-setup':
83
-					include_once dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php';
84
-					break;
85
-			}
86
-		}
87
-
88
-    }
89
-
90
-    /**
91
-	 * Register admin scripts
92
-	 *
93
-	 */
94
-	public function enqeue_scripts() {
69
+        add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
70
+        add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
71
+        add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
72
+        add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
73
+        add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
74
+        add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
75
+        add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
76
+        add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
77
+        do_action( 'getpaid_init_admin_hooks', $this );
78
+
79
+        // Setup/welcome
80
+        if ( ! empty( $_GET['page'] ) ) {
81
+            switch ( sanitize_text_field( $_GET['page'] ) ) {
82
+                case 'gp-setup':
83
+                    include_once dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php';
84
+                    break;
85
+            }
86
+        }
87
+
88
+    }
89
+
90
+    /**
91
+     * Register admin scripts
92
+     *
93
+     */
94
+    public function enqeue_scripts() {
95 95
         global $current_screen, $pagenow;
96 96
 
97
-		$page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
98
-		$editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
97
+        $page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
98
+        $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
99 99
 
100 100
         if ( ! empty( $current_screen->post_type ) ) {
101
-			$page = $current_screen->post_type;
101
+            $page = $current_screen->post_type;
102 102
         }
103 103
 
104 104
         // General styles.
@@ -119,53 +119,53 @@  discard block
 block discarded – undo
119 119
         }
120 120
 
121 121
         // Payment form scripts.
122
-		if ( 'wpi_payment_form' == $page && $editing ) {
122
+        if ( 'wpi_payment_form' == $page && $editing ) {
123 123
             $this->load_payment_form_scripts();
124 124
         }
125 125
 
126
-		if ( $page == 'wpinv-subscriptions' ) {
127
-			wp_enqueue_script( 'postbox' );
128
-		}
126
+        if ( $page == 'wpinv-subscriptions' ) {
127
+            wp_enqueue_script( 'postbox' );
128
+        }
129 129
 
130 130
     }
131 131
 
132 132
     /**
133
-	 * Returns admin js translations.
134
-	 *
135
-	 */
136
-	protected function get_admin_i18() {
133
+     * Returns admin js translations.
134
+     *
135
+     */
136
+    protected function get_admin_i18() {
137 137
         global $post;
138 138
 
139
-		$date_range = array(
140
-			'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days',
141
-		);
139
+        $date_range = array(
140
+            'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days',
141
+        );
142 142
 
143
-		if ( $date_range['period'] == 'custom' ) {
143
+        if ( $date_range['period'] == 'custom' ) {
144 144
 
145
-			if ( isset( $_GET['from'] ) ) {
146
-				$date_range['after'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
147
-			}
145
+            if ( isset( $_GET['from'] ) ) {
146
+                $date_range['after'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
147
+            }
148 148
 
149
-			if ( isset( $_GET['to'] ) ) {
150
-				$date_range['before'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
151
-			}
149
+            if ( isset( $_GET['to'] ) ) {
150
+                $date_range['before'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
151
+            }
152 152
 }
153 153
 
154 154
         $i18n = array(
155 155
             'ajax_url'                  => admin_url( 'admin-ajax.php' ),
156 156
             'post_ID'                   => isset( $post->ID ) ? $post->ID : '',
157
-			'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
158
-			'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
159
-			'rest_root'                 => esc_url_raw( rest_url() ),
160
-			'date_range'                => $date_range,
157
+            'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
158
+            'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
159
+            'rest_root'                 => esc_url_raw( rest_url() ),
160
+            'date_range'                => $date_range,
161 161
             'add_invoice_note_nonce'    => wp_create_nonce( 'add-invoice-note' ),
162 162
             'delete_invoice_note_nonce' => wp_create_nonce( 'delete-invoice-note' ),
163 163
             'invoice_item_nonce'        => wp_create_nonce( 'invoice-item' ),
164 164
             'billing_details_nonce'     => wp_create_nonce( 'get-billing-details' ),
165 165
             'tax'                       => wpinv_tax_amount(),
166 166
             'discount'                  => 0,
167
-			'currency_symbol'           => wpinv_currency_symbol(),
168
-			'currency'                  => wpinv_get_currency(),
167
+            'currency_symbol'           => wpinv_currency_symbol(),
168
+            'currency'                  => wpinv_get_currency(),
169 169
             'currency_pos'              => wpinv_currency_position(),
170 170
             'thousand_sep'              => wpinv_thousands_separator(),
171 171
             'decimal_sep'               => wpinv_decimal_separator(),
@@ -185,118 +185,118 @@  discard block
 block discarded – undo
185 185
             'item_description'          => __( 'Item Description', 'invoicing' ),
186 186
             'invoice_description'       => __( 'Invoice Description', 'invoicing' ),
187 187
             'discount_description'      => __( 'Discount Description', 'invoicing' ),
188
-			'searching'                 => __( 'Searching', 'invoicing' ),
189
-			'loading'                   => __( 'Loading...', 'invoicing' ),
190
-			'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
191
-			'search_items'              => __( 'Enter item name', 'invoicing' ),
192
-			'graphs'                    => array_merge( array( 'refunded_fees', 'refunded_items', 'refunded_subtotal', 'refunded_tax' ), array_keys( wpinv_get_report_graphs() ) ),
188
+            'searching'                 => __( 'Searching', 'invoicing' ),
189
+            'loading'                   => __( 'Loading...', 'invoicing' ),
190
+            'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
191
+            'search_items'              => __( 'Enter item name', 'invoicing' ),
192
+            'graphs'                    => array_merge( array( 'refunded_fees', 'refunded_items', 'refunded_subtotal', 'refunded_tax' ), array_keys( wpinv_get_report_graphs() ) ),
193 193
         );
194 194
 
195
-		if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
195
+        if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
196 196
 
197
-			$invoice              = new WPInv_Invoice( $post );
198
-			$i18n['save_invoice'] = sprintf(
199
-				__( 'Save %s', 'invoicing' ),
200
-				ucfirst( $invoice->get_invoice_quote_type() )
201
-			);
197
+            $invoice              = new WPInv_Invoice( $post );
198
+            $i18n['save_invoice'] = sprintf(
199
+                __( 'Save %s', 'invoicing' ),
200
+                ucfirst( $invoice->get_invoice_quote_type() )
201
+            );
202 202
 
203
-			$i18n['invoice_description'] = sprintf(
204
-				__( '%s Description', 'invoicing' ),
205
-				ucfirst( $invoice->get_invoice_quote_type() )
206
-			);
203
+            $i18n['invoice_description'] = sprintf(
204
+                __( '%s Description', 'invoicing' ),
205
+                ucfirst( $invoice->get_invoice_quote_type() )
206
+            );
207 207
 
208
-		}
209
-		return $i18n;
210
-	}
208
+        }
209
+        return $i18n;
210
+    }
211 211
 
212
-	/**
213
-	 * Change the admin footer text on GetPaid admin pages.
214
-	 *
215
-	 * @since  2.0.0
216
-	 * @param  string $footer_text
217
-	 * @return string
218
-	 */
219
-	public function admin_footer_text( $footer_text ) {
220
-		global $current_screen;
212
+    /**
213
+     * Change the admin footer text on GetPaid admin pages.
214
+     *
215
+     * @since  2.0.0
216
+     * @param  string $footer_text
217
+     * @return string
218
+     */
219
+    public function admin_footer_text( $footer_text ) {
220
+        global $current_screen;
221 221
 
222
-		$page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
222
+        $page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
223 223
 
224 224
         if ( ! empty( $current_screen->post_type ) ) {
225
-			$page = $current_screen->post_type;
225
+            $page = $current_screen->post_type;
226 226
         }
227 227
 
228 228
         // General styles.
229 229
         if ( apply_filters( 'getpaid_display_admin_footer_text', wpinv_current_user_can_manage_invoicing() ) && false !== stripos( $page, 'wpi' ) ) {
230 230
 
231
-			// Change the footer text
232
-			if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
231
+            // Change the footer text
232
+            if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
233 233
 
234
-				$rating_url  = esc_url(
235
-					wp_nonce_url(
236
-						admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
237
-						'getpaid-nonce',
238
-						'getpaid-nonce'
234
+                $rating_url  = esc_url(
235
+                    wp_nonce_url(
236
+                        admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
237
+                        'getpaid-nonce',
238
+                        'getpaid-nonce'
239 239
                     )
240
-				);
240
+                );
241 241
 
242
-				$footer_text = sprintf(
243
-					/* translators: %s: five stars */
244
-					__( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
245
-					"<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
246
-				);
242
+                $footer_text = sprintf(
243
+                    /* translators: %s: five stars */
244
+                    __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
245
+                    "<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
246
+                );
247 247
 
248
-			} else {
248
+            } else {
249 249
 
250
-				$footer_text = sprintf(
251
-					/* translators: %s: GetPaid */
252
-					__( 'Thank you for using %s!', 'invoicing' ),
253
-					"<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
254
-				);
250
+                $footer_text = sprintf(
251
+                    /* translators: %s: GetPaid */
252
+                    __( 'Thank you for using %s!', 'invoicing' ),
253
+                    "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
254
+                );
255 255
 
256
-			}
256
+            }
257 257
 }
258 258
 
259
-		return $footer_text;
260
-	}
261
-
262
-	/**
263
-	 * Redirects to wp.org to rate the plugin.
264
-	 *
265
-	 * @since  2.0.0
266
-	 */
267
-	public function redirect_to_wordpress_rating_page() {
268
-		update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
269
-		wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
270
-		exit;
271
-	}
272
-
273
-    /**
274
-	 * Loads payment form js.
275
-	 *
276
-	 */
277
-	protected function load_payment_form_scripts() {
259
+        return $footer_text;
260
+    }
261
+
262
+    /**
263
+     * Redirects to wp.org to rate the plugin.
264
+     *
265
+     * @since  2.0.0
266
+     */
267
+    public function redirect_to_wordpress_rating_page() {
268
+        update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
269
+        wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
270
+        exit;
271
+    }
272
+
273
+    /**
274
+     * Loads payment form js.
275
+     *
276
+     */
277
+    protected function load_payment_form_scripts() {
278 278
         global $post;
279 279
 
280 280
         wp_enqueue_script( 'vue', WPINV_PLUGIN_URL . 'assets/js/vue/vue.min.js', array(), WPINV_VERSION );
281
-		wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
282
-		wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
281
+        wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
282
+        wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
283 283
 
284
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
285
-		wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), $version );
284
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
285
+        wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), $version );
286 286
 
287
-		wp_localize_script(
287
+        wp_localize_script(
288 288
             'wpinv-admin-payment-form-script',
289 289
             'wpinvPaymentFormAdmin',
290 290
             array(
291
-				'elements'      => wpinv_get_data( 'payment-form-elements' ),
292
-				'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
293
-				'currency'      => wpinv_currency_symbol(),
294
-				'position'      => wpinv_currency_position(),
295
-				'decimals'      => (int) wpinv_decimals(),
296
-				'thousands_sep' => wpinv_thousands_separator(),
297
-				'decimals_sep'  => wpinv_decimal_separator(),
298
-				'form_items'    => gepaid_get_form_items( $post->ID ),
299
-				'is_default'    => $post->ID == wpinv_get_default_payment_form(),
291
+                'elements'      => wpinv_get_data( 'payment-form-elements' ),
292
+                'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
293
+                'currency'      => wpinv_currency_symbol(),
294
+                'position'      => wpinv_currency_position(),
295
+                'decimals'      => (int) wpinv_decimals(),
296
+                'thousands_sep' => wpinv_thousands_separator(),
297
+                'decimals_sep'  => wpinv_decimal_separator(),
298
+                'form_items'    => gepaid_get_form_items( $post->ID ),
299
+                'is_default'    => $post->ID == wpinv_get_default_payment_form(),
300 300
             )
301 301
         );
302 302
 
@@ -305,19 +305,19 @@  discard block
 block discarded – undo
305 305
     }
306 306
 
307 307
     /**
308
-	 * Add our classes to admin pages.
308
+     * Add our classes to admin pages.
309 309
      *
310 310
      * @param string $classes
311 311
      * @return string
312
-	 *
313
-	 */
312
+     *
313
+     */
314 314
     public function admin_body_class( $classes ) {
315
-		global $pagenow, $post, $current_screen;
315
+        global $pagenow, $post, $current_screen;
316 316
 
317 317
         $page = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
318 318
 
319 319
         if ( ! empty( $current_screen->post_type ) ) {
320
-			$page = $current_screen->post_type;
320
+            $page = $current_screen->post_type;
321 321
         }
322 322
 
323 323
         if ( false !== stripos( $page, 'wpi' ) ) {
@@ -326,70 +326,70 @@  discard block
 block discarded – undo
326 326
 
327 327
         if ( in_array( $page, wpinv_parse_list( 'wpi_invoice wpi_payment_form wpi_quote' ) ) ) {
328 328
             $classes .= ' wpinv-cpt wpinv';
329
-		}
329
+        }
330 330
 
331
-		if ( getpaid_is_invoice_post_type( $page ) ) {
331
+        if ( getpaid_is_invoice_post_type( $page ) ) {
332 332
             $classes .= ' getpaid-is-invoice-cpt';
333 333
         }
334 334
 
335
-		return $classes;
335
+        return $classes;
336 336
     }
337 337
 
338 338
     /**
339
-	 * Maybe show the AyeCode Connect Notice.
340
-	 */
341
-	public function init_ayecode_connect_helper() {
339
+     * Maybe show the AyeCode Connect Notice.
340
+     */
341
+    public function init_ayecode_connect_helper() {
342 342
 
343
-		// Register with the deactivation survey class.
344
-		AyeCode_Deactivation_Survey::instance(
343
+        // Register with the deactivation survey class.
344
+        AyeCode_Deactivation_Survey::instance(
345 345
             array(
346
-				'slug'              => 'invoicing',
347
-				'version'           => WPINV_VERSION,
348
-				'support_url'       => 'https://wpgetpaid.com/support/',
349
-				'documentation_url' => 'https://docs.wpgetpaid.com/',
350
-				'activated'         => (int) get_option( 'gepaid_installed_on' ),
346
+                'slug'              => 'invoicing',
347
+                'version'           => WPINV_VERSION,
348
+                'support_url'       => 'https://wpgetpaid.com/support/',
349
+                'documentation_url' => 'https://docs.wpgetpaid.com/',
350
+                'activated'         => (int) get_option( 'gepaid_installed_on' ),
351 351
             )
352 352
         );
353 353
 
354 354
         new AyeCode_Connect_Helper(
355 355
             array(
356
-				'connect_title'     => __( 'WP Invoicing - an AyeCode product!', 'invoicing' ),
357
-				'connect_external'  => __( 'Please confirm you wish to connect your site?', 'invoicing' ),
358
-				'connect'           => sprintf( __( '<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %1$slearn more%2$s', 'invoicing' ), "<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>", '</a>' ),
359
-				'connect_button'    => __( 'Connect Site', 'invoicing' ),
360
-				'connecting_button' => __( 'Connecting...', 'invoicing' ),
361
-				'error_localhost'   => __( 'This service will only work with a live domain, not a localhost.', 'invoicing' ),
362
-				'error'             => __( 'Something went wrong, please refresh and try again.', 'invoicing' ),
356
+                'connect_title'     => __( 'WP Invoicing - an AyeCode product!', 'invoicing' ),
357
+                'connect_external'  => __( 'Please confirm you wish to connect your site?', 'invoicing' ),
358
+                'connect'           => sprintf( __( '<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %1$slearn more%2$s', 'invoicing' ), "<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>", '</a>' ),
359
+                'connect_button'    => __( 'Connect Site', 'invoicing' ),
360
+                'connecting_button' => __( 'Connecting...', 'invoicing' ),
361
+                'error_localhost'   => __( 'This service will only work with a live domain, not a localhost.', 'invoicing' ),
362
+                'error'             => __( 'Something went wrong, please refresh and try again.', 'invoicing' ),
363 363
             ),
364 364
             array( 'wpi-addons' )
365 365
         );
366 366
 
367 367
     }
368 368
 
369
-	/**
370
-	 * Redirect users to settings on activation.
371
-	 *
372
-	 * @return void
373
-	 */
374
-	public function activation_redirect() {
369
+    /**
370
+     * Redirect users to settings on activation.
371
+     *
372
+     * @return void
373
+     */
374
+    public function activation_redirect() {
375 375
 
376
-		$redirected = get_option( 'wpinv_redirected_to_settings' );
376
+        $redirected = get_option( 'wpinv_redirected_to_settings' );
377 377
 
378
-		if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
379
-			return;
380
-		}
378
+        if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
379
+            return;
380
+        }
381 381
 
382
-		// Bail if activating from network, or bulk
383
-		if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
384
-			return;
385
-		}
382
+        // Bail if activating from network, or bulk
383
+        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
384
+            return;
385
+        }
386 386
 
387
-	    update_option( 'wpinv_redirected_to_settings', 1 );
387
+        update_option( 'wpinv_redirected_to_settings', 1 );
388 388
 
389 389
         wp_safe_redirect( admin_url( 'index.php?page=gp-setup' ) );
390 390
         exit;
391 391
 
392
-	}
392
+    }
393 393
 
394 394
     /**
395 395
      * Fires an admin action after verifying that a user can fire them.
@@ -403,525 +403,525 @@  discard block
 block discarded – undo
403 403
 
404 404
     }
405 405
 
406
-	/**
406
+    /**
407 407
      * Duplicate invoice.
408
-	 *
409
-	 * @param array $args
408
+     *
409
+     * @param array $args
410 410
      */
411 411
     public function duplicate_invoice( $args ) {
412 412
 
413
-		if ( empty( $args['invoice_id'] ) ) {
414
-			return;
415
-		}
413
+        if ( empty( $args['invoice_id'] ) ) {
414
+            return;
415
+        }
416 416
 
417
-		$invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
417
+        $invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
418 418
 
419
-		if ( ! $invoice->exists() ) {
420
-			return;
421
-		}
419
+        if ( ! $invoice->exists() ) {
420
+            return;
421
+        }
422 422
 
423
-		$new_invoice = getpaid_duplicate_invoice( $invoice );
424
-		$new_invoice->save();
423
+        $new_invoice = getpaid_duplicate_invoice( $invoice );
424
+        $new_invoice->save();
425 425
 
426
-		if ( $new_invoice->exists() ) {
426
+        if ( $new_invoice->exists() ) {
427 427
 
428
-			getpaid_admin()->show_success( __( 'Invoice duplicated successfully.', 'newsletter-optin-box' ) );
428
+            getpaid_admin()->show_success( __( 'Invoice duplicated successfully.', 'newsletter-optin-box' ) );
429 429
 
430
-			wp_safe_redirect(
431
-				add_query_arg(
432
-					array(
433
-						'action' => 'edit',
434
-						'post'   => $new_invoice->get_id(),
435
-					),
436
-					admin_url( 'post.php' )
437
-				)
438
-			);
439
-			exit;
430
+            wp_safe_redirect(
431
+                add_query_arg(
432
+                    array(
433
+                        'action' => 'edit',
434
+                        'post'   => $new_invoice->get_id(),
435
+                    ),
436
+                    admin_url( 'post.php' )
437
+                )
438
+            );
439
+            exit;
440 440
 
441
-		}
441
+        }
442 442
 
443
-		getpaid_admin()->show_error( __( 'There was an error duplicating this invoice. Please try again.', 'newsletter-optin-box' ) );
443
+        getpaid_admin()->show_error( __( 'There was an error duplicating this invoice. Please try again.', 'newsletter-optin-box' ) );
444 444
 
445
-	}
445
+    }
446 446
 
447
-	/**
447
+    /**
448 448
      * Sends a payment reminder to a customer.
449
-	 *
450
-	 * @param array $args
449
+     *
450
+     * @param array $args
451 451
      */
452 452
     public function duplicate_payment_form( $args ) {
453 453
 
454
-		if ( empty( $args['form_id'] ) ) {
455
-			return;
456
-		}
457
-
458
-		$form = new GetPaid_Payment_Form( (int) $args['form_id'] );
454
+        if ( empty( $args['form_id'] ) ) {
455
+            return;
456
+        }
459 457
 
460
-		if ( ! $form->exists() ) {
461
-			return;
462
-		}
458
+        $form = new GetPaid_Payment_Form( (int) $args['form_id'] );
463 459
 
464
-		$new_form = new GetPaid_Payment_Form();
465
-		$new_form->set_author( $form->get_author( 'edit' ) );
466
-		$new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
467
-		$new_form->set_elements( $form->get_elements( 'edit' ) );
468
-		$new_form->set_items( $form->get_items( 'edit' ) );
469
-		$new_form->save();
460
+        if ( ! $form->exists() ) {
461
+            return;
462
+        }
470 463
 
471
-		if ( $new_form->exists() ) {
472
-			$this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
473
-			$url = get_edit_post_link( $new_form->get_id(), 'edit' );
474
-		} else {
475
-			$this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
476
-			$url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
477
-		}
464
+        $new_form = new GetPaid_Payment_Form();
465
+        $new_form->set_author( $form->get_author( 'edit' ) );
466
+        $new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
467
+        $new_form->set_elements( $form->get_elements( 'edit' ) );
468
+        $new_form->set_items( $form->get_items( 'edit' ) );
469
+        $new_form->save();
470
+
471
+        if ( $new_form->exists() ) {
472
+            $this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
473
+            $url = get_edit_post_link( $new_form->get_id(), 'edit' );
474
+        } else {
475
+            $this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
476
+            $url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
477
+        }
478 478
 
479
-		wp_redirect( $url );
480
-		exit;
481
-	}
479
+        wp_redirect( $url );
480
+        exit;
481
+    }
482 482
 
483
-	/**
483
+    /**
484 484
      * Sends a payment reminder to a customer.
485
-	 *
486
-	 * @param array $args
485
+     *
486
+     * @param array $args
487 487
      */
488 488
     public function send_customer_invoice( $args ) {
489
-		getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
490
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
491
-		exit;
492
-	}
489
+        getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
490
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
491
+        exit;
492
+    }
493 493
 
494
-	/**
494
+    /**
495 495
      * Sends a payment reminder to a customer.
496
-	 *
497
-	 * @param array $args
496
+     *
497
+     * @param array $args
498 498
      */
499 499
     public function send_customer_payment_reminder( $args ) {
500
-		$sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
500
+        $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
501 501
 
502
-		if ( $sent ) {
503
-			$this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
504
-		} else {
505
-			$this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
506
-		}
502
+        if ( $sent ) {
503
+            $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
504
+        } else {
505
+            $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
506
+        }
507 507
 
508
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
509
-		exit;
510
-	}
508
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
509
+        exit;
510
+    }
511 511
 
512
-	/**
512
+    /**
513 513
      * Resets tax rates.
514
-	 *
514
+     *
515 515
      */
516 516
     public function admin_reset_tax_rates() {
517 517
 
518
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
519
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
520
-		exit;
518
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
519
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
520
+        exit;
521 521
 
522
-	}
522
+    }
523 523
 
524
-	/**
524
+    /**
525 525
      * Resets admin pages.
526
-	 *
526
+     *
527 527
      */
528 528
     public function admin_create_missing_pages() {
529
-		$installer = new GetPaid_Installer();
530
-		$installer->create_pages();
531
-		$this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
532
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
533
-		exit;
534
-	}
535
-
536
-	/**
529
+        $installer = new GetPaid_Installer();
530
+        $installer->create_pages();
531
+        $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
532
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
533
+        exit;
534
+    }
535
+
536
+    /**
537 537
      * Creates an missing admin tables.
538
-	 *
538
+     *
539 539
      */
540 540
     public function admin_create_missing_tables() {
541
-		global $wpdb;
542
-		$installer = new GetPaid_Installer();
541
+        global $wpdb;
542
+        $installer = new GetPaid_Installer();
543 543
 
544
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
545
-			$installer->create_subscriptions_table();
544
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
545
+            $installer->create_subscriptions_table();
546 546
 
547
-			if ( $wpdb->last_error !== '' ) {
548
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
549
-			}
550
-		}
547
+            if ( $wpdb->last_error !== '' ) {
548
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
549
+            }
550
+        }
551 551
 
552
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
553
-			$installer->create_invoices_table();
552
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
553
+            $installer->create_invoices_table();
554 554
 
555
-			if ( '' !== $wpdb->last_error ) {
556
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
557
-			}
558
-		}
555
+            if ( '' !== $wpdb->last_error ) {
556
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
557
+            }
558
+        }
559 559
 
560
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
561
-			$installer->create_invoice_items_table();
560
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
561
+            $installer->create_invoice_items_table();
562 562
 
563
-			if ( '' !== $wpdb->last_error ) {
564
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
565
-			}
566
-		}
563
+            if ( '' !== $wpdb->last_error ) {
564
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
565
+            }
566
+        }
567 567
 
568
-		if ( ! $this->has_notices() ) {
569
-			$this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
570
-		}
568
+        if ( ! $this->has_notices() ) {
569
+            $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
570
+        }
571 571
 
572
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
573
-		exit;
574
-	}
572
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
573
+        exit;
574
+    }
575 575
 
576
-	/**
576
+    /**
577 577
      * Migrates old invoices to the new database tables.
578
-	 *
578
+     *
579 579
      */
580 580
     public function admin_migrate_old_invoices() {
581 581
 
582
-		// Migrate the invoices.
583
-		$installer = new GetPaid_Installer();
584
-		$installer->migrate_old_invoices();
582
+        // Migrate the invoices.
583
+        $installer = new GetPaid_Installer();
584
+        $installer->migrate_old_invoices();
585 585
 
586
-		// Show an admin message.
587
-		$this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
586
+        // Show an admin message.
587
+        $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
588 588
 
589
-		// Redirect the admin.
590
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
591
-		exit;
589
+        // Redirect the admin.
590
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
591
+        exit;
592 592
 
593
-	}
593
+    }
594 594
 
595
-	/**
595
+    /**
596 596
      * Download customers.
597
-	 *
597
+     *
598 598
      */
599 599
     public function admin_download_customers() {
600
-		global $wpdb;
601
-
602
-		$output = fopen( 'php://output', 'w' );
603
-
604
-		if ( false === $output ) {
605
-			wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
606
-		}
600
+        global $wpdb;
607 601
 
608
-		header( 'Content-Type:text/csv' );
609
-		header( 'Content-Disposition:attachment;filename=customers.csv' );
602
+        $output = fopen( 'php://output', 'w' );
610 603
 
611
-		$post_types = '';
604
+        if ( false === $output ) {
605
+            wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
606
+        }
612 607
 
613
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
614
-			$post_types .= $wpdb->prepare( 'post_type=%s OR ', $post_type );
615
-		}
608
+        header( 'Content-Type:text/csv' );
609
+        header( 'Content-Disposition:attachment;filename=customers.csv' );
616 610
 
617
-		$post_types = rtrim( $post_types, ' OR' );
611
+        $post_types = '';
618 612
 
619
-		$customers = $wpdb->get_col( "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types" );
613
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
614
+            $post_types .= $wpdb->prepare( 'post_type=%s OR ', $post_type );
615
+        }
620 616
 
621
-		$columns = array(
622
-			'name'       => __( 'Name', 'invoicing' ),
623
-			'email'      => __( 'Email', 'invoicing' ),
624
-			'country'    => __( 'Country', 'invoicing' ),
625
-			'state'      => __( 'State', 'invoicing' ),
626
-			'city'       => __( 'City', 'invoicing' ),
627
-			'zip'        => __( 'ZIP', 'invoicing' ),
628
-			'address'    => __( 'Address', 'invoicing' ),
629
-			'phone'      => __( 'Phone', 'invoicing' ),
630
-			'company'    => __( 'Company', 'invoicing' ),
631
-			'company_id' => __( 'Company ID', 'invoicing' ),
632
-			'invoices'   => __( 'Invoices', 'invoicing' ),
633
-			'total_raw'  => __( 'Total Spend', 'invoicing' ),
634
-			'signup'     => __( 'Date created', 'invoicing' ),
635
-		);
617
+        $post_types = rtrim( $post_types, ' OR' );
618
+
619
+        $customers = $wpdb->get_col( "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types" );
620
+
621
+        $columns = array(
622
+            'name'       => __( 'Name', 'invoicing' ),
623
+            'email'      => __( 'Email', 'invoicing' ),
624
+            'country'    => __( 'Country', 'invoicing' ),
625
+            'state'      => __( 'State', 'invoicing' ),
626
+            'city'       => __( 'City', 'invoicing' ),
627
+            'zip'        => __( 'ZIP', 'invoicing' ),
628
+            'address'    => __( 'Address', 'invoicing' ),
629
+            'phone'      => __( 'Phone', 'invoicing' ),
630
+            'company'    => __( 'Company', 'invoicing' ),
631
+            'company_id' => __( 'Company ID', 'invoicing' ),
632
+            'invoices'   => __( 'Invoices', 'invoicing' ),
633
+            'total_raw'  => __( 'Total Spend', 'invoicing' ),
634
+            'signup'     => __( 'Date created', 'invoicing' ),
635
+        );
636 636
 
637
-		// Output the csv column headers.
638
-		fputcsv( $output, array_values( $columns ) );
637
+        // Output the csv column headers.
638
+        fputcsv( $output, array_values( $columns ) );
639 639
 
640
-		// Loop through
641
-		$table = new WPInv_Customers_Table();
642
-		foreach ( $customers as $customer_id ) {
640
+        // Loop through
641
+        $table = new WPInv_Customers_Table();
642
+        foreach ( $customers as $customer_id ) {
643 643
 
644
-			$user = get_user_by( 'id', $customer_id );
645
-			$row  = array();
646
-			if ( empty( $user ) ) {
647
-				continue;
648
-			}
644
+            $user = get_user_by( 'id', $customer_id );
645
+            $row  = array();
646
+            if ( empty( $user ) ) {
647
+                continue;
648
+            }
649 649
 
650
-			foreach ( array_keys( $columns ) as $column ) {
650
+            foreach ( array_keys( $columns ) as $column ) {
651 651
 
652
-				$method = 'column_' . $column;
652
+                $method = 'column_' . $column;
653 653
 
654
-				if ( 'name' == $column ) {
655
-					$value = esc_html( $user->display_name );
656
-				} elseif ( 'email' == $column ) {
657
-					$value = sanitize_email( $user->user_email );
658
-				} elseif ( is_callable( array( $table, $method ) ) ) {
659
-					$value = wp_strip_all_tags( $table->$method( $user ) );
660
-				}
654
+                if ( 'name' == $column ) {
655
+                    $value = esc_html( $user->display_name );
656
+                } elseif ( 'email' == $column ) {
657
+                    $value = sanitize_email( $user->user_email );
658
+                } elseif ( is_callable( array( $table, $method ) ) ) {
659
+                    $value = wp_strip_all_tags( $table->$method( $user ) );
660
+                }
661 661
 
662
-				if ( empty( $value ) ) {
663
-					$value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) );
664
-				}
662
+                if ( empty( $value ) ) {
663
+                    $value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) );
664
+                }
665 665
 
666
-				$row[] = $value;
666
+                $row[] = $value;
667 667
 
668
-			}
668
+            }
669 669
 
670
-			fputcsv( $output, $row );
671
-		}
670
+            fputcsv( $output, $row );
671
+        }
672 672
 
673
-		fclose( $output );
674
-		exit;
673
+        fclose( $output );
674
+        exit;
675 675
 
676
-	}
676
+    }
677 677
 
678
-	/**
678
+    /**
679 679
      * Installs a plugin.
680
-	 *
681
-	 * @param array $data
680
+     *
681
+     * @param array $data
682 682
      */
683 683
     public function admin_install_plugin( $data ) {
684 684
 
685
-		if ( ! empty( $data['plugins'] ) ) {
686
-			include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
687
-			wp_cache_flush();
685
+        if ( ! empty( $data['plugins'] ) ) {
686
+            include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
687
+            wp_cache_flush();
688 688
 
689
-			foreach ( $data['plugins'] as $slug => $file ) {
690
-				$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
691
-				$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
692
-				$installed  = $upgrader->install( $plugin_zip );
689
+            foreach ( $data['plugins'] as $slug => $file ) {
690
+                $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
691
+                $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
692
+                $installed  = $upgrader->install( $plugin_zip );
693 693
 
694
-				if ( ! is_wp_error( $installed ) && $installed ) {
695
-					activate_plugin( $file, '', false, true );
696
-				} else {
697
-					wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
698
-				}
694
+                if ( ! is_wp_error( $installed ) && $installed ) {
695
+                    activate_plugin( $file, '', false, true );
696
+                } else {
697
+                    wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
698
+                }
699 699
 }
700 700
 }
701 701
 
702
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
703
-		wp_safe_redirect( $redirect );
704
-		exit;
702
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
703
+        wp_safe_redirect( $redirect );
704
+        exit;
705 705
 
706
-	}
706
+    }
707 707
 
708
-	/**
708
+    /**
709 709
      * Connects a gateway.
710
-	 *
711
-	 * @param array $data
710
+     *
711
+     * @param array $data
712 712
      */
713 713
     public function admin_connect_gateway( $data ) {
714 714
 
715
-		if ( ! empty( $data['plugin'] ) ) {
715
+        if ( ! empty( $data['plugin'] ) ) {
716 716
 
717
-			$gateway     = sanitize_key( $data['plugin'] );
718
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
717
+            $gateway     = sanitize_key( $data['plugin'] );
718
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
719 719
 
720
-			if ( ! empty( $connect_url ) ) {
721
-				wp_redirect( $connect_url );
722
-				exit;
723
-			}
720
+            if ( ! empty( $connect_url ) ) {
721
+                wp_redirect( $connect_url );
722
+                exit;
723
+            }
724 724
 
725
-			if ( 'stripe' == $data['plugin'] ) {
726
-				require_once ABSPATH . 'wp-admin/includes/plugin.php';
727
-				include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
728
-				wp_cache_flush();
725
+            if ( 'stripe' == $data['plugin'] ) {
726
+                require_once ABSPATH . 'wp-admin/includes/plugin.php';
727
+                include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
728
+                wp_cache_flush();
729 729
 
730
-				if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
731
-					$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
732
-					$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
733
-					$upgrader->install( $plugin_zip );
734
-				}
730
+                if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
731
+                    $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
732
+                    $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
733
+                    $upgrader->install( $plugin_zip );
734
+                }
735 735
 
736
-				activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
737
-			}
736
+                activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
737
+            }
738 738
 
739
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
740
-			if ( ! empty( $connect_url ) ) {
741
-				wp_redirect( $connect_url );
742
-				exit;
743
-			}
739
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
740
+            if ( ! empty( $connect_url ) ) {
741
+                wp_redirect( $connect_url );
742
+                exit;
743
+            }
744 744
 }
745 745
 
746
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
747
-		wp_safe_redirect( $redirect );
748
-		exit;
746
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
747
+        wp_safe_redirect( $redirect );
748
+        exit;
749 749
 
750
-	}
750
+    }
751 751
 
752
-	/**
752
+    /**
753 753
      * Recalculates discounts.
754
-	 *
754
+     *
755 755
      */
756 756
     public function admin_recalculate_discounts() {
757
-		global $wpdb;
757
+        global $wpdb;
758 758
 
759
-		// Fetch all invoices that have discount codes.
760
-		$table    = $wpdb->prefix . 'getpaid_invoices';
761
-		$invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
759
+        // Fetch all invoices that have discount codes.
760
+        $table    = $wpdb->prefix . 'getpaid_invoices';
761
+        $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
762 762
 
763
-		foreach ( $invoices as $invoice ) {
763
+        foreach ( $invoices as $invoice ) {
764 764
 
765
-			$invoice = new WPInv_Invoice( $invoice );
765
+            $invoice = new WPInv_Invoice( $invoice );
766 766
 
767
-			if ( ! $invoice->exists() ) {
768
-				continue;
769
-			}
767
+            if ( ! $invoice->exists() ) {
768
+                continue;
769
+            }
770 770
 
771
-			// Abort if the discount does not exist or does not apply here.
772
-			$discount = new WPInv_Discount( $invoice->get_discount_code() );
773
-			if ( ! $discount->exists() ) {
774
-				continue;
775
-			}
771
+            // Abort if the discount does not exist or does not apply here.
772
+            $discount = new WPInv_Discount( $invoice->get_discount_code() );
773
+            if ( ! $discount->exists() ) {
774
+                continue;
775
+            }
776 776
 
777
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
778
-			$invoice->recalculate_total();
777
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
778
+            $invoice->recalculate_total();
779 779
 
780
-			if ( $invoice->get_total_discount() > 0 ) {
781
-				$invoice->save();
782
-			}
780
+            if ( $invoice->get_total_discount() > 0 ) {
781
+                $invoice->save();
782
+            }
783 783
 }
784 784
 
785
-		// Show an admin message.
786
-		$this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
785
+        // Show an admin message.
786
+        $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
787 787
 
788
-		// Redirect the admin.
789
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
790
-		exit;
788
+        // Redirect the admin.
789
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
790
+        exit;
791 791
 
792
-	}
792
+    }
793 793
 
794 794
     /**
795
-	 * Returns an array of admin notices.
796
-	 *
797
-	 * @since       1.0.19
795
+     * Returns an array of admin notices.
796
+     *
797
+     * @since       1.0.19
798 798
      * @return array
799
-	 */
800
-	public function get_notices() {
801
-		$notices = get_option( 'wpinv_admin_notices' );
799
+     */
800
+    public function get_notices() {
801
+        $notices = get_option( 'wpinv_admin_notices' );
802 802
         return is_array( $notices ) ? $notices : array();
803
-	}
803
+    }
804 804
 
805
-	/**
806
-	 * Checks if we have any admin notices.
807
-	 *
808
-	 * @since       2.0.4
805
+    /**
806
+     * Checks if we have any admin notices.
807
+     *
808
+     * @since       2.0.4
809 809
      * @return array
810
-	 */
811
-	public function has_notices() {
812
-		return count( $this->get_notices() ) > 0;
813
-	}
814
-
815
-	/**
816
-	 * Clears all admin notices
817
-	 *
818
-	 * @access      public
819
-	 * @since       1.0.19
820
-	 */
821
-	public function clear_notices() {
822
-		delete_option( 'wpinv_admin_notices' );
823
-	}
824
-
825
-	/**
826
-	 * Saves a new admin notice
827
-	 *
828
-	 * @access      public
829
-	 * @since       1.0.19
830
-	 */
831
-	public function save_notice( $type, $message ) {
832
-		$notices = $this->get_notices();
833
-
834
-		if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ] ) ) {
835
-			$notices[ $type ] = array();
836
-		}
837
-
838
-		$notices[ $type ][] = $message;
839
-
840
-		update_option( 'wpinv_admin_notices', $notices );
841
-	}
842
-
843
-	/**
844
-	 * Displays a success notice
845
-	 *
846
-	 * @param       string $msg The message to qeue.
847
-	 * @access      public
848
-	 * @since       1.0.19
849
-	 */
850
-	public function show_success( $msg ) {
851
-		$this->save_notice( 'success', $msg );
852
-	}
853
-
854
-	/**
855
-	 * Displays a error notice
856
-	 *
857
-	 * @access      public
858
-	 * @param       string $msg The message to qeue.
859
-	 * @since       1.0.19
860
-	 */
861
-	public function show_error( $msg ) {
862
-		$this->save_notice( 'error', $msg );
863
-	}
864
-
865
-	/**
866
-	 * Displays a warning notice
867
-	 *
868
-	 * @access      public
869
-	 * @param       string $msg The message to qeue.
870
-	 * @since       1.0.19
871
-	 */
872
-	public function show_warning( $msg ) {
873
-		$this->save_notice( 'warning', $msg );
874
-	}
875
-
876
-	/**
877
-	 * Displays a info notice
878
-	 *
879
-	 * @access      public
880
-	 * @param       string $msg The message to qeue.
881
-	 * @since       1.0.19
882
-	 */
883
-	public function show_info( $msg ) {
884
-		$this->save_notice( 'info', $msg );
885
-	}
886
-
887
-	/**
888
-	 * Show notices
889
-	 *
890
-	 * @access      public
891
-	 * @since       1.0.19
892
-	 */
893
-	public function show_notices() {
810
+     */
811
+    public function has_notices() {
812
+        return count( $this->get_notices() ) > 0;
813
+    }
814
+
815
+    /**
816
+     * Clears all admin notices
817
+     *
818
+     * @access      public
819
+     * @since       1.0.19
820
+     */
821
+    public function clear_notices() {
822
+        delete_option( 'wpinv_admin_notices' );
823
+    }
824
+
825
+    /**
826
+     * Saves a new admin notice
827
+     *
828
+     * @access      public
829
+     * @since       1.0.19
830
+     */
831
+    public function save_notice( $type, $message ) {
832
+        $notices = $this->get_notices();
833
+
834
+        if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ] ) ) {
835
+            $notices[ $type ] = array();
836
+        }
837
+
838
+        $notices[ $type ][] = $message;
839
+
840
+        update_option( 'wpinv_admin_notices', $notices );
841
+    }
842
+
843
+    /**
844
+     * Displays a success notice
845
+     *
846
+     * @param       string $msg The message to qeue.
847
+     * @access      public
848
+     * @since       1.0.19
849
+     */
850
+    public function show_success( $msg ) {
851
+        $this->save_notice( 'success', $msg );
852
+    }
853
+
854
+    /**
855
+     * Displays a error notice
856
+     *
857
+     * @access      public
858
+     * @param       string $msg The message to qeue.
859
+     * @since       1.0.19
860
+     */
861
+    public function show_error( $msg ) {
862
+        $this->save_notice( 'error', $msg );
863
+    }
864
+
865
+    /**
866
+     * Displays a warning notice
867
+     *
868
+     * @access      public
869
+     * @param       string $msg The message to qeue.
870
+     * @since       1.0.19
871
+     */
872
+    public function show_warning( $msg ) {
873
+        $this->save_notice( 'warning', $msg );
874
+    }
875
+
876
+    /**
877
+     * Displays a info notice
878
+     *
879
+     * @access      public
880
+     * @param       string $msg The message to qeue.
881
+     * @since       1.0.19
882
+     */
883
+    public function show_info( $msg ) {
884
+        $this->save_notice( 'info', $msg );
885
+    }
886
+
887
+    /**
888
+     * Show notices
889
+     *
890
+     * @access      public
891
+     * @since       1.0.19
892
+     */
893
+    public function show_notices() {
894 894
 
895 895
         $notices = $this->get_notices();
896 896
         $this->clear_notices();
897 897
 
898
-		foreach ( $notices as $type => $messages ) {
898
+        foreach ( $notices as $type => $messages ) {
899 899
 
900
-			if ( ! is_array( $messages ) ) {
901
-				continue;
902
-			}
900
+            if ( ! is_array( $messages ) ) {
901
+                continue;
902
+            }
903 903
 
904 904
             $type  = esc_attr( $type );
905
-			foreach ( $messages as $message ) {
906
-				echo wp_kses_post( "<div class='notice notice-$type is-dismissible'><p>$message</p></div>" );
905
+            foreach ( $messages as $message ) {
906
+                echo wp_kses_post( "<div class='notice notice-$type is-dismissible'><p>$message</p></div>" );
907 907
             }
908 908
 }
909 909
 
910
-		foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
911
-
912
-			if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
913
-				$url     = wp_nonce_url(
914
-					add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
915
-					'getpaid-nonce',
916
-					'getpaid-nonce'
917
-				);
918
-				$message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
919
-				$message2 = __( 'Generate Pages', 'invoicing' );
920
-				echo wp_kses_post( "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>" );
921
-				break;
922
-			}
910
+        foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
911
+
912
+            if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
913
+                $url     = wp_nonce_url(
914
+                    add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
915
+                    'getpaid-nonce',
916
+                    'getpaid-nonce'
917
+                );
918
+                $message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
919
+                $message2 = __( 'Generate Pages', 'invoicing' );
920
+                echo wp_kses_post( "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>" );
921
+                break;
922
+            }
923 923
 }
924 924
 
925
-	}
925
+    }
926 926
 
927 927
 }
Please login to merge, or discard this patch.
invoicing.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.6.11' );
26
+    define( 'WPINV_VERSION', '2.6.11' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,40 +7,40 @@
 block discarded – undo
7 7
  * Bail if we are not in WP.
8 8
  */
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit;
10
+    exit;
11 11
 }
12 12
 
13 13
 /**
14 14
  * Set the version only if its the current newest while loading.
15 15
  */
16 16
 add_action('after_setup_theme', function () {
17
-	global $ayecode_ui_version,$ayecode_ui_file_key;
18
-	$this_version = "0.1.71";
19
-	if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
-		$ayecode_ui_version = $this_version ;
21
-		$ayecode_ui_file_key = wp_hash( __FILE__ );
22
-	}
17
+    global $ayecode_ui_version,$ayecode_ui_file_key;
18
+    $this_version = "0.1.71";
19
+    if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
+        $ayecode_ui_version = $this_version ;
21
+        $ayecode_ui_file_key = wp_hash( __FILE__ );
22
+    }
23 23
 },0);
24 24
 
25 25
 /**
26 26
  * Load this version of WP Bootstrap Settings only if the file hash is the current one.
27 27
  */
28 28
 add_action('after_setup_theme', function () {
29
-	global $ayecode_ui_file_key;
30
-	if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
-		include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
-		include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
-	}
29
+    global $ayecode_ui_file_key;
30
+    if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
+        include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
+        include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
+    }
34 34
 },1);
35 35
 
36 36
 /**
37 37
  * Add the function that calls the class.
38 38
  */
39 39
 if(!function_exists('aui')){
40
-	function aui(){
41
-		if(!class_exists("AUI",false)){
42
-			return false;
43
-		}
44
-		return AUI::instance();
45
-	}
40
+    function aui(){
41
+        if(!class_exists("AUI",false)){
42
+            return false;
43
+        }
44
+        return AUI::instance();
45
+    }
46 46
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/ayecode-ui-settings.php 1 patch
Indentation   +1220 added lines, -1220 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * Bail if we are not in WP.
14 14
  */
15 15
 if ( ! defined( 'ABSPATH' ) ) {
16
-	exit;
16
+    exit;
17 17
 }
18 18
 
19 19
 /**
@@ -21,273 +21,273 @@  discard block
 block discarded – undo
21 21
  */
22 22
 if ( ! class_exists( 'AyeCode_UI_Settings' ) ) {
23 23
 
24
-	/**
25
-	 * A Class to be able to change settings for Font Awesome.
26
-	 *
27
-	 * Class AyeCode_UI_Settings
28
-	 * @ver 1.0.0
29
-	 * @todo decide how to implement textdomain
30
-	 */
31
-	class AyeCode_UI_Settings {
32
-
33
-		/**
34
-		 * Class version version.
35
-		 *
36
-		 * @var string
37
-		 */
38
-		public $version = '0.1.71';
39
-
40
-		/**
41
-		 * Class textdomain.
42
-		 *
43
-		 * @var string
44
-		 */
45
-		public $textdomain = 'aui';
46
-
47
-		/**
48
-		 * Latest version of Bootstrap at time of publish published.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public $latest = "4.5.3";
53
-
54
-		/**
55
-		 * Current version of select2 being used.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public $select2_version = "4.0.11";
60
-
61
-		/**
62
-		 * The title.
63
-		 *
64
-		 * @var string
65
-		 */
66
-		public $name = 'AyeCode UI';
67
-
68
-		/**
69
-		 * The relative url to the assets.
70
-		 *
71
-		 * @var string
72
-		 */
73
-		public $url = '';
74
-
75
-		/**
76
-		 * Holds the settings values.
77
-		 *
78
-		 * @var array
79
-		 */
80
-		private $settings;
81
-
82
-		/**
83
-		 * AyeCode_UI_Settings instance.
84
-		 *
85
-		 * @access private
86
-		 * @since  1.0.0
87
-		 * @var    AyeCode_UI_Settings There can be only one!
88
-		 */
89
-		private static $instance = null;
90
-
91
-		/**
92
-		 * Main AyeCode_UI_Settings Instance.
93
-		 *
94
-		 * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
95
-		 *
96
-		 * @since 1.0.0
97
-		 * @static
98
-		 * @return AyeCode_UI_Settings - Main instance.
99
-		 */
100
-		public static function instance() {
101
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
102
-
103
-				self::$instance = new AyeCode_UI_Settings;
104
-
105
-				add_action( 'init', array( self::$instance, 'init' ) ); // set settings
106
-
107
-				if ( is_admin() ) {
108
-					add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
109
-					add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
110
-
111
-					// Maybe show example page
112
-					add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
113
-				}
24
+    /**
25
+     * A Class to be able to change settings for Font Awesome.
26
+     *
27
+     * Class AyeCode_UI_Settings
28
+     * @ver 1.0.0
29
+     * @todo decide how to implement textdomain
30
+     */
31
+    class AyeCode_UI_Settings {
32
+
33
+        /**
34
+         * Class version version.
35
+         *
36
+         * @var string
37
+         */
38
+        public $version = '0.1.71';
39
+
40
+        /**
41
+         * Class textdomain.
42
+         *
43
+         * @var string
44
+         */
45
+        public $textdomain = 'aui';
46
+
47
+        /**
48
+         * Latest version of Bootstrap at time of publish published.
49
+         *
50
+         * @var string
51
+         */
52
+        public $latest = "4.5.3";
53
+
54
+        /**
55
+         * Current version of select2 being used.
56
+         *
57
+         * @var string
58
+         */
59
+        public $select2_version = "4.0.11";
60
+
61
+        /**
62
+         * The title.
63
+         *
64
+         * @var string
65
+         */
66
+        public $name = 'AyeCode UI';
67
+
68
+        /**
69
+         * The relative url to the assets.
70
+         *
71
+         * @var string
72
+         */
73
+        public $url = '';
74
+
75
+        /**
76
+         * Holds the settings values.
77
+         *
78
+         * @var array
79
+         */
80
+        private $settings;
81
+
82
+        /**
83
+         * AyeCode_UI_Settings instance.
84
+         *
85
+         * @access private
86
+         * @since  1.0.0
87
+         * @var    AyeCode_UI_Settings There can be only one!
88
+         */
89
+        private static $instance = null;
90
+
91
+        /**
92
+         * Main AyeCode_UI_Settings Instance.
93
+         *
94
+         * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
95
+         *
96
+         * @since 1.0.0
97
+         * @static
98
+         * @return AyeCode_UI_Settings - Main instance.
99
+         */
100
+        public static function instance() {
101
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
102
+
103
+                self::$instance = new AyeCode_UI_Settings;
104
+
105
+                add_action( 'init', array( self::$instance, 'init' ) ); // set settings
106
+
107
+                if ( is_admin() ) {
108
+                    add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
109
+                    add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
110
+
111
+                    // Maybe show example page
112
+                    add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
113
+                }
114 114
 
115
-				add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
115
+                add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
116 116
 
117
-				do_action( 'ayecode_ui_settings_loaded' );
118
-			}
117
+                do_action( 'ayecode_ui_settings_loaded' );
118
+            }
119 119
 
120
-			return self::$instance;
121
-		}
120
+            return self::$instance;
121
+        }
122 122
 
123
-		/**
124
-		 * Setup some constants.
125
-		 */
126
-		public function constants(){
127
-			define('AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be");
128
-			define('AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d');
129
-			if (!defined('AUI_PRIMARY_COLOR')) define('AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL);
130
-			if (!defined('AUI_SECONDARY_COLOR')) define('AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL);
131
-		}
123
+        /**
124
+         * Setup some constants.
125
+         */
126
+        public function constants(){
127
+            define('AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be");
128
+            define('AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d');
129
+            if (!defined('AUI_PRIMARY_COLOR')) define('AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL);
130
+            if (!defined('AUI_SECONDARY_COLOR')) define('AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL);
131
+        }
132 132
 
133
-		/**
134
-		 * Initiate the settings and add the required action hooks.
135
-		 */
136
-		public function init() {
137
-
138
-			// Maybe fix settings
139
-			if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
140
-				$db_settings = get_option( 'ayecode-ui-settings' );
141
-				if ( ! empty( $db_settings ) ) {
142
-					$db_settings['css_backend'] = 'compatibility';
143
-					$db_settings['js_backend'] = 'core-popper';
144
-					update_option( 'ayecode-ui-settings', $db_settings );
145
-					wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
146
-				}
147
-			}
133
+        /**
134
+         * Initiate the settings and add the required action hooks.
135
+         */
136
+        public function init() {
137
+
138
+            // Maybe fix settings
139
+            if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
140
+                $db_settings = get_option( 'ayecode-ui-settings' );
141
+                if ( ! empty( $db_settings ) ) {
142
+                    $db_settings['css_backend'] = 'compatibility';
143
+                    $db_settings['js_backend'] = 'core-popper';
144
+                    update_option( 'ayecode-ui-settings', $db_settings );
145
+                    wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
146
+                }
147
+            }
148 148
 
149
-			$this->constants();
150
-			$this->settings = $this->get_settings();
151
-			$this->url = $this->get_url();
149
+            $this->constants();
150
+            $this->settings = $this->get_settings();
151
+            $this->url = $this->get_url();
152
+
153
+            /**
154
+             * Maybe load CSS
155
+             *
156
+             * We load super early in case there is a theme version that might change the colors
157
+             */
158
+            if ( $this->settings['css'] ) {
159
+                $priority = $this->is_bs3_compat() ? 100 : 1;
160
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
161
+            }
162
+            if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
163
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
164
+            }
152 165
 
153
-			/**
154
-			 * Maybe load CSS
155
-			 *
156
-			 * We load super early in case there is a theme version that might change the colors
157
-			 */
158
-			if ( $this->settings['css'] ) {
159
-				$priority = $this->is_bs3_compat() ? 100 : 1;
160
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
161
-			}
162
-			if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
163
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
164
-			}
165
-
166
-			// maybe load JS
167
-			if ( $this->settings['js'] ) {
168
-				$priority = $this->is_bs3_compat() ? 100 : 1;
169
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
170
-			}
171
-			if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
172
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
173
-			}
174
-
175
-			// Maybe set the HTML font size
176
-			if ( $this->settings['html_font_size'] ) {
177
-				add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
178
-			}
179
-
180
-			// Maybe show backend style error
181
-			if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
182
-				add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
183
-			}
166
+            // maybe load JS
167
+            if ( $this->settings['js'] ) {
168
+                $priority = $this->is_bs3_compat() ? 100 : 1;
169
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
170
+            }
171
+            if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
172
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
173
+            }
184 174
 
185
-		}
175
+            // Maybe set the HTML font size
176
+            if ( $this->settings['html_font_size'] ) {
177
+                add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
178
+            }
186 179
 
187
-		/**
188
-		 * Show admin notice if backend scripts not loaded.
189
-		 */
190
-		public function show_admin_style_notice(){
191
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
192
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
193
-			$message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
194
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'.$message.'</p></div>';
195
-		}
180
+            // Maybe show backend style error
181
+            if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
182
+                add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
183
+            }
196 184
 
197
-		/**
198
-		 * Check if we should load the admin scripts or not.
199
-		 *
200
-		 * @return bool
201
-		 */
202
-		public function load_admin_scripts(){
203
-			$result = true;
204
-
205
-			// check if specifically disabled
206
-			if(!empty($this->settings['disable_admin'])){
207
-				$url_parts = explode("\n",$this->settings['disable_admin']);
208
-				foreach($url_parts as $part){
209
-					if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
210
-						return false; // return early, no point checking further
211
-					}
212
-				}
213
-			}
185
+        }
214 186
 
215
-			return $result;
216
-		}
187
+        /**
188
+         * Show admin notice if backend scripts not loaded.
189
+         */
190
+        public function show_admin_style_notice(){
191
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
192
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
193
+            $message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
194
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'.$message.'</p></div>';
195
+        }
217 196
 
218
-		/**
219
-		 * Add a html font size to the footer.
220
-		 */
221
-		public function html_font_size(){
222
-			$this->settings = $this->get_settings();
223
-			echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
224
-		}
197
+        /**
198
+         * Check if we should load the admin scripts or not.
199
+         *
200
+         * @return bool
201
+         */
202
+        public function load_admin_scripts(){
203
+            $result = true;
204
+
205
+            // check if specifically disabled
206
+            if(!empty($this->settings['disable_admin'])){
207
+                $url_parts = explode("\n",$this->settings['disable_admin']);
208
+                foreach($url_parts as $part){
209
+                    if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
210
+                        return false; // return early, no point checking further
211
+                    }
212
+                }
213
+            }
214
+
215
+            return $result;
216
+        }
217
+
218
+        /**
219
+         * Add a html font size to the footer.
220
+         */
221
+        public function html_font_size(){
222
+            $this->settings = $this->get_settings();
223
+            echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
224
+        }
225 225
 
226
-		/**
227
-		 * Check if the current admin screen should load scripts.
228
-		 * 
229
-		 * @return bool
230
-		 */
231
-		public function is_aui_screen(){
226
+        /**
227
+         * Check if the current admin screen should load scripts.
228
+         * 
229
+         * @return bool
230
+         */
231
+        public function is_aui_screen(){
232 232
 //			echo '###';exit;
233
-			$load = false;
234
-			// check if we should load or not
235
-			if ( is_admin() ) {
236
-				// Only enable on set pages
237
-				$aui_screens = array(
238
-					'page',
239
-					'post',
240
-					'settings_page_ayecode-ui-settings',
241
-					'appearance_page_gutenberg-widgets',
242
-					'widgets',
243
-					'ayecode-ui-settings',
244
-					'site-editor'
245
-				);
246
-				$screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
247
-
248
-				$screen = get_current_screen();
233
+            $load = false;
234
+            // check if we should load or not
235
+            if ( is_admin() ) {
236
+                // Only enable on set pages
237
+                $aui_screens = array(
238
+                    'page',
239
+                    'post',
240
+                    'settings_page_ayecode-ui-settings',
241
+                    'appearance_page_gutenberg-widgets',
242
+                    'widgets',
243
+                    'ayecode-ui-settings',
244
+                    'site-editor'
245
+                );
246
+                $screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
247
+
248
+                $screen = get_current_screen();
249 249
 
250 250
 //				echo '###'.$screen->id;
251 251
 
252
-				// check if we are on a AUI screen
253
-				if ( $screen && in_array( $screen->id, $screen_ids ) ) {
254
-					$load = true;
255
-				}
252
+                // check if we are on a AUI screen
253
+                if ( $screen && in_array( $screen->id, $screen_ids ) ) {
254
+                    $load = true;
255
+                }
256 256
 
257
-				//load for widget previews in WP 5.8
258
-				if( !empty($_REQUEST['legacy-widget-preview'])){
259
-					$load = true;
260
-				}
261
-			}
257
+                //load for widget previews in WP 5.8
258
+                if( !empty($_REQUEST['legacy-widget-preview'])){
259
+                    $load = true;
260
+                }
261
+            }
262 262
 
263
-			return apply_filters( 'aui_load_on_admin' , $load );
264
-		}
263
+            return apply_filters( 'aui_load_on_admin' , $load );
264
+        }
265 265
 
266
-		/**
267
-		 * Adds the styles.
268
-		 */
269
-		public function enqueue_style() {
266
+        /**
267
+         * Adds the styles.
268
+         */
269
+        public function enqueue_style() {
270 270
 
271 271
 
272
-			if( is_admin() && !$this->is_aui_screen()){
273
-				// don't add wp-admin scripts if not requested to
274
-			}else{
275
-				$css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
272
+            if( is_admin() && !$this->is_aui_screen()){
273
+                // don't add wp-admin scripts if not requested to
274
+            }else{
275
+                $css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
276 276
 
277
-				$rtl = is_rtl() ? '-rtl' : '';
277
+                $rtl = is_rtl() ? '-rtl' : '';
278 278
 
279
-				if($this->settings[$css_setting]){
280
-					$compatibility = $this->settings[$css_setting]=='core' ? false : true;
281
-					$url = $this->settings[$css_setting]=='core' ? $this->url.'assets/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets/css/ayecode-ui-compatibility'.$rtl.'.css';
282
-					wp_register_style( 'ayecode-ui', $url, array(), $this->version );
283
-					wp_enqueue_style( 'ayecode-ui' );
279
+                if($this->settings[$css_setting]){
280
+                    $compatibility = $this->settings[$css_setting]=='core' ? false : true;
281
+                    $url = $this->settings[$css_setting]=='core' ? $this->url.'assets/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets/css/ayecode-ui-compatibility'.$rtl.'.css';
282
+                    wp_register_style( 'ayecode-ui', $url, array(), $this->version );
283
+                    wp_enqueue_style( 'ayecode-ui' );
284 284
 
285
-					// flatpickr
286
-					wp_register_style( 'flatpickr', $this->url.'assets/css/flatpickr.min.css', array(), $this->version );
285
+                    // flatpickr
286
+                    wp_register_style( 'flatpickr', $this->url.'assets/css/flatpickr.min.css', array(), $this->version );
287 287
 
288
-					// fix some wp-admin issues
289
-					if(is_admin()){
290
-						$custom_css = "
288
+                    // fix some wp-admin issues
289
+                    if(is_admin()){
290
+                        $custom_css = "
291 291
                 body{
292 292
                     background-color: #f1f1f1;
293 293
                     font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
@@ -333,35 +333,35 @@  discard block
 block discarded – undo
333 333
 				}
334 334
                 ";
335 335
 
336
-						// @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
337
-						$custom_css .= "
336
+                        // @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
337
+                        $custom_css .= "
338 338
 						.edit-post-sidebar input[type=color].components-text-control__input{
339 339
 						    padding: 0;
340 340
 						}
341 341
 					";
342
-						wp_add_inline_style( 'ayecode-ui', $custom_css );
343
-					}
342
+                        wp_add_inline_style( 'ayecode-ui', $custom_css );
343
+                    }
344 344
 
345
-					// custom changes
346
-					wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
345
+                    // custom changes
346
+                    wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
347 347
 
348
-				}
349
-			}
348
+                }
349
+            }
350 350
 
351 351
 
352
-		}
352
+        }
353 353
 
354
-		/**
355
-		 * Get inline script used if bootstrap enqueued
356
-		 *
357
-		 * If this remains small then its best to use this than to add another JS file.
358
-		 */
359
-		public function inline_script() {
360
-			// Flatpickr calendar locale
361
-			$flatpickr_locale = self::flatpickr_locale();
362
-
363
-			ob_start();
364
-			?>
354
+        /**
355
+         * Get inline script used if bootstrap enqueued
356
+         *
357
+         * If this remains small then its best to use this than to add another JS file.
358
+         */
359
+        public function inline_script() {
360
+            // Flatpickr calendar locale
361
+            $flatpickr_locale = self::flatpickr_locale();
362
+
363
+            ob_start();
364
+            ?>
365 365
 			<script>
366 366
 				/**
367 367
 				 * An AUI bootstrap adaptation of GreedyNav.js ( by Luke Jackson ).
@@ -1199,29 +1199,29 @@  discard block
 block discarded – undo
1199 1199
 				}
1200 1200
 			</script>
1201 1201
 			<?php
1202
-			$output = ob_get_clean();
1202
+            $output = ob_get_clean();
1203 1203
 
1204 1204
 
1205 1205
 
1206
-			/*
1206
+            /*
1207 1207
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1208 1208
 			 */
1209
-			return str_replace( array(
1210
-				'<script>',
1211
-				'</script>'
1212
-			), '', self::minify_js($output) );
1213
-		}
1209
+            return str_replace( array(
1210
+                '<script>',
1211
+                '</script>'
1212
+            ), '', self::minify_js($output) );
1213
+        }
1214 1214
 
1215 1215
 
1216
-		/**
1217
-		 * JS to help with conflict issues with other plugins and themes using bootstrap v3.
1218
-		 *
1219
-		 * @TODO we may need this when other conflicts arrise.
1220
-		 * @return mixed
1221
-		 */
1222
-		public static function bs3_compat_js() {
1223
-			ob_start();
1224
-			?>
1216
+        /**
1217
+         * JS to help with conflict issues with other plugins and themes using bootstrap v3.
1218
+         *
1219
+         * @TODO we may need this when other conflicts arrise.
1220
+         * @return mixed
1221
+         */
1222
+        public static function bs3_compat_js() {
1223
+            ob_start();
1224
+            ?>
1225 1225
 			<script>
1226 1226
 				<?php if( defined( 'FUSION_BUILDER_VERSION' ) ){ ?>
1227 1227
 				/* With Avada builder */
@@ -1229,20 +1229,20 @@  discard block
 block discarded – undo
1229 1229
 				<?php } ?>
1230 1230
 			</script>
1231 1231
 			<?php
1232
-			return str_replace( array(
1233
-				'<script>',
1234
-				'</script>'
1235
-			), '', ob_get_clean());
1236
-		}
1232
+            return str_replace( array(
1233
+                '<script>',
1234
+                '</script>'
1235
+            ), '', ob_get_clean());
1236
+        }
1237 1237
 
1238
-		/**
1239
-		 * Get inline script used if bootstrap file browser enqueued.
1240
-		 *
1241
-		 * If this remains small then its best to use this than to add another JS file.
1242
-		 */
1243
-		public function inline_script_file_browser(){
1244
-			ob_start();
1245
-			?>
1238
+        /**
1239
+         * Get inline script used if bootstrap file browser enqueued.
1240
+         *
1241
+         * If this remains small then its best to use this than to add another JS file.
1242
+         */
1243
+        public function inline_script_file_browser(){
1244
+            ob_start();
1245
+            ?>
1246 1246
 			<script>
1247 1247
 				// run on doc ready
1248 1248
 				jQuery(document).ready(function () {
@@ -1250,203 +1250,203 @@  discard block
 block discarded – undo
1250 1250
 				});
1251 1251
 			</script>
1252 1252
 			<?php
1253
-			$output = ob_get_clean();
1253
+            $output = ob_get_clean();
1254 1254
 
1255
-			/*
1255
+            /*
1256 1256
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1257 1257
 			 */
1258
-			return str_replace( array(
1259
-				'<script>',
1260
-				'</script>'
1261
-			), '', $output );
1262
-		}
1258
+            return str_replace( array(
1259
+                '<script>',
1260
+                '</script>'
1261
+            ), '', $output );
1262
+        }
1263 1263
 
1264
-		/**
1265
-		 * Adds the Font Awesome JS.
1266
-		 */
1267
-		public function enqueue_scripts() {
1264
+        /**
1265
+         * Adds the Font Awesome JS.
1266
+         */
1267
+        public function enqueue_scripts() {
1268 1268
 
1269
-			if( is_admin() && !$this->is_aui_screen()){
1270
-				// don't add wp-admin scripts if not requested to
1271
-			}else {
1269
+            if( is_admin() && !$this->is_aui_screen()){
1270
+                // don't add wp-admin scripts if not requested to
1271
+            }else {
1272 1272
 
1273
-				$js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
1273
+                $js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
1274 1274
 
1275
-				// select2
1276
-				wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
1275
+                // select2
1276
+                wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
1277 1277
 
1278
-				// flatpickr
1279
-				wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
1278
+                // flatpickr
1279
+                wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
1280 1280
 
1281
-				// flatpickr
1282
-				wp_register_script( 'iconpicker', $this->url . 'assets/js/fontawesome-iconpicker.min.js', array(), $this->version );
1281
+                // flatpickr
1282
+                wp_register_script( 'iconpicker', $this->url . 'assets/js/fontawesome-iconpicker.min.js', array(), $this->version );
1283 1283
 				
1284
-				// Bootstrap file browser
1285
-				wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
1286
-				wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
1287
-
1288
-				$load_inline = false;
1289
-
1290
-				if ( $this->settings[ $js_setting ] == 'core-popper' ) {
1291
-					// Bootstrap bundle
1292
-					$url = $this->url . 'assets/js/bootstrap.bundle.min.js';
1293
-					wp_register_script( 'bootstrap-js-bundle', $url, array(
1294
-						'select2',
1295
-						'jquery'
1296
-					), $this->version, $this->is_bs3_compat() );
1297
-					// if in admin then add to footer for compatibility.
1298
-					is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
1299
-					$script = $this->inline_script();
1300
-					wp_add_inline_script( 'bootstrap-js-bundle', $script );
1301
-				} elseif ( $this->settings[ $js_setting ] == 'popper' ) {
1302
-					$url = $this->url . 'assets/js/popper.min.js';
1303
-					wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
1304
-					wp_enqueue_script( 'bootstrap-js-popper' );
1305
-					$load_inline = true;
1306
-				} else {
1307
-					$load_inline = true;
1308
-				}
1284
+                // Bootstrap file browser
1285
+                wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
1286
+                wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
1287
+
1288
+                $load_inline = false;
1289
+
1290
+                if ( $this->settings[ $js_setting ] == 'core-popper' ) {
1291
+                    // Bootstrap bundle
1292
+                    $url = $this->url . 'assets/js/bootstrap.bundle.min.js';
1293
+                    wp_register_script( 'bootstrap-js-bundle', $url, array(
1294
+                        'select2',
1295
+                        'jquery'
1296
+                    ), $this->version, $this->is_bs3_compat() );
1297
+                    // if in admin then add to footer for compatibility.
1298
+                    is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
1299
+                    $script = $this->inline_script();
1300
+                    wp_add_inline_script( 'bootstrap-js-bundle', $script );
1301
+                } elseif ( $this->settings[ $js_setting ] == 'popper' ) {
1302
+                    $url = $this->url . 'assets/js/popper.min.js';
1303
+                    wp_register_script( 'bootstrap-js-popper', $url, array( 'select2', 'jquery' ), $this->version );
1304
+                    wp_enqueue_script( 'bootstrap-js-popper' );
1305
+                    $load_inline = true;
1306
+                } else {
1307
+                    $load_inline = true;
1308
+                }
1309 1309
 
1310
-				// Load needed inline scripts by faking the loading of a script if the main script is not being loaded
1311
-				if ( $load_inline ) {
1312
-					wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
1313
-					wp_enqueue_script( 'bootstrap-dummy' );
1314
-					$script = $this->inline_script();
1315
-					wp_add_inline_script( 'bootstrap-dummy', $script );
1316
-				}
1317
-			}
1310
+                // Load needed inline scripts by faking the loading of a script if the main script is not being loaded
1311
+                if ( $load_inline ) {
1312
+                    wp_register_script( 'bootstrap-dummy', '', array( 'select2', 'jquery' ) );
1313
+                    wp_enqueue_script( 'bootstrap-dummy' );
1314
+                    $script = $this->inline_script();
1315
+                    wp_add_inline_script( 'bootstrap-dummy', $script );
1316
+                }
1317
+            }
1318 1318
 
1319
-		}
1319
+        }
1320 1320
 
1321
-		/**
1322
-		 * Enqueue flatpickr if called.
1323
-		 */
1324
-		public function enqueue_flatpickr(){
1325
-			wp_enqueue_style( 'flatpickr' );
1326
-			wp_enqueue_script( 'flatpickr' );
1327
-		}
1321
+        /**
1322
+         * Enqueue flatpickr if called.
1323
+         */
1324
+        public function enqueue_flatpickr(){
1325
+            wp_enqueue_style( 'flatpickr' );
1326
+            wp_enqueue_script( 'flatpickr' );
1327
+        }
1328 1328
 
1329
-		/**
1330
-		 * Enqueue iconpicker if called.
1331
-		 */
1332
-		public function enqueue_iconpicker(){
1333
-			wp_enqueue_style( 'iconpicker' );
1334
-			wp_enqueue_script( 'iconpicker' );
1335
-		}
1329
+        /**
1330
+         * Enqueue iconpicker if called.
1331
+         */
1332
+        public function enqueue_iconpicker(){
1333
+            wp_enqueue_style( 'iconpicker' );
1334
+            wp_enqueue_script( 'iconpicker' );
1335
+        }
1336 1336
 
1337
-		/**
1338
-		 * Get the url path to the current folder.
1339
-		 *
1340
-		 * @return string
1341
-		 */
1342
-		public function get_url() {
1337
+        /**
1338
+         * Get the url path to the current folder.
1339
+         *
1340
+         * @return string
1341
+         */
1342
+        public function get_url() {
1343 1343
 
1344
-			$url = '';
1345
-			// check if we are inside a plugin
1346
-			$file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
1344
+            $url = '';
1345
+            // check if we are inside a plugin
1346
+            $file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
1347 1347
 
1348
-			// add check in-case user has changed wp-content dir name.
1349
-			$wp_content_folder_name = basename(WP_CONTENT_DIR);
1350
-			$dir_parts = explode("/$wp_content_folder_name/",$file_dir);
1351
-			$url_parts = explode("/$wp_content_folder_name/",plugins_url());
1348
+            // add check in-case user has changed wp-content dir name.
1349
+            $wp_content_folder_name = basename(WP_CONTENT_DIR);
1350
+            $dir_parts = explode("/$wp_content_folder_name/",$file_dir);
1351
+            $url_parts = explode("/$wp_content_folder_name/",plugins_url());
1352 1352
 
1353
-			if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1354
-				$url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
1355
-			}
1353
+            if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1354
+                $url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
1355
+            }
1356 1356
 
1357
-			return $url;
1358
-		}
1357
+            return $url;
1358
+        }
1359 1359
 
1360
-		/**
1361
-		 * Register the database settings with WordPress.
1362
-		 */
1363
-		public function register_settings() {
1364
-			register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
1365
-		}
1360
+        /**
1361
+         * Register the database settings with WordPress.
1362
+         */
1363
+        public function register_settings() {
1364
+            register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
1365
+        }
1366 1366
 
1367
-		/**
1368
-		 * Add the WordPress settings menu item.
1369
-		 * @since 1.0.10 Calling function name direct will fail theme check so we don't.
1370
-		 */
1371
-		public function menu_item() {
1372
-			$menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
1373
-			call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
1374
-				$this,
1375
-				'settings_page'
1376
-			) );
1377
-		}
1367
+        /**
1368
+         * Add the WordPress settings menu item.
1369
+         * @since 1.0.10 Calling function name direct will fail theme check so we don't.
1370
+         */
1371
+        public function menu_item() {
1372
+            $menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
1373
+            call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
1374
+                $this,
1375
+                'settings_page'
1376
+            ) );
1377
+        }
1378 1378
 
1379
-		/**
1380
-		 * Get a list of themes and their default JS settings.
1381
-		 *
1382
-		 * @return array
1383
-		 */
1384
-		public function theme_js_settings(){
1385
-			return array(
1386
-				'ayetheme' => 'popper',
1387
-				'listimia' => 'required',
1388
-				'listimia_backend' => 'core-popper',
1389
-				//'avada'    => 'required', // removed as we now add compatibility
1390
-			);
1391
-		}
1379
+        /**
1380
+         * Get a list of themes and their default JS settings.
1381
+         *
1382
+         * @return array
1383
+         */
1384
+        public function theme_js_settings(){
1385
+            return array(
1386
+                'ayetheme' => 'popper',
1387
+                'listimia' => 'required',
1388
+                'listimia_backend' => 'core-popper',
1389
+                //'avada'    => 'required', // removed as we now add compatibility
1390
+            );
1391
+        }
1392 1392
 
1393
-		/**
1394
-		 * Get the current Font Awesome output settings.
1395
-		 *
1396
-		 * @return array The array of settings.
1397
-		 */
1398
-		public function get_settings() {
1399
-
1400
-			$db_settings = get_option( 'ayecode-ui-settings' );
1401
-			$js_default = 'core-popper';
1402
-			$js_default_backend = $js_default;
1403
-
1404
-			// maybe set defaults (if no settings set)
1405
-			if(empty($db_settings)){
1406
-				$active_theme = strtolower( get_template() ); // active parent theme.
1407
-				$theme_js_settings = self::theme_js_settings();
1408
-				if(isset($theme_js_settings[$active_theme])){
1409
-					$js_default = $theme_js_settings[$active_theme];
1410
-					$js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
1411
-				}
1412
-			}
1413
-
1414
-			$defaults = array(
1415
-				'css'       => 'compatibility', // core, compatibility
1416
-				'js'        => $js_default, // js to load, core-popper, popper
1417
-				'html_font_size'        => '16', // js to load, core-popper, popper
1418
-				'css_backend'       => 'compatibility', // core, compatibility
1419
-				'js_backend'        => $js_default_backend, // js to load, core-popper, popper
1420
-				'disable_admin'     =>  '', // URL snippets to disable loading on admin
1421
-			);
1422
-
1423
-			$settings = wp_parse_args( $db_settings, $defaults );
1424
-
1425
-			/**
1426
-			 * Filter the Bootstrap settings.
1427
-			 *
1428
-			 * @todo if we add this filer people might use it and then it defeates the purpose of this class :/
1429
-			 */
1430
-			return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
1431
-		}
1393
+        /**
1394
+         * Get the current Font Awesome output settings.
1395
+         *
1396
+         * @return array The array of settings.
1397
+         */
1398
+        public function get_settings() {
1399
+
1400
+            $db_settings = get_option( 'ayecode-ui-settings' );
1401
+            $js_default = 'core-popper';
1402
+            $js_default_backend = $js_default;
1403
+
1404
+            // maybe set defaults (if no settings set)
1405
+            if(empty($db_settings)){
1406
+                $active_theme = strtolower( get_template() ); // active parent theme.
1407
+                $theme_js_settings = self::theme_js_settings();
1408
+                if(isset($theme_js_settings[$active_theme])){
1409
+                    $js_default = $theme_js_settings[$active_theme];
1410
+                    $js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
1411
+                }
1412
+            }
1413
+
1414
+            $defaults = array(
1415
+                'css'       => 'compatibility', // core, compatibility
1416
+                'js'        => $js_default, // js to load, core-popper, popper
1417
+                'html_font_size'        => '16', // js to load, core-popper, popper
1418
+                'css_backend'       => 'compatibility', // core, compatibility
1419
+                'js_backend'        => $js_default_backend, // js to load, core-popper, popper
1420
+                'disable_admin'     =>  '', // URL snippets to disable loading on admin
1421
+            );
1422
+
1423
+            $settings = wp_parse_args( $db_settings, $defaults );
1424
+
1425
+            /**
1426
+             * Filter the Bootstrap settings.
1427
+             *
1428
+             * @todo if we add this filer people might use it and then it defeates the purpose of this class :/
1429
+             */
1430
+            return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
1431
+        }
1432 1432
 
1433 1433
 
1434
-		/**
1435
-		 * The settings page html output.
1436
-		 */
1437
-		public function settings_page() {
1438
-			if ( ! current_user_can( 'manage_options' ) ) {
1439
-				wp_die( __( 'You do not have sufficient permissions to access this page.', 'aui' ) );
1440
-			}
1441
-			?>
1434
+        /**
1435
+         * The settings page html output.
1436
+         */
1437
+        public function settings_page() {
1438
+            if ( ! current_user_can( 'manage_options' ) ) {
1439
+                wp_die( __( 'You do not have sufficient permissions to access this page.', 'aui' ) );
1440
+            }
1441
+            ?>
1442 1442
 			<div class="wrap">
1443 1443
 				<h1><?php echo $this->name; ?></h1>
1444 1444
 				<p><?php _e("Here you can adjust settings if you are having compatibility issues.",'aui');?></p>
1445 1445
 				<form method="post" action="options.php">
1446 1446
 					<?php
1447
-					settings_fields( 'ayecode-ui-settings' );
1448
-					do_settings_sections( 'ayecode-ui-settings' );
1449
-					?>
1447
+                    settings_fields( 'ayecode-ui-settings' );
1448
+                    do_settings_sections( 'ayecode-ui-settings' );
1449
+                    ?>
1450 1450
 
1451 1451
 					<h2><?php _e( 'Frontend', 'aui' ); ?></h2>
1452 1452
 					<table class="form-table wpbs-table-settings">
@@ -1526,60 +1526,60 @@  discard block
 block discarded – undo
1526 1526
 					</table>
1527 1527
 
1528 1528
 					<?php
1529
-					submit_button();
1530
-					?>
1529
+                    submit_button();
1530
+                    ?>
1531 1531
 				</form>
1532 1532
 
1533 1533
 				<div id="wpbs-version"><?php echo $this->version; ?></div>
1534 1534
 			</div>
1535 1535
 
1536 1536
 			<?php
1537
-		}
1537
+        }
1538 1538
 
1539
-		public function customizer_settings($wp_customize){
1540
-			$wp_customize->add_section('aui_settings', array(
1541
-				'title'    => __('AyeCode UI','aui'),
1542
-				'priority' => 120,
1543
-			));
1544
-
1545
-			//  =============================
1546
-			//  = Color Picker              =
1547
-			//  =============================
1548
-			$wp_customize->add_setting('aui_options[color_primary]', array(
1549
-				'default'           => AUI_PRIMARY_COLOR,
1550
-				'sanitize_callback' => 'sanitize_hex_color',
1551
-				'capability'        => 'edit_theme_options',
1552
-				'type'              => 'option',
1553
-				'transport'         => 'refresh',
1554
-			));
1555
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1556
-				'label'    => __('Primary Color','aui'),
1557
-				'section'  => 'aui_settings',
1558
-				'settings' => 'aui_options[color_primary]',
1559
-			)));
1560
-
1561
-			$wp_customize->add_setting('aui_options[color_secondary]', array(
1562
-				'default'           => '#6c757d',
1563
-				'sanitize_callback' => 'sanitize_hex_color',
1564
-				'capability'        => 'edit_theme_options',
1565
-				'type'              => 'option',
1566
-				'transport'         => 'refresh',
1567
-			));
1568
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1569
-				'label'    => __('Secondary Color','aui'),
1570
-				'section'  => 'aui_settings',
1571
-				'settings' => 'aui_options[color_secondary]',
1572
-			)));
1573
-		}
1539
+        public function customizer_settings($wp_customize){
1540
+            $wp_customize->add_section('aui_settings', array(
1541
+                'title'    => __('AyeCode UI','aui'),
1542
+                'priority' => 120,
1543
+            ));
1544
+
1545
+            //  =============================
1546
+            //  = Color Picker              =
1547
+            //  =============================
1548
+            $wp_customize->add_setting('aui_options[color_primary]', array(
1549
+                'default'           => AUI_PRIMARY_COLOR,
1550
+                'sanitize_callback' => 'sanitize_hex_color',
1551
+                'capability'        => 'edit_theme_options',
1552
+                'type'              => 'option',
1553
+                'transport'         => 'refresh',
1554
+            ));
1555
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1556
+                'label'    => __('Primary Color','aui'),
1557
+                'section'  => 'aui_settings',
1558
+                'settings' => 'aui_options[color_primary]',
1559
+            )));
1560
+
1561
+            $wp_customize->add_setting('aui_options[color_secondary]', array(
1562
+                'default'           => '#6c757d',
1563
+                'sanitize_callback' => 'sanitize_hex_color',
1564
+                'capability'        => 'edit_theme_options',
1565
+                'type'              => 'option',
1566
+                'transport'         => 'refresh',
1567
+            ));
1568
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1569
+                'label'    => __('Secondary Color','aui'),
1570
+                'section'  => 'aui_settings',
1571
+                'settings' => 'aui_options[color_secondary]',
1572
+            )));
1573
+        }
1574 1574
 
1575
-		/**
1576
-		 * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1577
-		 *
1578
-		 * @return mixed
1579
-		 */
1580
-		public static function bs3_compat_css() {
1581
-			ob_start();
1582
-			?>
1575
+        /**
1576
+         * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1577
+         *
1578
+         * @return mixed
1579
+         */
1580
+        public static function bs3_compat_css() {
1581
+            ob_start();
1582
+            ?>
1583 1583
 			<style>
1584 1584
 			/* Bootstrap 3 compatibility */
1585 1585
 			body.modal-open .modal-backdrop.show:not(.in) {opacity:0.5;}
@@ -1608,583 +1608,583 @@  discard block
 block discarded – undo
1608 1608
 			<?php } ?>
1609 1609
 			</style>
1610 1610
 			<?php
1611
-			return str_replace( array(
1612
-				'<style>',
1613
-				'</style>'
1614
-			), '', self::minify_css( ob_get_clean() ) );
1615
-		}
1611
+            return str_replace( array(
1612
+                '<style>',
1613
+                '</style>'
1614
+            ), '', self::minify_css( ob_get_clean() ) );
1615
+        }
1616 1616
 
1617 1617
 
1618
-		public static function custom_css($compatibility = true) {
1619
-			$settings = get_option('aui_options');
1618
+        public static function custom_css($compatibility = true) {
1619
+            $settings = get_option('aui_options');
1620 1620
 
1621
-			ob_start();
1621
+            ob_start();
1622 1622
 
1623
-			$primary_color = !empty($settings['color_primary']) ? $settings['color_primary'] : AUI_PRIMARY_COLOR;
1624
-			$secondary_color = !empty($settings['color_secondary']) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR;
1625
-				//AUI_PRIMARY_COLOR_ORIGINAL
1626
-			?>
1623
+            $primary_color = !empty($settings['color_primary']) ? $settings['color_primary'] : AUI_PRIMARY_COLOR;
1624
+            $secondary_color = !empty($settings['color_secondary']) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR;
1625
+                //AUI_PRIMARY_COLOR_ORIGINAL
1626
+            ?>
1627 1627
 			<style>
1628 1628
 				<?php
1629 1629
 
1630
-					// BS v3 compat
1631
-					if( self::is_bs3_compat() ){
1632
-					    echo self::bs3_compat_css();
1633
-					}
1630
+                    // BS v3 compat
1631
+                    if( self::is_bs3_compat() ){
1632
+                        echo self::bs3_compat_css();
1633
+                    }
1634 1634
 
1635
-					if(!is_admin() && $primary_color != AUI_PRIMARY_COLOR_ORIGINAL){
1636
-						echo self::css_primary($primary_color,$compatibility);
1637
-					}
1635
+                    if(!is_admin() && $primary_color != AUI_PRIMARY_COLOR_ORIGINAL){
1636
+                        echo self::css_primary($primary_color,$compatibility);
1637
+                    }
1638 1638
 
1639
-					if(!is_admin() && $secondary_color != AUI_SECONDARY_COLOR_ORIGINAL){
1640
-						echo self::css_secondary($settings['color_secondary'],$compatibility);
1641
-					}
1639
+                    if(!is_admin() && $secondary_color != AUI_SECONDARY_COLOR_ORIGINAL){
1640
+                        echo self::css_secondary($settings['color_secondary'],$compatibility);
1641
+                    }
1642 1642
 
1643
-					// Set admin bar z-index lower when modal is open.
1644
-					echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1643
+                    // Set admin bar z-index lower when modal is open.
1644
+                    echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1645 1645
 
1646
-					if(is_admin()){
1647
-						echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1648
-					}
1646
+                    if(is_admin()){
1647
+                        echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1648
+                    }
1649 1649
                 ?>
1650 1650
 			</style>
1651 1651
 			<?php
1652 1652
 
1653 1653
 
1654
-			/*
1654
+            /*
1655 1655
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1656 1656
 			 */
1657
-			return str_replace( array(
1658
-				'<style>',
1659
-				'</style>'
1660
-			), '', self::minify_css( ob_get_clean() ) );
1661
-		}
1657
+            return str_replace( array(
1658
+                '<style>',
1659
+                '</style>'
1660
+            ), '', self::minify_css( ob_get_clean() ) );
1661
+        }
1662 1662
 
1663
-		/**
1664
-		 * Check if we should add booststrap 3 compatibility changes.
1665
-		 *
1666
-		 * @return bool
1667
-		 */
1668
-		public static function is_bs3_compat(){
1669
-			return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1670
-		}
1663
+        /**
1664
+         * Check if we should add booststrap 3 compatibility changes.
1665
+         *
1666
+         * @return bool
1667
+         */
1668
+        public static function is_bs3_compat(){
1669
+            return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1670
+        }
1671 1671
 
1672
-		public static function css_primary($color_code,$compatibility){;
1673
-			$color_code = sanitize_hex_color($color_code);
1674
-			if(!$color_code){return '';}
1675
-			/**
1676
-			 * c = color, b = background color, o = border-color, f = fill
1677
-			 */
1678
-			$selectors = array(
1679
-				'a' => array('c'),
1680
-				'.btn-primary' => array('b','o'),
1681
-				'.btn-primary.disabled' => array('b','o'),
1682
-				'.btn-primary:disabled' => array('b','o'),
1683
-				'.btn-outline-primary' => array('c','o'),
1684
-				'.btn-outline-primary:hover' => array('b','o'),
1685
-				'.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1686
-				'.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1687
-				'.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1688
-				'.btn-link' => array('c'),
1689
-				'.dropdown-item.active' => array('b'),
1690
-				'.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1691
-				'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1672
+        public static function css_primary($color_code,$compatibility){;
1673
+            $color_code = sanitize_hex_color($color_code);
1674
+            if(!$color_code){return '';}
1675
+            /**
1676
+             * c = color, b = background color, o = border-color, f = fill
1677
+             */
1678
+            $selectors = array(
1679
+                'a' => array('c'),
1680
+                '.btn-primary' => array('b','o'),
1681
+                '.btn-primary.disabled' => array('b','o'),
1682
+                '.btn-primary:disabled' => array('b','o'),
1683
+                '.btn-outline-primary' => array('c','o'),
1684
+                '.btn-outline-primary:hover' => array('b','o'),
1685
+                '.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1686
+                '.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1687
+                '.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1688
+                '.btn-link' => array('c'),
1689
+                '.dropdown-item.active' => array('b'),
1690
+                '.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1691
+                '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1692 1692
 //				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1693 1693
 //				'.custom-range::-moz-range-thumb' => array('b'),
1694 1694
 //				'.custom-range::-ms-thumb' => array('b'),
1695
-				'.nav-pills .nav-link.active' => array('b'),
1696
-				'.nav-pills .show>.nav-link' => array('b'),
1697
-				'.page-link' => array('c'),
1698
-				'.page-item.active .page-link' => array('b','o'),
1699
-				'.badge-primary' => array('b'),
1700
-				'.alert-primary' => array('b','o'),
1701
-				'.progress-bar' => array('b'),
1702
-				'.list-group-item.active' => array('b','o'),
1703
-				'.bg-primary' => array('b','f'),
1704
-				'.btn-link.btn-primary' => array('c'),
1705
-				'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1706
-			);
1707
-
1708
-			$important_selectors = array(
1709
-				'.bg-primary' => array('b','f'),
1710
-				'.border-primary' => array('o'),
1711
-				'.text-primary' => array('c'),
1712
-			);
1713
-
1714
-			$color = array();
1715
-			$color_i = array();
1716
-			$background = array();
1717
-			$background_i = array();
1718
-			$border = array();
1719
-			$border_i = array();
1720
-			$fill = array();
1721
-			$fill_i = array();
1722
-
1723
-			$output = '';
1724
-
1725
-			// build rules into each type
1726
-			foreach($selectors as $selector => $types){
1727
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1728
-				$types = array_combine($types,$types);
1729
-				if(isset($types['c'])){$color[] = $selector;}
1730
-				if(isset($types['b'])){$background[] = $selector;}
1731
-				if(isset($types['o'])){$border[] = $selector;}
1732
-				if(isset($types['f'])){$fill[] = $selector;}
1733
-			}
1734
-
1735
-			// build rules into each type
1736
-			foreach($important_selectors as $selector => $types){
1737
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1738
-				$types = array_combine($types,$types);
1739
-				if(isset($types['c'])){$color_i[] = $selector;}
1740
-				if(isset($types['b'])){$background_i[] = $selector;}
1741
-				if(isset($types['o'])){$border_i[] = $selector;}
1742
-				if(isset($types['f'])){$fill_i[] = $selector;}
1743
-			}
1744
-
1745
-			// add any color rules
1746
-			if(!empty($color)){
1747
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1748
-			}
1749
-			if(!empty($color_i)){
1750
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1751
-			}
1752
-
1753
-			// add any background color rules
1754
-			if(!empty($background)){
1755
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1756
-			}
1757
-			if(!empty($background_i)){
1758
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1759
-			}
1760
-
1761
-			// add any border color rules
1762
-			if(!empty($border)){
1763
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1764
-			}
1765
-			if(!empty($border_i)){
1766
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1767
-			}
1768
-
1769
-			// add any fill color rules
1770
-			if(!empty($fill)){
1771
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1772
-			}
1773
-			if(!empty($fill_i)){
1774
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1775
-			}
1776
-
1777
-
1778
-			$prefix = $compatibility ? ".bsui " : "";
1779
-
1780
-			// darken
1781
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1782
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1783
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1784
-
1785
-			// lighten
1786
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1787
-
1788
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1789
-			$op_25 = $color_code."40"; // 25% opacity
1790
-
1791
-
1792
-			// button states
1793
-			$output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1794
-			$output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1795
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1796
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1797
-
1798
-
1799
-			// dropdown's
1800
-			$output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1801
-
1802
-
1803
-			// input states
1804
-			$output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1805
-
1806
-			// page link
1807
-			$output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1808
-
1809
-			return $output;
1810
-		}
1695
+                '.nav-pills .nav-link.active' => array('b'),
1696
+                '.nav-pills .show>.nav-link' => array('b'),
1697
+                '.page-link' => array('c'),
1698
+                '.page-item.active .page-link' => array('b','o'),
1699
+                '.badge-primary' => array('b'),
1700
+                '.alert-primary' => array('b','o'),
1701
+                '.progress-bar' => array('b'),
1702
+                '.list-group-item.active' => array('b','o'),
1703
+                '.bg-primary' => array('b','f'),
1704
+                '.btn-link.btn-primary' => array('c'),
1705
+                '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1706
+            );
1707
+
1708
+            $important_selectors = array(
1709
+                '.bg-primary' => array('b','f'),
1710
+                '.border-primary' => array('o'),
1711
+                '.text-primary' => array('c'),
1712
+            );
1713
+
1714
+            $color = array();
1715
+            $color_i = array();
1716
+            $background = array();
1717
+            $background_i = array();
1718
+            $border = array();
1719
+            $border_i = array();
1720
+            $fill = array();
1721
+            $fill_i = array();
1722
+
1723
+            $output = '';
1724
+
1725
+            // build rules into each type
1726
+            foreach($selectors as $selector => $types){
1727
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1728
+                $types = array_combine($types,$types);
1729
+                if(isset($types['c'])){$color[] = $selector;}
1730
+                if(isset($types['b'])){$background[] = $selector;}
1731
+                if(isset($types['o'])){$border[] = $selector;}
1732
+                if(isset($types['f'])){$fill[] = $selector;}
1733
+            }
1811 1734
 
1812
-		public static function css_secondary($color_code,$compatibility){;
1813
-			$color_code = sanitize_hex_color($color_code);
1814
-			if(!$color_code){return '';}
1815
-			/**
1816
-			 * c = color, b = background color, o = border-color, f = fill
1817
-			 */
1818
-			$selectors = array(
1819
-				'.btn-secondary' => array('b','o'),
1820
-				'.btn-secondary.disabled' => array('b','o'),
1821
-				'.btn-secondary:disabled' => array('b','o'),
1822
-				'.btn-outline-secondary' => array('c','o'),
1823
-				'.btn-outline-secondary:hover' => array('b','o'),
1824
-				'.btn-outline-secondary.disabled' => array('c'),
1825
-				'.btn-outline-secondary:disabled' => array('c'),
1826
-				'.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
1827
-				'.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
1828
-				'.btn-outline-secondary.dropdown-toggle' => array('b','o'),
1829
-				'.badge-secondary' => array('b'),
1830
-				'.alert-secondary' => array('b','o'),
1831
-				'.btn-link.btn-secondary' => array('c'),
1832
-			);
1833
-
1834
-			$important_selectors = array(
1835
-				'.bg-secondary' => array('b','f'),
1836
-				'.border-secondary' => array('o'),
1837
-				'.text-secondary' => array('c'),
1838
-			);
1839
-
1840
-			$color = array();
1841
-			$color_i = array();
1842
-			$background = array();
1843
-			$background_i = array();
1844
-			$border = array();
1845
-			$border_i = array();
1846
-			$fill = array();
1847
-			$fill_i = array();
1848
-
1849
-			$output = '';
1850
-
1851
-			// build rules into each type
1852
-			foreach($selectors as $selector => $types){
1853
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1854
-				$types = array_combine($types,$types);
1855
-				if(isset($types['c'])){$color[] = $selector;}
1856
-				if(isset($types['b'])){$background[] = $selector;}
1857
-				if(isset($types['o'])){$border[] = $selector;}
1858
-				if(isset($types['f'])){$fill[] = $selector;}
1859
-			}
1860
-
1861
-			// build rules into each type
1862
-			foreach($important_selectors as $selector => $types){
1863
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1864
-				$types = array_combine($types,$types);
1865
-				if(isset($types['c'])){$color_i[] = $selector;}
1866
-				if(isset($types['b'])){$background_i[] = $selector;}
1867
-				if(isset($types['o'])){$border_i[] = $selector;}
1868
-				if(isset($types['f'])){$fill_i[] = $selector;}
1869
-			}
1870
-
1871
-			// add any color rules
1872
-			if(!empty($color)){
1873
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1874
-			}
1875
-			if(!empty($color_i)){
1876
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1877
-			}
1878
-
1879
-			// add any background color rules
1880
-			if(!empty($background)){
1881
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1882
-			}
1883
-			if(!empty($background_i)){
1884
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1885
-			}
1886
-
1887
-			// add any border color rules
1888
-			if(!empty($border)){
1889
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1890
-			}
1891
-			if(!empty($border_i)){
1892
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1893
-			}
1894
-
1895
-			// add any fill color rules
1896
-			if(!empty($fill)){
1897
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1898
-			}
1899
-			if(!empty($fill_i)){
1900
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1901
-			}
1902
-
1903
-
1904
-			$prefix = $compatibility ? ".bsui " : "";
1905
-
1906
-			// darken
1907
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1908
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1909
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1910
-
1911
-			// lighten
1912
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1913
-
1914
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1915
-			$op_25 = $color_code."40"; // 25% opacity
1916
-
1917
-
1918
-			// button states
1919
-			$output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1920
-			$output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1921
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1922
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1923
-
1924
-
1925
-			return $output;
1926
-		}
1735
+            // build rules into each type
1736
+            foreach($important_selectors as $selector => $types){
1737
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1738
+                $types = array_combine($types,$types);
1739
+                if(isset($types['c'])){$color_i[] = $selector;}
1740
+                if(isset($types['b'])){$background_i[] = $selector;}
1741
+                if(isset($types['o'])){$border_i[] = $selector;}
1742
+                if(isset($types['f'])){$fill_i[] = $selector;}
1743
+            }
1927 1744
 
1928
-		/**
1929
-		 * Increases or decreases the brightness of a color by a percentage of the current brightness.
1930
-		 *
1931
-		 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
1932
-		 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
1933
-		 *
1934
-		 * @return  string
1935
-		 */
1936
-		public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
1937
-			$hexCode = ltrim($hexCode, '#');
1745
+            // add any color rules
1746
+            if(!empty($color)){
1747
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1748
+            }
1749
+            if(!empty($color_i)){
1750
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1751
+            }
1938 1752
 
1939
-			if (strlen($hexCode) == 3) {
1940
-				$hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
1941
-			}
1753
+            // add any background color rules
1754
+            if(!empty($background)){
1755
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1756
+            }
1757
+            if(!empty($background_i)){
1758
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1759
+            }
1942 1760
 
1943
-			$hexCode = array_map('hexdec', str_split($hexCode, 2));
1761
+            // add any border color rules
1762
+            if(!empty($border)){
1763
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1764
+            }
1765
+            if(!empty($border_i)){
1766
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1767
+            }
1944 1768
 
1945
-			foreach ($hexCode as & $color) {
1946
-				$adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
1947
-				$adjustAmount = ceil($adjustableLimit * $adjustPercent);
1769
+            // add any fill color rules
1770
+            if(!empty($fill)){
1771
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1772
+            }
1773
+            if(!empty($fill_i)){
1774
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1775
+            }
1948 1776
 
1949
-				$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
1950
-			}
1951 1777
 
1952
-			return '#' . implode($hexCode);
1953
-		}
1778
+            $prefix = $compatibility ? ".bsui " : "";
1954 1779
 
1955
-		/**
1956
-		 * Check if we should display examples.
1957
-		 */
1958
-		public function maybe_show_examples(){
1959
-			if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
1960
-				echo "<head>";
1961
-				wp_head();
1962
-				echo "</head>";
1963
-				echo "<body>";
1964
-				echo $this->get_examples();
1965
-				echo "</body>";
1966
-				exit;
1967
-			}
1968
-		}
1780
+            // darken
1781
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1782
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1783
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1969 1784
 
1970
-		/**
1971
-		 * Get developer examples.
1972
-		 *
1973
-		 * @return string
1974
-		 */
1975
-		public function get_examples(){
1976
-			$output = '';
1977
-
1978
-
1979
-			// open form
1980
-			$output .= "<form class='p-5 m-5 border rounded'>";
1981
-
1982
-			// input example
1983
-			$output .= aui()->input(array(
1984
-				'type'  =>  'text',
1985
-				'id'    =>  'text-example',
1986
-				'name'    =>  'text-example',
1987
-				'placeholder'   => 'text placeholder',
1988
-				'title'   => 'Text input example',
1989
-				'value' =>  '',
1990
-				'required'  => false,
1991
-				'help_text' => 'help text',
1992
-				'label' => 'Text input example label'
1993
-			));
1994
-
1995
-			// input example
1996
-			$output .= aui()->input(array(
1997
-				'type'  =>  'url',
1998
-				'id'    =>  'text-example2',
1999
-				'name'    =>  'text-example',
2000
-				'placeholder'   => 'url placeholder',
2001
-				'title'   => 'Text input example',
2002
-				'value' =>  '',
2003
-				'required'  => false,
2004
-				'help_text' => 'help text',
2005
-				'label' => 'Text input example label'
2006
-			));
2007
-
2008
-			// checkbox example
2009
-			$output .= aui()->input(array(
2010
-				'type'  =>  'checkbox',
2011
-				'id'    =>  'checkbox-example',
2012
-				'name'    =>  'checkbox-example',
2013
-				'placeholder'   => 'checkbox-example',
2014
-				'title'   => 'Checkbox example',
2015
-				'value' =>  '1',
2016
-				'checked'   => true,
2017
-				'required'  => false,
2018
-				'help_text' => 'help text',
2019
-				'label' => 'Checkbox checked'
2020
-			));
2021
-
2022
-			// checkbox example
2023
-			$output .= aui()->input(array(
2024
-				'type'  =>  'checkbox',
2025
-				'id'    =>  'checkbox-example2',
2026
-				'name'    =>  'checkbox-example2',
2027
-				'placeholder'   => 'checkbox-example',
2028
-				'title'   => 'Checkbox example',
2029
-				'value' =>  '1',
2030
-				'checked'   => false,
2031
-				'required'  => false,
2032
-				'help_text' => 'help text',
2033
-				'label' => 'Checkbox un-checked'
2034
-			));
2035
-
2036
-			// switch example
2037
-			$output .= aui()->input(array(
2038
-				'type'  =>  'checkbox',
2039
-				'id'    =>  'switch-example',
2040
-				'name'    =>  'switch-example',
2041
-				'placeholder'   => 'checkbox-example',
2042
-				'title'   => 'Switch example',
2043
-				'value' =>  '1',
2044
-				'checked'   => true,
2045
-				'switch'    => true,
2046
-				'required'  => false,
2047
-				'help_text' => 'help text',
2048
-				'label' => 'Switch on'
2049
-			));
2050
-
2051
-			// switch example
2052
-			$output .= aui()->input(array(
2053
-				'type'  =>  'checkbox',
2054
-				'id'    =>  'switch-example2',
2055
-				'name'    =>  'switch-example2',
2056
-				'placeholder'   => 'checkbox-example',
2057
-				'title'   => 'Switch example',
2058
-				'value' =>  '1',
2059
-				'checked'   => false,
2060
-				'switch'    => true,
2061
-				'required'  => false,
2062
-				'help_text' => 'help text',
2063
-				'label' => 'Switch off'
2064
-			));
2065
-
2066
-			// close form
2067
-			$output .= "</form>";
2068
-
2069
-			return $output;
2070
-		}
1785
+            // lighten
1786
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2071 1787
 
2072
-		/**
2073
-		 * Calendar params.
2074
-		 *
2075
-		 * @since 0.1.44
2076
-		 *
2077
-		 * @return array Calendar params.
2078
-		 */
2079
-		public static function calendar_params() {
2080
-			$params = array(
2081
-				'month_long_1' => __( 'January', 'aui' ),
2082
-				'month_long_2' => __( 'February', 'aui' ),
2083
-				'month_long_3' => __( 'March', 'aui' ),
2084
-				'month_long_4' => __( 'April', 'aui' ),
2085
-				'month_long_5' => __( 'May', 'aui' ),
2086
-				'month_long_6' => __( 'June', 'aui' ),
2087
-				'month_long_7' => __( 'July', 'aui' ),
2088
-				'month_long_8' => __( 'August', 'aui' ),
2089
-				'month_long_9' => __( 'September', 'aui' ),
2090
-				'month_long_10' => __( 'October', 'aui' ),
2091
-				'month_long_11' => __( 'November', 'aui' ),
2092
-				'month_long_12' => __( 'December', 'aui' ),
2093
-				'month_s_1' => _x( 'Jan', 'January abbreviation', 'aui' ),
2094
-				'month_s_2' => _x( 'Feb', 'February abbreviation', 'aui' ),
2095
-				'month_s_3' => _x( 'Mar', 'March abbreviation', 'aui' ),
2096
-				'month_s_4' => _x( 'Apr', 'April abbreviation', 'aui' ),
2097
-				'month_s_5' => _x( 'May', 'May abbreviation', 'aui' ),
2098
-				'month_s_6' => _x( 'Jun', 'June abbreviation', 'aui' ),
2099
-				'month_s_7' => _x( 'Jul', 'July abbreviation', 'aui' ),
2100
-				'month_s_8' => _x( 'Aug', 'August abbreviation', 'aui' ),
2101
-				'month_s_9' => _x( 'Sep', 'September abbreviation', 'aui' ),
2102
-				'month_s_10' => _x( 'Oct', 'October abbreviation', 'aui' ),
2103
-				'month_s_11' => _x( 'Nov', 'November abbreviation', 'aui' ),
2104
-				'month_s_12' => _x( 'Dec', 'December abbreviation', 'aui' ),
2105
-				'day_s1_1' => _x( 'S', 'Sunday initial', 'aui' ),
2106
-				'day_s1_2' => _x( 'M', 'Monday initial', 'aui' ),
2107
-				'day_s1_3' => _x( 'T', 'Tuesday initial', 'aui' ),
2108
-				'day_s1_4' => _x( 'W', 'Wednesday initial', 'aui' ),
2109
-				'day_s1_5' => _x( 'T', 'Friday initial', 'aui' ),
2110
-				'day_s1_6' => _x( 'F', 'Thursday initial', 'aui' ),
2111
-				'day_s1_7' => _x( 'S', 'Saturday initial', 'aui' ),
2112
-				'day_s2_1' => __( 'Su', 'aui' ),
2113
-				'day_s2_2' => __( 'Mo', 'aui' ),
2114
-				'day_s2_3' => __( 'Tu', 'aui' ),
2115
-				'day_s2_4' => __( 'We', 'aui' ),
2116
-				'day_s2_5' => __( 'Th', 'aui' ),
2117
-				'day_s2_6' => __( 'Fr', 'aui' ),
2118
-				'day_s2_7' => __( 'Sa', 'aui' ),
2119
-				'day_s3_1' => __( 'Sun', 'aui' ),
2120
-				'day_s3_2' => __( 'Mon', 'aui' ),
2121
-				'day_s3_3' => __( 'Tue', 'aui' ),
2122
-				'day_s3_4' => __( 'Wed', 'aui' ),
2123
-				'day_s3_5' => __( 'Thu', 'aui' ),
2124
-				'day_s3_6' => __( 'Fri', 'aui' ),
2125
-				'day_s3_7' => __( 'Sat', 'aui' ),
2126
-				'day_s5_1' => __( 'Sunday', 'aui' ),
2127
-				'day_s5_2' => __( 'Monday', 'aui' ),
2128
-				'day_s5_3' => __( 'Tuesday', 'aui' ),
2129
-				'day_s5_4' => __( 'Wednesday', 'aui' ),
2130
-				'day_s5_5' => __( 'Thursday', 'aui' ),
2131
-				'day_s5_6' => __( 'Friday', 'aui' ),
2132
-				'day_s5_7' => __( 'Saturday', 'aui' ),
2133
-				'am_lower' => __( 'am', 'aui' ),
2134
-				'pm_lower' => __( 'pm', 'aui' ),
2135
-				'am_upper' => __( 'AM', 'aui' ),
2136
-				'pm_upper' => __( 'PM', 'aui' ),
2137
-				'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2138
-				'time_24hr' => false,
2139
-				'year' => __( 'Year', 'aui' ),
2140
-				'hour' => __( 'Hour', 'aui' ),
2141
-				'minute' => __( 'Minute', 'aui' ),
2142
-				'weekAbbreviation' => __( 'Wk', 'aui' ),
2143
-				'rangeSeparator' => __( ' to ', 'aui' ),
2144
-				'scrollTitle' => __( 'Scroll to increment', 'aui' ),
2145
-				'toggleTitle' => __( 'Click to toggle', 'aui' )
2146
-			);
2147
-
2148
-			return apply_filters( 'ayecode_ui_calendar_params', $params );
2149
-		}
1788
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1789
+            $op_25 = $color_code."40"; // 25% opacity
2150 1790
 
2151
-		/**
2152
-		 * Flatpickr calendar localize.
2153
-		 *
2154
-		 * @since 0.1.44
2155
-		 *
2156
-		 * @return string Calendar locale.
2157
-		 */
2158
-		public static function flatpickr_locale() {
2159
-			$params = self::calendar_params();
2160
-
2161
-			if ( is_string( $params ) ) {
2162
-				$params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2163
-			} else {
2164
-				foreach ( (array) $params as $key => $value ) {
2165
-					if ( ! is_scalar( $value ) ) {
2166
-						continue;
2167
-					}
2168 1791
 
2169
-					$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2170
-				}
2171
-			}
1792
+            // button states
1793
+            $output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1794
+            $output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1795
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1796
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1797
+
1798
+
1799
+            // dropdown's
1800
+            $output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1801
+
1802
+
1803
+            // input states
1804
+            $output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1805
+
1806
+            // page link
1807
+            $output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1808
+
1809
+            return $output;
1810
+        }
1811
+
1812
+        public static function css_secondary($color_code,$compatibility){;
1813
+            $color_code = sanitize_hex_color($color_code);
1814
+            if(!$color_code){return '';}
1815
+            /**
1816
+             * c = color, b = background color, o = border-color, f = fill
1817
+             */
1818
+            $selectors = array(
1819
+                '.btn-secondary' => array('b','o'),
1820
+                '.btn-secondary.disabled' => array('b','o'),
1821
+                '.btn-secondary:disabled' => array('b','o'),
1822
+                '.btn-outline-secondary' => array('c','o'),
1823
+                '.btn-outline-secondary:hover' => array('b','o'),
1824
+                '.btn-outline-secondary.disabled' => array('c'),
1825
+                '.btn-outline-secondary:disabled' => array('c'),
1826
+                '.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
1827
+                '.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
1828
+                '.btn-outline-secondary.dropdown-toggle' => array('b','o'),
1829
+                '.badge-secondary' => array('b'),
1830
+                '.alert-secondary' => array('b','o'),
1831
+                '.btn-link.btn-secondary' => array('c'),
1832
+            );
1833
+
1834
+            $important_selectors = array(
1835
+                '.bg-secondary' => array('b','f'),
1836
+                '.border-secondary' => array('o'),
1837
+                '.text-secondary' => array('c'),
1838
+            );
1839
+
1840
+            $color = array();
1841
+            $color_i = array();
1842
+            $background = array();
1843
+            $background_i = array();
1844
+            $border = array();
1845
+            $border_i = array();
1846
+            $fill = array();
1847
+            $fill_i = array();
1848
+
1849
+            $output = '';
1850
+
1851
+            // build rules into each type
1852
+            foreach($selectors as $selector => $types){
1853
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1854
+                $types = array_combine($types,$types);
1855
+                if(isset($types['c'])){$color[] = $selector;}
1856
+                if(isset($types['b'])){$background[] = $selector;}
1857
+                if(isset($types['o'])){$border[] = $selector;}
1858
+                if(isset($types['f'])){$fill[] = $selector;}
1859
+            }
1860
+
1861
+            // build rules into each type
1862
+            foreach($important_selectors as $selector => $types){
1863
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1864
+                $types = array_combine($types,$types);
1865
+                if(isset($types['c'])){$color_i[] = $selector;}
1866
+                if(isset($types['b'])){$background_i[] = $selector;}
1867
+                if(isset($types['o'])){$border_i[] = $selector;}
1868
+                if(isset($types['f'])){$fill_i[] = $selector;}
1869
+            }
1870
+
1871
+            // add any color rules
1872
+            if(!empty($color)){
1873
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1874
+            }
1875
+            if(!empty($color_i)){
1876
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1877
+            }
1878
+
1879
+            // add any background color rules
1880
+            if(!empty($background)){
1881
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1882
+            }
1883
+            if(!empty($background_i)){
1884
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1885
+            }
1886
+
1887
+            // add any border color rules
1888
+            if(!empty($border)){
1889
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1890
+            }
1891
+            if(!empty($border_i)){
1892
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1893
+            }
1894
+
1895
+            // add any fill color rules
1896
+            if(!empty($fill)){
1897
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1898
+            }
1899
+            if(!empty($fill_i)){
1900
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1901
+            }
1902
+
1903
+
1904
+            $prefix = $compatibility ? ".bsui " : "";
1905
+
1906
+            // darken
1907
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1908
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1909
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1910
+
1911
+            // lighten
1912
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1913
+
1914
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1915
+            $op_25 = $color_code."40"; // 25% opacity
2172 1916
 
2173
-			$day_s3 = array();
2174
-			$day_s5 = array();
2175 1917
 
2176
-			for ( $i = 1; $i <= 7; $i ++ ) {
2177
-				$day_s3[] = addslashes( $params[ 'day_s3_' . $i ] );
2178
-				$day_s5[] = addslashes( $params[ 'day_s3_' . $i ] );
2179
-			}
1918
+            // button states
1919
+            $output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1920
+            $output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1921
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1922
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2180 1923
 
2181
-			$month_s = array();
2182
-			$month_long = array();
2183 1924
 
2184
-			for ( $i = 1; $i <= 12; $i ++ ) {
2185
-				$month_s[] = addslashes( $params[ 'month_s_' . $i ] );
2186
-				$month_long[] = addslashes( $params[ 'month_long_' . $i ] );
2187
-			}
1925
+            return $output;
1926
+        }
1927
+
1928
+        /**
1929
+         * Increases or decreases the brightness of a color by a percentage of the current brightness.
1930
+         *
1931
+         * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
1932
+         * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
1933
+         *
1934
+         * @return  string
1935
+         */
1936
+        public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
1937
+            $hexCode = ltrim($hexCode, '#');
1938
+
1939
+            if (strlen($hexCode) == 3) {
1940
+                $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
1941
+            }
1942
+
1943
+            $hexCode = array_map('hexdec', str_split($hexCode, 2));
1944
+
1945
+            foreach ($hexCode as & $color) {
1946
+                $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
1947
+                $adjustAmount = ceil($adjustableLimit * $adjustPercent);
1948
+
1949
+                $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
1950
+            }
1951
+
1952
+            return '#' . implode($hexCode);
1953
+        }
1954
+
1955
+        /**
1956
+         * Check if we should display examples.
1957
+         */
1958
+        public function maybe_show_examples(){
1959
+            if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
1960
+                echo "<head>";
1961
+                wp_head();
1962
+                echo "</head>";
1963
+                echo "<body>";
1964
+                echo $this->get_examples();
1965
+                echo "</body>";
1966
+                exit;
1967
+            }
1968
+        }
1969
+
1970
+        /**
1971
+         * Get developer examples.
1972
+         *
1973
+         * @return string
1974
+         */
1975
+        public function get_examples(){
1976
+            $output = '';
1977
+
1978
+
1979
+            // open form
1980
+            $output .= "<form class='p-5 m-5 border rounded'>";
1981
+
1982
+            // input example
1983
+            $output .= aui()->input(array(
1984
+                'type'  =>  'text',
1985
+                'id'    =>  'text-example',
1986
+                'name'    =>  'text-example',
1987
+                'placeholder'   => 'text placeholder',
1988
+                'title'   => 'Text input example',
1989
+                'value' =>  '',
1990
+                'required'  => false,
1991
+                'help_text' => 'help text',
1992
+                'label' => 'Text input example label'
1993
+            ));
1994
+
1995
+            // input example
1996
+            $output .= aui()->input(array(
1997
+                'type'  =>  'url',
1998
+                'id'    =>  'text-example2',
1999
+                'name'    =>  'text-example',
2000
+                'placeholder'   => 'url placeholder',
2001
+                'title'   => 'Text input example',
2002
+                'value' =>  '',
2003
+                'required'  => false,
2004
+                'help_text' => 'help text',
2005
+                'label' => 'Text input example label'
2006
+            ));
2007
+
2008
+            // checkbox example
2009
+            $output .= aui()->input(array(
2010
+                'type'  =>  'checkbox',
2011
+                'id'    =>  'checkbox-example',
2012
+                'name'    =>  'checkbox-example',
2013
+                'placeholder'   => 'checkbox-example',
2014
+                'title'   => 'Checkbox example',
2015
+                'value' =>  '1',
2016
+                'checked'   => true,
2017
+                'required'  => false,
2018
+                'help_text' => 'help text',
2019
+                'label' => 'Checkbox checked'
2020
+            ));
2021
+
2022
+            // checkbox example
2023
+            $output .= aui()->input(array(
2024
+                'type'  =>  'checkbox',
2025
+                'id'    =>  'checkbox-example2',
2026
+                'name'    =>  'checkbox-example2',
2027
+                'placeholder'   => 'checkbox-example',
2028
+                'title'   => 'Checkbox example',
2029
+                'value' =>  '1',
2030
+                'checked'   => false,
2031
+                'required'  => false,
2032
+                'help_text' => 'help text',
2033
+                'label' => 'Checkbox un-checked'
2034
+            ));
2035
+
2036
+            // switch example
2037
+            $output .= aui()->input(array(
2038
+                'type'  =>  'checkbox',
2039
+                'id'    =>  'switch-example',
2040
+                'name'    =>  'switch-example',
2041
+                'placeholder'   => 'checkbox-example',
2042
+                'title'   => 'Switch example',
2043
+                'value' =>  '1',
2044
+                'checked'   => true,
2045
+                'switch'    => true,
2046
+                'required'  => false,
2047
+                'help_text' => 'help text',
2048
+                'label' => 'Switch on'
2049
+            ));
2050
+
2051
+            // switch example
2052
+            $output .= aui()->input(array(
2053
+                'type'  =>  'checkbox',
2054
+                'id'    =>  'switch-example2',
2055
+                'name'    =>  'switch-example2',
2056
+                'placeholder'   => 'checkbox-example',
2057
+                'title'   => 'Switch example',
2058
+                'value' =>  '1',
2059
+                'checked'   => false,
2060
+                'switch'    => true,
2061
+                'required'  => false,
2062
+                'help_text' => 'help text',
2063
+                'label' => 'Switch off'
2064
+            ));
2065
+
2066
+            // close form
2067
+            $output .= "</form>";
2068
+
2069
+            return $output;
2070
+        }
2071
+
2072
+        /**
2073
+         * Calendar params.
2074
+         *
2075
+         * @since 0.1.44
2076
+         *
2077
+         * @return array Calendar params.
2078
+         */
2079
+        public static function calendar_params() {
2080
+            $params = array(
2081
+                'month_long_1' => __( 'January', 'aui' ),
2082
+                'month_long_2' => __( 'February', 'aui' ),
2083
+                'month_long_3' => __( 'March', 'aui' ),
2084
+                'month_long_4' => __( 'April', 'aui' ),
2085
+                'month_long_5' => __( 'May', 'aui' ),
2086
+                'month_long_6' => __( 'June', 'aui' ),
2087
+                'month_long_7' => __( 'July', 'aui' ),
2088
+                'month_long_8' => __( 'August', 'aui' ),
2089
+                'month_long_9' => __( 'September', 'aui' ),
2090
+                'month_long_10' => __( 'October', 'aui' ),
2091
+                'month_long_11' => __( 'November', 'aui' ),
2092
+                'month_long_12' => __( 'December', 'aui' ),
2093
+                'month_s_1' => _x( 'Jan', 'January abbreviation', 'aui' ),
2094
+                'month_s_2' => _x( 'Feb', 'February abbreviation', 'aui' ),
2095
+                'month_s_3' => _x( 'Mar', 'March abbreviation', 'aui' ),
2096
+                'month_s_4' => _x( 'Apr', 'April abbreviation', 'aui' ),
2097
+                'month_s_5' => _x( 'May', 'May abbreviation', 'aui' ),
2098
+                'month_s_6' => _x( 'Jun', 'June abbreviation', 'aui' ),
2099
+                'month_s_7' => _x( 'Jul', 'July abbreviation', 'aui' ),
2100
+                'month_s_8' => _x( 'Aug', 'August abbreviation', 'aui' ),
2101
+                'month_s_9' => _x( 'Sep', 'September abbreviation', 'aui' ),
2102
+                'month_s_10' => _x( 'Oct', 'October abbreviation', 'aui' ),
2103
+                'month_s_11' => _x( 'Nov', 'November abbreviation', 'aui' ),
2104
+                'month_s_12' => _x( 'Dec', 'December abbreviation', 'aui' ),
2105
+                'day_s1_1' => _x( 'S', 'Sunday initial', 'aui' ),
2106
+                'day_s1_2' => _x( 'M', 'Monday initial', 'aui' ),
2107
+                'day_s1_3' => _x( 'T', 'Tuesday initial', 'aui' ),
2108
+                'day_s1_4' => _x( 'W', 'Wednesday initial', 'aui' ),
2109
+                'day_s1_5' => _x( 'T', 'Friday initial', 'aui' ),
2110
+                'day_s1_6' => _x( 'F', 'Thursday initial', 'aui' ),
2111
+                'day_s1_7' => _x( 'S', 'Saturday initial', 'aui' ),
2112
+                'day_s2_1' => __( 'Su', 'aui' ),
2113
+                'day_s2_2' => __( 'Mo', 'aui' ),
2114
+                'day_s2_3' => __( 'Tu', 'aui' ),
2115
+                'day_s2_4' => __( 'We', 'aui' ),
2116
+                'day_s2_5' => __( 'Th', 'aui' ),
2117
+                'day_s2_6' => __( 'Fr', 'aui' ),
2118
+                'day_s2_7' => __( 'Sa', 'aui' ),
2119
+                'day_s3_1' => __( 'Sun', 'aui' ),
2120
+                'day_s3_2' => __( 'Mon', 'aui' ),
2121
+                'day_s3_3' => __( 'Tue', 'aui' ),
2122
+                'day_s3_4' => __( 'Wed', 'aui' ),
2123
+                'day_s3_5' => __( 'Thu', 'aui' ),
2124
+                'day_s3_6' => __( 'Fri', 'aui' ),
2125
+                'day_s3_7' => __( 'Sat', 'aui' ),
2126
+                'day_s5_1' => __( 'Sunday', 'aui' ),
2127
+                'day_s5_2' => __( 'Monday', 'aui' ),
2128
+                'day_s5_3' => __( 'Tuesday', 'aui' ),
2129
+                'day_s5_4' => __( 'Wednesday', 'aui' ),
2130
+                'day_s5_5' => __( 'Thursday', 'aui' ),
2131
+                'day_s5_6' => __( 'Friday', 'aui' ),
2132
+                'day_s5_7' => __( 'Saturday', 'aui' ),
2133
+                'am_lower' => __( 'am', 'aui' ),
2134
+                'pm_lower' => __( 'pm', 'aui' ),
2135
+                'am_upper' => __( 'AM', 'aui' ),
2136
+                'pm_upper' => __( 'PM', 'aui' ),
2137
+                'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2138
+                'time_24hr' => false,
2139
+                'year' => __( 'Year', 'aui' ),
2140
+                'hour' => __( 'Hour', 'aui' ),
2141
+                'minute' => __( 'Minute', 'aui' ),
2142
+                'weekAbbreviation' => __( 'Wk', 'aui' ),
2143
+                'rangeSeparator' => __( ' to ', 'aui' ),
2144
+                'scrollTitle' => __( 'Scroll to increment', 'aui' ),
2145
+                'toggleTitle' => __( 'Click to toggle', 'aui' )
2146
+            );
2147
+
2148
+            return apply_filters( 'ayecode_ui_calendar_params', $params );
2149
+        }
2150
+
2151
+        /**
2152
+         * Flatpickr calendar localize.
2153
+         *
2154
+         * @since 0.1.44
2155
+         *
2156
+         * @return string Calendar locale.
2157
+         */
2158
+        public static function flatpickr_locale() {
2159
+            $params = self::calendar_params();
2160
+
2161
+            if ( is_string( $params ) ) {
2162
+                $params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2163
+            } else {
2164
+                foreach ( (array) $params as $key => $value ) {
2165
+                    if ( ! is_scalar( $value ) ) {
2166
+                        continue;
2167
+                    }
2168
+
2169
+                    $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2170
+                }
2171
+            }
2172
+
2173
+            $day_s3 = array();
2174
+            $day_s5 = array();
2175
+
2176
+            for ( $i = 1; $i <= 7; $i ++ ) {
2177
+                $day_s3[] = addslashes( $params[ 'day_s3_' . $i ] );
2178
+                $day_s5[] = addslashes( $params[ 'day_s3_' . $i ] );
2179
+            }
2180
+
2181
+            $month_s = array();
2182
+            $month_long = array();
2183
+
2184
+            for ( $i = 1; $i <= 12; $i ++ ) {
2185
+                $month_s[] = addslashes( $params[ 'month_s_' . $i ] );
2186
+                $month_long[] = addslashes( $params[ 'month_long_' . $i ] );
2187
+            }
2188 2188
 
2189 2189
 ob_start();
2190 2190
 if ( 0 ) { ?><script><?php } ?>
@@ -2226,189 +2226,189 @@  discard block
 block discarded – undo
2226 2226
 }
2227 2227
 <?php if ( 0 ) { ?></script><?php } ?>
2228 2228
 <?php
2229
-			$locale = ob_get_clean();
2229
+            $locale = ob_get_clean();
2230 2230
 
2231
-			return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2232
-		}
2231
+            return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2232
+        }
2233 2233
 
2234
-		/**
2235
-		 * Select2 JS params.
2236
-		 *
2237
-		 * @since 0.1.44
2238
-		 *
2239
-		 * @return array Select2 JS params.
2240
-		 */
2241
-		public static function select2_params() {
2242
-			$params = array(
2243
-				'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'aui' ),
2244
-				'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'aui' ),
2245
-				'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'aui' ),
2246
-				'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'aui' ),
2247
-				'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'aui' ),
2248
-				'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'aui' ),
2249
-				'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'aui' ),
2250
-				'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'aui' ),
2251
-				'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'aui' ),
2252
-				'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'aui' ),
2253
-				'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'aui' )
2254
-			);
2255
-
2256
-			return apply_filters( 'ayecode_ui_select2_params', $params );
2257
-		}
2234
+        /**
2235
+         * Select2 JS params.
2236
+         *
2237
+         * @since 0.1.44
2238
+         *
2239
+         * @return array Select2 JS params.
2240
+         */
2241
+        public static function select2_params() {
2242
+            $params = array(
2243
+                'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'aui' ),
2244
+                'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'aui' ),
2245
+                'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'aui' ),
2246
+                'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'aui' ),
2247
+                'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'aui' ),
2248
+                'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'aui' ),
2249
+                'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'aui' ),
2250
+                'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'aui' ),
2251
+                'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'aui' ),
2252
+                'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'aui' ),
2253
+                'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'aui' )
2254
+            );
2255
+
2256
+            return apply_filters( 'ayecode_ui_select2_params', $params );
2257
+        }
2258 2258
 
2259
-		/**
2260
-		 * Select2 JS localize.
2261
-		 *
2262
-		 * @since 0.1.44
2263
-		 *
2264
-		 * @return string Select2 JS locale.
2265
-		 */
2266
-		public static function select2_locale() {
2267
-			$params = self::select2_params();
2268
-
2269
-			foreach ( (array) $params as $key => $value ) {
2270
-				if ( ! is_scalar( $value ) ) {
2271
-					continue;
2272
-				}
2259
+        /**
2260
+         * Select2 JS localize.
2261
+         *
2262
+         * @since 0.1.44
2263
+         *
2264
+         * @return string Select2 JS locale.
2265
+         */
2266
+        public static function select2_locale() {
2267
+            $params = self::select2_params();
2268
+
2269
+            foreach ( (array) $params as $key => $value ) {
2270
+                if ( ! is_scalar( $value ) ) {
2271
+                    continue;
2272
+                }
2273 2273
 
2274
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2275
-			}
2274
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2275
+            }
2276 2276
 
2277
-			$locale = json_encode( $params );
2277
+            $locale = json_encode( $params );
2278 2278
 
2279
-			return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2280
-		}
2279
+            return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2280
+        }
2281 2281
 
2282
-		/**
2283
-		 * Time ago JS localize.
2284
-		 *
2285
-		 * @since 0.1.47
2286
-		 *
2287
-		 * @return string Time ago JS locale.
2288
-		 */
2289
-		public static function timeago_locale() {
2290
-			$params = array(
2291
-				'prefix_ago' => '',
2292
-				'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'aui' ),
2293
-				'prefix_after' => _x( 'after', 'time ago', 'aui' ) . ' ',
2294
-				'suffix_after' => '',
2295
-				'seconds' => _x( 'less than a minute', 'time ago', 'aui' ),
2296
-				'minute' => _x( 'about a minute', 'time ago', 'aui' ),
2297
-				'minutes' => _x( '%d minutes', 'time ago', 'aui' ),
2298
-				'hour' => _x( 'about an hour', 'time ago', 'aui' ),
2299
-				'hours' => _x( 'about %d hours', 'time ago', 'aui' ),
2300
-				'day' => _x( 'a day', 'time ago', 'aui' ),
2301
-				'days' => _x( '%d days', 'time ago', 'aui' ),
2302
-				'month' => _x( 'about a month', 'time ago', 'aui' ),
2303
-				'months' => _x( '%d months', 'time ago', 'aui' ),
2304
-				'year' => _x( 'about a year', 'time ago', 'aui' ),
2305
-				'years' => _x( '%d years', 'time ago', 'aui' ),
2306
-			);
2307
-
2308
-			$params = apply_filters( 'ayecode_ui_timeago_params', $params );
2309
-
2310
-			foreach ( (array) $params as $key => $value ) {
2311
-				if ( ! is_scalar( $value ) ) {
2312
-					continue;
2313
-				}
2282
+        /**
2283
+         * Time ago JS localize.
2284
+         *
2285
+         * @since 0.1.47
2286
+         *
2287
+         * @return string Time ago JS locale.
2288
+         */
2289
+        public static function timeago_locale() {
2290
+            $params = array(
2291
+                'prefix_ago' => '',
2292
+                'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'aui' ),
2293
+                'prefix_after' => _x( 'after', 'time ago', 'aui' ) . ' ',
2294
+                'suffix_after' => '',
2295
+                'seconds' => _x( 'less than a minute', 'time ago', 'aui' ),
2296
+                'minute' => _x( 'about a minute', 'time ago', 'aui' ),
2297
+                'minutes' => _x( '%d minutes', 'time ago', 'aui' ),
2298
+                'hour' => _x( 'about an hour', 'time ago', 'aui' ),
2299
+                'hours' => _x( 'about %d hours', 'time ago', 'aui' ),
2300
+                'day' => _x( 'a day', 'time ago', 'aui' ),
2301
+                'days' => _x( '%d days', 'time ago', 'aui' ),
2302
+                'month' => _x( 'about a month', 'time ago', 'aui' ),
2303
+                'months' => _x( '%d months', 'time ago', 'aui' ),
2304
+                'year' => _x( 'about a year', 'time ago', 'aui' ),
2305
+                'years' => _x( '%d years', 'time ago', 'aui' ),
2306
+            );
2307
+
2308
+            $params = apply_filters( 'ayecode_ui_timeago_params', $params );
2309
+
2310
+            foreach ( (array) $params as $key => $value ) {
2311
+                if ( ! is_scalar( $value ) ) {
2312
+                    continue;
2313
+                }
2314 2314
 
2315
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2316
-			}
2315
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2316
+            }
2317 2317
 
2318
-			$locale = json_encode( $params );
2318
+            $locale = json_encode( $params );
2319 2319
 
2320
-			return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2321
-		}
2320
+            return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2321
+        }
2322 2322
 
2323
-		/**
2324
-		 * JavaScript Minifier
2325
-		 *
2326
-		 * @param $input
2327
-		 *
2328
-		 * @return mixed
2329
-		 */
2330
-		public static function minify_js($input) {
2331
-			if(trim($input) === "") return $input;
2332
-			return preg_replace(
2333
-				array(
2334
-					// Remove comment(s)
2335
-					'#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2336
-					// Remove white-space(s) outside the string and regex
2337
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2338
-					// Remove the last semicolon
2339
-					'#;+\}#',
2340
-					// Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2341
-					'#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2342
-					// --ibid. From `foo['bar']` to `foo.bar`
2343
-					'#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2344
-				),
2345
-				array(
2346
-					'$1',
2347
-					'$1$2',
2348
-					'}',
2349
-					'$1$3',
2350
-					'$1.$3'
2351
-				),
2352
-				$input);
2353
-		}
2323
+        /**
2324
+         * JavaScript Minifier
2325
+         *
2326
+         * @param $input
2327
+         *
2328
+         * @return mixed
2329
+         */
2330
+        public static function minify_js($input) {
2331
+            if(trim($input) === "") return $input;
2332
+            return preg_replace(
2333
+                array(
2334
+                    // Remove comment(s)
2335
+                    '#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2336
+                    // Remove white-space(s) outside the string and regex
2337
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2338
+                    // Remove the last semicolon
2339
+                    '#;+\}#',
2340
+                    // Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2341
+                    '#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2342
+                    // --ibid. From `foo['bar']` to `foo.bar`
2343
+                    '#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2344
+                ),
2345
+                array(
2346
+                    '$1',
2347
+                    '$1$2',
2348
+                    '}',
2349
+                    '$1$3',
2350
+                    '$1.$3'
2351
+                ),
2352
+                $input);
2353
+        }
2354 2354
 
2355
-		/**
2356
-		 * Minify CSS
2357
-		 *
2358
-		 * @param $input
2359
-		 *
2360
-		 * @return mixed
2361
-		 */
2362
-		public static function minify_css($input) {
2363
-			if(trim($input) === "") return $input;
2364
-			return preg_replace(
2365
-				array(
2366
-					// Remove comment(s)
2367
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2368
-					// Remove unused white-space(s)
2369
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2370
-					// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2371
-					'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2372
-					// Replace `:0 0 0 0` with `:0`
2373
-					'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2374
-					// Replace `background-position:0` with `background-position:0 0`
2375
-					'#(background-position):0(?=[;\}])#si',
2376
-					// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2377
-					'#(?<=[\s:,\-])0+\.(\d+)#s',
2378
-					// Minify string value
2379
-					'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2380
-					'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2381
-					// Minify HEX color code
2382
-					'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2383
-					// Replace `(border|outline):none` with `(border|outline):0`
2384
-					'#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2385
-					// Remove empty selector(s)
2386
-					'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2387
-				),
2388
-				array(
2389
-					'$1',
2390
-					'$1$2$3$4$5$6$7',
2391
-					'$1',
2392
-					':0',
2393
-					'$1:0 0',
2394
-					'.$1',
2395
-					'$1$3',
2396
-					'$1$2$4$5',
2397
-					'$1$2$3',
2398
-					'$1:0',
2399
-					'$1$2'
2400
-				),
2401
-				$input);
2402
-		}
2355
+        /**
2356
+         * Minify CSS
2357
+         *
2358
+         * @param $input
2359
+         *
2360
+         * @return mixed
2361
+         */
2362
+        public static function minify_css($input) {
2363
+            if(trim($input) === "") return $input;
2364
+            return preg_replace(
2365
+                array(
2366
+                    // Remove comment(s)
2367
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2368
+                    // Remove unused white-space(s)
2369
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2370
+                    // Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2371
+                    '#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2372
+                    // Replace `:0 0 0 0` with `:0`
2373
+                    '#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2374
+                    // Replace `background-position:0` with `background-position:0 0`
2375
+                    '#(background-position):0(?=[;\}])#si',
2376
+                    // Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2377
+                    '#(?<=[\s:,\-])0+\.(\d+)#s',
2378
+                    // Minify string value
2379
+                    '#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2380
+                    '#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2381
+                    // Minify HEX color code
2382
+                    '#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2383
+                    // Replace `(border|outline):none` with `(border|outline):0`
2384
+                    '#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2385
+                    // Remove empty selector(s)
2386
+                    '#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2387
+                ),
2388
+                array(
2389
+                    '$1',
2390
+                    '$1$2$3$4$5$6$7',
2391
+                    '$1',
2392
+                    ':0',
2393
+                    '$1:0 0',
2394
+                    '.$1',
2395
+                    '$1$3',
2396
+                    '$1$2$4$5',
2397
+                    '$1$2$3',
2398
+                    '$1:0',
2399
+                    '$1$2'
2400
+                ),
2401
+                $input);
2402
+        }
2403 2403
 
2404
-		/**
2405
-		 * Get the conditional fields JavaScript.
2406
-		 *
2407
-		 * @return mixed
2408
-		 */
2409
-		public function conditional_fields_js() {
2410
-			ob_start();
2411
-			?>
2404
+        /**
2405
+         * Get the conditional fields JavaScript.
2406
+         *
2407
+         * @return mixed
2408
+         */
2409
+        public function conditional_fields_js() {
2410
+            ob_start();
2411
+            ?>
2412 2412
 <script>
2413 2413
 /**
2414 2414
  * Conditional Fields
@@ -2912,14 +2912,14 @@  discard block
 block discarded – undo
2912 2912
 <?php do_action( 'aui_conditional_fields_js', $this ); ?>
2913 2913
 </script>
2914 2914
 			<?php
2915
-			$output = ob_get_clean();
2915
+            $output = ob_get_clean();
2916 2916
 
2917
-			return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
2918
-		}
2919
-	}
2917
+            return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
2918
+        }
2919
+    }
2920 2920
 
2921
-	/**
2922
-	 * Run the class if found.
2923
-	 */
2924
-	AyeCode_UI_Settings::instance();
2921
+    /**
2922
+     * Run the class if found.
2923
+     */
2924
+    AyeCode_UI_Settings::instance();
2925 2925
 }
2926 2926
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/class-aui.php 1 patch
Indentation   +295 added lines, -295 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit; // Exit if accessed directly
4
+    exit; // Exit if accessed directly
5 5
 }
6 6
 
7 7
 /**
@@ -11,299 +11,299 @@  discard block
 block discarded – undo
11 11
  */
12 12
 class AUI {
13 13
 
14
-	/**
15
-	 * Holds the class instance.
16
-	 *
17
-	 * @since 1.0.0
18
-	 * @var null
19
-	 */
20
-	private static $instance = null;
21
-
22
-	/**
23
-	 * Holds the current AUI version number.
24
-	 *
25
-	 * @var string $ver The current version number.
26
-	 */
27
-	public static $ver = '0.1.71';
28
-
29
-	public static $options = null;
30
-
31
-	/**
32
-	 * There can be only one.
33
-	 *
34
-	 * @since 1.0.0
35
-	 * @return AUI|null
36
-	 */
37
-	public static function instance() {
38
-		if ( self::$instance == null ) {
39
-			self::$instance = new AUI();
40
-		}
41
-
42
-		return self::$instance;
43
-	}
44
-
45
-	/**
46
-	 * AUI constructor.
47
-	 *
48
-	 * @since 1.0.0
49
-	 */
50
-	private function __construct() {
51
-		if ( function_exists( "__autoload" ) ) {
52
-			spl_autoload_register( "__autoload" );
53
-		}
54
-		spl_autoload_register( array( $this, 'autoload' ) );
55
-
56
-		// load options
57
-		self::$options = get_option('aui_options');
58
-	}
59
-
60
-	/**
61
-	 * Autoload any components on the fly.
62
-	 *
63
-	 * @since 1.0.0
64
-	 *
65
-	 * @param $classname
66
-	 */
67
-	private function autoload( $classname ) {
68
-		$class     = str_replace( '_', '-', strtolower( $classname ) );
69
-		$file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
-		if ( $file_path && is_readable( $file_path ) ) {
71
-			include_once( $file_path );
72
-		}
73
-	}
74
-
75
-	/**
76
-	 * Get the AUI options.
77
-	 *
78
-	 * @param $option
79
-	 *
80
-	 * @return string|void
81
-	 */
82
-	public function get_option( $option ){
83
-		$result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
-
85
-		if ( ! $result && $option) {
86
-			if( $option == 'color_primary' ){
87
-				$result = AUI_PRIMARY_COLOR;
88
-			}elseif( $option == 'color_secondary' ){
89
-				$result = AUI_SECONDARY_COLOR;
90
-			}
91
-		}
92
-		return $result;
93
-	}
94
-
95
-	public function render( $items = array(), $echo = false ) {
96
-		$output = '';
97
-
98
-		if ( ! empty( $items ) ) {
99
-			foreach ( $items as $args ) {
100
-				$render = isset( $args['render'] ) ? $args['render'] : '';
101
-				if ( $render && method_exists( __CLASS__, $render ) ) {
102
-					$output .= $this->$render( $args );
103
-				}
104
-			}
105
-		}
106
-
107
-		if ( $echo ) {
108
-			echo $output;
109
-		}else{
110
-			return $output;
111
-		}
112
-
113
-	}
114
-
115
-	/**
116
-	 * Render and return a bootstrap alert component.
117
-	 *
118
-	 * @since 1.0.0
119
-	 *
120
-	 * @param array $args The function arguments.
121
-	 * @param bool  $echo If we should return or echo.
122
-	 *
123
-	 * @return string The rendered component.
124
-	 */
125
-	public function alert( $args = array(), $echo = false ) {
126
-		$output = AUI_Component_Alert::get( $args );
127
-
128
-		if ( $echo ) {
129
-			echo $output;
130
-		}else{
131
-			return $output;
132
-		}
133
-	}
134
-
135
-	/**
136
-	 * Render and return a bootstrap input component.
137
-	 *
138
-	 * @since 1.0.0
139
-	 *
140
-	 * @param array $args The function arguments.
141
-	 * @param bool  $echo If we should return or echo.
142
-	 *
143
-	 * @return string The rendered component.
144
-	 */
145
-	public function input( $args = array(), $echo = false ) {
146
-		$output = AUI_Component_Input::input( $args );
147
-
148
-		if ( $echo ) {
149
-			echo $output;
150
-		}else{
151
-			return $output;
152
-		}
153
-	}
154
-
155
-	/**
156
-	 * Render and return a bootstrap textarea component.
157
-	 *
158
-	 * @since 1.0.0
159
-	 *
160
-	 * @param array $args The function arguments.
161
-	 * @param bool  $echo If we should return or echo.
162
-	 *
163
-	 * @return string The rendered component.
164
-	 */
165
-	public function textarea( $args = array(), $echo = false ) {
166
-		$output = AUI_Component_Input::textarea( $args );
167
-
168
-		if ( $echo ) {
169
-			echo $output;
170
-		}else{
171
-			return $output;
172
-		}
173
-	}
174
-
175
-	/**
176
-	 * Render and return a bootstrap button component.
177
-	 *
178
-	 * @since 1.0.0
179
-	 *
180
-	 * @param array $args The function arguments.
181
-	 * @param bool  $echo If we should return or echo.
182
-	 *
183
-	 * @return string The rendered component.
184
-	 */
185
-	public function button( $args = array(), $echo = false ) {
186
-		$output = AUI_Component_Button::get( $args );
187
-
188
-		if ( $echo ) {
189
-			echo $output;
190
-		}else{
191
-			return $output;
192
-		}
193
-	}
194
-
195
-	/**
196
-	 * Render and return a bootstrap button component.
197
-	 *
198
-	 * @since 1.0.0
199
-	 *
200
-	 * @param array $args The function arguments.
201
-	 * @param bool  $echo If we should return or echo.
202
-	 *
203
-	 * @return string The rendered component.
204
-	 */
205
-	public function badge( $args = array(), $echo = false ) {
206
-		$defaults = array(
207
-			'class' => 'badge badge-primary align-middle',
208
-		);
209
-
210
-		// maybe set type.
211
-		if ( empty( $args['href'] ) ) {
212
-			$defaults['type'] = 'badge';
213
-		}
214
-
215
-		/**
216
-		 * Parse incoming $args into an array and merge it with $defaults
217
-		 */
218
-		$args = wp_parse_args( $args, $defaults );
219
-
220
-		$output = AUI_Component_Button::get( $args );
221
-
222
-		if ( $echo ) {
223
-			echo $output;
224
-		}else{
225
-			return $output;
226
-		}
227
-	}
228
-
229
-	/**
230
-	 * Render and return a bootstrap dropdown component.
231
-	 *
232
-	 * @since 1.0.0
233
-	 *
234
-	 * @param array $args The function arguments.
235
-	 * @param bool  $echo If we should return or echo.
236
-	 *
237
-	 * @return string The rendered component.
238
-	 */
239
-	public function dropdown( $args = array(), $echo = false ) {
240
-		$output = AUI_Component_Dropdown::get( $args );
241
-
242
-		if ( $echo ) {
243
-			echo $output;
244
-		}else{
245
-			return $output;
246
-		}
247
-	}
248
-
249
-	/**
250
-	 * Render and return a bootstrap select component.
251
-	 *
252
-	 * @since 1.0.0
253
-	 *
254
-	 * @param array $args The function arguments.
255
-	 * @param bool  $echo If we should return or echo.
256
-	 *
257
-	 * @return string The rendered component.
258
-	 */
259
-	public function select( $args = array(), $echo = false ) {
260
-		$output = AUI_Component_Input::select( $args );
261
-
262
-		if ( $echo ) {
263
-			echo $output;
264
-		}else{
265
-			return $output;
266
-		}
267
-	}
268
-
269
-	/**
270
-	 * Render and return a bootstrap radio component.
271
-	 *
272
-	 * @since 1.0.0
273
-	 *
274
-	 * @param array $args The function arguments.
275
-	 * @param bool  $echo If we should return or echo.
276
-	 *
277
-	 * @return string The rendered component.
278
-	 */
279
-	public function radio( $args = array(), $echo = false ) {
280
-		$output = AUI_Component_Input::radio( $args );
281
-
282
-		if ( $echo ) {
283
-			echo $output;
284
-		}else{
285
-			return $output;
286
-		}
287
-	}
288
-
289
-	/**
290
-	 * Render and return a bootstrap pagination component.
291
-	 *
292
-	 * @since 1.0.0
293
-	 *
294
-	 * @param array $args The function arguments.
295
-	 * @param bool  $echo If we should return or echo.
296
-	 *
297
-	 * @return string The rendered component.
298
-	 */
299
-	public function pagination( $args = array(), $echo = false ) {
300
-		$output = AUI_Component_Pagination::get( $args );
301
-
302
-		if ( $echo ) {
303
-			echo $output;
304
-		}else{
305
-			return $output;
306
-		}
307
-	}
14
+    /**
15
+     * Holds the class instance.
16
+     *
17
+     * @since 1.0.0
18
+     * @var null
19
+     */
20
+    private static $instance = null;
21
+
22
+    /**
23
+     * Holds the current AUI version number.
24
+     *
25
+     * @var string $ver The current version number.
26
+     */
27
+    public static $ver = '0.1.71';
28
+
29
+    public static $options = null;
30
+
31
+    /**
32
+     * There can be only one.
33
+     *
34
+     * @since 1.0.0
35
+     * @return AUI|null
36
+     */
37
+    public static function instance() {
38
+        if ( self::$instance == null ) {
39
+            self::$instance = new AUI();
40
+        }
41
+
42
+        return self::$instance;
43
+    }
44
+
45
+    /**
46
+     * AUI constructor.
47
+     *
48
+     * @since 1.0.0
49
+     */
50
+    private function __construct() {
51
+        if ( function_exists( "__autoload" ) ) {
52
+            spl_autoload_register( "__autoload" );
53
+        }
54
+        spl_autoload_register( array( $this, 'autoload' ) );
55
+
56
+        // load options
57
+        self::$options = get_option('aui_options');
58
+    }
59
+
60
+    /**
61
+     * Autoload any components on the fly.
62
+     *
63
+     * @since 1.0.0
64
+     *
65
+     * @param $classname
66
+     */
67
+    private function autoload( $classname ) {
68
+        $class     = str_replace( '_', '-', strtolower( $classname ) );
69
+        $file_path = trailingslashit( dirname( __FILE__ ) ) . "components/class-" . $class . '.php';
70
+        if ( $file_path && is_readable( $file_path ) ) {
71
+            include_once( $file_path );
72
+        }
73
+    }
74
+
75
+    /**
76
+     * Get the AUI options.
77
+     *
78
+     * @param $option
79
+     *
80
+     * @return string|void
81
+     */
82
+    public function get_option( $option ){
83
+        $result = isset(self::$options[$option]) ? esc_attr(self::$options[$option]) : '';
84
+
85
+        if ( ! $result && $option) {
86
+            if( $option == 'color_primary' ){
87
+                $result = AUI_PRIMARY_COLOR;
88
+            }elseif( $option == 'color_secondary' ){
89
+                $result = AUI_SECONDARY_COLOR;
90
+            }
91
+        }
92
+        return $result;
93
+    }
94
+
95
+    public function render( $items = array(), $echo = false ) {
96
+        $output = '';
97
+
98
+        if ( ! empty( $items ) ) {
99
+            foreach ( $items as $args ) {
100
+                $render = isset( $args['render'] ) ? $args['render'] : '';
101
+                if ( $render && method_exists( __CLASS__, $render ) ) {
102
+                    $output .= $this->$render( $args );
103
+                }
104
+            }
105
+        }
106
+
107
+        if ( $echo ) {
108
+            echo $output;
109
+        }else{
110
+            return $output;
111
+        }
112
+
113
+    }
114
+
115
+    /**
116
+     * Render and return a bootstrap alert component.
117
+     *
118
+     * @since 1.0.0
119
+     *
120
+     * @param array $args The function arguments.
121
+     * @param bool  $echo If we should return or echo.
122
+     *
123
+     * @return string The rendered component.
124
+     */
125
+    public function alert( $args = array(), $echo = false ) {
126
+        $output = AUI_Component_Alert::get( $args );
127
+
128
+        if ( $echo ) {
129
+            echo $output;
130
+        }else{
131
+            return $output;
132
+        }
133
+    }
134
+
135
+    /**
136
+     * Render and return a bootstrap input component.
137
+     *
138
+     * @since 1.0.0
139
+     *
140
+     * @param array $args The function arguments.
141
+     * @param bool  $echo If we should return or echo.
142
+     *
143
+     * @return string The rendered component.
144
+     */
145
+    public function input( $args = array(), $echo = false ) {
146
+        $output = AUI_Component_Input::input( $args );
147
+
148
+        if ( $echo ) {
149
+            echo $output;
150
+        }else{
151
+            return $output;
152
+        }
153
+    }
154
+
155
+    /**
156
+     * Render and return a bootstrap textarea component.
157
+     *
158
+     * @since 1.0.0
159
+     *
160
+     * @param array $args The function arguments.
161
+     * @param bool  $echo If we should return or echo.
162
+     *
163
+     * @return string The rendered component.
164
+     */
165
+    public function textarea( $args = array(), $echo = false ) {
166
+        $output = AUI_Component_Input::textarea( $args );
167
+
168
+        if ( $echo ) {
169
+            echo $output;
170
+        }else{
171
+            return $output;
172
+        }
173
+    }
174
+
175
+    /**
176
+     * Render and return a bootstrap button component.
177
+     *
178
+     * @since 1.0.0
179
+     *
180
+     * @param array $args The function arguments.
181
+     * @param bool  $echo If we should return or echo.
182
+     *
183
+     * @return string The rendered component.
184
+     */
185
+    public function button( $args = array(), $echo = false ) {
186
+        $output = AUI_Component_Button::get( $args );
187
+
188
+        if ( $echo ) {
189
+            echo $output;
190
+        }else{
191
+            return $output;
192
+        }
193
+    }
194
+
195
+    /**
196
+     * Render and return a bootstrap button component.
197
+     *
198
+     * @since 1.0.0
199
+     *
200
+     * @param array $args The function arguments.
201
+     * @param bool  $echo If we should return or echo.
202
+     *
203
+     * @return string The rendered component.
204
+     */
205
+    public function badge( $args = array(), $echo = false ) {
206
+        $defaults = array(
207
+            'class' => 'badge badge-primary align-middle',
208
+        );
209
+
210
+        // maybe set type.
211
+        if ( empty( $args['href'] ) ) {
212
+            $defaults['type'] = 'badge';
213
+        }
214
+
215
+        /**
216
+         * Parse incoming $args into an array and merge it with $defaults
217
+         */
218
+        $args = wp_parse_args( $args, $defaults );
219
+
220
+        $output = AUI_Component_Button::get( $args );
221
+
222
+        if ( $echo ) {
223
+            echo $output;
224
+        }else{
225
+            return $output;
226
+        }
227
+    }
228
+
229
+    /**
230
+     * Render and return a bootstrap dropdown component.
231
+     *
232
+     * @since 1.0.0
233
+     *
234
+     * @param array $args The function arguments.
235
+     * @param bool  $echo If we should return or echo.
236
+     *
237
+     * @return string The rendered component.
238
+     */
239
+    public function dropdown( $args = array(), $echo = false ) {
240
+        $output = AUI_Component_Dropdown::get( $args );
241
+
242
+        if ( $echo ) {
243
+            echo $output;
244
+        }else{
245
+            return $output;
246
+        }
247
+    }
248
+
249
+    /**
250
+     * Render and return a bootstrap select component.
251
+     *
252
+     * @since 1.0.0
253
+     *
254
+     * @param array $args The function arguments.
255
+     * @param bool  $echo If we should return or echo.
256
+     *
257
+     * @return string The rendered component.
258
+     */
259
+    public function select( $args = array(), $echo = false ) {
260
+        $output = AUI_Component_Input::select( $args );
261
+
262
+        if ( $echo ) {
263
+            echo $output;
264
+        }else{
265
+            return $output;
266
+        }
267
+    }
268
+
269
+    /**
270
+     * Render and return a bootstrap radio component.
271
+     *
272
+     * @since 1.0.0
273
+     *
274
+     * @param array $args The function arguments.
275
+     * @param bool  $echo If we should return or echo.
276
+     *
277
+     * @return string The rendered component.
278
+     */
279
+    public function radio( $args = array(), $echo = false ) {
280
+        $output = AUI_Component_Input::radio( $args );
281
+
282
+        if ( $echo ) {
283
+            echo $output;
284
+        }else{
285
+            return $output;
286
+        }
287
+    }
288
+
289
+    /**
290
+     * Render and return a bootstrap pagination component.
291
+     *
292
+     * @since 1.0.0
293
+     *
294
+     * @param array $args The function arguments.
295
+     * @param bool  $echo If we should return or echo.
296
+     *
297
+     * @return string The rendered component.
298
+     */
299
+    public function pagination( $args = array(), $echo = false ) {
300
+        $output = AUI_Component_Pagination::get( $args );
301
+
302
+        if ( $echo ) {
303
+            echo $output;
304
+        }else{
305
+            return $output;
306
+        }
307
+    }
308 308
 
309 309
 }
310 310
\ No newline at end of file
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +222 added lines, -222 removed lines patch added patch discarded remove patch
@@ -13,30 +13,30 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
34
-	public $order = 8;
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34
+    public $order = 8;
35 35
 
36 36
     /**
37
-	 * Class constructor.
38
-	 */
39
-	public function __construct() {
37
+     * Class constructor.
38
+     */
39
+    public function __construct() {
40 40
         parent::__construct();
41 41
 
42 42
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -44,24 +44,24 @@  discard block
 block discarded – undo
44 44
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
45 45
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
46 46
 
47
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
47
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
53 53
 
54 54
     }
55 55
 
56 56
     /**
57
-	 * Process Payment.
58
-	 *
59
-	 * @param WPInv_Invoice $invoice Invoice.
60
-	 * @param array $submission_data Posted checkout fields.
61
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
-	 * @return array
63
-	 */
64
-	public function process_payment( $invoice, $submission_data, $submission ) {
57
+     * Process Payment.
58
+     *
59
+     * @param WPInv_Invoice $invoice Invoice.
60
+     * @param array $submission_data Posted checkout fields.
61
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
+     * @return array
63
+     */
64
+    public function process_payment( $invoice, $submission_data, $submission ) {
65 65
 
66 66
         // Add a transaction id.
67 67
         $invoice->set_transaction_id( $invoice->generate_key( 'bt_' ) );
@@ -82,66 +82,66 @@  discard block
 block discarded – undo
82 82
     }
83 83
 
84 84
     /**
85
-	 * Output for the order received page.
86
-	 *
87
-	 * @param WPInv_Invoice $invoice Invoice.
88
-	 */
89
-	public function thankyou_page( $invoice ) {
85
+     * Output for the order received page.
86
+     *
87
+     * @param WPInv_Invoice $invoice Invoice.
88
+     */
89
+    public function thankyou_page( $invoice ) {
90 90
 
91 91
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
92 92
 
93
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
93
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
94 94
 
95 95
             if ( ! empty( $this->instructions ) ) {
96 96
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
97
-			}
97
+            }
98 98
 
99
-			$this->bank_details( $invoice );
99
+            $this->bank_details( $invoice );
100 100
 
101
-			echo '</div>';
101
+            echo '</div>';
102 102
 
103 103
         }
104 104
 
105
-	}
105
+    }
106 106
 
107 107
     /**
108
-	 * Add content to the WPI emails.
109
-	 *
110
-	 * @param WPInv_Invoice $invoice Invoice.
111
-	 * @param string     $email_type Email format: plain text or HTML.
112
-	 * @param bool     $sent_to_admin Sent to admin.
113
-	 */
114
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
108
+     * Add content to the WPI emails.
109
+     *
110
+     * @param WPInv_Invoice $invoice Invoice.
111
+     * @param string     $email_type Email format: plain text or HTML.
112
+     * @param bool     $sent_to_admin Sent to admin.
113
+     */
114
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
115 115
 
116
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
116
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
117 117
 
118
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
118
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
119 119
 
120
-			if ( $this->instructions ) {
121
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
120
+            if ( $this->instructions ) {
121
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
122 122
             }
123 123
 
124
-			$this->bank_details( $invoice );
124
+            $this->bank_details( $invoice );
125 125
 
126
-			echo '</div>';
126
+            echo '</div>';
127 127
 
128
-		}
128
+        }
129 129
 
130 130
     }
131 131
 
132 132
     /**
133
-	 * Get bank details and place into a list format.
134
-	 *
135
-	 * @param WPInv_Invoice $invoice Invoice.
136
-	 */
137
-	protected function bank_details( $invoice ) {
133
+     * Get bank details and place into a list format.
134
+     *
135
+     * @param WPInv_Invoice $invoice Invoice.
136
+     */
137
+    protected function bank_details( $invoice ) {
138 138
 
139
-		// Get the invoice country and country $locale.
140
-		$country = $invoice->get_country();
141
-		$locale  = $this->get_country_locale();
139
+        // Get the invoice country and country $locale.
140
+        $country = $invoice->get_country();
141
+        $locale  = $this->get_country_locale();
142 142
 
143
-		// Get sortcode label in the $locale array and use appropriate one.
144
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
143
+        // Get sortcode label in the $locale array and use appropriate one.
144
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
145 145
 
146 146
         $bank_fields = array(
147 147
             'ac_name'   => __( 'Account Name', 'invoicing' ),
@@ -160,11 +160,11 @@  discard block
 block discarded – undo
160 160
 
161 161
             if ( ! empty( $value ) ) {
162 162
                 $bank_info[ $field ] = array(
163
-					'label' => $label,
164
-					'value' => $value,
165
-				);
163
+                    'label' => $label,
164
+                    'value' => $value,
165
+                );
166 166
             }
167
-		}
167
+        }
168 168
 
169 169
         $bank_info = apply_filters( 'wpinv_bank_info', $bank_info, $invoice );
170 170
 
@@ -172,139 +172,139 @@  discard block
 block discarded – undo
172 172
             return;
173 173
         }
174 174
 
175
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
175
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
176
+
177
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
178
+
179
+        foreach ( $bank_info as $key => $data ) {
180
+            echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
181
+        }
182
+
183
+        echo '</table>';
176 184
 
177
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
185
+    }
178 186
 
179
-		foreach ( $bank_info as $key => $data ) {
180
-			echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
181
-		}
187
+    /**
188
+     * Get country locale if localized.
189
+     *
190
+     * @return array
191
+     */
192
+    public function get_country_locale() {
193
+
194
+        if ( empty( $this->locale ) ) {
195
+
196
+            // Locale information to be used - only those that are not 'Sort Code'.
197
+            $this->locale = apply_filters(
198
+                'getpaid_get_bank_transfer_locale',
199
+                array(
200
+                    'AU' => array(
201
+                        'sortcode' => array(
202
+                            'label' => __( 'BSB', 'invoicing' ),
203
+                        ),
204
+                    ),
205
+                    'CA' => array(
206
+                        'sortcode' => array(
207
+                            'label' => __( 'Bank transit number', 'invoicing' ),
208
+                        ),
209
+                    ),
210
+                    'IN' => array(
211
+                        'sortcode' => array(
212
+                            'label' => __( 'IFSC', 'invoicing' ),
213
+                        ),
214
+                    ),
215
+                    'IT' => array(
216
+                        'sortcode' => array(
217
+                            'label' => __( 'Branch sort', 'invoicing' ),
218
+                        ),
219
+                    ),
220
+                    'NZ' => array(
221
+                        'sortcode' => array(
222
+                            'label' => __( 'Bank code', 'invoicing' ),
223
+                        ),
224
+                    ),
225
+                    'SE' => array(
226
+                        'sortcode' => array(
227
+                            'label' => __( 'Bank code', 'invoicing' ),
228
+                        ),
229
+                    ),
230
+                    'US' => array(
231
+                        'sortcode' => array(
232
+                            'label' => __( 'Routing number', 'invoicing' ),
233
+                        ),
234
+                    ),
235
+                    'ZA' => array(
236
+                        'sortcode' => array(
237
+                            'label' => __( 'Branch code', 'invoicing' ),
238
+                        ),
239
+                    ),
240
+                )
241
+            );
182 242
 
183
-		echo '</table>';
243
+        }
244
+
245
+        return $this->locale;
184 246
 
185 247
     }
186 248
 
187 249
     /**
188
-	 * Get country locale if localized.
189
-	 *
190
-	 * @return array
191
-	 */
192
-	public function get_country_locale() {
193
-
194
-		if ( empty( $this->locale ) ) {
195
-
196
-			// Locale information to be used - only those that are not 'Sort Code'.
197
-			$this->locale = apply_filters(
198
-				'getpaid_get_bank_transfer_locale',
199
-				array(
200
-					'AU' => array(
201
-						'sortcode' => array(
202
-							'label' => __( 'BSB', 'invoicing' ),
203
-						),
204
-					),
205
-					'CA' => array(
206
-						'sortcode' => array(
207
-							'label' => __( 'Bank transit number', 'invoicing' ),
208
-						),
209
-					),
210
-					'IN' => array(
211
-						'sortcode' => array(
212
-							'label' => __( 'IFSC', 'invoicing' ),
213
-						),
214
-					),
215
-					'IT' => array(
216
-						'sortcode' => array(
217
-							'label' => __( 'Branch sort', 'invoicing' ),
218
-						),
219
-					),
220
-					'NZ' => array(
221
-						'sortcode' => array(
222
-							'label' => __( 'Bank code', 'invoicing' ),
223
-						),
224
-					),
225
-					'SE' => array(
226
-						'sortcode' => array(
227
-							'label' => __( 'Bank code', 'invoicing' ),
228
-						),
229
-					),
230
-					'US' => array(
231
-						'sortcode' => array(
232
-							'label' => __( 'Routing number', 'invoicing' ),
233
-						),
234
-					),
235
-					'ZA' => array(
236
-						'sortcode' => array(
237
-							'label' => __( 'Branch code', 'invoicing' ),
238
-						),
239
-					),
240
-				)
241
-			);
242
-
243
-		}
244
-
245
-		return $this->locale;
246
-
247
-	}
248
-
249
-	/**
250
-	 * Filters the gateway settings.
251
-	 *
252
-	 * @param array $admin_settings
253
-	 */
254
-	public function admin_settings( $admin_settings ) {
250
+     * Filters the gateway settings.
251
+     *
252
+     * @param array $admin_settings
253
+     */
254
+    public function admin_settings( $admin_settings ) {
255 255
 
256 256
         $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
257
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
257
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
258 258
 
259
-		$locale  = $this->get_country_locale();
259
+        $locale  = $this->get_country_locale();
260 260
 
261
-		// Get sortcode label in the $locale array and use appropriate one.
262
-		$country  = wpinv_default_billing_country();
263
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
261
+        // Get sortcode label in the $locale array and use appropriate one.
262
+        $country  = wpinv_default_billing_country();
263
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
264 264
 
265
-		$admin_settings['bank_transfer_ac_name'] = array(
265
+        $admin_settings['bank_transfer_ac_name'] = array(
266 266
             'type' => 'text',
267 267
             'id'   => 'bank_transfer_ac_name',
268 268
             'name' => __( 'Account Name', 'invoicing' ),
269
-		);
269
+        );
270 270
 
271
-		$admin_settings['bank_transfer_ac_no'] = array(
271
+        $admin_settings['bank_transfer_ac_no'] = array(
272 272
             'type' => 'text',
273 273
             'id'   => 'bank_transfer_ac_no',
274 274
             'name' => __( 'Account Number', 'invoicing' ),
275
-		);
275
+        );
276 276
 
277
-		$admin_settings['bank_transfer_bank_name'] = array(
277
+        $admin_settings['bank_transfer_bank_name'] = array(
278 278
             'type' => 'text',
279 279
             'id'   => 'bank_transfer_bank_name',
280 280
             'name' => __( 'Bank Name', 'invoicing' ),
281
-		);
281
+        );
282 282
 
283
-		$admin_settings['bank_transfer_ifsc'] = array(
283
+        $admin_settings['bank_transfer_ifsc'] = array(
284 284
             'type' => 'text',
285 285
             'id'   => 'bank_transfer_ifsc',
286 286
             'name' => __( 'IFSC Code', 'invoicing' ),
287
-		);
287
+        );
288 288
 
289
-		$admin_settings['bank_transfer_iban'] = array(
289
+        $admin_settings['bank_transfer_iban'] = array(
290 290
             'type' => 'text',
291 291
             'id'   => 'bank_transfer_iban',
292 292
             'name' => __( 'IBAN', 'invoicing' ),
293
-		);
293
+        );
294 294
 
295
-		$admin_settings['bank_transfer_bic'] = array(
295
+        $admin_settings['bank_transfer_bic'] = array(
296 296
             'type' => 'text',
297 297
             'id'   => 'bank_transfer_bic',
298 298
             'name' => __( 'BIC/Swift Code', 'invoicing' ),
299
-		);
299
+        );
300 300
 
301
-		$admin_settings['bank_transfer_sort_code'] = array(
302
-			'type' => 'text',
303
-			'id'   => 'bank_transfer_sort_code',
304
-			'name' => $sortcode,
305
-		);
301
+        $admin_settings['bank_transfer_sort_code'] = array(
302
+            'type' => 'text',
303
+            'id'   => 'bank_transfer_sort_code',
304
+            'name' => $sortcode,
305
+        );
306 306
 
307
-		$admin_settings['bank_transfer_info'] = array(
307
+        $admin_settings['bank_transfer_info'] = array(
308 308
             'id'   => 'bank_transfer_info',
309 309
             'name' => __( 'Instructions', 'invoicing' ),
310 310
             'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
@@ -314,17 +314,17 @@  discard block
 block discarded – undo
314 314
             'rows' => 5,
315 315
         );
316 316
 
317
-		return $admin_settings;
318
-	}
317
+        return $admin_settings;
318
+    }
319 319
 
320
-	/**
321
-	 * Processes invoice addons.
322
-	 *
323
-	 * @param WPInv_Invoice $invoice
324
-	 * @param GetPaid_Form_Item[] $items
325
-	 * @return WPInv_Invoice
326
-	 */
327
-	public function process_addons( $invoice, $items ) {
320
+    /**
321
+     * Processes invoice addons.
322
+     *
323
+     * @param WPInv_Invoice $invoice
324
+     * @param GetPaid_Form_Item[] $items
325
+     * @return WPInv_Invoice
326
+     */
327
+    public function process_addons( $invoice, $items ) {
328 328
 
329 329
         foreach ( $items as $item ) {
330 330
             $invoice->add_item( $item );
@@ -332,66 +332,66 @@  discard block
 block discarded – undo
332 332
 
333 333
         $invoice->recalculate_total();
334 334
         $invoice->save();
335
-	}
335
+    }
336 336
 
337
-	/**
338
-	 * (Maybe) renews a bank transfer subscription profile.
339
-	 *
340
-	 *
337
+    /**
338
+     * (Maybe) renews a bank transfer subscription profile.
339
+     *
340
+     *
341 341
      * @param WPInv_Subscription $subscription
342
-	 */
343
-	public function maybe_renew_subscription( $subscription ) {
342
+     */
343
+    public function maybe_renew_subscription( $subscription ) {
344 344
 
345 345
         // Ensure its our subscription && it's active.
346 346
         if ( $this->id === $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
347
-			$subscription->create_payment();
347
+            $subscription->create_payment();
348 348
         }
349 349
 
350 350
     }
351 351
 
352
-	/**
353
-	 * Process a bank transfer payment.
354
-	 *
355
-	 *
352
+    /**
353
+     * Process a bank transfer payment.
354
+     *
355
+     *
356 356
      * @param WPInv_Invoice $invoice
357
-	 */
358
-	public function invoice_paid( $invoice ) {
359
-
360
-		// Abort if not paid by bank transfer.
361
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
362
-			return;
363
-		}
364
-
365
-		// Is it a parent payment?
366
-		if ( 0 == $invoice->get_parent_id() ) {
367
-
368
-			// (Maybe) activate subscriptions.
369
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
370
-
371
-			if ( ! empty( $subscriptions ) ) {
372
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
373
-
374
-				foreach ( $subscriptions as $subscription ) {
375
-					if ( $subscription->exists() ) {
376
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
377
-						$expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
378
-
379
-						$subscription->set_next_renewal_date( $expiry );
380
-						$subscription->set_date_created( current_time( 'mysql' ) );
381
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
382
-						$subscription->activate();
383
-					}
384
-				}
357
+     */
358
+    public function invoice_paid( $invoice ) {
359
+
360
+        // Abort if not paid by bank transfer.
361
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
362
+            return;
363
+        }
364
+
365
+        // Is it a parent payment?
366
+        if ( 0 == $invoice->get_parent_id() ) {
367
+
368
+            // (Maybe) activate subscriptions.
369
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
370
+
371
+            if ( ! empty( $subscriptions ) ) {
372
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
373
+
374
+                foreach ( $subscriptions as $subscription ) {
375
+                    if ( $subscription->exists() ) {
376
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
377
+                        $expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
378
+
379
+                        $subscription->set_next_renewal_date( $expiry );
380
+                        $subscription->set_date_created( current_time( 'mysql' ) );
381
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
382
+                        $subscription->activate();
383
+                    }
384
+                }
385 385
 }
386 386
 } else {
387 387
 
388
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
388
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
389 389
 
390
-			// Renew the subscription.
391
-			if ( $subscription && $subscription->exists() ) {
392
-				$subscription->add_payment( array(), $invoice );
393
-				$subscription->renew();
394
-					}
390
+            // Renew the subscription.
391
+            if ( $subscription && $subscription->exists() ) {
392
+                $subscription->add_payment( array(), $invoice );
393
+                $subscription->renew();
394
+                    }
395 395
 }
396 396
 
397 397
     }
Please login to merge, or discard this patch.
widgets/subscriptions.php 1 patch
Indentation   +347 added lines, -347 removed lines patch added patch discarded remove patch
@@ -14,143 +14,143 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class WPInv_Subscriptions_Widget extends WP_Super_Duper {
16 16
 
17
-	/**
18
-	 * Register the widget with WordPress.
19
-	 *
20
-	 */
21
-	public function __construct() {
22
-
23
-		$options = array(
24
-			'textdomain'     => 'invoicing',
25
-			'block-icon'     => 'controls-repeat',
26
-			'block-category' => 'widgets',
27
-			'block-keywords' => "['invoicing','subscriptions', 'getpaid']",
28
-			'class_name'     => __CLASS__,
29
-			'base_id'        => 'wpinv_subscriptions',
30
-			'name'           => __( 'GetPaid > Subscriptions', 'invoicing' ),
31
-			'widget_ops'     => array(
32
-				'classname'   => 'getpaid-subscriptions bsui',
33
-				'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ),
34
-			),
35
-			'arguments'      => array(
36
-				'title' => array(
37
-					'title'    => __( 'Widget title', 'invoicing' ),
38
-					'desc'     => __( 'Enter widget title.', 'invoicing' ),
39
-					'type'     => 'text',
40
-					'desc_tip' => true,
41
-					'default'  => '',
42
-					'advanced' => false,
43
-				),
44
-			),
45
-
46
-		);
47
-
48
-		parent::__construct( $options );
49
-	}
50
-
51
-	/**
52
-	 * Retrieves current user's subscriptions.
53
-	 *
54
-	 * @return GetPaid_Subscriptions_Query
55
-	 */
56
-	public function get_subscriptions() {
57
-
58
-		// Prepare license args.
59
-		$args  = array(
60
-			'customer_in' => get_current_user_id(),
61
-			'paged'       => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1,
62
-		);
63
-
64
-		return new GetPaid_Subscriptions_Query( $args );
65
-
66
-	}
67
-
68
-	/**
69
-	 * The Super block output function.
70
-	 *
71
-	 * @param array $args
72
-	 * @param array $widget_args
73
-	 * @param string $content
74
-	 *
75
-	 * @return mixed|string|bool
76
-	 */
77
-	public function output( $args = array(), $widget_args = array(), $content = '' ) {
78
-
79
-		// Ensure that the user is logged in.
80
-		if ( ! is_user_logged_in() ) {
81
-
82
-			return aui()->alert(
83
-				array(
84
-					'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ),
85
-					'type'    => 'error',
86
-				)
87
-			);
88
-
89
-		}
90
-
91
-		// Are we displaying a single subscription?
92
-		if ( isset( $_GET['subscription'] ) ) {
93
-			return $this->display_single_subscription( intval( $_GET['subscription'] ) );
94
-		}
95
-
96
-		// Retrieve the user's subscriptions.
97
-		$subscriptions = $this->get_subscriptions();
98
-
99
-		// Start the output buffer.
100
-		ob_start();
101
-
102
-		// Backwards compatibility.
103
-		do_action( 'wpinv_before_user_subscriptions' );
104
-
105
-		// Display errors and notices.
106
-		wpinv_print_errors();
107
-
108
-		do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions );
109
-
110
-		// Print the table header.
111
-		$this->print_table_header();
112
-
113
-		// Print table body.
114
-		$this->print_table_body( $subscriptions->get_results() );
115
-
116
-		// Print table footer.
117
-		$this->print_table_footer();
118
-
119
-		// Print the navigation.
120
-		$this->print_navigation( $subscriptions->get_total() );
121
-
122
-		// Backwards compatibility.
123
-		do_action( 'wpinv_after_user_subscriptions' );
124
-
125
-		// Return the output.
126
-		return ob_get_clean();
127
-
128
-	}
129
-
130
-	/**
131
-	 * Retrieves the subscription columns.
132
-	 *
133
-	 * @return array
134
-	 */
135
-	public function get_subscriptions_table_columns() {
17
+    /**
18
+     * Register the widget with WordPress.
19
+     *
20
+     */
21
+    public function __construct() {
22
+
23
+        $options = array(
24
+            'textdomain'     => 'invoicing',
25
+            'block-icon'     => 'controls-repeat',
26
+            'block-category' => 'widgets',
27
+            'block-keywords' => "['invoicing','subscriptions', 'getpaid']",
28
+            'class_name'     => __CLASS__,
29
+            'base_id'        => 'wpinv_subscriptions',
30
+            'name'           => __( 'GetPaid > Subscriptions', 'invoicing' ),
31
+            'widget_ops'     => array(
32
+                'classname'   => 'getpaid-subscriptions bsui',
33
+                'description' => esc_html__( "Displays the current user's subscriptions.", 'invoicing' ),
34
+            ),
35
+            'arguments'      => array(
36
+                'title' => array(
37
+                    'title'    => __( 'Widget title', 'invoicing' ),
38
+                    'desc'     => __( 'Enter widget title.', 'invoicing' ),
39
+                    'type'     => 'text',
40
+                    'desc_tip' => true,
41
+                    'default'  => '',
42
+                    'advanced' => false,
43
+                ),
44
+            ),
45
+
46
+        );
47
+
48
+        parent::__construct( $options );
49
+    }
50
+
51
+    /**
52
+     * Retrieves current user's subscriptions.
53
+     *
54
+     * @return GetPaid_Subscriptions_Query
55
+     */
56
+    public function get_subscriptions() {
57
+
58
+        // Prepare license args.
59
+        $args  = array(
60
+            'customer_in' => get_current_user_id(),
61
+            'paged'       => ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1,
62
+        );
63
+
64
+        return new GetPaid_Subscriptions_Query( $args );
65
+
66
+    }
67
+
68
+    /**
69
+     * The Super block output function.
70
+     *
71
+     * @param array $args
72
+     * @param array $widget_args
73
+     * @param string $content
74
+     *
75
+     * @return mixed|string|bool
76
+     */
77
+    public function output( $args = array(), $widget_args = array(), $content = '' ) {
78
+
79
+        // Ensure that the user is logged in.
80
+        if ( ! is_user_logged_in() ) {
81
+
82
+            return aui()->alert(
83
+                array(
84
+                    'content' => wp_kses_post( __( 'You need to log-in or create an account to view this section.', 'invoicing' ) ),
85
+                    'type'    => 'error',
86
+                )
87
+            );
88
+
89
+        }
90
+
91
+        // Are we displaying a single subscription?
92
+        if ( isset( $_GET['subscription'] ) ) {
93
+            return $this->display_single_subscription( intval( $_GET['subscription'] ) );
94
+        }
95
+
96
+        // Retrieve the user's subscriptions.
97
+        $subscriptions = $this->get_subscriptions();
98
+
99
+        // Start the output buffer.
100
+        ob_start();
101
+
102
+        // Backwards compatibility.
103
+        do_action( 'wpinv_before_user_subscriptions' );
104
+
105
+        // Display errors and notices.
106
+        wpinv_print_errors();
107
+
108
+        do_action( 'getpaid_license_manager_before_subscriptions', $subscriptions );
109
+
110
+        // Print the table header.
111
+        $this->print_table_header();
112
+
113
+        // Print table body.
114
+        $this->print_table_body( $subscriptions->get_results() );
115
+
116
+        // Print table footer.
117
+        $this->print_table_footer();
118
+
119
+        // Print the navigation.
120
+        $this->print_navigation( $subscriptions->get_total() );
121
+
122
+        // Backwards compatibility.
123
+        do_action( 'wpinv_after_user_subscriptions' );
124
+
125
+        // Return the output.
126
+        return ob_get_clean();
127
+
128
+    }
129
+
130
+    /**
131
+     * Retrieves the subscription columns.
132
+     *
133
+     * @return array
134
+     */
135
+    public function get_subscriptions_table_columns() {
136 136
 
137
-		$columns = array(
138
-			'subscription' => __( 'Subscription', 'invoicing' ),
139
-			'amount'       => __( 'Amount', 'invoicing' ),
140
-			'renewal-date' => __( 'Next payment', 'invoicing' ),
141
-			'status'       => __( 'Status', 'invoicing' ),
142
-		);
137
+        $columns = array(
138
+            'subscription' => __( 'Subscription', 'invoicing' ),
139
+            'amount'       => __( 'Amount', 'invoicing' ),
140
+            'renewal-date' => __( 'Next payment', 'invoicing' ),
141
+            'status'       => __( 'Status', 'invoicing' ),
142
+        );
143 143
 
144
-		return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns );
145
-	}
144
+        return apply_filters( 'getpaid_frontend_subscriptions_table_columns', $columns );
145
+    }
146 146
 
147
-	/**
148
-	 * Displays the table header.
149
-	 *
150
-	 */
151
-	public function print_table_header() {
147
+    /**
148
+     * Displays the table header.
149
+     *
150
+     */
151
+    public function print_table_header() {
152 152
 
153
-		?>
153
+        ?>
154 154
 
155 155
 			<table class="table table-bordered table-striped">
156 156
 
@@ -166,122 +166,122 @@  discard block
 block discarded – undo
166 166
 
167 167
 		<?php
168 168
 
169
-	}
169
+    }
170 170
 
171
-	/**
172
-	 * Displays the table body.
173
-	 *
174
-	 * @param WPInv_Subscription[] $subscriptions
175
-	 */
176
-	public function print_table_body( $subscriptions ) {
171
+    /**
172
+     * Displays the table body.
173
+     *
174
+     * @param WPInv_Subscription[] $subscriptions
175
+     */
176
+    public function print_table_body( $subscriptions ) {
177 177
 
178
-		if ( empty( $subscriptions ) ) {
179
-			$this->print_table_body_no_subscriptions();
180
-		} else {
181
-			$this->print_table_body_subscriptions( $subscriptions );
182
-		}
178
+        if ( empty( $subscriptions ) ) {
179
+            $this->print_table_body_no_subscriptions();
180
+        } else {
181
+            $this->print_table_body_subscriptions( $subscriptions );
182
+        }
183 183
 
184
-	}
184
+    }
185 185
 
186
-	/**
187
-	 * Displays the table body if no subscriptions were found.
188
-	 *
189
-	 */
190
-	public function print_table_body_no_subscriptions() {
186
+    /**
187
+     * Displays the table body if no subscriptions were found.
188
+     *
189
+     */
190
+    public function print_table_body_no_subscriptions() {
191 191
 
192
-		?>
192
+        ?>
193 193
 		<tbody>
194 194
 
195 195
 			<tr>
196 196
 				<td colspan="<?php echo count( $this->get_subscriptions_table_columns() ); ?>">
197 197
 
198 198
 					<?php
199
-						aui()->alert(
200
-							array(
201
-								'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ),
202
-								'type'    => 'warning',
203
-							),
199
+                        aui()->alert(
200
+                            array(
201
+                                'content' => wp_kses_post( __( 'No subscriptions found.', 'invoicing' ) ),
202
+                                'type'    => 'warning',
203
+                            ),
204 204
                             true
205
-						);
206
-					?>
205
+                        );
206
+                    ?>
207 207
 
208 208
 				</td>
209 209
 			</tr>
210 210
 
211 211
 		</tbody>
212 212
 		<?php
213
-	}
213
+    }
214 214
 
215
-	/**
216
-	 * Displays the table body if subscriptions were found.
217
-	 *
218
-	 * @param WPInv_Subscription[] $subscriptions
219
-	 */
220
-	public function print_table_body_subscriptions( $subscriptions ) {
215
+    /**
216
+     * Displays the table body if subscriptions were found.
217
+     *
218
+     * @param WPInv_Subscription[] $subscriptions
219
+     */
220
+    public function print_table_body_subscriptions( $subscriptions ) {
221 221
 
222
-		?>
222
+        ?>
223 223
 		<tbody>
224 224
 
225 225
 			<?php foreach ( $subscriptions as $subscription ) : ?>
226 226
 				<tr class="getpaid-subscriptions-table-row subscription-<?php echo (int) $subscription->get_id(); ?>">
227 227
 					<?php
228
-						wpinv_get_template(
229
-							'subscriptions/subscriptions-table-row.php',
230
-							array(
231
-								'subscription' => $subscription,
232
-								'widget'       => $this,
233
-							)
234
-						);
235
-					?>
228
+                        wpinv_get_template(
229
+                            'subscriptions/subscriptions-table-row.php',
230
+                            array(
231
+                                'subscription' => $subscription,
232
+                                'widget'       => $this,
233
+                            )
234
+                        );
235
+                    ?>
236 236
 				</tr>
237 237
 			<?php endforeach; ?>
238 238
 
239 239
 		</tbody>
240 240
 		<?php
241
-	}
242
-
243
-	/**
244
-	 * Adds row actions to a column
245
-	 *
246
-	 * @param string $content column content
247
-	 * @param WPInv_Subscription $subscription
248
-	 * @since       1.0.0
249
-	 * @return      string
250
-	 */
251
-	public function add_row_actions( $content, $subscription ) {
252
-
253
-		// Prepare row actions.
254
-		$actions = array();
255
-
256
-		// View subscription action.
257
-		$view_url        = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
258
-		$view_url        = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), $view_url ) );
259
-		$actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>';
260
-
261
-		// Filter the actions.
262
-		$actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription );
263
-
264
-		$sanitized  = array();
265
-		foreach ( $actions as $key => $action ) {
266
-			$key         = sanitize_html_class( $key );
267
-			$action      = wp_kses_post( $action );
268
-			$sanitized[] = "<span class='$key'>$action</span>";
269
-		}
270
-
271
-		$row_actions  = "<small class='form-text getpaid-subscription-item-actions'>";
272
-		$row_actions .= implode( ' | ', $sanitized );
273
-		$row_actions .= '</small>';
274
-
275
-		return $content . $row_actions;
276
-	}
277
-
278
-	/**
279
-	 * Displays the table footer.
280
-	 *
281
-	 */
282
-	public function print_table_footer() {
283
-
284
-		?>
241
+    }
242
+
243
+    /**
244
+     * Adds row actions to a column
245
+     *
246
+     * @param string $content column content
247
+     * @param WPInv_Subscription $subscription
248
+     * @since       1.0.0
249
+     * @return      string
250
+     */
251
+    public function add_row_actions( $content, $subscription ) {
252
+
253
+        // Prepare row actions.
254
+        $actions = array();
255
+
256
+        // View subscription action.
257
+        $view_url        = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
258
+        $view_url        = esc_url( add_query_arg( 'subscription', (int) $subscription->get_id(), $view_url ) );
259
+        $actions['view'] = "<a href='$view_url' class='text-decoration-none'>" . __( 'Manage Subscription', 'invoicing' ) . '</a>';
260
+
261
+        // Filter the actions.
262
+        $actions = apply_filters( 'getpaid_subscriptions_table_subscription_actions', $actions, $subscription );
263
+
264
+        $sanitized  = array();
265
+        foreach ( $actions as $key => $action ) {
266
+            $key         = sanitize_html_class( $key );
267
+            $action      = wp_kses_post( $action );
268
+            $sanitized[] = "<span class='$key'>$action</span>";
269
+        }
270
+
271
+        $row_actions  = "<small class='form-text getpaid-subscription-item-actions'>";
272
+        $row_actions .= implode( ' | ', $sanitized );
273
+        $row_actions .= '</small>';
274
+
275
+        return $content . $row_actions;
276
+    }
277
+
278
+    /**
279
+     * Displays the table footer.
280
+     *
281
+     */
282
+    public function print_table_footer() {
283
+
284
+        ?>
285 285
 
286 286
 				<tfoot>
287 287
 					<tr>
@@ -296,145 +296,145 @@  discard block
 block discarded – undo
296 296
 			</table>
297 297
 		<?php
298 298
 
299
-	}
299
+    }
300 300
 
301
-	/**
302
-	 * Displays the navigation.
303
-	 *
304
-	 * @param int $total
305
-	 */
306
-	public function print_navigation( $total ) {
301
+    /**
302
+     * Displays the navigation.
303
+     *
304
+     * @param int $total
305
+     */
306
+    public function print_navigation( $total ) {
307 307
 
308
-		if ( $total < 1 ) {
308
+        if ( $total < 1 ) {
309 309
 
310
-			// Out-of-bounds, run the query again without LIMIT for total count.
311
-			$args  = array(
312
-				'customer_in' => get_current_user_id(),
313
-				'fields'      => 'id',
314
-			);
310
+            // Out-of-bounds, run the query again without LIMIT for total count.
311
+            $args  = array(
312
+                'customer_in' => get_current_user_id(),
313
+                'fields'      => 'id',
314
+            );
315 315
 
316
-			$count_query = new GetPaid_Subscriptions_Query( $args );
317
-			$total       = $count_query->get_total();
318
-		}
316
+            $count_query = new GetPaid_Subscriptions_Query( $args );
317
+            $total       = $count_query->get_total();
318
+        }
319 319
 
320
-		// Abort if we do not have pages.
321
-		if ( 2 > $total ) {
322
-			return;
323
-		}
320
+        // Abort if we do not have pages.
321
+        if ( 2 > $total ) {
322
+            return;
323
+        }
324 324
 
325
-		?>
325
+        ?>
326 326
 
327 327
 		<div class="getpaid-subscriptions-pagination">
328 328
 			<?php
329
-				$big = 999999;
330
-
331
-				echo wp_kses_post(
332
-					getpaid_paginate_links(
333
-						array(
334
-							'base'   => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
335
-							'format' => '?paged=%#%',
336
-							'total'  => (int) ceil( $total / 10 ),
337
-						)
338
-					)
339
-				);
340
-			?>
329
+                $big = 999999;
330
+
331
+                echo wp_kses_post(
332
+                    getpaid_paginate_links(
333
+                        array(
334
+                            'base'   => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
335
+                            'format' => '?paged=%#%',
336
+                            'total'  => (int) ceil( $total / 10 ),
337
+                        )
338
+                    )
339
+                );
340
+            ?>
341 341
 		</div>
342 342
 
343 343
 		<?php
344
-	}
345
-
346
-	/**
347
-	 * Returns a single subscription's columns.
348
-	 *
349
-	 * @param WPInv_Subscription $subscription
350
-	 *
351
-	 * @return array
352
-	 */
353
-	public function get_single_subscription_columns( $subscription ) {
354
-
355
-		// Prepare subscription detail columns.
356
-		$subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_invoice_id(), $subscription->get_id() );
357
-		$items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
358
-		$fields             = apply_filters(
359
-			'getpaid_single_subscription_details_fields',
360
-			array(
361
-				'status'           => __( 'Status', 'invoicing' ),
362
-				'initial_amount'   => __( 'Initial amount', 'invoicing' ),
363
-				'recurring_amount' => __( 'Recurring amount', 'invoicing' ),
364
-				'start_date'       => __( 'Start date', 'invoicing' ),
365
-				'expiry_date'      => __( 'Next payment', 'invoicing' ),
366
-				'payments'         => __( 'Payments', 'invoicing' ),
367
-				'item'             => _n( 'Item', 'Items', $items_count, 'invoicing' ),
368
-			),
369
-			$subscription,
370
-			$items_count
371
-		);
372
-
373
-		if ( isset( $fields['expiry_date'] ) ) {
374
-
375
-			if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) {
376
-				$fields['expiry_date'] = __( 'End date', 'invoicing' );
377
-			}
378
-
379
-			if ( 'pending' === $subscription->get_status() ) {
380
-				unset( $fields['expiry_date'] );
381
-			}
382
-		}
383
-
384
-		if ( isset( $fields['start_date'] ) && 'pending' === $subscription->get_status() ) {
385
-			unset( $fields['start_date'] );
386
-		}
387
-
388
-		if ( $subscription->get_initial_amount() === $subscription->get_recurring_amount() ) {
389
-			unset( $fields['initial_amount'] );
390
-		}
391
-
392
-		return $fields;
393
-	}
394
-
395
-	/**
396
-	 * Displays a single subscription.
397
-	 *
398
-	 * @param string $subscription
399
-	 *
400
-	 * @return string
401
-	 */
402
-	public function display_single_subscription( $subscription ) {
403
-
404
-		// Fetch the subscription.
405
-		$subscription = new WPInv_Subscription( (int) $subscription );
406
-
407
-		if ( ! $subscription->exists() ) {
408
-
409
-			return aui()->alert(
410
-				array(
411
-					'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ),
412
-					'type'    => 'error',
413
-				)
414
-			);
415
-
416
-		}
417
-
418
-		// Ensure that the user owns this subscription key.
419
-		if ( get_current_user_id() != $subscription->get_customer_id() && ! wpinv_current_user_can_manage_invoicing() ) {
420
-
421
-			return aui()->alert(
422
-				array(
423
-					'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ),
424
-					'type'    => 'error',
425
-				)
426
-			);
427
-
428
-		}
429
-
430
-		return wpinv_get_template_html(
431
-			'subscriptions/subscription-details.php',
432
-			array(
433
-				'subscription' => $subscription,
434
-				'widget'       => $this,
435
-			)
436
-		);
437
-
438
-	}
344
+    }
345
+
346
+    /**
347
+     * Returns a single subscription's columns.
348
+     *
349
+     * @param WPInv_Subscription $subscription
350
+     *
351
+     * @return array
352
+     */
353
+    public function get_single_subscription_columns( $subscription ) {
354
+
355
+        // Prepare subscription detail columns.
356
+        $subscription_group = getpaid_get_invoice_subscription_group( $subscription->get_parent_invoice_id(), $subscription->get_id() );
357
+        $items_count        = empty( $subscription_group ) ? 1 : count( $subscription_group['items'] );
358
+        $fields             = apply_filters(
359
+            'getpaid_single_subscription_details_fields',
360
+            array(
361
+                'status'           => __( 'Status', 'invoicing' ),
362
+                'initial_amount'   => __( 'Initial amount', 'invoicing' ),
363
+                'recurring_amount' => __( 'Recurring amount', 'invoicing' ),
364
+                'start_date'       => __( 'Start date', 'invoicing' ),
365
+                'expiry_date'      => __( 'Next payment', 'invoicing' ),
366
+                'payments'         => __( 'Payments', 'invoicing' ),
367
+                'item'             => _n( 'Item', 'Items', $items_count, 'invoicing' ),
368
+            ),
369
+            $subscription,
370
+            $items_count
371
+        );
372
+
373
+        if ( isset( $fields['expiry_date'] ) ) {
374
+
375
+            if ( ! $subscription->is_active() || $subscription->is_last_renewal() ) {
376
+                $fields['expiry_date'] = __( 'End date', 'invoicing' );
377
+            }
378
+
379
+            if ( 'pending' === $subscription->get_status() ) {
380
+                unset( $fields['expiry_date'] );
381
+            }
382
+        }
383
+
384
+        if ( isset( $fields['start_date'] ) && 'pending' === $subscription->get_status() ) {
385
+            unset( $fields['start_date'] );
386
+        }
387
+
388
+        if ( $subscription->get_initial_amount() === $subscription->get_recurring_amount() ) {
389
+            unset( $fields['initial_amount'] );
390
+        }
391
+
392
+        return $fields;
393
+    }
394
+
395
+    /**
396
+     * Displays a single subscription.
397
+     *
398
+     * @param string $subscription
399
+     *
400
+     * @return string
401
+     */
402
+    public function display_single_subscription( $subscription ) {
403
+
404
+        // Fetch the subscription.
405
+        $subscription = new WPInv_Subscription( (int) $subscription );
406
+
407
+        if ( ! $subscription->exists() ) {
408
+
409
+            return aui()->alert(
410
+                array(
411
+                    'content' => wp_kses_post( __( 'Subscription not found.', 'invoicing' ) ),
412
+                    'type'    => 'error',
413
+                )
414
+            );
415
+
416
+        }
417
+
418
+        // Ensure that the user owns this subscription key.
419
+        if ( get_current_user_id() != $subscription->get_customer_id() && ! wpinv_current_user_can_manage_invoicing() ) {
420
+
421
+            return aui()->alert(
422
+                array(
423
+                    'content' => wp_kses_post( __( 'You do not have permission to view this subscription. Ensure that you are logged in to the account that owns the subscription.', 'invoicing' ) ),
424
+                    'type'    => 'error',
425
+                )
426
+            );
427
+
428
+        }
429
+
430
+        return wpinv_get_template_html(
431
+            'subscriptions/subscription-details.php',
432
+            array(
433
+                'subscription' => $subscription,
434
+                'widget'       => $this,
435
+            )
436
+        );
437
+
438
+    }
439 439
 
440 440
 }
Please login to merge, or discard this patch.
includes/class-getpaid-invoice-notification-emails.php 1 patch
Indentation   +454 added lines, -454 removed lines patch added patch discarded remove patch
@@ -12,489 +12,489 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Notification_Emails {
14 14
 
15
-	/**
16
-	 * The array of invoice email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $invoice_actions;
21
-
22
-	/**
23
-	 * Class constructor
24
-	 *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->invoice_actions = apply_filters(
29
-			'getpaid_notification_email_invoice_triggers',
30
-			array(
31
-				'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
-				'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
-				'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
-				'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
-				'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
-				'getpaid_invoice_status_publish'        => 'completed_invoice',
37
-				'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
-				'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
-				'getpaid_new_customer_note'             => 'user_note',
40
-				'getpaid_daily_maintenance'             => 'overdue',
41
-			)
42
-		);
43
-
44
-		$this->init_hooks();
45
-
46
-	}
47
-
48
-	/**
49
-	 * Registers email hooks.
50
-	 */
51
-	public function init_hooks() {
52
-
53
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
-		add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
-
56
-		foreach ( $this->invoice_actions as $hook => $email_type ) {
57
-			$this->init_email_type_hook( $hook, $email_type );
58
-		}
59
-	}
60
-
61
-	/**
62
-	 * Registers an email hook for an invoice action.
63
-	 *
64
-	 * @param string $hook
65
-	 * @param string|array $email_type
66
-	 */
67
-	public function init_email_type_hook( $hook, $email_type ) {
68
-
69
-		$email_type = wpinv_parse_list( $email_type );
70
-
71
-		foreach ( $email_type as $type ) {
72
-
73
-			$email = new GetPaid_Notification_Email( $type );
74
-
75
-			// Abort if it is not active.
76
-			if ( ! $email->is_active() ) {
77
-				continue;
78
-			}
79
-
80
-			if ( method_exists( $this, $type ) ) {
81
-				add_action( $hook, array( $this, $type ), 100, 2 );
82
-				continue;
83
-			}
84
-
85
-			do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
-		}
87
-
88
-	}
89
-
90
-	/**
91
-	 * Filters invoice merge tags.
92
-	 *
93
-	 * @param array $merge_tags
94
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
-	 */
96
-	public function invoice_merge_tags( $merge_tags, $object ) {
97
-
98
-		if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
-			return array_merge(
100
-				$merge_tags,
101
-				$this->get_invoice_merge_tags( $object )
102
-			);
103
-		}
104
-
105
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
-			return array_merge(
107
-				$merge_tags,
108
-				$this->get_invoice_merge_tags( $object->get_parent_payment() )
109
-			);
110
-		}
111
-
112
-		return $merge_tags;
113
-
114
-	}
115
-
116
-	/**
117
-	 * Generates invoice merge tags.
118
-	 *
119
-	 * @param WPInv_Invoice $invoice
120
-	 * @return array
121
-	 */
122
-	public function get_invoice_merge_tags( $invoice ) {
123
-
124
-		// Abort if it does not exist.
125
-		if ( ! $invoice->get_id() ) {
126
-			return array();
127
-		}
128
-
129
-		$merge_tags = array(
130
-			'{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
131
-			'{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
132
-			'{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
133
-			'{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
134
-			'{email}'                => sanitize_email( $invoice->get_email() ),
135
-			'{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
136
-			'{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
137
-			'{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
-			'{invoice_link}'         => esc_url( $invoice->get_view_url() ),
139
-			'{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
140
-			'{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
141
-			'{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
142
-			'{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
-			'{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
-			'{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
-			'{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
146
-			'{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
147
-			'{is_was}'               => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
-		);
149
-
150
-		$payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
-
152
-		if ( is_array( $payment_form_data ) ) {
153
-
154
-			foreach ( $payment_form_data as $label => $value ) {
155
-
156
-				$label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
-				$value = is_array( $value ) ? implode( ', ', $value ) : $value;
158
-
159
-				if ( is_scalar( $value ) ) {
160
-					$merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
-				}
162
-			}
163
-		}
164
-
165
-		return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
-	}
167
-
168
-	/**
169
-	 * Helper function to send an email.
170
-	 *
171
-	 * @param WPInv_Invoice $invoice
172
-	 * @param GetPaid_Notification_Email $email
173
-	 * @param string $type
174
-	 * @param string|array $recipients
175
-	 * @param array $extra_args Extra template args.
176
-	 */
177
-	public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
178
-
179
-		do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
-
181
-		$skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
-		if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
-			return;
184
-		}
185
-
186
-		$mailer     = new GetPaid_Notification_Email_Sender();
187
-		$merge_tags = $email->get_merge_tags();
188
-
189
-		$result = $mailer->send(
190
-			apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
-			$email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
-			$email->get_content( $merge_tags, $extra_args ),
193
-			$email->get_attachments()
194
-		);
195
-
196
-		// Maybe send a copy to the admin.
197
-		if ( $email->include_admin_bcc() ) {
198
-			$mailer->send(
199
-				wpinv_get_admin_email(),
200
-				$email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
-				$email->get_content( $merge_tags ),
202
-				$email->get_attachments()
203
-			);
204
-		}
205
-
206
-		if ( $result ) {
207
-			$invoice->add_system_note(
208
-				sprintf(
209
-					// translators: %1 is the email type, %2 is the invoice recipient.
210
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
211
-					sanitize_key( $type ),
212
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
213
-				)
214
-			);
215
-		} else {
216
-			$invoice->add_system_note(
217
-				sprintf(
218
-					// translators: %1 is the email type, %2 is the invoice recipient.
219
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
220
-					sanitize_key( $type ),
221
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
222
-				)
223
-			);
224
-		}
225
-
226
-		do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
227
-
228
-		return $result;
229
-	}
230
-
231
-	/**
232
-	 * Also send emails to any cc users.
233
-	 *
234
-	 * @param array $recipients
235
-	 * @param GetPaid_Notification_Email $email
236
-	 */
237
-	public function filter_email_recipients( $recipients, $email ) {
238
-
239
-		if ( ! $email->is_admin_email() ) {
240
-			$cc   = $email->object->get_email_cc();
241
-			$cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
242
-
243
-			if ( ! empty( $cc ) ) {
244
-				$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
245
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
246
-			}
247
-
248
-			if ( ! empty( $cc_2 ) ) {
249
-				$cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
250
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
251
-			}
252
-		}
253
-
254
-		return $recipients;
255
-
256
-	}
257
-
258
-	/**
259
-	 * Sends a new invoice notification.
260
-	 *
261
-	 * @param WPInv_Invoice $invoice
262
-	 */
263
-	public function new_invoice( $invoice ) {
264
-
265
-		// Only send this email for invoices created via the admin page.
266
-		if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
267
-			return;
268
-		}
269
-
270
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
271
-		$recipient = wpinv_get_admin_email();
272
-
273
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
274
-
275
-	}
276
-
277
-	/**
278
-	 * Sends a cancelled invoice notification.
279
-	 *
280
-	 * @param WPInv_Invoice $invoice
281
-	 */
282
-	public function cancelled_invoice( $invoice ) {
283
-
284
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
285
-		$recipient = $invoice->get_email();
286
-
287
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
288
-	}
289
-
290
-	/**
291
-	 * Sends a failed invoice notification.
292
-	 *
293
-	 * @param WPInv_Invoice $invoice
294
-	 */
295
-	public function failed_invoice( $invoice ) {
296
-
297
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
298
-		$recipient = wpinv_get_admin_email();
299
-
300
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
301
-
302
-	}
303
-
304
-	/**
305
-	 * Sends a notification whenever an invoice is put on hold.
306
-	 *
307
-	 * @param WPInv_Invoice $invoice
308
-	 */
309
-	public function onhold_invoice( $invoice ) {
310
-
311
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
312
-		$recipient = $invoice->get_email();
313
-
314
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
315
-
316
-	}
317
-
318
-	/**
319
-	 * Sends a notification whenever an invoice is marked as processing payment.
320
-	 *
321
-	 * @param WPInv_Invoice $invoice
322
-	 */
323
-	public function processing_invoice( $invoice ) {
15
+    /**
16
+     * The array of invoice email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $invoice_actions;
21
+
22
+    /**
23
+     * Class constructor
24
+     *
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->invoice_actions = apply_filters(
29
+            'getpaid_notification_email_invoice_triggers',
30
+            array(
31
+                'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
+                'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
+                'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
+                'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
+                'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
+                'getpaid_invoice_status_publish'        => 'completed_invoice',
37
+                'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
+                'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
+                'getpaid_new_customer_note'             => 'user_note',
40
+                'getpaid_daily_maintenance'             => 'overdue',
41
+            )
42
+        );
43
+
44
+        $this->init_hooks();
45
+
46
+    }
47
+
48
+    /**
49
+     * Registers email hooks.
50
+     */
51
+    public function init_hooks() {
52
+
53
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
+        add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
+
56
+        foreach ( $this->invoice_actions as $hook => $email_type ) {
57
+            $this->init_email_type_hook( $hook, $email_type );
58
+        }
59
+    }
60
+
61
+    /**
62
+     * Registers an email hook for an invoice action.
63
+     *
64
+     * @param string $hook
65
+     * @param string|array $email_type
66
+     */
67
+    public function init_email_type_hook( $hook, $email_type ) {
68
+
69
+        $email_type = wpinv_parse_list( $email_type );
70
+
71
+        foreach ( $email_type as $type ) {
72
+
73
+            $email = new GetPaid_Notification_Email( $type );
74
+
75
+            // Abort if it is not active.
76
+            if ( ! $email->is_active() ) {
77
+                continue;
78
+            }
79
+
80
+            if ( method_exists( $this, $type ) ) {
81
+                add_action( $hook, array( $this, $type ), 100, 2 );
82
+                continue;
83
+            }
84
+
85
+            do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
+        }
87
+
88
+    }
89
+
90
+    /**
91
+     * Filters invoice merge tags.
92
+     *
93
+     * @param array $merge_tags
94
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
+     */
96
+    public function invoice_merge_tags( $merge_tags, $object ) {
97
+
98
+        if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
+            return array_merge(
100
+                $merge_tags,
101
+                $this->get_invoice_merge_tags( $object )
102
+            );
103
+        }
104
+
105
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
+            return array_merge(
107
+                $merge_tags,
108
+                $this->get_invoice_merge_tags( $object->get_parent_payment() )
109
+            );
110
+        }
111
+
112
+        return $merge_tags;
113
+
114
+    }
115
+
116
+    /**
117
+     * Generates invoice merge tags.
118
+     *
119
+     * @param WPInv_Invoice $invoice
120
+     * @return array
121
+     */
122
+    public function get_invoice_merge_tags( $invoice ) {
123
+
124
+        // Abort if it does not exist.
125
+        if ( ! $invoice->get_id() ) {
126
+            return array();
127
+        }
128
+
129
+        $merge_tags = array(
130
+            '{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
131
+            '{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
132
+            '{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
133
+            '{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
134
+            '{email}'                => sanitize_email( $invoice->get_email() ),
135
+            '{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
136
+            '{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
137
+            '{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
+            '{invoice_link}'         => esc_url( $invoice->get_view_url() ),
139
+            '{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
140
+            '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
141
+            '{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
142
+            '{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
+            '{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
+            '{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
+            '{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
146
+            '{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
147
+            '{is_was}'               => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
+        );
149
+
150
+        $payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
+
152
+        if ( is_array( $payment_form_data ) ) {
324 153
 
325
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
326
-		$recipient = $invoice->get_email();
327
-
328
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
329
-
330
-	}
331
-
332
-	/**
333
-	 * Sends a notification whenever an invoice is paid.
334
-	 *
335
-	 * @param WPInv_Invoice $invoice
336
-	 */
337
-	public function completed_invoice( $invoice ) {
154
+            foreach ( $payment_form_data as $label => $value ) {
338 155
 
339
-		// (Maybe) abort if it is a renewal invoice.
340
-		if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
341
-			return;
342
-		}
343
-
344
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
345
-		$recipient = $invoice->get_email();
156
+                $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
+                $value = is_array( $value ) ? implode( ', ', $value ) : $value;
346 158
 
347
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
159
+                if ( is_scalar( $value ) ) {
160
+                    $merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
+                }
162
+            }
163
+        }
348 164
 
349
-	}
165
+        return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
+    }
350 167
 
351
-	/**
352
-	 * Sends a notification whenever an invoice is refunded.
353
-	 *
354
-	 * @param WPInv_Invoice $invoice
355
-	 */
356
-	public function refunded_invoice( $invoice ) {
168
+    /**
169
+     * Helper function to send an email.
170
+     *
171
+     * @param WPInv_Invoice $invoice
172
+     * @param GetPaid_Notification_Email $email
173
+     * @param string $type
174
+     * @param string|array $recipients
175
+     * @param array $extra_args Extra template args.
176
+     */
177
+    public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
357 178
 
358
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
359
-		$recipient = $invoice->get_email();
360
-
361
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
179
+        do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
+
181
+        $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
+        if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
+            return;
184
+        }
185
+
186
+        $mailer     = new GetPaid_Notification_Email_Sender();
187
+        $merge_tags = $email->get_merge_tags();
188
+
189
+        $result = $mailer->send(
190
+            apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
+            $email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
+            $email->get_content( $merge_tags, $extra_args ),
193
+            $email->get_attachments()
194
+        );
362 195
 
363
-	}
196
+        // Maybe send a copy to the admin.
197
+        if ( $email->include_admin_bcc() ) {
198
+            $mailer->send(
199
+                wpinv_get_admin_email(),
200
+                $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
+                $email->get_content( $merge_tags ),
202
+                $email->get_attachments()
203
+            );
204
+        }
205
+
206
+        if ( $result ) {
207
+            $invoice->add_system_note(
208
+                sprintf(
209
+                    // translators: %1 is the email type, %2 is the invoice recipient.
210
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
211
+                    sanitize_key( $type ),
212
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
213
+                )
214
+            );
215
+        } else {
216
+            $invoice->add_system_note(
217
+                sprintf(
218
+                    // translators: %1 is the email type, %2 is the invoice recipient.
219
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
220
+                    sanitize_key( $type ),
221
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
222
+                )
223
+            );
224
+        }
225
+
226
+        do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
227
+
228
+        return $result;
229
+    }
230
+
231
+    /**
232
+     * Also send emails to any cc users.
233
+     *
234
+     * @param array $recipients
235
+     * @param GetPaid_Notification_Email $email
236
+     */
237
+    public function filter_email_recipients( $recipients, $email ) {
238
+
239
+        if ( ! $email->is_admin_email() ) {
240
+            $cc   = $email->object->get_email_cc();
241
+            $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
242
+
243
+            if ( ! empty( $cc ) ) {
244
+                $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
245
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
246
+            }
247
+
248
+            if ( ! empty( $cc_2 ) ) {
249
+                $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
250
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
251
+            }
252
+        }
253
+
254
+        return $recipients;
255
+
256
+    }
257
+
258
+    /**
259
+     * Sends a new invoice notification.
260
+     *
261
+     * @param WPInv_Invoice $invoice
262
+     */
263
+    public function new_invoice( $invoice ) {
264
+
265
+        // Only send this email for invoices created via the admin page.
266
+        if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
267
+            return;
268
+        }
269
+
270
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
271
+        $recipient = wpinv_get_admin_email();
272
+
273
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
274
+
275
+    }
276
+
277
+    /**
278
+     * Sends a cancelled invoice notification.
279
+     *
280
+     * @param WPInv_Invoice $invoice
281
+     */
282
+    public function cancelled_invoice( $invoice ) {
283
+
284
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
285
+        $recipient = $invoice->get_email();
286
+
287
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
288
+    }
289
+
290
+    /**
291
+     * Sends a failed invoice notification.
292
+     *
293
+     * @param WPInv_Invoice $invoice
294
+     */
295
+    public function failed_invoice( $invoice ) {
296
+
297
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
298
+        $recipient = wpinv_get_admin_email();
299
+
300
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
301
+
302
+    }
303
+
304
+    /**
305
+     * Sends a notification whenever an invoice is put on hold.
306
+     *
307
+     * @param WPInv_Invoice $invoice
308
+     */
309
+    public function onhold_invoice( $invoice ) {
310
+
311
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
312
+        $recipient = $invoice->get_email();
313
+
314
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
315
+
316
+    }
317
+
318
+    /**
319
+     * Sends a notification whenever an invoice is marked as processing payment.
320
+     *
321
+     * @param WPInv_Invoice $invoice
322
+     */
323
+    public function processing_invoice( $invoice ) {
364 324
 
365
-	/**
366
-	 * Notifies a user about new invoices
367
-	 *
368
-	 * @param WPInv_Invoice $invoice
369
-	 * @param bool $force
370
-	 */
371
-	public function user_invoice( $invoice, $force = false ) {
325
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
326
+        $recipient = $invoice->get_email();
327
+
328
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
329
+
330
+    }
331
+
332
+    /**
333
+     * Sends a notification whenever an invoice is paid.
334
+     *
335
+     * @param WPInv_Invoice $invoice
336
+     */
337
+    public function completed_invoice( $invoice ) {
372 338
 
373
-		if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
374
-			return;
375
-		}
376
-
377
-		// Only send this email for invoices created via the admin page.
378
-		if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
379
-			return;
380
-		}
339
+        // (Maybe) abort if it is a renewal invoice.
340
+        if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
341
+            return;
342
+        }
343
+
344
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
345
+        $recipient = $invoice->get_email();
381 346
 
382
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
383
-		$recipient = $invoice->get_email();
384
-
385
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
347
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
386 348
 
387
-	}
388
-
389
-	/**
390
-	 * Checks if an invoice is a payment form invoice.
391
-	 *
392
-	 * @param int $invoice
393
-	 * @return bool
394
-	 */
395
-	public function is_payment_form_invoice( $invoice ) {
396
-		$is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
397
-		return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
398
-	}
349
+    }
399 350
 
400
-	/**
401
-	 * Notifies admin about new invoice notes
402
-	 *
403
-	 * @param WPInv_Invoice $invoice
404
-	 * @param string $note
405
-	 */
406
-	public function user_note( $invoice, $note ) {
407
-
408
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
409
-		$recipient = $invoice->get_email();
351
+    /**
352
+     * Sends a notification whenever an invoice is refunded.
353
+     *
354
+     * @param WPInv_Invoice $invoice
355
+     */
356
+    public function refunded_invoice( $invoice ) {
410 357
 
411
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
412
-
413
-	}
414
-
415
-	/**
416
-	 * (Force) Sends overdue notices.
417
-	 *
418
-	 * @param WPInv_Invoice $invoice
419
-	 */
420
-	public function force_send_overdue_notice( $invoice ) {
421
-		$email = new GetPaid_Notification_Email( 'overdue', $invoice );
422
-		return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
423
-	}
424
-
425
-	/**
426
-	 * Sends overdue notices.
427
-	 *
428
-	 * @TODO: Create an invoices query class.
429
-	 */
430
-	public function overdue() {
431
-		global $wpdb;
432
-
433
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
434
-
435
-		// Fetch reminder days.
436
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
437
-
438
-		// Abort if non is set.
439
-		if ( empty( $reminder_days ) ) {
440
-			return;
441
-		}
442
-
443
-		// Retrieve date query.
444
-		$date_query = $this->get_date_query( $reminder_days );
445
-
446
-		// Invoices table.
447
-		$table = $wpdb->prefix . 'getpaid_invoices';
448
-
449
-		// Fetch invoices.
450
-		$invoices  = $wpdb->get_col(
451
-			"SELECT posts.ID FROM $wpdb->posts as posts
358
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
359
+        $recipient = $invoice->get_email();
360
+
361
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
362
+
363
+    }
364
+
365
+    /**
366
+     * Notifies a user about new invoices
367
+     *
368
+     * @param WPInv_Invoice $invoice
369
+     * @param bool $force
370
+     */
371
+    public function user_invoice( $invoice, $force = false ) {
372
+
373
+        if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
374
+            return;
375
+        }
376
+
377
+        // Only send this email for invoices created via the admin page.
378
+        if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
379
+            return;
380
+        }
381
+
382
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
383
+        $recipient = $invoice->get_email();
384
+
385
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
386
+
387
+    }
388
+
389
+    /**
390
+     * Checks if an invoice is a payment form invoice.
391
+     *
392
+     * @param int $invoice
393
+     * @return bool
394
+     */
395
+    public function is_payment_form_invoice( $invoice ) {
396
+        $is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
397
+        return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
398
+    }
399
+
400
+    /**
401
+     * Notifies admin about new invoice notes
402
+     *
403
+     * @param WPInv_Invoice $invoice
404
+     * @param string $note
405
+     */
406
+    public function user_note( $invoice, $note ) {
407
+
408
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
409
+        $recipient = $invoice->get_email();
410
+
411
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
412
+
413
+    }
414
+
415
+    /**
416
+     * (Force) Sends overdue notices.
417
+     *
418
+     * @param WPInv_Invoice $invoice
419
+     */
420
+    public function force_send_overdue_notice( $invoice ) {
421
+        $email = new GetPaid_Notification_Email( 'overdue', $invoice );
422
+        return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
423
+    }
424
+
425
+    /**
426
+     * Sends overdue notices.
427
+     *
428
+     * @TODO: Create an invoices query class.
429
+     */
430
+    public function overdue() {
431
+        global $wpdb;
432
+
433
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
434
+
435
+        // Fetch reminder days.
436
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
437
+
438
+        // Abort if non is set.
439
+        if ( empty( $reminder_days ) ) {
440
+            return;
441
+        }
442
+
443
+        // Retrieve date query.
444
+        $date_query = $this->get_date_query( $reminder_days );
445
+
446
+        // Invoices table.
447
+        $table = $wpdb->prefix . 'getpaid_invoices';
448
+
449
+        // Fetch invoices.
450
+        $invoices  = $wpdb->get_col(
451
+            "SELECT posts.ID FROM $wpdb->posts as posts
452 452
 			LEFT JOIN $table as invoices ON invoices.post_id = posts.ID
453 453
 			WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query"
454 454
         );
455 455
 
456
-		foreach ( $invoices as $invoice ) {
456
+        foreach ( $invoices as $invoice ) {
457 457
 
458
-			// Only send this email for invoices created via the admin page.
459
-			if ( ! $this->is_payment_form_invoice( $invoice ) ) {
460
-				$invoice       = new WPInv_Invoice( $invoice );
461
-				$email->object = $invoice;
458
+            // Only send this email for invoices created via the admin page.
459
+            if ( ! $this->is_payment_form_invoice( $invoice ) ) {
460
+                $invoice       = new WPInv_Invoice( $invoice );
461
+                $email->object = $invoice;
462 462
 
463
-				if ( $invoice->needs_payment() ) {
464
-					$this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
465
-				}
463
+                if ( $invoice->needs_payment() ) {
464
+                    $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
465
+                }
466 466
 }
467 467
 }
468 468
 
469
-	}
469
+    }
470 470
 
471
-	/**
472
-	 * Calculates the date query for an invoices query
473
-	 *
474
-	 * @param array $reminder_days
475
-	 * @return string
476
-	 */
477
-	public function get_date_query( $reminder_days ) {
471
+    /**
472
+     * Calculates the date query for an invoices query
473
+     *
474
+     * @param array $reminder_days
475
+     * @return string
476
+     */
477
+    public function get_date_query( $reminder_days ) {
478 478
 
479
-		$date_query = array(
480
-			'relation' => 'OR',
481
-		);
479
+        $date_query = array(
480
+            'relation' => 'OR',
481
+        );
482 482
 
483
-		foreach ( $reminder_days as $days ) {
484
-			$date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
483
+        foreach ( $reminder_days as $days ) {
484
+            $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
485 485
 
486
-			$date_query[] = array(
487
-				'year'  => $date['year'],
488
-				'month' => $date['month'],
489
-				'day'   => $date['day'],
490
-			);
486
+            $date_query[] = array(
487
+                'year'  => $date['year'],
488
+                'month' => $date['month'],
489
+                'day'   => $date['day'],
490
+            );
491 491
 
492
-		}
492
+        }
493 493
 
494
-		$date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
494
+        $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
495 495
 
496
-		return $date_query->get_sql();
496
+        return $date_query->get_sql();
497 497
 
498
-	}
498
+    }
499 499
 
500 500
 }
Please login to merge, or discard this patch.