Passed
Pull Request — master (#104)
by Kiran
03:41
created

WPInv_Plugin   C

Complexity

Total Complexity 78

Size/Duplication

Total Lines 365
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 365
rs 5.4563
c 0
b 0
f 0
wmc 78
lcom 1
cbo 2

17 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 13 3
A __construct() 0 3 1
A define_constants() 0 4 1
B actions() 0 34 3
A plugins_loaded() 0 4 1
A load_textdomain() 0 11 1
C includes() 0 71 11
A init() 0 2 1
A admin_init() 0 6 3
A activation_redirect() 0 17 4
B enqueue_scripts() 0 38 6
C admin_enqueue_scripts() 0 76 13
F admin_body_class() 0 43 20
A admin_print_scripts_edit_php() 0 3 1
A wpinv_actions() 0 5 2
B pre_get_posts() 0 7 6
A bp_invoicing_init() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like WPInv_Plugin often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use WPInv_Plugin, and based on these observations, apply Extract Interface, too.

1
<?php
2
/**
3
 * Contains functions related to Invoicing plugin.
4
 *
5
 * @since 1.0.0
6
 * @package Invoicing
7
 */
8
 
9
// MUST have WordPress.
10
if ( !defined( 'WPINC' ) ) {
11
    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
12
}
13
14
class WPInv_Plugin {
15
    private static $instance;
16
    
17
    public static function run() {
18
        if ( !isset( self::$instance ) && !( self::$instance instanceof WPInv_Plugin ) ) {
19
            self::$instance = new WPInv_Plugin;
20
            self::$instance->includes();
21
            self::$instance->actions();
22
            self::$instance->notes      = new WPInv_Notes();
0 ignored issues
show
Bug introduced by
The property notes does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
23
            self::$instance->reports    = new WPInv_Reports();
0 ignored issues
show
Bug introduced by
The property reports does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
24
        }
25
        
26
        do_action( 'wpinv_loaded' );
27
        
28
        return self::$instance;
29
    }
30
    
31
    public function __construct() {
32
        $this->define_constants();
33
    }
34
    
35
    public function define_constants() {
36
        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
37
        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
38
    }
39
    
40
    private function actions() {
41
        /* Internationalize the text strings used. */
42
        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
43
        
44
        /* Perform actions on admin initialization. */
45
        add_action( 'admin_init', array( &$this, 'admin_init') );
46
        add_action( 'init', array( &$this, 'init' ), 3 );
47
        add_action( 'init', array( 'WPInv_Shortcodes', 'init' ) );
48
        add_action( 'init', array( &$this, 'wpinv_actions' ) );
49
        
50
        if ( class_exists( 'BuddyPress' ) ) {
51
            add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
52
        }
53
54
        add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
55
        
56
        if ( is_admin() ) {
57
            add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
58
            add_action( 'admin_body_class', array( &$this, 'admin_body_class' ) );
59
        } else {
60
            add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
61
        }
62
        
63
        /**
64
         * Fires after the setup of all WPInv_Plugin actions.
65
         *
66
         * @since 1.0.0
67
         *
68
         * @param WPInv_Plugin $this. Current WPInv_Plugin instance. Passed by reference.
69
         */
70
        do_action_ref_array( 'wpinv_actions', array( &$this ) );
71
72
        add_action( 'admin_init', array( &$this, 'activation_redirect') );
73
    }
74
    
75
    public function plugins_loaded() {
76
        /* Internationalize the text strings used. */
77
        $this->load_textdomain();
78
    }
79
    
80
    /**
81
     * Load the translation of the plugin.
82
     *
83
     * @since 1.0
84
     */
85
    public function load_textdomain() {
86
        $locale = apply_filters( 'plugin_locale', get_locale(), 'invoicing' );
87
        
88
        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
89
        load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
90
        
91
        /**
92
         * Define language constants.
93
         */
94
        require_once( WPINV_PLUGIN_DIR . 'language.php' );
95
    }
96
        
97
    public function includes() {
98
        global $wpinv_options;
99
        
100
        require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
101
        $wpinv_options = wpinv_get_settings();
102
        
103
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-post-types.php' );
104
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
105
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
106
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
107
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
108
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
109
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
110
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-invoice-functions.php' );
111
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
112
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
113
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
114
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
115
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-user-functions.php' );
116
        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-error-functions.php' );
117
        //require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
0 ignored issues
show
Unused Code Comprehensibility introduced by
46% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
118
        //require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
0 ignored issues
show
Unused Code Comprehensibility introduced by
46% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
119
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-invoice.php' );
120
        //require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscription.php' );
0 ignored issues
show
Unused Code Comprehensibility introduced by
46% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
121
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-item.php' );
122
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-notes.php' );
123
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session.php' );
124
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
125
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
126
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-reports.php' );
127
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-shortcodes.php' );
128
        if ( !class_exists( 'WPInv_EUVat' ) ) {
129
            require_once( WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php' );
130
        }
131
        
132
        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
133
        if ( !empty( $gateways ) ) {
134
            foreach ( $gateways as $gateway ) {
135
                if ( $gateway == 'manual' ) {
136
                    continue;
137
                }
138
                
139
                $gateway_file = WPINV_PLUGIN_DIR . 'includes/gateways/' . $gateway . '.php';
140
                
141
                if ( file_exists( $gateway_file ) ) {
142
                    require_once( $gateway_file );
143
                }
144
            }
145
        }
146
        require_once( WPINV_PLUGIN_DIR . 'includes/gateways/manual.php' );
147
        
148
        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
149
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
150
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
151
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-meta-boxes.php' );
152
            //require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-recurring-admin.php' );
0 ignored issues
show
Unused Code Comprehensibility introduced by
46% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
153
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-details.php' );
154
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-items.php' );
155
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
156
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-address.php' );
157
            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
158
            //require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
0 ignored issues
show
Unused Code Comprehensibility introduced by
46% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
159
        }
160
        
161
        // include css inliner
162
        if ( ! class_exists( 'Emogrifier' ) && class_exists( 'DOMDocument' ) ) {
163
            include_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php' );
164
        }
165
        
166
        require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
167
    }
168
    
169
    public function init() {
170
    }
171
    
172
    public function admin_init() {
173
        if (!(defined( 'DOING_AJAX' ) && DOING_AJAX)) {
174
        }
175
        
176
        add_action( 'admin_print_scripts-edit.php', array( &$this, 'admin_print_scripts_edit_php' ) );
177
    }
178
179
    public function activation_redirect() {
180
        // Bail if no activation redirect
181
        if ( !get_transient( '_wpinv_activation_redirect' ) ) {
182
            return;
183
        }
184
185
        // Delete the redirect transient
186
        delete_transient( '_wpinv_activation_redirect' );
187
188
        // Bail if activating from network, or bulk
189
        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
190
            return;
191
        }
192
193
        wp_safe_redirect( admin_url( 'admin.php?page=wpinv-settings&tab=general' ) );
194
        exit;
195
    }
196
    
197
    public function enqueue_scripts() {
198
        $suffix       = '';//defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
0 ignored issues
show
Unused Code Comprehensibility introduced by
48% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
199
        
200
        wp_deregister_style( 'font-awesome' );
201
        wp_register_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome' . $suffix . '.css', array(), '4.7.0' );
202
        wp_enqueue_style( 'font-awesome' );
203
        
204
        wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), WPINV_VERSION );
205
        wp_enqueue_style( 'wpinv_front_style' );
206
               
207
        // Register scripts
208
        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
209
        wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front' . $suffix . '.js', array( 'jquery', 'wpinv-vat-script' ),  WPINV_VERSION );
210
        
211
        $localize                         = array();
212
        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
213
        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
214
        $localize['currency_symbol']      = wpinv_currency_symbol();
215
        $localize['currency_pos']         = wpinv_currency_position();
216
        $localize['thousand_sep']         = wpinv_thousands_separator();
217
        $localize['decimal_sep']          = wpinv_decimal_separator();
218
        $localize['decimals']             = wpinv_decimals();
219
        
220
        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
221
        
222
        wp_enqueue_script( 'jquery-blockui' );
223
        $autofill_api = wpinv_get_option('address_autofill_api');
224
        $autofill_active = wpinv_get_option('address_autofill_active');
225
        if ( isset( $autofill_active ) && 1 == $autofill_active && !empty( $autofill_api ) && wpinv_is_checkout() ) {
226
            if ( wp_script_is( 'google-maps-api', 'enqueued' ) ) {
227
                wp_dequeue_script( 'google-maps-api' );
228
            }
229
            wp_enqueue_script( 'google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array( 'jquery' ), '', false );
230
            wp_enqueue_script( 'google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array( 'jquery', 'google-maps-api' ), '', true );
231
        }
232
        wp_enqueue_script( 'wpinv-front-script' );
233
        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
234
    }
235
236
    public function admin_enqueue_scripts() {
237
        global $post, $pagenow;
238
        
239
        $post_type  = wpinv_admin_post_type();
240
        $suffix     = '';//defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
0 ignored issues
show
Unused Code Comprehensibility introduced by
48% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
241
        
242
        wp_deregister_style( 'font-awesome' );
243
        wp_register_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome' . $suffix . '.css', array(), '4.7.0' );
244
        wp_enqueue_style( 'font-awesome' );
245
        
246
        wp_register_style( 'jquery-ui-css', WPINV_PLUGIN_URL . 'assets/css/jquery-ui' . $suffix . '.css', array(), '1.8.16' );
247
        wp_enqueue_style( 'jquery-ui-css' );
248
        
249
        wp_register_style( 'jquery-chosen', WPINV_PLUGIN_URL . 'assets/css/chosen' . $suffix . '.css', array(), '1.6.2' );
250
        wp_enqueue_style( 'jquery-chosen' );
251
252
        wp_register_script( 'jquery-chosen', WPINV_PLUGIN_URL . 'assets/js/chosen.jquery' . $suffix . '.js', array( 'jquery' ), '1.6.2' );
253
        wp_enqueue_script( 'jquery-chosen' );
254
        
255
        wp_register_style( 'wpinv_meta_box_style', WPINV_PLUGIN_URL . 'assets/css/meta-box.css', array(), WPINV_VERSION );
256
        wp_enqueue_style( 'wpinv_meta_box_style' );
257
        
258
        wp_register_style( 'wpinv_admin_style', WPINV_PLUGIN_URL . 'assets/css/admin.css', array(), WPINV_VERSION );
259
        wp_enqueue_style( 'wpinv_admin_style' );
260
        
261
        if ( $post_type == 'wpi_discount' || $post_type == 'wpi_invoice' && ( $pagenow == 'post-new.php' || $pagenow == 'post.php' ) ) {
262
            wp_enqueue_script( 'jquery-ui-datepicker' );
263
        }
264
265
        wp_enqueue_style( 'wp-color-picker' );
266
        wp_enqueue_script( 'wp-color-picker' );
267
        
268
        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
269
270
        if ($post_type == 'wpi_invoice' || $post_type == 'wpi_quote' && ($pagenow == 'post-new.php' || $pagenow == 'post.php')) {
271
            $autofill_api = wpinv_get_option('address_autofill_api');
272
            $autofill_active = wpinv_get_option('address_autofill_active');
273
            if (isset($autofill_active) && 1 == $autofill_active && !empty($autofill_api)) {
274
                wp_enqueue_script('google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array('jquery'), '', false);
275
                wp_enqueue_script('google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array('jquery'), '', true);
276
            }
277
        }
278
279
        wp_register_script( 'wpinv-admin-script', WPINV_PLUGIN_URL . 'assets/js/admin' . $suffix . '.js', array( 'jquery', 'jquery-blockui','jquery-ui-tooltip' ),  WPINV_VERSION );
280
        wp_enqueue_script( 'wpinv-admin-script' );
281
        
282
        $localize                               = array();
283
        $localize['ajax_url']                   = admin_url( 'admin-ajax.php' );
284
        $localize['post_ID']                    = isset( $post->ID ) ? $post->ID : '';
285
        $localize['wpinv_nonce']                = wp_create_nonce( 'wpinv-nonce' );
286
        $localize['add_invoice_note_nonce']     = wp_create_nonce( 'add-invoice-note' );
287
        $localize['delete_invoice_note_nonce']  = wp_create_nonce( 'delete-invoice-note' );
288
        $localize['invoice_item_nonce']         = wp_create_nonce( 'invoice-item' );
289
        $localize['billing_details_nonce']      = wp_create_nonce( 'get-billing-details' );
290
        $localize['tax']                        = wpinv_tax_amount();
291
        $localize['discount']                   = wpinv_discount_amount();
292
        $localize['currency_symbol']            = wpinv_currency_symbol();
293
        $localize['currency_pos']               = wpinv_currency_position();
294
        $localize['thousand_sep']               = wpinv_thousands_separator();
295
        $localize['decimal_sep']                = wpinv_decimal_separator();
296
        $localize['decimals']                   = wpinv_decimals();
297
        $localize['save_invoice']               = __( 'Save Invoice', 'invoicing' );
298
        $localize['status_publish']             = wpinv_status_nicename( 'publish' );
299
        $localize['status_pending']             = wpinv_status_nicename( 'wpi-pending' );
300
        $localize['delete_tax_rate']            = __( 'Are you sure you wish to delete this tax rate?', 'invoicing' );
301
        $localize['OneItemMin']                 = __( 'Invoice must contain at least one item', 'invoicing' );
302
        $localize['DeleteInvoiceItem']          = __( 'Are you sure you wish to delete this item?', 'invoicing' );
303
        $localize['FillBillingDetails']         = __( 'Fill the user\'s billing information? This will remove any currently entered billing information', 'invoicing' );
304
        $localize['confirmCalcTotals']          = __( 'Recalculate totals? This will recalculate totals based on the user billing country. If no billing country is set it will use the base country.', 'invoicing' );
305
        $localize['AreYouSure']                 = __( 'Are you sure?', 'invoicing' );
306
        $localize['errDeleteItem']              = __( 'This item is in use! Before delete this item, you need to delete all the invoice(s) using this item.', 'invoicing' );
307
308
        $localize = apply_filters( 'wpinv_admin_js_localize', $localize );
309
310
        wp_localize_script( 'wpinv-admin-script', 'WPInv_Admin', $localize );
311
    }
312
    
313
    public function admin_body_class( $classes ) {
314
        global $pagenow, $post, $current_screen;
315
        
316
        if ( !empty( $current_screen->post_type ) && ( $current_screen->post_type == 'wpi_invoice' || $current_screen->post_type == 'wpi_quote' ) ) {
317
            $classes .= ' wpinv-cpt';
318
        }
319
        
320
        $page = isset( $_GET['page'] ) ? strtolower( $_GET['page'] ) : false;
321
322
        $add_class = false;
323
        if ( $pagenow == 'admin.php' && $page ) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $page of type string|false is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== false instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
324
            $add_class = strpos( $page, 'wpinv-' );
325
        }
326
        
327
        $settings_class = array();
328
        if ( $page == 'wpinv-settings' ) {
329
            if ( !empty( $_REQUEST['tab'] ) ) {
330
                $settings_class[] = sanitize_text_field( $_REQUEST['tab'] );
331
            }
332
            
333
            if ( !empty( $_REQUEST['section'] ) ) {
334
                $settings_class[] = sanitize_text_field( $_REQUEST['section'] );
335
            }
336
            
337
            $settings_class[] = isset( $_REQUEST['wpi_sub'] ) && $_REQUEST['wpi_sub'] !== '' ? sanitize_text_field( $_REQUEST['wpi_sub'] ) : 'main';
338
        }
339
        
340
        if ( !empty( $settings_class ) ) {
341
            $classes .= ' wpi-' . wpinv_sanitize_key( implode( $settings_class, '-' ) );
342
        }
343
        
344
        $post_type = wpinv_admin_post_type();
345
346
        if ( $post_type == 'wpi_invoice' || $post_type == 'wpi_quote' || $add_class !== false ) {
347
            return $classes .= ' wpinv';
348
        }
349
        
350
        if ( $pagenow == 'post.php' && $post_type == 'wpi_item' && !empty( $post ) && !wpinv_item_is_editable( $post ) ) {
351
            $classes .= ' wpi-editable-n';
352
        }
353
354
        return $classes;
355
    }
356
    
357
    public function admin_print_scripts_edit_php() {
358
359
    }
360
    
361
    public function wpinv_actions() {
362
        if ( isset( $_REQUEST['wpi_action'] ) ) {
363
            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
364
        }
365
    }
366
    
367
    public function pre_get_posts( $wp_query ) {
368
        if ( !empty( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] == 'wpi_invoice' && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
369
            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses() );
370
        }
371
        
372
        return $wp_query;
373
    }
374
    
375
    public function bp_invoicing_init() {
376
        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
377
    }
378
}