Passed
Pull Request — master (#222)
by Stiofan
03:20
created

WPInv_Meta_Box_Items::prices()   C

Complexity

Conditions 10
Paths 32

Size

Total Lines 89

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
nc 32
nop 1
dl 0
loc 89
rs 6.3733
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
// MUST have WordPress.
3
if ( !defined( 'WPINC' ) ) {
4
    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
5
}
6
7
class WPInv_Meta_Box_Items {
8
    public static function output( $post ) {
9
        global $wpinv_euvat, $ajax_cart_details;
10
11
        $post_id            = !empty( $post->ID ) ? $post->ID : 0;
12
        $invoice            = new WPInv_Invoice( $post_id );
13
        $ajax_cart_details  = $invoice->get_cart_details();
14
        $subtotal           = $invoice->get_subtotal( true );
15
        $discount_raw       = $invoice->get_discount();
16
        $discount           = wpinv_price( $discount_raw, $invoice->get_currency() );
0 ignored issues
show
Unused Code introduced by
$discount is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
17
        $discounts          = $discount_raw > 0 ? $invoice->get_discounts() : '';
0 ignored issues
show
Unused Code introduced by
$discounts is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
18
        $tax                = $invoice->get_tax( true );
19
        $total              = $invoice->get_total( true );
20
        $item_quantities    = wpinv_item_quantities_enabled();
21
        $use_taxes          = wpinv_use_taxes();
22
        if ( !$use_taxes && (float)$invoice->get_tax() > 0 ) {
23
            $use_taxes = true;
24
        }
25
        $item_types         = apply_filters( 'wpinv_item_types_for_quick_add_item', wpinv_get_item_types(), $post );
26
        $is_recurring       = $invoice->is_recurring();
27
        $post_type_object   = get_post_type_object($invoice->post_type);
28
        $type_title         = $post_type_object->labels->singular_name;
29
30
        $cols = 5;
31
        if ( $item_quantities ) {
32
            $cols++;
33
        }
34
        if ( $use_taxes ) {
35
            $cols++;
36
        }
37
        $class = '';
38
        if ( $invoice->is_paid() ) {
39
            $class .= ' wpinv-paid';
40
        }
41
        if ( $invoice->is_refunded() ) {
42
            $class .= ' wpinv-refunded';
43
        }
44
        if ( $is_recurring ) {
45
            $class .= ' wpi-recurring';
46
        }
47
        ?>
48
        <div class="wpinv-items-wrap<?php echo $class; ?>" id="wpinv_items_wrap" data-status="<?php echo $invoice->status; ?>">
49
            <table id="wpinv_items" class="wpinv-items" cellspacing="0" cellpadding="0">
50
                <thead>
51
                    <tr>
52
                        <th class="id"><?php _e( 'ID', 'invoicing' );?></th>
53
                        <th class="title"><?php _e( 'Item', 'invoicing' );?></th>
54
                        <th class="price"><?php _e( 'Price', 'invoicing' );?></th>
55
                        <?php if ( $item_quantities ) { ?>
56
                        <th class="qty"><?php _e( 'Qty', 'invoicing' );?></th>
57
                        <?php } ?>
58
                        <th class="total"><?php _e( 'Total', 'invoicing' );?></th>
59
                        <?php if ( $use_taxes ) { ?>
60
                        <th class="tax"><?php _e( 'Tax (%)', 'invoicing' );?></th>
61
                        <?php } ?>
62
                        <th class="action"></th>
63
                    </tr>
64
                </thead>
65
                <tbody class="wpinv-line-items">
66
                    <?php echo wpinv_admin_get_line_items( $invoice ); ?>
0 ignored issues
show
Documentation introduced by
$invoice is of type object<WPInv_Invoice>, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
67
                </tbody>
68
                <tfoot class="wpinv-totals">
69
                    <tr>
70
                        <td colspan="<?php echo $cols; ?>" style="padding:0;border:0">
71
                            <div id="wpinv-quick-add">
72
                                <table cellspacing="0" cellpadding="0">
73
                                    <tr>
74
                                        <td class="id">
75
                                        </td>
76
                                        <td class="title">
77
                                            <input type="text" class="regular-text" placeholder="<?php _e( 'Item Name', 'invoicing' ); ?>" value="" name="_wpinv_quick[name]">
78
                                            <?php if ( $wpinv_euvat->allow_vat_rules() ) { ?>
79
                                            <div class="wp-clearfix">
80
                                                <label class="wpi-vat-rule">
81
                                                    <span class="title"><?php _e( 'VAT rule type', 'invoicing' );?></span>
82
                                                    <span class="input-text-wrap">
83
                                                        <?php echo wpinv_html_select( array(
84
                                                            'options'          => $wpinv_euvat->get_rules(),
85
                                                            'name'             => '_wpinv_quick[vat_rule]',
86
                                                            'id'               => '_wpinv_quick_vat_rule',
87
                                                            'show_option_all'  => false,
88
                                                            'show_option_none' => false,
89
                                                            'class'            => 'gdmbx2-text-medium wpinv-quick-vat-rule wpi_select2',
90
                                                        ) ); ?>
91
                                                    </span>
92
                                                </label>
93
                                            </div>
94
                                            <?php } if ( $wpinv_euvat->allow_vat_classes() ) { ?>
95
                                            <div class="wp-clearfix">
96
                                                <label class="wpi-vat-class">
97
                                                    <span class="title"><?php _e( 'VAT class', 'invoicing' );?></span>
98
                                                    <span class="input-text-wrap">
99
                                                        <?php echo wpinv_html_select( array(
100
                                                            'options'          => $wpinv_euvat->get_all_classes(),
101
                                                            'name'             => '_wpinv_quick[vat_class]',
102
                                                            'id'               => '_wpinv_quick_vat_class',
103
                                                            'show_option_all'  => false,
104
                                                            'show_option_none' => false,
105
                                                            'class'            => 'gdmbx2-text-medium wpinv-quick-vat-class wpi_select2',
106
                                                        ) ); ?>
107
                                                    </span>
108
                                                </label>
109
                                            </div>
110
                                            <?php } ?>
111
                                            <div class="wp-clearfix">
112
                                                <label class="wpi-item-type">
113
                                                    <span class="title"><?php _e( 'Item type', 'invoicing' );?></span>
114
                                                    <span class="input-text-wrap">
115
                                                        <?php echo wpinv_html_select( array(
116
                                                            'options'          => $item_types,
117
                                                            'name'             => '_wpinv_quick[type]',
118
                                                            'id'               => '_wpinv_quick_type',
119
                                                            'selected'         => 'custom',
120
                                                            'show_option_all'  => false,
121
                                                            'show_option_none' => false,
122
                                                            'class'            => 'gdmbx2-text-medium wpinv-quick-type wpi_select2',
123
                                                        ) ); ?>
124
                                                    </span>
125
                                                </label>
126
                                            </div>
127
                                            <div class="wp-clearfix">
128
                                                <label class="wpi-item-actions">
129
                                                    <span class="input-text-wrap">
130
                                                        <input type="button" value="Save" class="button button-primary" id="wpinv-save-item"><input type="button" value="Cancel" class="button button-secondary" id="wpinv-cancel-item">
131
                                                    </span>
132
                                                </label>
133
                                            </div>
134
                                        </td>
135
                                        <td class="price"><input type="text" placeholder="0.00" class="wpi-field-price wpi-price" name="_wpinv_quick[price]" /></td>
136
                                        <?php if ( $item_quantities ) { ?>
137
                                        <td class="qty"><input type="number" class="small-text" step="1" min="1" value="1" name="_wpinv_quick[qty]" /></td>
138
                                        <?php } ?>
139
                                        <td class="total"></td>
140
                                        <?php if ( $use_taxes ) { ?>
141
                                        <td class="tax"></td>
142
                                        <?php } ?>
143
                                        <td class="action"></td>
144
                                    </tr>
145
                                </table>
146
                            </div>
147
                        </td>
148
                    </tr>
149
                    <tr class="clear">
150
                        <td colspan="<?php echo $cols; ?>"></td>
151
                    </tr>
152
                    <tr class="totals">
153
                        <td colspan="<?php echo ( $cols - 4 ); ?>"></td>
154
                        <td colspan="4">
155
                            <table cellspacing="0" cellpadding="0">
156
                                <tr class="subtotal">
157
                                    <td class="name"><?php _e( 'Sub Total:', 'invoicing' );?></td>
158
                                    <td class="total"><?php echo $subtotal;?></td>
159
                                    <td class="action"></td>
160
                                </tr>
161
                                <tr class="discount">
162
                                    <td class="name"><?php wpinv_get_discount_label( wpinv_discount_code( $invoice->ID ) ); ?>:</td>
163
                                    <td class="total"><?php echo wpinv_discount( $invoice->ID, true, true ); ?></td>
164
                                    <td class="action"></td>
165
                                </tr>
166
                                <?php if ( $use_taxes ) { ?>
167
                                <tr class="tax">
168
                                    <td class="name"><?php _e( 'Tax:', 'invoicing' );?></td>
169
                                    <td class="total"><?php echo $tax;?></td>
170
                                    <td class="action"></td>
171
                                </tr>
172
                                <?php } ?>
173
                                <tr class="total">
174
                                    <td class="name"><?php echo apply_filters( 'wpinv_invoice_items_total_label', __( 'Invoice Total:', 'invoicing' ), $invoice );?></td>
175
                                    <td class="total"><?php echo $total;?></td>
176
                                    <td class="action"></td>
177
                                </tr>
178
                            </table>
179
                        </td>
180
                    </tr>
181
                </tfoot>
182
            </table>
183
            <div class="wpinv-actions">
184
                <?php ob_start(); ?>
185
                <?php
186
                    if ( !$invoice->is_paid() && !$invoice->is_refunded() ) {
187
                        if ( !$invoice->is_recurring() ) {
188
                            echo wpinv_item_dropdown( array(
189
                                'name'             => 'wpinv_invoice_item',
190
                                'id'               => 'wpinv_invoice_item',
191
                                'show_recurring'   => true,
192
                                'class'            => 'wpi_select2',
193
                            ) );
194
                    ?>
195
                <input type="button" value="<?php echo sprintf(esc_attr__( 'Add item to %s', 'invoicing'), $type_title); ?>" class="button button-primary" id="wpinv-add-item"><input type="button" value="<?php esc_attr_e( 'Create new item', 'invoicing' );?>" class="button button-primary" id="wpinv-new-item"><?php } ?><input type="button" value="<?php esc_attr_e( 'Recalculate Totals', 'invoicing' );?>" class="button button-primary wpinv-flr" id="wpinv-recalc-totals">
196
                    <?php } ?>
197
                <?php do_action( 'wpinv_invoice_items_actions', $invoice ); ?>
198
                <?php $item_actions = ob_get_clean(); echo apply_filters( 'wpinv_invoice_items_actions_content', $item_actions, $invoice, $post ); ?>
199
            </div>
200
        </div>
201
        <?php
202
    }
203
204
    public static function prices( $post ) {        
205
        $symbol         = wpinv_currency_symbol();
206
        $position       = wpinv_currency_position();
207
        $item           = new WPInv_Item( $post->ID );
208
209
        $price                = $item->get_price();
210
        $is_dynamic_pricing   = $item->get_is_dynamic_pricing();
211
        $minimum_price        = $item->get_minimum_price();
212
        $is_recurring         = $item->is_recurring();
213
        $period               = $item->get_recurring_period();
214
        $interval             = absint( $item->get_recurring_interval() );
215
        $times                = absint( $item->get_recurring_limit() );
216
        $free_trial           = $item->has_free_trial();
217
        $trial_interval       = $item->get_trial_interval();
218
        $trial_period         = $item->get_trial_period();
219
220
        $intervals            = array();
221
        for ( $i = 1; $i <= 90; $i++ ) {
222
            $intervals[$i] = $i;
223
        }
224
225
        $interval       = $interval > 0 ? $interval : 1;
226
227
        $class = $is_recurring ? 'wpinv-recurring-y' : 'wpinv-recurring-n';
228
229
        $minimum_price_style = 'margin-left: 24px;';
230
        if(! $is_dynamic_pricing ) {
231
            $minimum_price_style .= 'display: none;';
232
        }
233
234
        ?>
235
        <p class="wpinv-row-prices"><?php echo ( $position != 'right' ? $symbol . '&nbsp;' : '' );?><input type="text" maxlength="12" placeholder="<?php echo wpinv_sanitize_amount( 0 ); ?>" value="<?php echo $price;?>" id="wpinv_item_price" name="wpinv_item_price" class="medium-text wpi-field-price wpi-price" <?php disabled( $item->is_editable(), false ); ?> /><?php echo ( $position == 'right' ? '&nbsp;' . $symbol : '' );?><input type="hidden" name="wpinv_vat_meta_box_nonce" value="<?php echo wp_create_nonce( 'wpinv_item_meta_box_save' ) ;?>" />
236
        <?php do_action( 'wpinv_prices_metabox_price', $item ); ?>
237
        </p>
238
239
    <?php if( $item->supports_dynamic_pricing() ) { ?>
240
241
        <p class="wpinv-row-name-your-price">
242
            <label>
243
                <input type="checkbox" name="wpinv_name_your_price" id="wpinv_name_your_price" value="1" <?php checked( 1, $is_dynamic_pricing ); ?> />
244
                <?php echo apply_filters( 'wpinv_name_your_price_toggle_text', __( 'User can set a custom price', 'invoicing' ) ); ?>
245
            </label>
246
            <?php do_action( 'wpinv_prices_metabox_name_your_price_field', $item ); ?>
247
        </p>
248
249
        <p class="wpinv-row-minimum-price" style="<?php echo $minimum_price_style; ?>">
250
            <label>
251
                <?php _e( 'Minimum Price', 'invoicing' ); ?>
252
                <?php echo ( $position != 'right' ? $symbol . '&nbsp;' : '' );?><input type="text" maxlength="12" placeholder="<?php echo wpinv_sanitize_amount( 0 ); ?>" value="<?php echo $minimum_price;?>" id="wpinv_minimum_price" name="wpinv_minimum_price" class="medium-text wpi-field-price" <?php disabled( $item->is_editable(), false ); ?> /><?php echo ( $position == 'right' ? '&nbsp;' . $symbol : '' );?>
253
            </label>
254
255
            <?php do_action( 'wpinv_prices_metabox_minimum_price_field', $item ); ?>
256
        </p>
257
258
    <?php } ?>
259
260
        <p class="wpinv-row-is-recurring">
261
            <label for="wpinv_is_recurring">
262
                <input type="checkbox" name="wpinv_is_recurring" id="wpinv_is_recurring" value="1" <?php checked( 1, $is_recurring ); ?> />
263
                <?php echo apply_filters( 'wpinv_is_recurring_toggle_text', __( 'Is Recurring Item?', 'invoicing' ) ); ?>
264
            </label>
265
            <?php do_action( 'wpinv_prices_metabox_is_recurring_field', $item ); ?>
266
        </p>
267
        <p class="wpinv-row-recurring-fields <?php echo $class;?>">
268
            <label class="wpinv-period" for="wpinv_recurring_period"><?php _e( 'Recurring', 'invoicing' );?> <select class="wpinv-select wpi_select2" id="wpinv_recurring_period" name="wpinv_recurring_period"><option value="D" data-text="<?php esc_attr_e( 'day(s)', 'invoicing' ); ?>" <?php selected( 'D', $period );?>><?php _e( 'Daily', 'invoicing' ); ?></option><option value="W" data-text="<?php esc_attr_e( 'week(s)', 'invoicing' ); ?>" <?php selected( 'W', $period );?>><?php _e( 'Weekly', 'invoicing' ); ?></option><option value="M" data-text="<?php esc_attr_e( 'month(s)', 'invoicing' ); ?>" <?php selected( 'M', $period );?>><?php _e( 'Monthly', 'invoicing' ); ?></option><option value="Y" data-text="<?php esc_attr_e( 'year(s)', 'invoicing' ); ?>" <?php selected( 'Y', $period );?>><?php _e( 'Yearly', 'invoicing' ); ?></option></select></label>
269
            <label class="wpinv-interval" for="wpinv_recurring_interval"> <?php _e( 'at every', 'invoicing' );?> <?php echo wpinv_html_select( array(
270
                'options'          => $intervals,
271
                'name'             => 'wpinv_recurring_interval',
272
                'id'               => 'wpinv_recurring_interval',
273
                'selected'         => $interval,
274
                'show_option_all'  => false,
275
                'show_option_none' => false,
276
                'class'            => 'wpi_select2',
277
            ) ); ?> <span id="wpinv_interval_text"><?php _e( 'day(s)', 'invoicing' );?></span></label>
278
            <label class="wpinv-times" for="wpinv_recurring_limit"> <?php _e( 'for', 'invoicing' );?> <input class="small-text" type="number" value="<?php echo $times;?>" size="4" id="wpinv_recurring_limit" name="wpinv_recurring_limit" step="1" min="0"> <?php _e( 'time(s) <i>(select 0 for recurring forever until cancelled</i>)', 'invoicing' );?></label>
279
            <span class="clear wpi-trial-clr"></span>
280
            <label class="wpinv-free-trial" for="wpinv_free_trial">
281
                <input type="checkbox" name="wpinv_free_trial" id="wpinv_free_trial" value="1" <?php checked( true, (bool)$free_trial ); ?> /> 
282
                <?php echo __( 'Offer free trial for', 'invoicing' ); ?>
283
            </label>
284
            <label class="wpinv-trial-interval" for="wpinv_trial_interval">
285
                <input class="small-text" type="number" value="<?php echo $trial_interval;?>" size="4" id="wpinv_trial_interval" name="wpinv_trial_interval" step="1" min="1"> <select class="wpinv-select wpi_select2" id="wpinv_trial_period" name="wpinv_trial_period"><option value="D" <?php selected( 'D', $trial_period );?>><?php _e( 'day(s)', 'invoicing' ); ?></option><option value="W" <?php selected( 'W', $trial_period );?>><?php _e( 'week(s)', 'invoicing' ); ?></option><option value="M" <?php selected( 'M', $trial_period );?>><?php _e( 'month(s)', 'invoicing' ); ?></option><option value="Y" <?php selected( 'Y', $trial_period );?>><?php _e( 'year(s)', 'invoicing' ); ?></option></select>
286
            </label>
287
            <?php do_action( 'wpinv_prices_metabox_recurring_fields', $item ); ?>
288
        </p>
289
        <input type="hidden" id="_wpi_current_type" value="<?php echo wpinv_get_item_type( $post->ID ); ?>" />
290
        <?php do_action( 'wpinv_item_price_field', $post->ID ); ?>
291
        <?php
292
    }
293
294
    public static function vat_rules( $post ) {
295
        global $wpinv_euvat;
296
297
        $rule_type = $wpinv_euvat->get_item_rule( $post->ID );
298
        ?>
299
        <p><label for="wpinv_vat_rules"><strong><?php _e( 'Select how VAT rules will be applied:', 'invoicing' );?></strong></label>&nbsp;&nbsp;&nbsp;
300
        <?php echo wpinv_html_select( array(
301
                    'options'          => $wpinv_euvat->get_rules(),
302
                    'name'             => 'wpinv_vat_rules',
303
                    'id'               => 'wpinv_vat_rules',
304
                    'selected'         => $rule_type,
305
                    'show_option_all'  => false,
306
                    'show_option_none' => false,
307
                    'class'            => 'gdmbx2-text-medium wpinv-vat-rules wpi_select2',
308
                ) ); ?>
309
        </p>
310
        <p class="wpi-m0"><?php _e( 'When you select physical product rules, only consumers and businesses in your country will be charged VAT.  The VAT rate used will be the rate in your country.', 'invoicing' ); ?></p>
311
        <p class="wpi-m0"><?php _e( 'If you select Digital product rules, VAT will be charged at the rate that applies in the country of the consumer.  Only businesses in your country will be charged VAT.', 'invoicing' ); ?></p>
312
        <?php
313
    }
314
315
    public static function vat_classes( $post ) {
316
        global $wpinv_euvat;
317
        
318
        $vat_class = $wpinv_euvat->get_item_class( $post->ID );
319
        ?>
320
        <p><?php echo wpinv_html_select( array(
321
                    'options'          => $wpinv_euvat->get_all_classes(),
322
                    'name'             => 'wpinv_vat_class',
323
                    'id'               => 'wpinv_vat_class',
324
                    'selected'         => $vat_class,
325
                    'show_option_all'  => false,
326
                    'show_option_none' => false,
327
                    'class'            => 'gdmbx2-text-medium wpinv-vat-class wpi_select2',
328
                ) ); ?>
329
        </p>
330
        <p class="wpi-m0"><?php _e( 'Select the VAT rate class to use for this invoice item.', 'invoicing' ); ?></p>
331
        <?php
332
    }
333
334
    public static function item_info( $post ) {
335
        $item_type = wpinv_get_item_type( $post->ID );
336
        do_action( 'wpinv_item_info_metabox_before', $post );
337
        ?>
338
        <p><label for="wpinv_item_type"><strong><?php _e( 'Type:', 'invoicing' );?></strong></label>&nbsp;&nbsp;&nbsp;
339
        <?php echo wpinv_html_select( array(
340
                    'options'          => wpinv_get_item_types(),
341
                    'name'             => 'wpinv_item_type',
342
                    'id'               => 'wpinv_item_type',
343
                    'selected'         => $item_type,
344
                    'show_option_all'  => false,
345
                    'show_option_none' => false,
346
                    'class'            => 'gdmbx2-text-medium wpinv-item-type wpi_select2',
347
                ) ); ?>
348
        </p>
349
        <p class="wpi-m0"><?php _e( 'Select item type.', 'invoicing' );?><br><?php _e( '<b>Standard:</b> Standard item type', 'invoicing' );?><br><?php _e( '<b>Fee:</b> Like Registration Fee, Sign up Fee etc.', 'invoicing' );?></p>
350
        <?php
351
        do_action( 'wpinv_item_info_metabox_after', $post );
352
    }
353
354
    public static function meta_values( $post ) {
355
        $meta_keys = apply_filters( 'wpinv_show_meta_values_for_keys', array(
356
            'type',
357
            'custom_id'
358
        ) );
359
360
        if ( empty( $meta_keys ) ) {
361
            return;
362
        }
363
364
        do_action( 'wpinv_meta_values_metabox_before', $post );
365
366
        foreach ( $meta_keys as $meta_key ) {
367
            ?>
368
            <p class="wpi-mtb05"><label><strong><?php echo $meta_key; ?></strong>: <?php echo get_post_meta( $post->ID, '_wpinv_' . $meta_key, true ); ?></label></p>
369
            <?php 
370
        }
371
372
        do_action( 'wpinv_meta_values_metabox_after', $post );
373
    }
374
375
    public static function save( $post_id, $data, $post ) {
0 ignored issues
show
Unused Code introduced by
The parameter $post is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
376
        $invoice        = new WPInv_Invoice( $post_id );
377
378
        // Billing
379
        $first_name     = sanitize_text_field( $data['wpinv_first_name'] );
380
        $last_name      = sanitize_text_field( $data['wpinv_last_name'] );
381
        $company        = sanitize_text_field( $data['wpinv_company'] );
382
        $vat_number     = sanitize_text_field( $data['wpinv_vat_number'] );
383
        $phone          = sanitize_text_field( $data['wpinv_phone'] );
384
        $address        = sanitize_text_field( $data['wpinv_address'] );
385
        $city           = sanitize_text_field( $data['wpinv_city'] );
386
        $zip            = sanitize_text_field( $data['wpinv_zip'] );
387
        $country        = sanitize_text_field( $data['wpinv_country'] );
388
        $state          = sanitize_text_field( $data['wpinv_state'] );
389
390
        // Details
391
        $status         = sanitize_text_field( $data['wpinv_status'] );
392
        $old_status     = !empty( $data['original_post_status'] ) ? sanitize_text_field( $data['original_post_status'] ) : $status;
0 ignored issues
show
Unused Code introduced by
$old_status is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
393
        $number         = sanitize_text_field( $data['wpinv_number'] );
0 ignored issues
show
Unused Code introduced by
$number is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
394
        $due_date       = isset( $data['wpinv_due_date'] ) ? sanitize_text_field( $data['wpinv_due_date'] ) : '';
395
        //$discounts      = sanitize_text_field( $data['wpinv_discounts'] );
396
        //$discount       = sanitize_text_field( $data['wpinv_discount'] );
397
398
        $ip             = $invoice->get_ip() ? $invoice->get_ip() : wpinv_get_ip();
399
400
        $invoice->set( 'due_date', $due_date );
401
        $invoice->set( 'first_name', $first_name );
402
        $invoice->set( 'last_name', $last_name );
403
        $invoice->set( 'company', $company );
404
        $invoice->set( 'vat_number', $vat_number );
405
        $invoice->set( 'phone', $phone );
406
        $invoice->set( 'address', $address );
407
        $invoice->set( 'city', $city );
408
        $invoice->set( 'zip', $zip );
409
        $invoice->set( 'country', $country );
410
        $invoice->set( 'state', $state );
411
        $invoice->set( 'status', $status );
412
        //$invoice->set( 'number', $number );
413
        //$invoice->set( 'discounts', $discounts );
414
        //$invoice->set( 'discount', $discount );
415
        $invoice->set( 'ip', $ip );
416
        $invoice->old_status = $_POST['original_post_status'];
417
        $invoice->currency = wpinv_get_currency();
418
        if ( !empty( $data['wpinv_gateway'] ) ) {
419
            $invoice->set( 'gateway', sanitize_text_field( $data['wpinv_gateway'] ) );
420
        }
421
        $saved = $invoice->save();
422
423
        // Check for payment notes
424
        if ( !empty( $data['invoice_note'] ) ) {
425
            $note               = wp_kses( $data['invoice_note'], array() );
426
            $note_type          = sanitize_text_field( $data['invoice_note_type'] );
427
            $is_customer_note   = $note_type == 'customer' ? 1 : 0;
428
429
            wpinv_insert_payment_note( $invoice->ID, $note, $is_customer_note );
0 ignored issues
show
Documentation introduced by
$is_customer_note is of type integer, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
430
        }
431
432
        // Update user address if empty.
433
        if ( $saved && !empty( $invoice ) ) {
434
            if ( $user_id = $invoice->get_user_id() ) {
435
                $user_address = wpinv_get_user_address( $user_id, false );
436
437
                if (empty($user_address['first_name'])) {
438
                    update_user_meta( $user_id, '_wpinv_first_name', $first_name );
439
                    update_user_meta( $user_id, '_wpinv_last_name', $last_name );
440
                } else if (empty($user_address['last_name']) && $user_address['first_name'] == $first_name) {
441
                    update_user_meta( $user_id, '_wpinv_last_name', $last_name );
442
                }
443
444
                if (empty($user_address['address']) || empty($user_address['city']) || empty($user_address['state']) || empty($user_address['country'])) {
445
                    update_user_meta( $user_id, '_wpinv_address', $address );
446
                    update_user_meta( $user_id, '_wpinv_city', $city );
447
                    update_user_meta( $user_id, '_wpinv_state', $state );
448
                    update_user_meta( $user_id, '_wpinv_country', $country );
449
                    update_user_meta( $user_id, '_wpinv_zip', $zip );
450
                    update_user_meta( $user_id, '_wpinv_phone', $phone );
451
                }
452
            }
453
454
            do_action( 'wpinv_invoice_metabox_saved', $invoice );
455
        }
456
457
        return $saved;
458
    }
459
}
460