Passed
Branch master (50908e)
by Stiofan
07:01
created
widgets/buy-item.php 2 patches
Indentation   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -38,29 +38,29 @@  discard block
 block discarded – undo
38 38
                     'advanced'    => false
39 39
                 ),
40 40
                 'buy_items'  => array(
41
-	                'title'       => __( 'Items to buy', 'invoicing' ),
42
-	                'desc'        => __( 'Enter comma separated list of invoicing item id and quantity (item_id|quantity). Ex. 101|2 ', 'invoicing' ),
43
-	                'type'        => 'text',
44
-	                'desc_tip'    => true,
45
-	                'default'     => '',
46
-	                'placeholder' => __('Items to buy','invoicing'),
47
-	                'advanced'    => false
41
+                    'title'       => __( 'Items to buy', 'invoicing' ),
42
+                    'desc'        => __( 'Enter comma separated list of invoicing item id and quantity (item_id|quantity). Ex. 101|2 ', 'invoicing' ),
43
+                    'type'        => 'text',
44
+                    'desc_tip'    => true,
45
+                    'default'     => '',
46
+                    'placeholder' => __('Items to buy','invoicing'),
47
+                    'advanced'    => false
48 48
                 ),
49 49
                 'button_label'  => array(
50
-	                'title'       => __( 'Button Label', 'invoicing' ),
51
-	                'desc'        => __( 'Enter button label. Default "Buy Now".', 'invoicing' ),
52
-	                'type'        => 'text',
53
-	                'desc_tip'    => true,
54
-	                'default'     => '',
55
-	                'advanced'    => true
50
+                    'title'       => __( 'Button Label', 'invoicing' ),
51
+                    'desc'        => __( 'Enter button label. Default "Buy Now".', 'invoicing' ),
52
+                    'type'        => 'text',
53
+                    'desc_tip'    => true,
54
+                    'default'     => '',
55
+                    'advanced'    => true
56 56
                 ),
57 57
                 'post_id'  => array(
58
-	                'title'       => __( 'Post ID', 'invoicing' ),
59
-	                'desc'        => __( 'Enter related post ID. This is for 3rd party add ons and not mandatory field.', 'invoicing' ),
60
-	                'type'        => 'number',
61
-	                'desc_tip'    => true,
62
-	                'default'     => '',
63
-	                'advanced'    => true
58
+                    'title'       => __( 'Post ID', 'invoicing' ),
59
+                    'desc'        => __( 'Enter related post ID. This is for 3rd party add ons and not mandatory field.', 'invoicing' ),
60
+                    'type'        => 'number',
61
+                    'desc_tip'    => true,
62
+                    'default'     => '',
63
+                    'advanced'    => true
64 64
                 ),
65 65
             )
66 66
 
@@ -70,36 +70,36 @@  discard block
 block discarded – undo
70 70
         parent::__construct( $options );
71 71
     }
72 72
 
73
-	/**
74
-	 * The Super block output function.
75
-	 *
76
-	 * @param array $args
77
-	 * @param array $widget_args
78
-	 * @param string $content
79
-	 *
80
-	 * @return string
81
-	 */
73
+    /**
74
+     * The Super block output function.
75
+     *
76
+     * @param array $args
77
+     * @param array $widget_args
78
+     * @param string $content
79
+     *
80
+     * @return string
81
+     */
82 82
     public function output( $args = array(), $widget_args = array(), $content = '' ) {
83 83
 
84
-	    $defaults = array(
85
-		    'buy_items'     => '', // should be used like: item_id|quantity,item_id|quantity,item_id|quantity
86
-		    'button_label'  => __( 'Buy Now', 'invoicing' ), // the button title
87
-		    'post_id'   => '', // any related post_id
88
-	    );
84
+        $defaults = array(
85
+            'buy_items'     => '', // should be used like: item_id|quantity,item_id|quantity,item_id|quantity
86
+            'button_label'  => __( 'Buy Now', 'invoicing' ), // the button title
87
+            'post_id'   => '', // any related post_id
88
+        );
89 89
 
90
-	    /**
91
-	     * Parse incoming $args into an array and merge it with $defaults
92
-	     */
93
-	    $args = wp_parse_args( $args, $defaults );
90
+        /**
91
+         * Parse incoming $args into an array and merge it with $defaults
92
+         */
93
+        $args = wp_parse_args( $args, $defaults );
94 94
 
95
-	    $post_id = isset( $args['post_id'] ) ? (int)$args['post_id'] : 0;
95
+        $post_id = isset( $args['post_id'] ) ? (int)$args['post_id'] : 0;
96 96
 
97
-	    $html = '<div class="wpi-buy-button-wrapper wpi-g">';
98
-	    $html .= '<button class="button button-primary wpi-buy-button" type="button" onclick="wpi_buy(this,\'' . $args['buy_items'] . '\',' . $post_id . ');">' . $args['button_label'] . '</button>';
99
-	    $html .= wp_nonce_field( 'wpinv_buy_items', 'wpinv_buy_nonce', true, false );
100
-	    $html .= '</div>';
97
+        $html = '<div class="wpi-buy-button-wrapper wpi-g">';
98
+        $html .= '<button class="button button-primary wpi-buy-button" type="button" onclick="wpi_buy(this,\'' . $args['buy_items'] . '\',' . $post_id . ');">' . $args['button_label'] . '</button>';
99
+        $html .= wp_nonce_field( 'wpinv_buy_items', 'wpinv_buy_nonce', true, false );
100
+        $html .= '</div>';
101 101
 
102
-	    return $html;
102
+        return $html;
103 103
 
104 104
     }
105 105
 
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if ( ! defined( 'ABSPATH' ) ) {
2
+if (!defined('ABSPATH')) {
3 3
     exit;
4 4
 }
5 5
 
@@ -23,40 +23,40 @@  discard block
 block discarded – undo
23 23
             'block-keywords'=> "['invoicing','buy', 'buy item']",
24 24
             'class_name'     => __CLASS__,
25 25
             'base_id'       => 'wpinv_buy',
26
-            'name'          => __('Invoicing > Buy Item Button','invoicing'),
26
+            'name'          => __('Invoicing > Buy Item Button', 'invoicing'),
27 27
             'widget_ops'    => array(
28 28
                 'classname'   => 'wpinv-buy-item-class',
29
-                'description' => esc_html__('Displays buy invoicing item button.','invoicing'),
29
+                'description' => esc_html__('Displays buy invoicing item button.', 'invoicing'),
30 30
             ),
31 31
             'arguments'     => array(
32 32
                 'title'  => array(
33
-                    'title'       => __( 'Widget title', 'invoicing' ),
34
-                    'desc'        => __( 'Enter widget title.', 'invoicing' ),
33
+                    'title'       => __('Widget title', 'invoicing'),
34
+                    'desc'        => __('Enter widget title.', 'invoicing'),
35 35
                     'type'        => 'text',
36 36
                     'desc_tip'    => true,
37 37
                     'default'     => '',
38 38
                     'advanced'    => false
39 39
                 ),
40 40
                 'buy_items'  => array(
41
-	                'title'       => __( 'Items to buy', 'invoicing' ),
42
-	                'desc'        => __( 'Enter comma separated list of invoicing item id and quantity (item_id|quantity). Ex. 101|2 ', 'invoicing' ),
41
+	                'title'       => __('Items to buy', 'invoicing'),
42
+	                'desc'        => __('Enter comma separated list of invoicing item id and quantity (item_id|quantity). Ex. 101|2 ', 'invoicing'),
43 43
 	                'type'        => 'text',
44 44
 	                'desc_tip'    => true,
45 45
 	                'default'     => '',
46
-	                'placeholder' => __('Items to buy','invoicing'),
46
+	                'placeholder' => __('Items to buy', 'invoicing'),
47 47
 	                'advanced'    => false
48 48
                 ),
49 49
                 'button_label'  => array(
50
-	                'title'       => __( 'Button Label', 'invoicing' ),
51
-	                'desc'        => __( 'Enter button label. Default "Buy Now".', 'invoicing' ),
50
+	                'title'       => __('Button Label', 'invoicing'),
51
+	                'desc'        => __('Enter button label. Default "Buy Now".', 'invoicing'),
52 52
 	                'type'        => 'text',
53 53
 	                'desc_tip'    => true,
54 54
 	                'default'     => '',
55 55
 	                'advanced'    => true
56 56
                 ),
57 57
                 'post_id'  => array(
58
-	                'title'       => __( 'Post ID', 'invoicing' ),
59
-	                'desc'        => __( 'Enter related post ID. This is for 3rd party add ons and not mandatory field.', 'invoicing' ),
58
+	                'title'       => __('Post ID', 'invoicing'),
59
+	                'desc'        => __('Enter related post ID. This is for 3rd party add ons and not mandatory field.', 'invoicing'),
60 60
 	                'type'        => 'number',
61 61
 	                'desc_tip'    => true,
62 62
 	                'default'     => '',
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
         );
68 68
 
69 69
 
70
-        parent::__construct( $options );
70
+        parent::__construct($options);
71 71
     }
72 72
 
73 73
 	/**
@@ -79,24 +79,24 @@  discard block
 block discarded – undo
79 79
 	 *
80 80
 	 * @return string
81 81
 	 */
82
-    public function output( $args = array(), $widget_args = array(), $content = '' ) {
82
+    public function output($args = array(), $widget_args = array(), $content = '') {
83 83
 
84 84
 	    $defaults = array(
85 85
 		    'buy_items'     => '', // should be used like: item_id|quantity,item_id|quantity,item_id|quantity
86
-		    'button_label'  => __( 'Buy Now', 'invoicing' ), // the button title
86
+		    'button_label'  => __('Buy Now', 'invoicing'), // the button title
87 87
 		    'post_id'   => '', // any related post_id
88 88
 	    );
89 89
 
90 90
 	    /**
91 91
 	     * Parse incoming $args into an array and merge it with $defaults
92 92
 	     */
93
-	    $args = wp_parse_args( $args, $defaults );
93
+	    $args = wp_parse_args($args, $defaults);
94 94
 
95
-	    $post_id = isset( $args['post_id'] ) ? (int)$args['post_id'] : 0;
95
+	    $post_id = isset($args['post_id']) ? (int) $args['post_id'] : 0;
96 96
 
97 97
 	    $html = '<div class="wpi-buy-button-wrapper wpi-g">';
98 98
 	    $html .= '<button class="button button-primary wpi-buy-button" type="button" onclick="wpi_buy(this,\'' . $args['buy_items'] . '\',' . $post_id . ');">' . $args['button_label'] . '</button>';
99
-	    $html .= wp_nonce_field( 'wpinv_buy_items', 'wpinv_buy_nonce', true, false );
99
+	    $html .= wp_nonce_field('wpinv_buy_items', 'wpinv_buy_nonce', true, false);
100 100
 	    $html .= '</div>';
101 101
 
102 102
 	    return $html;
Please login to merge, or discard this patch.
includes/class-wpinv.php 2 patches
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -139,12 +139,12 @@  discard block
 block discarded – undo
139 139
         require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
140 140
         require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
141 141
         require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
142
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
143
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
144
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
145
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
146
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
147
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
142
+        require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
143
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
144
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
145
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
146
+        require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
147
+        require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
148 148
 
149 149
         if ( !class_exists( 'WPInv_EUVat' ) ) {
150 150
             require_once( WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php' );
@@ -420,16 +420,16 @@  discard block
 block discarded – undo
420 420
         require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
421 421
     }
422 422
 
423
-	/**
424
-	 * Register widgets
425
-	 *
426
-	 */
427
-	public function register_widgets() {
428
-		register_widget( "WPInv_Checkout_Widget" );
429
-		register_widget( "WPInv_History_Widget" );
430
-		register_widget( "WPInv_Receipt_Widget" );
431
-		register_widget( "WPInv_Subscriptions_Widget" );
432
-		register_widget( "WPInv_Buy_Item_Widget" );
433
-		register_widget( "WPInv_Messages_Widget" );
434
-	}
423
+    /**
424
+     * Register widgets
425
+     *
426
+     */
427
+    public function register_widgets() {
428
+        register_widget( "WPInv_Checkout_Widget" );
429
+        register_widget( "WPInv_History_Widget" );
430
+        register_widget( "WPInv_Receipt_Widget" );
431
+        register_widget( "WPInv_Subscriptions_Widget" );
432
+        register_widget( "WPInv_Buy_Item_Widget" );
433
+        register_widget( "WPInv_Messages_Widget" );
434
+    }
435 435
 }
436 436
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +203 added lines, -203 removed lines patch added patch discarded remove patch
@@ -7,15 +7,15 @@  discard block
 block discarded – undo
7 7
  */
8 8
  
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14 14
 class WPInv_Plugin {
15 15
     private static $instance;
16 16
     
17 17
     public static function run() {
18
-        if ( !isset( self::$instance ) && !( self::$instance instanceof WPInv_Plugin ) ) {
18
+        if (!isset(self::$instance) && !(self::$instance instanceof WPInv_Plugin)) {
19 19
             self::$instance = new WPInv_Plugin;
20 20
             self::$instance->includes();
21 21
             self::$instance->actions();
@@ -32,31 +32,31 @@  discard block
 block discarded – undo
32 32
     }
33 33
     
34 34
     public function define_constants() {
35
-        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
36
-        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
35
+        define('WPINV_PLUGIN_DIR', plugin_dir_path(WPINV_PLUGIN_FILE));
36
+        define('WPINV_PLUGIN_URL', plugin_dir_url(WPINV_PLUGIN_FILE));
37 37
     }
38 38
     
39 39
     private function actions() {
40 40
         /* Internationalize the text strings used. */
41
-        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
41
+        add_action('plugins_loaded', array(&$this, 'plugins_loaded'));
42 42
         
43 43
         /* Perform actions on admin initialization. */
44
-        add_action( 'admin_init', array( &$this, 'admin_init') );
45
-        add_action( 'init', array( &$this, 'init' ), 3 );
46
-        add_action( 'init', array( &$this, 'wpinv_actions' ) );
44
+        add_action('admin_init', array(&$this, 'admin_init'));
45
+        add_action('init', array(&$this, 'init'), 3);
46
+        add_action('init', array(&$this, 'wpinv_actions'));
47 47
         
48
-        if ( class_exists( 'BuddyPress' ) ) {
49
-            add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
48
+        if (class_exists('BuddyPress')) {
49
+            add_action('bp_include', array(&$this, 'bp_invoicing_init'));
50 50
         }
51 51
 
52
-        add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
53
-        add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
52
+        add_action('wp_enqueue_scripts', array(&$this, 'enqueue_scripts'));
53
+        add_action('widgets_init', array(&$this, 'register_widgets'));
54 54
 
55
-        if ( is_admin() ) {
56
-            add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
57
-            add_action( 'admin_body_class', array( &$this, 'admin_body_class' ) );
55
+        if (is_admin()) {
56
+            add_action('admin_enqueue_scripts', array(&$this, 'admin_enqueue_scripts'));
57
+            add_action('admin_body_class', array(&$this, 'admin_body_class'));
58 58
         } else {
59
-            add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
59
+            add_filter('pre_get_posts', array(&$this, 'pre_get_posts'));
60 60
         }
61 61
         
62 62
         /**
@@ -66,19 +66,19 @@  discard block
 block discarded – undo
66 66
          *
67 67
          * @param WPInv_Plugin $this. Current WPInv_Plugin instance. Passed by reference.
68 68
          */
69
-        do_action_ref_array( 'wpinv_actions', array( &$this ) );
69
+        do_action_ref_array('wpinv_actions', array(&$this));
70 70
 
71
-        add_action( 'admin_init', array( &$this, 'activation_redirect') );
71
+        add_action('admin_init', array(&$this, 'activation_redirect'));
72 72
     }
73 73
     
74 74
     public function plugins_loaded() {
75 75
         /* Internationalize the text strings used. */
76 76
         $this->load_textdomain();
77 77
 
78
-        do_action( 'wpinv_loaded' );
78
+        do_action('wpinv_loaded');
79 79
 
80 80
         // Fix oxygen page builder conflict
81
-        if ( function_exists( 'ct_css_output' ) ) {
81
+        if (function_exists('ct_css_output')) {
82 82
             wpinv_oxygen_fix_conflict();
83 83
         }
84 84
     }
@@ -88,228 +88,228 @@  discard block
 block discarded – undo
88 88
      *
89 89
      * @since 1.0
90 90
      */
91
-    public function load_textdomain( $locale = NULL ) {
92
-        if ( empty( $locale ) ) {
93
-            $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
91
+    public function load_textdomain($locale = NULL) {
92
+        if (empty($locale)) {
93
+            $locale = is_admin() && function_exists('get_user_locale') ? get_user_locale() : get_locale();
94 94
         }
95 95
 
96
-        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
96
+        $locale = apply_filters('plugin_locale', $locale, 'invoicing');
97 97
         
98
-        unload_textdomain( 'invoicing' );
99
-        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
100
-        load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
98
+        unload_textdomain('invoicing');
99
+        load_textdomain('invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo');
100
+        load_plugin_textdomain('invoicing', false, WPINV_PLUGIN_DIR . 'languages');
101 101
         
102 102
         /**
103 103
          * Define language constants.
104 104
          */
105
-        require_once( WPINV_PLUGIN_DIR . 'language.php' );
105
+        require_once(WPINV_PLUGIN_DIR . 'language.php');
106 106
     }
107 107
         
108 108
     public function includes() {
109 109
         global $wpinv_options;
110 110
         
111
-        require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
111
+        require_once(WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php');
112 112
         $wpinv_options = wpinv_get_settings();
113 113
         
114
-        require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
115
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
116
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
117
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
118
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
119
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
120
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
121
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-invoice-functions.php' );
122
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
123
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
124
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
125
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
126
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-user-functions.php' );
127
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-error-functions.php' );
128
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-post-types.php' );
129
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-invoice.php' );
130
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-item.php' );
131
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-notes.php' );
132
-        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
133
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
134
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
135
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
136
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-reports.php' );
137
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
138
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
139
-        require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
140
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
141
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions.php' );
142
-        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
143
-        require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-subscriptions-list-table.php' );
144
-        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
145
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
146
-        require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
147
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
148
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
149
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
150
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
151
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
152
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
153
-	    require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
154
-
155
-        if ( !class_exists( 'WPInv_EUVat' ) ) {
156
-            require_once( WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php' );
114
+        require_once(WPINV_PLUGIN_DIR . 'vendor/autoload.php');
115
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php');
116
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php');
117
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php');
118
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php');
119
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php');
120
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php');
121
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-invoice-functions.php');
122
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php');
123
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php');
124
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php');
125
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php');
126
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-user-functions.php');
127
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-error-functions.php');
128
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-post-types.php');
129
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-invoice.php');
130
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-item.php');
131
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-notes.php');
132
+        require_once(WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php');
133
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php');
134
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php');
135
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php');
136
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-reports.php');
137
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php');
138
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php');
139
+        require_once(WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php');
140
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php');
141
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions.php');
142
+        require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php');
143
+        require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-subscriptions-list-table.php');
144
+        require_once(WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php');
145
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php');
146
+        require_once(WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php');
147
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php');
148
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/checkout.php');
149
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-history.php');
150
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php');
151
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php');
152
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/subscriptions.php');
153
+	    require_once(WPINV_PLUGIN_DIR . 'widgets/buy-item.php');
154
+
155
+        if (!class_exists('WPInv_EUVat')) {
156
+            require_once(WPINV_PLUGIN_DIR . 'includes/libraries/wpinv-euvat/class-wpinv-euvat.php');
157 157
         }
158 158
         
159
-        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
160
-        if ( !empty( $gateways ) ) {
161
-            foreach ( $gateways as $gateway ) {
162
-                if ( $gateway == 'manual' ) {
159
+        $gateways = array_keys(wpinv_get_enabled_payment_gateways());
160
+        if (!empty($gateways)) {
161
+            foreach ($gateways as $gateway) {
162
+                if ($gateway == 'manual') {
163 163
                     continue;
164 164
                 }
165 165
                 
166 166
                 $gateway_file = WPINV_PLUGIN_DIR . 'includes/gateways/' . $gateway . '.php';
167 167
                 
168
-                if ( file_exists( $gateway_file ) ) {
169
-                    require_once( $gateway_file );
168
+                if (file_exists($gateway_file)) {
169
+                    require_once($gateway_file);
170 170
                 }
171 171
             }
172 172
         }
173
-        require_once( WPINV_PLUGIN_DIR . 'includes/gateways/manual.php' );
173
+        require_once(WPINV_PLUGIN_DIR . 'includes/gateways/manual.php');
174 174
         
175
-        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
176
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
177
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
178
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-meta-boxes.php' );
175
+        if (is_admin() || (defined('WP_CLI') && WP_CLI)) {
176
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php');
177
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php');
178
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/admin-meta-boxes.php');
179 179
             //require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-recurring-admin.php' );
180
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-details.php' );
181
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-items.php' );
182
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
183
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-address.php' );
184
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
185
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
186
-            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
180
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-details.php');
181
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-items.php');
182
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php');
183
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-address.php');
184
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php');
185
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php');
186
+            require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php');
187 187
             //require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
188 188
             // load the user class only on the users.php page
189 189
             global $pagenow;
190
-            if($pagenow=='users.php'){
190
+            if ($pagenow == 'users.php') {
191 191
                 new WPInv_Admin_Users();
192 192
             }
193 193
         }
194 194
 
195 195
         // Register cli commands
196
-        if ( defined( 'WP_CLI' ) && WP_CLI ) {
197
-            require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
198
-            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
196
+        if (defined('WP_CLI') && WP_CLI) {
197
+            require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php');
198
+            WP_CLI::add_command('invoicing', 'WPInv_CLI');
199 199
         }
200 200
         
201 201
         // include css inliner
202
-        if ( ! class_exists( 'Emogrifier' ) && class_exists( 'DOMDocument' ) ) {
203
-            include_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php' );
202
+        if (!class_exists('Emogrifier') && class_exists('DOMDocument')) {
203
+            include_once(WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php');
204 204
         }
205 205
         
206
-        require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
206
+        require_once(WPINV_PLUGIN_DIR . 'includes/admin/install.php');
207 207
     }
208 208
     
209 209
     public function init() {
210 210
     }
211 211
     
212 212
     public function admin_init() {
213
-        add_action( 'admin_print_scripts-edit.php', array( &$this, 'admin_print_scripts_edit_php' ) );
213
+        add_action('admin_print_scripts-edit.php', array(&$this, 'admin_print_scripts_edit_php'));
214 214
     }
215 215
 
216 216
     public function activation_redirect() {
217 217
         // Bail if no activation redirect
218
-        if ( !get_transient( '_wpinv_activation_redirect' ) ) {
218
+        if (!get_transient('_wpinv_activation_redirect')) {
219 219
             return;
220 220
         }
221 221
 
222 222
         // Delete the redirect transient
223
-        delete_transient( '_wpinv_activation_redirect' );
223
+        delete_transient('_wpinv_activation_redirect');
224 224
 
225 225
         // Bail if activating from network, or bulk
226
-        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
226
+        if (is_network_admin() || isset($_GET['activate-multi'])) {
227 227
             return;
228 228
         }
229 229
 
230
-        wp_safe_redirect( admin_url( 'admin.php?page=wpinv-settings&tab=general' ) );
230
+        wp_safe_redirect(admin_url('admin.php?page=wpinv-settings&tab=general'));
231 231
         exit;
232 232
     }
233 233
     
234 234
     public function enqueue_scripts() {
235
-        $suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
235
+        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
236 236
         
237
-        wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), WPINV_VERSION );
238
-        wp_enqueue_style( 'wpinv_front_style' );
237
+        wp_register_style('wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), WPINV_VERSION);
238
+        wp_enqueue_style('wpinv_front_style');
239 239
                
240 240
         // Register scripts
241
-        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
242
-        wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  WPINV_VERSION );
241
+        wp_register_script('jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array('jquery'), '2.70', true);
242
+        wp_register_script('wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array('jquery'), WPINV_VERSION);
243 243
 
244 244
         $localize                         = array();
245
-        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
246
-        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
245
+        $localize['ajax_url']             = admin_url('admin-ajax.php');
246
+        $localize['nonce']                = wp_create_nonce('wpinv-nonce');
247 247
         $localize['currency_symbol']      = wpinv_currency_symbol();
248 248
         $localize['currency_pos']         = wpinv_currency_position();
249 249
         $localize['thousand_sep']         = wpinv_thousands_separator();
250 250
         $localize['decimal_sep']          = wpinv_decimal_separator();
251 251
         $localize['decimals']             = wpinv_decimals();
252
-        $localize['txtComplete']          = __( 'Complete', 'invoicing' );
252
+        $localize['txtComplete']          = __('Complete', 'invoicing');
253 253
         $localize['UseTaxes']             = wpinv_use_taxes();
254
-        $localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
254
+        $localize['checkoutNonce']        = wp_create_nonce('wpinv_checkout_nonce');
255 255
 
256
-        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
256
+        $localize = apply_filters('wpinv_front_js_localize', $localize);
257 257
         
258
-        wp_enqueue_script( 'jquery-blockui' );
258
+        wp_enqueue_script('jquery-blockui');
259 259
         $autofill_api = wpinv_get_option('address_autofill_api');
260 260
         $autofill_active = wpinv_get_option('address_autofill_active');
261
-        if ( isset( $autofill_active ) && 1 == $autofill_active && !empty( $autofill_api ) && wpinv_is_checkout() ) {
262
-            if ( wp_script_is( 'google-maps-api', 'enqueued' ) ) {
263
-                wp_dequeue_script( 'google-maps-api' );
261
+        if (isset($autofill_active) && 1 == $autofill_active && !empty($autofill_api) && wpinv_is_checkout()) {
262
+            if (wp_script_is('google-maps-api', 'enqueued')) {
263
+                wp_dequeue_script('google-maps-api');
264 264
             }
265
-            wp_enqueue_script( 'google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array( 'jquery' ), '', false );
266
-            wp_enqueue_script( 'google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array( 'jquery', 'google-maps-api' ), '', true );
265
+            wp_enqueue_script('google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=' . $autofill_api . '&libraries=places', array('jquery'), '', false);
266
+            wp_enqueue_script('google-maps-init', WPINV_PLUGIN_URL . 'assets/js/gaaf.js', array('jquery', 'google-maps-api'), '', true);
267 267
         }
268 268
 
269
-        wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.css', array(), WPINV_VERSION, 'all' );
270
-        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
269
+        wp_enqueue_style("select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.css', array(), WPINV_VERSION, 'all');
270
+        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array('jquery'), WPINV_VERSION);
271 271
 
272
-        wp_enqueue_script( 'wpinv-front-script' );
273
-        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
272
+        wp_enqueue_script('wpinv-front-script');
273
+        wp_localize_script('wpinv-front-script', 'WPInv', $localize);
274 274
     }
275 275
 
276 276
     public function admin_enqueue_scripts() {
277 277
         global $post, $pagenow;
278 278
         
279 279
         $post_type  = wpinv_admin_post_type();
280
-        $suffix     = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
281
-        $page       = isset( $_GET['page'] ) ? strtolower( $_GET['page'] ) : '';
280
+        $suffix     = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
281
+        $page       = isset($_GET['page']) ? strtolower($_GET['page']) : '';
282 282
 
283 283
         $jquery_ui_css = false;
284
-        if ( ( $post_type == 'wpi_invoice' || $post_type == 'wpi_quote' || $post_type == 'wpi_discount' ) && ( $pagenow == 'post-new.php' || $pagenow == 'post.php' ) ) {
284
+        if (($post_type == 'wpi_invoice' || $post_type == 'wpi_quote' || $post_type == 'wpi_discount') && ($pagenow == 'post-new.php' || $pagenow == 'post.php')) {
285 285
             $jquery_ui_css = true;
286
-        } else if ( $page == 'wpinv-settings' || $page == 'wpinv-reports' ) {
286
+        } else if ($page == 'wpinv-settings' || $page == 'wpinv-reports') {
287 287
             $jquery_ui_css = true;
288 288
         }
289
-        if ( $jquery_ui_css ) {
290
-            wp_register_style( 'jquery-ui-css', WPINV_PLUGIN_URL . 'assets/css/jquery-ui' . $suffix . '.css', array(), '1.8.16' );
291
-            wp_enqueue_style( 'jquery-ui-css' );
289
+        if ($jquery_ui_css) {
290
+            wp_register_style('jquery-ui-css', WPINV_PLUGIN_URL . 'assets/css/jquery-ui' . $suffix . '.css', array(), '1.8.16');
291
+            wp_enqueue_style('jquery-ui-css');
292 292
         }
293 293
 
294
-        wp_register_style( 'wpinv_meta_box_style', WPINV_PLUGIN_URL . 'assets/css/meta-box.css', array(), WPINV_VERSION );
295
-        wp_enqueue_style( 'wpinv_meta_box_style' );
294
+        wp_register_style('wpinv_meta_box_style', WPINV_PLUGIN_URL . 'assets/css/meta-box.css', array(), WPINV_VERSION);
295
+        wp_enqueue_style('wpinv_meta_box_style');
296 296
         
297
-        wp_register_style( 'wpinv_admin_style', WPINV_PLUGIN_URL . 'assets/css/admin.css', array(), WPINV_VERSION );
298
-        wp_enqueue_style( 'wpinv_admin_style' );
297
+        wp_register_style('wpinv_admin_style', WPINV_PLUGIN_URL . 'assets/css/admin.css', array(), WPINV_VERSION);
298
+        wp_enqueue_style('wpinv_admin_style');
299 299
 
300
-        $enqueue = ( $post_type == 'wpi_discount' || $post_type == 'wpi_invoice' && ( $pagenow == 'post-new.php' || $pagenow == 'post.php' ) );
301
-        if ( $page == 'wpinv-subscriptions' ) {
302
-            wp_enqueue_script( 'jquery-ui-datepicker' );
300
+        $enqueue = ($post_type == 'wpi_discount' || $post_type == 'wpi_invoice' && ($pagenow == 'post-new.php' || $pagenow == 'post.php'));
301
+        if ($page == 'wpinv-subscriptions') {
302
+            wp_enqueue_script('jquery-ui-datepicker');
303 303
         }
304 304
         
305
-        if ( $enqueue_datepicker = apply_filters( 'wpinv_admin_enqueue_jquery_ui_datepicker', $enqueue ) ) {
306
-            wp_enqueue_script( 'jquery-ui-datepicker' );
305
+        if ($enqueue_datepicker = apply_filters('wpinv_admin_enqueue_jquery_ui_datepicker', $enqueue)) {
306
+            wp_enqueue_script('jquery-ui-datepicker');
307 307
         }
308 308
 
309
-        wp_enqueue_style( 'wp-color-picker' );
310
-        wp_enqueue_script( 'wp-color-picker' );
309
+        wp_enqueue_style('wp-color-picker');
310
+        wp_enqueue_script('wp-color-picker');
311 311
         
312
-        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
312
+        wp_register_script('jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array('jquery'), '2.70', true);
313 313
 
314 314
         if (($post_type == 'wpi_invoice' || $post_type == 'wpi_quote') && ($pagenow == 'post-new.php' || $pagenow == 'post.php')) {
315 315
             $autofill_api = wpinv_get_option('address_autofill_api');
@@ -320,20 +320,20 @@  discard block
 block discarded – undo
320 320
             }
321 321
         }
322 322
 
323
-        wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.css', array(), WPINV_VERSION, 'all' );
324
-        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
323
+        wp_enqueue_style("select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.css', array(), WPINV_VERSION, 'all');
324
+        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array('jquery'), WPINV_VERSION);
325 325
 
326
-        wp_register_script( 'wpinv-admin-script', WPINV_PLUGIN_URL . 'assets/js/admin.js', array( 'jquery', 'jquery-blockui','jquery-ui-tooltip' ),  WPINV_VERSION );
327
-        wp_enqueue_script( 'wpinv-admin-script' );
326
+        wp_register_script('wpinv-admin-script', WPINV_PLUGIN_URL . 'assets/js/admin.js', array('jquery', 'jquery-blockui', 'jquery-ui-tooltip'), WPINV_VERSION);
327
+        wp_enqueue_script('wpinv-admin-script');
328 328
         
329 329
         $localize                               = array();
330
-        $localize['ajax_url']                   = admin_url( 'admin-ajax.php' );
331
-        $localize['post_ID']                    = isset( $post->ID ) ? $post->ID : '';
332
-        $localize['wpinv_nonce']                = wp_create_nonce( 'wpinv-nonce' );
333
-        $localize['add_invoice_note_nonce']     = wp_create_nonce( 'add-invoice-note' );
334
-        $localize['delete_invoice_note_nonce']  = wp_create_nonce( 'delete-invoice-note' );
335
-        $localize['invoice_item_nonce']         = wp_create_nonce( 'invoice-item' );
336
-        $localize['billing_details_nonce']      = wp_create_nonce( 'get-billing-details' );
330
+        $localize['ajax_url']                   = admin_url('admin-ajax.php');
331
+        $localize['post_ID']                    = isset($post->ID) ? $post->ID : '';
332
+        $localize['wpinv_nonce']                = wp_create_nonce('wpinv-nonce');
333
+        $localize['add_invoice_note_nonce']     = wp_create_nonce('add-invoice-note');
334
+        $localize['delete_invoice_note_nonce']  = wp_create_nonce('delete-invoice-note');
335
+        $localize['invoice_item_nonce']         = wp_create_nonce('invoice-item');
336
+        $localize['billing_details_nonce']      = wp_create_nonce('get-billing-details');
337 337
         $localize['tax']                        = wpinv_tax_amount();
338 338
         $localize['discount']                   = wpinv_discount_amount();
339 339
         $localize['currency_symbol']            = wpinv_currency_symbol();
@@ -341,69 +341,69 @@  discard block
 block discarded – undo
341 341
         $localize['thousand_sep']               = wpinv_thousands_separator();
342 342
         $localize['decimal_sep']                = wpinv_decimal_separator();
343 343
         $localize['decimals']                   = wpinv_decimals();
344
-        $localize['save_invoice']               = __( 'Save Invoice', 'invoicing' );
345
-        $localize['status_publish']             = wpinv_status_nicename( 'publish' );
346
-        $localize['status_pending']             = wpinv_status_nicename( 'wpi-pending' );
347
-        $localize['delete_tax_rate']            = __( 'Are you sure you wish to delete this tax rate?', 'invoicing' );
348
-        $localize['OneItemMin']                 = __( 'Invoice must contain at least one item', 'invoicing' );
349
-        $localize['DeleteInvoiceItem']          = __( 'Are you sure you wish to delete this item?', 'invoicing' );
350
-        $localize['FillBillingDetails']         = __( 'Fill the user\'s billing information? This will remove any currently entered billing information', 'invoicing' );
351
-        $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' );
352
-        $localize['AreYouSure']                 = __( 'Are you sure?', 'invoicing' );
353
-        $localize['emptyInvoice']               = __( 'Add at least one item to save invoice!', 'invoicing' );
354
-        $localize['errDeleteItem']              = __( 'This item is in use! Before delete this item, you need to delete all the invoice(s) using this item.', 'invoicing' );
355
-        $localize['delete_subscription']        = __( 'Are you sure you want to delete this subscription?', 'invoicing' );
356
-        $localize['action_edit']                = __( 'Edit', 'invoicing' );
357
-        $localize['action_cancel']              = __( 'Cancel', 'invoicing' );
358
-
359
-        $localize = apply_filters( 'wpinv_admin_js_localize', $localize );
360
-
361
-        wp_localize_script( 'wpinv-admin-script', 'WPInv_Admin', $localize );
362
-
363
-        if ( $page == 'wpinv-subscriptions' ) {
364
-            wp_register_script( 'wpinv-sub-admin-script', WPINV_PLUGIN_URL . 'assets/js/subscriptions.js', array( 'wpinv-admin-script' ),  WPINV_VERSION );
365
-            wp_enqueue_script( 'wpinv-sub-admin-script' );
344
+        $localize['save_invoice']               = __('Save Invoice', 'invoicing');
345
+        $localize['status_publish']             = wpinv_status_nicename('publish');
346
+        $localize['status_pending']             = wpinv_status_nicename('wpi-pending');
347
+        $localize['delete_tax_rate']            = __('Are you sure you wish to delete this tax rate?', 'invoicing');
348
+        $localize['OneItemMin']                 = __('Invoice must contain at least one item', 'invoicing');
349
+        $localize['DeleteInvoiceItem']          = __('Are you sure you wish to delete this item?', 'invoicing');
350
+        $localize['FillBillingDetails']         = __('Fill the user\'s billing information? This will remove any currently entered billing information', 'invoicing');
351
+        $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');
352
+        $localize['AreYouSure']                 = __('Are you sure?', 'invoicing');
353
+        $localize['emptyInvoice']               = __('Add at least one item to save invoice!', 'invoicing');
354
+        $localize['errDeleteItem']              = __('This item is in use! Before delete this item, you need to delete all the invoice(s) using this item.', 'invoicing');
355
+        $localize['delete_subscription']        = __('Are you sure you want to delete this subscription?', 'invoicing');
356
+        $localize['action_edit']                = __('Edit', 'invoicing');
357
+        $localize['action_cancel']              = __('Cancel', 'invoicing');
358
+
359
+        $localize = apply_filters('wpinv_admin_js_localize', $localize);
360
+
361
+        wp_localize_script('wpinv-admin-script', 'WPInv_Admin', $localize);
362
+
363
+        if ($page == 'wpinv-subscriptions') {
364
+            wp_register_script('wpinv-sub-admin-script', WPINV_PLUGIN_URL . 'assets/js/subscriptions.js', array('wpinv-admin-script'), WPINV_VERSION);
365
+            wp_enqueue_script('wpinv-sub-admin-script');
366 366
         }
367 367
     }
368 368
     
369
-    public function admin_body_class( $classes ) {
369
+    public function admin_body_class($classes) {
370 370
         global $pagenow, $post, $current_screen;
371 371
         
372
-        if ( !empty( $current_screen->post_type ) && ( $current_screen->post_type == 'wpi_invoice' || $current_screen->post_type == 'wpi_quote' ) ) {
372
+        if (!empty($current_screen->post_type) && ($current_screen->post_type == 'wpi_invoice' || $current_screen->post_type == 'wpi_quote')) {
373 373
             $classes .= ' wpinv-cpt';
374 374
         }
375 375
         
376
-        $page = isset( $_GET['page'] ) ? strtolower( $_GET['page'] ) : false;
376
+        $page = isset($_GET['page']) ? strtolower($_GET['page']) : false;
377 377
 
378
-        $add_class = $page && $pagenow == 'admin.php' && strpos( $page, 'wpinv-' ) === 0 ? true : false;
379
-        if ( $add_class ) {
380
-            $classes .= ' wpi-' . wpinv_sanitize_key( $page );
378
+        $add_class = $page && $pagenow == 'admin.php' && strpos($page, 'wpinv-') === 0 ? true : false;
379
+        if ($add_class) {
380
+            $classes .= ' wpi-' . wpinv_sanitize_key($page);
381 381
         }
382 382
         
383 383
         $settings_class = array();
384
-        if ( $page == 'wpinv-settings' ) {
385
-            if ( !empty( $_REQUEST['tab'] ) ) {
386
-                $settings_class[] = sanitize_text_field( $_REQUEST['tab'] );
384
+        if ($page == 'wpinv-settings') {
385
+            if (!empty($_REQUEST['tab'])) {
386
+                $settings_class[] = sanitize_text_field($_REQUEST['tab']);
387 387
             }
388 388
             
389
-            if ( !empty( $_REQUEST['section'] ) ) {
390
-                $settings_class[] = sanitize_text_field( $_REQUEST['section'] );
389
+            if (!empty($_REQUEST['section'])) {
390
+                $settings_class[] = sanitize_text_field($_REQUEST['section']);
391 391
             }
392 392
             
393
-            $settings_class[] = isset( $_REQUEST['wpi_sub'] ) && $_REQUEST['wpi_sub'] !== '' ? sanitize_text_field( $_REQUEST['wpi_sub'] ) : 'main';
393
+            $settings_class[] = isset($_REQUEST['wpi_sub']) && $_REQUEST['wpi_sub'] !== '' ? sanitize_text_field($_REQUEST['wpi_sub']) : 'main';
394 394
         }
395 395
         
396
-        if ( !empty( $settings_class ) ) {
397
-            $classes .= ' wpi-' . wpinv_sanitize_key( implode( $settings_class, '-' ) );
396
+        if (!empty($settings_class)) {
397
+            $classes .= ' wpi-' . wpinv_sanitize_key(implode($settings_class, '-'));
398 398
         }
399 399
         
400 400
         $post_type = wpinv_admin_post_type();
401 401
 
402
-        if ( $post_type == 'wpi_invoice' || $post_type == 'wpi_quote' || $add_class !== false ) {
402
+        if ($post_type == 'wpi_invoice' || $post_type == 'wpi_quote' || $add_class !== false) {
403 403
             return $classes .= ' wpinv';
404 404
         }
405 405
         
406
-        if ( $pagenow == 'post.php' && $post_type == 'wpi_item' && !empty( $post ) && !wpinv_item_is_editable( $post ) ) {
406
+        if ($pagenow == 'post.php' && $post_type == 'wpi_item' && !empty($post) && !wpinv_item_is_editable($post)) {
407 407
             $classes .= ' wpi-editable-n';
408 408
         }
409 409
 
@@ -415,21 +415,21 @@  discard block
 block discarded – undo
415 415
     }
416 416
     
417 417
     public function wpinv_actions() {
418
-        if ( isset( $_REQUEST['wpi_action'] ) ) {
419
-            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
418
+        if (isset($_REQUEST['wpi_action'])) {
419
+            do_action('wpinv_' . wpinv_sanitize_key($_REQUEST['wpi_action']), $_REQUEST);
420 420
         }
421 421
     }
422 422
     
423
-    public function pre_get_posts( $wp_query ) {
424
-        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() ) {
425
-            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses() );
423
+    public function pre_get_posts($wp_query) {
424
+        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()) {
425
+            $wp_query->query_vars['post_status'] = array_keys(wpinv_get_invoice_statuses());
426 426
         }
427 427
         
428 428
         return $wp_query;
429 429
     }
430 430
     
431 431
     public function bp_invoicing_init() {
432
-        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
432
+        require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php');
433 433
     }
434 434
 
435 435
 	/**
@@ -437,11 +437,11 @@  discard block
 block discarded – undo
437 437
 	 *
438 438
 	 */
439 439
 	public function register_widgets() {
440
-		register_widget( "WPInv_Checkout_Widget" );
441
-		register_widget( "WPInv_History_Widget" );
442
-		register_widget( "WPInv_Receipt_Widget" );
443
-		register_widget( "WPInv_Subscriptions_Widget" );
444
-		register_widget( "WPInv_Buy_Item_Widget" );
445
-		register_widget( "WPInv_Messages_Widget" );
440
+		register_widget("WPInv_Checkout_Widget");
441
+		register_widget("WPInv_History_Widget");
442
+		register_widget("WPInv_Receipt_Widget");
443
+		register_widget("WPInv_Subscriptions_Widget");
444
+		register_widget("WPInv_Buy_Item_Widget");
445
+		register_widget("WPInv_Messages_Widget");
446 446
 	}
447 447
 }
448 448
\ No newline at end of file
Please login to merge, or discard this patch.
includes/wpinv-helper-functions.php 2 patches
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -700,7 +700,7 @@  discard block
 block discarded – undo
700 700
 }
701 701
 
702 702
 function wpinv_get_php_arg_separator_output() {
703
-	return ini_get( 'arg_separator.output' );
703
+    return ini_get( 'arg_separator.output' );
704 704
 }
705 705
 
706 706
 function wpinv_rgb_from_hex( $color ) {
@@ -1038,9 +1038,9 @@  discard block
 block discarded – undo
1038 1038
  * @return array Sanitized array of values.
1039 1039
  */
1040 1040
 function wpinv_parse_list( $list ) {
1041
-	if ( ! is_array( $list ) ) {
1042
-		return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
1043
-	}
1041
+    if ( ! is_array( $list ) ) {
1042
+        return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
1043
+    }
1044 1044
 
1045
-	return $list;
1045
+    return $list;
1046 1046
 }
1047 1047
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +392 added lines, -392 removed lines patch added patch discarded remove patch
@@ -7,132 +7,132 @@  discard block
 block discarded – undo
7 7
  */
8 8
 
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14 14
 function wpinv_item_quantities_enabled() {
15
-    $ret = wpinv_get_option( 'item_quantities', true );
15
+    $ret = wpinv_get_option('item_quantities', true);
16 16
 
17
-    return (bool) apply_filters( 'wpinv_item_quantities_enabled', $ret );
17
+    return (bool) apply_filters('wpinv_item_quantities_enabled', $ret);
18 18
 }
19 19
 
20 20
 function wpinv_get_ip() {
21 21
     $ip = '127.0.0.1';
22 22
 
23
-    if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
24
-        $ip = sanitize_text_field( $_SERVER['HTTP_CLIENT_IP'] );
25
-    } elseif ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
26
-        $ip = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] );
27
-    } elseif( !empty( $_SERVER['REMOTE_ADDR'] ) ) {
28
-        $ip = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
23
+    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
24
+        $ip = sanitize_text_field($_SERVER['HTTP_CLIENT_IP']);
25
+    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
26
+        $ip = sanitize_text_field($_SERVER['HTTP_X_FORWARDED_FOR']);
27
+    } elseif (!empty($_SERVER['REMOTE_ADDR'])) {
28
+        $ip = sanitize_text_field($_SERVER['REMOTE_ADDR']);
29 29
     }
30 30
 
31
-    return apply_filters( 'wpinv_get_ip', $ip );
31
+    return apply_filters('wpinv_get_ip', $ip);
32 32
 }
33 33
 
34 34
 function wpinv_get_user_agent() {
35
-    if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
36
-        $user_agent = sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] );
35
+    if (!empty($_SERVER['HTTP_USER_AGENT'])) {
36
+        $user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']);
37 37
     } else {
38 38
         $user_agent = '';
39 39
     }
40 40
 
41
-    return apply_filters( 'wpinv_get_user_agent', $user_agent );
41
+    return apply_filters('wpinv_get_user_agent', $user_agent);
42 42
 }
43 43
 
44
-function wpinv_sanitize_amount( $amount, $decimals = NULL ) {
44
+function wpinv_sanitize_amount($amount, $decimals = NULL) {
45 45
     $is_negative   = false;
46 46
     $thousands_sep = wpinv_thousands_separator();
47 47
     $decimal_sep   = wpinv_decimal_separator();
48
-    if ( $decimals === NULL ) {
48
+    if ($decimals === NULL) {
49 49
         $decimals = wpinv_decimals();
50 50
     }
51 51
 
52 52
     // Sanitize the amount
53
-    if ( $decimal_sep == ',' && false !== ( $found = strpos( $amount, $decimal_sep ) ) ) {
54
-        if ( ( $thousands_sep == '.' || $thousands_sep == ' ' ) && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
55
-            $amount = str_replace( $thousands_sep, '', $amount );
56
-        } elseif( empty( $thousands_sep ) && false !== ( $found = strpos( $amount, '.' ) ) ) {
57
-            $amount = str_replace( '.', '', $amount );
53
+    if ($decimal_sep == ',' && false !== ($found = strpos($amount, $decimal_sep))) {
54
+        if (($thousands_sep == '.' || $thousands_sep == ' ') && false !== ($found = strpos($amount, $thousands_sep))) {
55
+            $amount = str_replace($thousands_sep, '', $amount);
56
+        } elseif (empty($thousands_sep) && false !== ($found = strpos($amount, '.'))) {
57
+            $amount = str_replace('.', '', $amount);
58 58
         }
59 59
 
60
-        $amount = str_replace( $decimal_sep, '.', $amount );
61
-    } elseif( $thousands_sep == ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
62
-        $amount = str_replace( $thousands_sep, '', $amount );
60
+        $amount = str_replace($decimal_sep, '.', $amount);
61
+    } elseif ($thousands_sep == ',' && false !== ($found = strpos($amount, $thousands_sep))) {
62
+        $amount = str_replace($thousands_sep, '', $amount);
63 63
     }
64 64
 
65
-    if( $amount < 0 ) {
65
+    if ($amount < 0) {
66 66
         $is_negative = true;
67 67
     }
68 68
 
69
-    $amount   = preg_replace( '/[^0-9\.]/', '', $amount );
69
+    $amount   = preg_replace('/[^0-9\.]/', '', $amount);
70 70
 
71
-    $decimals = apply_filters( 'wpinv_sanitize_amount_decimals', absint( $decimals ), $amount );
72
-    $amount   = number_format( (double) $amount, absint( $decimals ), '.', '' );
71
+    $decimals = apply_filters('wpinv_sanitize_amount_decimals', absint($decimals), $amount);
72
+    $amount   = number_format((double) $amount, absint($decimals), '.', '');
73 73
 
74
-    if( $is_negative ) {
74
+    if ($is_negative) {
75 75
         $amount *= -1;
76 76
     }
77 77
 
78
-    return apply_filters( 'wpinv_sanitize_amount', $amount, $decimals );
78
+    return apply_filters('wpinv_sanitize_amount', $amount, $decimals);
79 79
 }
80
-add_filter( 'wpinv_sanitize_amount_decimals', 'wpinv_currency_decimal_filter', 10, 1 );
80
+add_filter('wpinv_sanitize_amount_decimals', 'wpinv_currency_decimal_filter', 10, 1);
81 81
 
82
-function wpinv_round_amount( $amount, $decimals = NULL ) {
83
-    if ( $decimals === NULL ) {
82
+function wpinv_round_amount($amount, $decimals = NULL) {
83
+    if ($decimals === NULL) {
84 84
         $decimals = wpinv_decimals();
85 85
     }
86 86
     
87
-    $amount = round( (double)$amount, wpinv_currency_decimal_filter( absint( $decimals ) ) );
87
+    $amount = round((double) $amount, wpinv_currency_decimal_filter(absint($decimals)));
88 88
 
89
-    return apply_filters( 'wpinv_round_amount', $amount, $decimals );
89
+    return apply_filters('wpinv_round_amount', $amount, $decimals);
90 90
 }
91 91
 
92
-function wpinv_get_invoice_statuses( $draft = false, $trashed = false, $invoice = false ) {
92
+function wpinv_get_invoice_statuses($draft = false, $trashed = false, $invoice = false) {
93 93
     global $post;
94 94
 
95 95
     $invoice_statuses = array(
96
-        'wpi-pending' => __( 'Pending Payment', 'invoicing' ),
97
-        'publish' => __( 'Paid', 'invoicing'),
98
-        'wpi-processing' => __( 'Processing', 'invoicing' ),
99
-        'wpi-onhold' => __( 'On Hold', 'invoicing' ),
100
-        'wpi-refunded' => __( 'Refunded', 'invoicing' ),
101
-        'wpi-cancelled' => __( 'Cancelled', 'invoicing' ),
102
-        'wpi-failed' => __( 'Failed', 'invoicing' ),
103
-        'wpi-renewal' => __( 'Renewal Payment', 'invoicing' )
96
+        'wpi-pending' => __('Pending Payment', 'invoicing'),
97
+        'publish' => __('Paid', 'invoicing'),
98
+        'wpi-processing' => __('Processing', 'invoicing'),
99
+        'wpi-onhold' => __('On Hold', 'invoicing'),
100
+        'wpi-refunded' => __('Refunded', 'invoicing'),
101
+        'wpi-cancelled' => __('Cancelled', 'invoicing'),
102
+        'wpi-failed' => __('Failed', 'invoicing'),
103
+        'wpi-renewal' => __('Renewal Payment', 'invoicing')
104 104
     );
105 105
 
106
-    if ( $draft ) {
107
-        $invoice_statuses['draft'] = __( 'Draft', 'invoicing' );
106
+    if ($draft) {
107
+        $invoice_statuses['draft'] = __('Draft', 'invoicing');
108 108
     }
109 109
 
110
-    if ( $trashed ) {
111
-        $invoice_statuses['trash'] = __( 'Trash', 'invoicing' );
110
+    if ($trashed) {
111
+        $invoice_statuses['trash'] = __('Trash', 'invoicing');
112 112
     }
113 113
 
114
-    return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
114
+    return apply_filters('wpinv_statuses', $invoice_statuses, $invoice);
115 115
 }
116 116
 
117
-function wpinv_status_nicename( $status ) {
118
-    $statuses = wpinv_get_invoice_statuses( true, true );
119
-    $status   = isset( $statuses[$status] ) ? $statuses[$status] : __( $status, 'invoicing' );
117
+function wpinv_status_nicename($status) {
118
+    $statuses = wpinv_get_invoice_statuses(true, true);
119
+    $status   = isset($statuses[$status]) ? $statuses[$status] : __($status, 'invoicing');
120 120
 
121 121
     return $status;
122 122
 }
123 123
 
124 124
 function wpinv_get_currency() {
125
-    $currency = wpinv_get_option( 'currency', 'USD' );
125
+    $currency = wpinv_get_option('currency', 'USD');
126 126
     
127
-    return apply_filters( 'wpinv_currency', $currency );
127
+    return apply_filters('wpinv_currency', $currency);
128 128
 }
129 129
 
130
-function wpinv_currency_symbol( $currency = '' ) {
131
-    if ( empty( $currency ) ) {
130
+function wpinv_currency_symbol($currency = '') {
131
+    if (empty($currency)) {
132 132
         $currency = wpinv_get_currency();
133 133
     }
134 134
     
135
-    $symbols = apply_filters( 'wpinv_currency_symbols', array(
135
+    $symbols = apply_filters('wpinv_currency_symbols', array(
136 136
         'AED' => '&#x62f;.&#x625;',
137 137
         'AFN' => '&#x60b;',
138 138
         'ALL' => 'L',
@@ -295,209 +295,209 @@  discard block
 block discarded – undo
295 295
         'YER' => '&#xfdfc;',
296 296
         'ZAR' => '&#82;',
297 297
         'ZMW' => 'ZK',
298
-    ) );
298
+    ));
299 299
 
300
-    $currency_symbol = isset( $symbols[$currency] ) ? $symbols[$currency] : $currency;
300
+    $currency_symbol = isset($symbols[$currency]) ? $symbols[$currency] : $currency;
301 301
 
302
-    return apply_filters( 'wpinv_currency_symbol', $currency_symbol, $currency );
302
+    return apply_filters('wpinv_currency_symbol', $currency_symbol, $currency);
303 303
 }
304 304
 
305 305
 function wpinv_currency_position() {
306
-    $position = wpinv_get_option( 'currency_position', 'left' );
306
+    $position = wpinv_get_option('currency_position', 'left');
307 307
     
308
-    return apply_filters( 'wpinv_currency_position', $position );
308
+    return apply_filters('wpinv_currency_position', $position);
309 309
 }
310 310
 
311 311
 function wpinv_thousands_separator() {
312
-    $thousand_sep = wpinv_get_option( 'thousands_separator', ',' );
312
+    $thousand_sep = wpinv_get_option('thousands_separator', ',');
313 313
     
314
-    return apply_filters( 'wpinv_thousands_separator', $thousand_sep );
314
+    return apply_filters('wpinv_thousands_separator', $thousand_sep);
315 315
 }
316 316
 
317 317
 function wpinv_decimal_separator() {
318
-    $decimal_sep = wpinv_get_option( 'decimal_separator', '.' );
318
+    $decimal_sep = wpinv_get_option('decimal_separator', '.');
319 319
     
320
-    return apply_filters( 'wpinv_decimal_separator', $decimal_sep );
320
+    return apply_filters('wpinv_decimal_separator', $decimal_sep);
321 321
 }
322 322
 
323 323
 function wpinv_decimals() {
324
-    $decimals = apply_filters( 'wpinv_decimals', wpinv_get_option( 'decimals', 2 ) );
324
+    $decimals = apply_filters('wpinv_decimals', wpinv_get_option('decimals', 2));
325 325
     
326
-    return absint( $decimals );
326
+    return absint($decimals);
327 327
 }
328 328
 
329 329
 function wpinv_get_currencies() {
330 330
     $currencies = array(
331
-        'USD' => __( 'US Dollar', 'invoicing' ),
332
-        'EUR' => __( 'Euro', 'invoicing' ),
333
-        'GBP' => __( 'Pound Sterling', 'invoicing' ),
334
-        'AED' => __( 'United Arab Emirates', 'invoicing' ),
335
-        'AFN' => __( 'Afghan Afghani', 'invoicing' ),
336
-        'ALL' => __( 'Albanian Lek', 'invoicing' ),
337
-        'AMD' => __( 'Armenian Dram', 'invoicing' ),
338
-        'ANG' => __( 'Netherlands Antillean Guilder', 'invoicing' ),
339
-        'AOA' => __( 'Angolan Kwanza', 'invoicing' ),
340
-        'ARS' => __( 'Argentine Peso', 'invoicing' ),
341
-        'AUD' => __( 'Australian Dollar', 'invoicing' ),
342
-        'AWG' => __( 'Aruban Florin', 'invoicing' ),
343
-        'AZN' => __( 'Azerbaijani Manat', 'invoicing' ),
344
-        'BAM' => __( 'Bosnia and Herzegovina Convertible Marka', 'invoicing' ),
345
-        'BBD' => __( 'Barbadian Dollar', 'invoicing' ),
346
-        'BDT' => __( 'Bangladeshi Taka', 'invoicing' ),
347
-        'BGN' => __( 'Bulgarian Lev', 'invoicing' ),
348
-        'BHD' => __( 'Bahraini Dinar', 'invoicing' ),
349
-        'BIF' => __( 'Burundian Franc', 'invoicing' ),
350
-        'BMD' => __( 'Bermudian Dollar', 'invoicing' ),
351
-        'BND' => __( 'Brunei Dollar', 'invoicing' ),
352
-        'BOB' => __( 'Bolivian Boliviano', 'invoicing' ),
353
-        'BRL' => __( 'Brazilian Real', 'invoicing' ),
354
-        'BSD' => __( 'Bahamian Dollar', 'invoicing' ),
355
-        'BTC' => __( 'Bitcoin', 'invoicing' ),
356
-        'BTN' => __( 'Bhutanese Ngultrum', 'invoicing' ),
357
-        'BWP' => __( 'Botswana Pula', 'invoicing' ),
358
-        'BYN' => __( 'Belarusian Ruble', 'invoicing' ),
359
-        'BZD' => __( 'Belize Dollar', 'invoicing' ),
360
-        'CAD' => __( 'Canadian Dollar', 'invoicing' ),
361
-        'CDF' => __( 'Congolese Franc', 'invoicing' ),
362
-        'CHF' => __( 'Swiss Franc', 'invoicing' ),
363
-        'CLP' => __( 'Chilean Peso', 'invoicing' ),
364
-        'CNY' => __( 'Chinese Yuan', 'invoicing' ),
365
-        'COP' => __( 'Colombian Peso', 'invoicing' ),
366
-        'CRC' => __( 'Costa Rican Colon', 'invoicing' ),
367
-        'CUC' => __( 'Cuban Convertible Peso', 'invoicing' ),
368
-        'CUP' => __( 'Cuban Peso', 'invoicing' ),
369
-        'CVE' => __( 'Cape Verdean escudo', 'invoicing' ),
370
-        'CZK' => __( 'Czech Koruna', 'invoicing' ),
371
-        'DJF' => __( 'Djiboutian Franc', 'invoicing' ),
372
-        'DKK' => __( 'Danish Krone', 'invoicing' ),
373
-        'DOP' => __( 'Dominican Peso', 'invoicing' ),
374
-        'DZD' => __( 'Algerian Dinar', 'invoicing' ),
375
-        'EGP' => __( 'Egyptian Pound', 'invoicing' ),
376
-        'ERN' => __( 'Eritrean Nakfa', 'invoicing' ),
377
-        'ETB' => __( 'Ethiopian Irr', 'invoicing' ),
378
-        'FJD' => __( 'Fijian Dollar', 'invoicing' ),
379
-        'FKP' => __( 'Falkland Islands Pound', 'invoicing' ),
380
-        'GEL' => __( 'Georgian Lari', 'invoicing' ),
381
-        'GGP' => __( 'Guernsey Pound', 'invoicing' ),
382
-        'GHS' => __( 'Ghana Cedi', 'invoicing' ),
383
-        'GIP' => __( 'Gibraltar Pound', 'invoicing' ),
384
-        'GMD' => __( 'Gambian Dalasi', 'invoicing' ),
385
-        'GNF' => __( 'Guinean Franc', 'invoicing' ),
386
-        'GTQ' => __( 'Guatemalan Quetzal', 'invoicing' ),
387
-        'GYD' => __( 'Guyanese Dollar', 'invoicing' ),
388
-        'HKD' => __( 'Hong Kong Dollar', 'invoicing' ),
389
-        'HNL' => __( 'Honduran Lempira', 'invoicing' ),
390
-        'HRK' => __( 'Croatian Kuna', 'invoicing' ),
391
-        'HTG' => __( 'Haitian Gourde', 'invoicing' ),
392
-        'HUF' => __( 'Hungarian Forint', 'invoicing' ),
393
-        'IDR' => __( 'Indonesian Rupiah', 'invoicing' ),
394
-        'ILS' => __( 'Israeli New Shekel', 'invoicing' ),
395
-        'IMP' => __( 'Manx Pound', 'invoicing' ),
396
-        'INR' => __( 'Indian Rupee', 'invoicing' ),
397
-        'IQD' => __( 'Iraqi Dinar', 'invoicing' ),
398
-        'IRR' => __( 'Iranian Rial', 'invoicing' ),
399
-        'IRT' => __( 'Iranian Toman', 'invoicing' ),
400
-        'ISK' => __( 'Icelandic Krona', 'invoicing' ),
401
-        'JEP' => __( 'Jersey Pound', 'invoicing' ),
402
-        'JMD' => __( 'Jamaican Dollar', 'invoicing' ),
403
-        'JOD' => __( 'Jordanian Dinar', 'invoicing' ),
404
-        'JPY' => __( 'Japanese Yen', 'invoicing' ),
405
-        'KES' => __( 'Kenyan Shilling', 'invoicing' ),
406
-        'KGS' => __( 'Kyrgyzstani Som', 'invoicing' ),
407
-        'KHR' => __( 'Cambodian Riel', 'invoicing' ),
408
-        'KMF' => __( 'Comorian Franc', 'invoicing' ),
409
-        'KPW' => __( 'North Korean Won', 'invoicing' ),
410
-        'KRW' => __( 'South Korean Won', 'invoicing' ),
411
-        'KWD' => __( 'Kuwaiti Dinar', 'invoicing' ),
412
-        'KYD' => __( 'Cayman Islands Dollar', 'invoicing' ),
413
-        'KZT' => __( 'Kazakhstani Tenge', 'invoicing' ),
414
-        'LAK' => __( 'Lao Kip', 'invoicing' ),
415
-        'LBP' => __( 'Lebanese Pound', 'invoicing' ),
416
-        'LKR' => __( 'Sri Lankan Rupee', 'invoicing' ),
417
-        'LRD' => __( 'Liberian Dollar', 'invoicing' ),
418
-        'LSL' => __( 'Lesotho Loti', 'invoicing' ),
419
-        'LYD' => __( 'Libyan Dinar', 'invoicing' ),
420
-        'MAD' => __( 'Moroccan Dirham', 'invoicing' ),
421
-        'MDL' => __( 'Moldovan Leu', 'invoicing' ),
422
-        'MGA' => __( 'Malagasy Ariary', 'invoicing' ),
423
-        'MKD' => __( 'Macedonian Denar', 'invoicing' ),
424
-        'MMK' => __( 'Burmese Kyat', 'invoicing' ),
425
-        'MNT' => __( 'Mongolian Tughrik', 'invoicing' ),
426
-        'MOP' => __( 'Macanese Pataca', 'invoicing' ),
427
-        'MRO' => __( 'Mauritanian Ouguiya', 'invoicing' ),
428
-        'MUR' => __( 'Mauritian Rupee', 'invoicing' ),
429
-        'MVR' => __( 'Maldivian Rufiyaa', 'invoicing' ),
430
-        'MWK' => __( 'Malawian Kwacha', 'invoicing' ),
431
-        'MXN' => __( 'Mexican Peso', 'invoicing' ),
432
-        'MYR' => __( 'Malaysian Ringgit', 'invoicing' ),
433
-        'MZN' => __( 'Mozambican Metical', 'invoicing' ),
434
-        'NAD' => __( 'Namibian Dollar', 'invoicing' ),
435
-        'NGN' => __( 'Nigerian Naira', 'invoicing' ),
436
-        'NIO' => __( 'Nicaraguan Cordoba', 'invoicing' ),
437
-        'NOK' => __( 'Norwegian Krone', 'invoicing' ),
438
-        'NPR' => __( 'Nepalese Rupee', 'invoicing' ),
439
-        'NZD' => __( 'New Zealand Dollar', 'invoicing' ),
440
-        'OMR' => __( 'Omani Rial', 'invoicing' ),
441
-        'PAB' => __( 'Panamanian Balboa', 'invoicing' ),
442
-        'PEN' => __( 'Peruvian Nuevo Sol', 'invoicing' ),
443
-        'PGK' => __( 'Papua New Guinean Kina', 'invoicing' ),
444
-        'PHP' => __( 'Philippine Peso', 'invoicing' ),
445
-        'PKR' => __( 'Pakistani Rupee', 'invoicing' ),
446
-        'PLN' => __( 'Polish Zloty', 'invoicing' ),
447
-        'PRB' => __( 'Transnistrian Ruble', 'invoicing' ),
448
-        'PYG' => __( 'Paraguayan Guarani', 'invoicing' ),
449
-        'QAR' => __( 'Qatari Riyal', 'invoicing' ),
450
-        'RON' => __( 'Romanian Leu', 'invoicing' ),
451
-        'RSD' => __( 'Serbian Dinar', 'invoicing' ),
452
-        'RUB' => __( 'Russian Ruble', 'invoicing' ),
453
-        'RWF' => __( 'Rwandan Franc', 'invoicing' ),
454
-        'SAR' => __( 'Saudi Riyal', 'invoicing' ),
455
-        'SBD' => __( 'Solomon Islands Dollar', 'invoicing' ),
456
-        'SCR' => __( 'Seychellois Rupee', 'invoicing' ),
457
-        'SDG' => __( 'Sudanese Pound', 'invoicing' ),
458
-        'SEK' => __( 'Swedish Krona', 'invoicing' ),
459
-        'SGD' => __( 'Singapore Dollar', 'invoicing' ),
460
-        'SHP' => __( 'Saint Helena Pound', 'invoicing' ),
461
-        'SLL' => __( 'Sierra Leonean Leone', 'invoicing' ),
462
-        'SOS' => __( 'Somali Shilling', 'invoicing' ),
463
-        'SRD' => __( 'Surinamese Dollar', 'invoicing' ),
464
-        'SSP' => __( 'South Sudanese Pound', 'invoicing' ),
465
-        'STD' => __( 'Sao Tomean Dobra', 'invoicing' ),
466
-        'SYP' => __( 'Syrian Pound', 'invoicing' ),
467
-        'SZL' => __( 'Swazi Lilangeni', 'invoicing' ),
468
-        'THB' => __( 'Thai Baht', 'invoicing' ),
469
-        'TJS' => __( 'Tajikistani Somoni', 'invoicing' ),
470
-        'TMT' => __( 'Turkmenistan Manat', 'invoicing' ),
471
-        'TND' => __( 'Tunisian Dinar', 'invoicing' ),
472
-        'TOP' => __( 'Tongan Pa&#x2bb;anga', 'invoicing' ),
473
-        'TRY' => __( 'Turkish Lira', 'invoicing' ),
474
-        'TTD' => __( 'Trinidad and Tobago Dollar', 'invoicing' ),
475
-        'TWD' => __( 'New Taiwan Dollar', 'invoicing' ),
476
-        'TZS' => __( 'Tanzanian Shilling', 'invoicing' ),
477
-        'UAH' => __( 'Ukrainian Hryvnia', 'invoicing' ),
478
-        'UGX' => __( 'Ugandan Shilling', 'invoicing' ),
479
-        'UYU' => __( 'Uruguayan Peso', 'invoicing' ),
480
-        'UZS' => __( 'Uzbekistani Som', 'invoicing' ),
481
-        'VEF' => __( 'Venezuelan Bol&iacute;var', 'invoicing' ),
482
-        'VND' => __( 'Vietnamese Dong', 'invoicing' ),
483
-        'VUV' => __( 'Vanuatu Vatu', 'invoicing' ),
484
-        'WST' => __( 'Samoan Tala', 'invoicing' ),
485
-        'XAF' => __( 'Central African CFA Franc', 'invoicing' ),
486
-        'XCD' => __( 'East Caribbean Dollar', 'invoicing' ),
487
-        'XOF' => __( 'West African CFA Franc', 'invoicing' ),
488
-        'XPF' => __( 'CFP Franc', 'invoicing' ),
489
-        'YER' => __( 'Yemeni Rial', 'invoicing' ),
490
-        'ZAR' => __( 'South African Rand', 'invoicing' ),
491
-        'ZMW' => __( 'Zambian Kwacha', 'invoicing' ),
331
+        'USD' => __('US Dollar', 'invoicing'),
332
+        'EUR' => __('Euro', 'invoicing'),
333
+        'GBP' => __('Pound Sterling', 'invoicing'),
334
+        'AED' => __('United Arab Emirates', 'invoicing'),
335
+        'AFN' => __('Afghan Afghani', 'invoicing'),
336
+        'ALL' => __('Albanian Lek', 'invoicing'),
337
+        'AMD' => __('Armenian Dram', 'invoicing'),
338
+        'ANG' => __('Netherlands Antillean Guilder', 'invoicing'),
339
+        'AOA' => __('Angolan Kwanza', 'invoicing'),
340
+        'ARS' => __('Argentine Peso', 'invoicing'),
341
+        'AUD' => __('Australian Dollar', 'invoicing'),
342
+        'AWG' => __('Aruban Florin', 'invoicing'),
343
+        'AZN' => __('Azerbaijani Manat', 'invoicing'),
344
+        'BAM' => __('Bosnia and Herzegovina Convertible Marka', 'invoicing'),
345
+        'BBD' => __('Barbadian Dollar', 'invoicing'),
346
+        'BDT' => __('Bangladeshi Taka', 'invoicing'),
347
+        'BGN' => __('Bulgarian Lev', 'invoicing'),
348
+        'BHD' => __('Bahraini Dinar', 'invoicing'),
349
+        'BIF' => __('Burundian Franc', 'invoicing'),
350
+        'BMD' => __('Bermudian Dollar', 'invoicing'),
351
+        'BND' => __('Brunei Dollar', 'invoicing'),
352
+        'BOB' => __('Bolivian Boliviano', 'invoicing'),
353
+        'BRL' => __('Brazilian Real', 'invoicing'),
354
+        'BSD' => __('Bahamian Dollar', 'invoicing'),
355
+        'BTC' => __('Bitcoin', 'invoicing'),
356
+        'BTN' => __('Bhutanese Ngultrum', 'invoicing'),
357
+        'BWP' => __('Botswana Pula', 'invoicing'),
358
+        'BYN' => __('Belarusian Ruble', 'invoicing'),
359
+        'BZD' => __('Belize Dollar', 'invoicing'),
360
+        'CAD' => __('Canadian Dollar', 'invoicing'),
361
+        'CDF' => __('Congolese Franc', 'invoicing'),
362
+        'CHF' => __('Swiss Franc', 'invoicing'),
363
+        'CLP' => __('Chilean Peso', 'invoicing'),
364
+        'CNY' => __('Chinese Yuan', 'invoicing'),
365
+        'COP' => __('Colombian Peso', 'invoicing'),
366
+        'CRC' => __('Costa Rican Colon', 'invoicing'),
367
+        'CUC' => __('Cuban Convertible Peso', 'invoicing'),
368
+        'CUP' => __('Cuban Peso', 'invoicing'),
369
+        'CVE' => __('Cape Verdean escudo', 'invoicing'),
370
+        'CZK' => __('Czech Koruna', 'invoicing'),
371
+        'DJF' => __('Djiboutian Franc', 'invoicing'),
372
+        'DKK' => __('Danish Krone', 'invoicing'),
373
+        'DOP' => __('Dominican Peso', 'invoicing'),
374
+        'DZD' => __('Algerian Dinar', 'invoicing'),
375
+        'EGP' => __('Egyptian Pound', 'invoicing'),
376
+        'ERN' => __('Eritrean Nakfa', 'invoicing'),
377
+        'ETB' => __('Ethiopian Irr', 'invoicing'),
378
+        'FJD' => __('Fijian Dollar', 'invoicing'),
379
+        'FKP' => __('Falkland Islands Pound', 'invoicing'),
380
+        'GEL' => __('Georgian Lari', 'invoicing'),
381
+        'GGP' => __('Guernsey Pound', 'invoicing'),
382
+        'GHS' => __('Ghana Cedi', 'invoicing'),
383
+        'GIP' => __('Gibraltar Pound', 'invoicing'),
384
+        'GMD' => __('Gambian Dalasi', 'invoicing'),
385
+        'GNF' => __('Guinean Franc', 'invoicing'),
386
+        'GTQ' => __('Guatemalan Quetzal', 'invoicing'),
387
+        'GYD' => __('Guyanese Dollar', 'invoicing'),
388
+        'HKD' => __('Hong Kong Dollar', 'invoicing'),
389
+        'HNL' => __('Honduran Lempira', 'invoicing'),
390
+        'HRK' => __('Croatian Kuna', 'invoicing'),
391
+        'HTG' => __('Haitian Gourde', 'invoicing'),
392
+        'HUF' => __('Hungarian Forint', 'invoicing'),
393
+        'IDR' => __('Indonesian Rupiah', 'invoicing'),
394
+        'ILS' => __('Israeli New Shekel', 'invoicing'),
395
+        'IMP' => __('Manx Pound', 'invoicing'),
396
+        'INR' => __('Indian Rupee', 'invoicing'),
397
+        'IQD' => __('Iraqi Dinar', 'invoicing'),
398
+        'IRR' => __('Iranian Rial', 'invoicing'),
399
+        'IRT' => __('Iranian Toman', 'invoicing'),
400
+        'ISK' => __('Icelandic Krona', 'invoicing'),
401
+        'JEP' => __('Jersey Pound', 'invoicing'),
402
+        'JMD' => __('Jamaican Dollar', 'invoicing'),
403
+        'JOD' => __('Jordanian Dinar', 'invoicing'),
404
+        'JPY' => __('Japanese Yen', 'invoicing'),
405
+        'KES' => __('Kenyan Shilling', 'invoicing'),
406
+        'KGS' => __('Kyrgyzstani Som', 'invoicing'),
407
+        'KHR' => __('Cambodian Riel', 'invoicing'),
408
+        'KMF' => __('Comorian Franc', 'invoicing'),
409
+        'KPW' => __('North Korean Won', 'invoicing'),
410
+        'KRW' => __('South Korean Won', 'invoicing'),
411
+        'KWD' => __('Kuwaiti Dinar', 'invoicing'),
412
+        'KYD' => __('Cayman Islands Dollar', 'invoicing'),
413
+        'KZT' => __('Kazakhstani Tenge', 'invoicing'),
414
+        'LAK' => __('Lao Kip', 'invoicing'),
415
+        'LBP' => __('Lebanese Pound', 'invoicing'),
416
+        'LKR' => __('Sri Lankan Rupee', 'invoicing'),
417
+        'LRD' => __('Liberian Dollar', 'invoicing'),
418
+        'LSL' => __('Lesotho Loti', 'invoicing'),
419
+        'LYD' => __('Libyan Dinar', 'invoicing'),
420
+        'MAD' => __('Moroccan Dirham', 'invoicing'),
421
+        'MDL' => __('Moldovan Leu', 'invoicing'),
422
+        'MGA' => __('Malagasy Ariary', 'invoicing'),
423
+        'MKD' => __('Macedonian Denar', 'invoicing'),
424
+        'MMK' => __('Burmese Kyat', 'invoicing'),
425
+        'MNT' => __('Mongolian Tughrik', 'invoicing'),
426
+        'MOP' => __('Macanese Pataca', 'invoicing'),
427
+        'MRO' => __('Mauritanian Ouguiya', 'invoicing'),
428
+        'MUR' => __('Mauritian Rupee', 'invoicing'),
429
+        'MVR' => __('Maldivian Rufiyaa', 'invoicing'),
430
+        'MWK' => __('Malawian Kwacha', 'invoicing'),
431
+        'MXN' => __('Mexican Peso', 'invoicing'),
432
+        'MYR' => __('Malaysian Ringgit', 'invoicing'),
433
+        'MZN' => __('Mozambican Metical', 'invoicing'),
434
+        'NAD' => __('Namibian Dollar', 'invoicing'),
435
+        'NGN' => __('Nigerian Naira', 'invoicing'),
436
+        'NIO' => __('Nicaraguan Cordoba', 'invoicing'),
437
+        'NOK' => __('Norwegian Krone', 'invoicing'),
438
+        'NPR' => __('Nepalese Rupee', 'invoicing'),
439
+        'NZD' => __('New Zealand Dollar', 'invoicing'),
440
+        'OMR' => __('Omani Rial', 'invoicing'),
441
+        'PAB' => __('Panamanian Balboa', 'invoicing'),
442
+        'PEN' => __('Peruvian Nuevo Sol', 'invoicing'),
443
+        'PGK' => __('Papua New Guinean Kina', 'invoicing'),
444
+        'PHP' => __('Philippine Peso', 'invoicing'),
445
+        'PKR' => __('Pakistani Rupee', 'invoicing'),
446
+        'PLN' => __('Polish Zloty', 'invoicing'),
447
+        'PRB' => __('Transnistrian Ruble', 'invoicing'),
448
+        'PYG' => __('Paraguayan Guarani', 'invoicing'),
449
+        'QAR' => __('Qatari Riyal', 'invoicing'),
450
+        'RON' => __('Romanian Leu', 'invoicing'),
451
+        'RSD' => __('Serbian Dinar', 'invoicing'),
452
+        'RUB' => __('Russian Ruble', 'invoicing'),
453
+        'RWF' => __('Rwandan Franc', 'invoicing'),
454
+        'SAR' => __('Saudi Riyal', 'invoicing'),
455
+        'SBD' => __('Solomon Islands Dollar', 'invoicing'),
456
+        'SCR' => __('Seychellois Rupee', 'invoicing'),
457
+        'SDG' => __('Sudanese Pound', 'invoicing'),
458
+        'SEK' => __('Swedish Krona', 'invoicing'),
459
+        'SGD' => __('Singapore Dollar', 'invoicing'),
460
+        'SHP' => __('Saint Helena Pound', 'invoicing'),
461
+        'SLL' => __('Sierra Leonean Leone', 'invoicing'),
462
+        'SOS' => __('Somali Shilling', 'invoicing'),
463
+        'SRD' => __('Surinamese Dollar', 'invoicing'),
464
+        'SSP' => __('South Sudanese Pound', 'invoicing'),
465
+        'STD' => __('Sao Tomean Dobra', 'invoicing'),
466
+        'SYP' => __('Syrian Pound', 'invoicing'),
467
+        'SZL' => __('Swazi Lilangeni', 'invoicing'),
468
+        'THB' => __('Thai Baht', 'invoicing'),
469
+        'TJS' => __('Tajikistani Somoni', 'invoicing'),
470
+        'TMT' => __('Turkmenistan Manat', 'invoicing'),
471
+        'TND' => __('Tunisian Dinar', 'invoicing'),
472
+        'TOP' => __('Tongan Pa&#x2bb;anga', 'invoicing'),
473
+        'TRY' => __('Turkish Lira', 'invoicing'),
474
+        'TTD' => __('Trinidad and Tobago Dollar', 'invoicing'),
475
+        'TWD' => __('New Taiwan Dollar', 'invoicing'),
476
+        'TZS' => __('Tanzanian Shilling', 'invoicing'),
477
+        'UAH' => __('Ukrainian Hryvnia', 'invoicing'),
478
+        'UGX' => __('Ugandan Shilling', 'invoicing'),
479
+        'UYU' => __('Uruguayan Peso', 'invoicing'),
480
+        'UZS' => __('Uzbekistani Som', 'invoicing'),
481
+        'VEF' => __('Venezuelan Bol&iacute;var', 'invoicing'),
482
+        'VND' => __('Vietnamese Dong', 'invoicing'),
483
+        'VUV' => __('Vanuatu Vatu', 'invoicing'),
484
+        'WST' => __('Samoan Tala', 'invoicing'),
485
+        'XAF' => __('Central African CFA Franc', 'invoicing'),
486
+        'XCD' => __('East Caribbean Dollar', 'invoicing'),
487
+        'XOF' => __('West African CFA Franc', 'invoicing'),
488
+        'XPF' => __('CFP Franc', 'invoicing'),
489
+        'YER' => __('Yemeni Rial', 'invoicing'),
490
+        'ZAR' => __('South African Rand', 'invoicing'),
491
+        'ZMW' => __('Zambian Kwacha', 'invoicing'),
492 492
     );
493 493
     
494 494
     //asort( $currencies ); // this
495 495
 
496
-    return apply_filters( 'wpinv_currencies', $currencies );
496
+    return apply_filters('wpinv_currencies', $currencies);
497 497
 }
498 498
 
499
-function wpinv_price( $amount = '', $currency = '' ) {
500
-    if( empty( $currency ) ) {
499
+function wpinv_price($amount = '', $currency = '') {
500
+    if (empty($currency)) {
501 501
         $currency = wpinv_get_currency();
502 502
     }
503 503
 
@@ -505,14 +505,14 @@  discard block
 block discarded – undo
505 505
 
506 506
     $negative = $amount < 0;
507 507
 
508
-    if ( $negative ) {
509
-        $amount = substr( $amount, 1 );
508
+    if ($negative) {
509
+        $amount = substr($amount, 1);
510 510
     }
511 511
 
512
-    $symbol = wpinv_currency_symbol( $currency );
512
+    $symbol = wpinv_currency_symbol($currency);
513 513
 
514
-    if ( $position == 'left' || $position == 'left_space' ) {
515
-        switch ( $currency ) {
514
+    if ($position == 'left' || $position == 'left_space') {
515
+        switch ($currency) {
516 516
             case "GBP" :
517 517
             case "BRL" :
518 518
             case "EUR" :
@@ -524,15 +524,15 @@  discard block
 block discarded – undo
524 524
             case "NZD" :
525 525
             case "SGD" :
526 526
             case "JPY" :
527
-                $price = $position == 'left_space' ? $symbol . ' ' .  $amount : $symbol . $amount;
527
+                $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount;
528 528
                 break;
529 529
             default :
530 530
                 //$price = $currency . ' ' . $amount;
531
-                $price = $position == 'left_space' ? $symbol . ' ' .  $amount : $symbol . $amount;
531
+                $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount;
532 532
                 break;
533 533
         }
534 534
     } else {
535
-        switch ( $currency ) {
535
+        switch ($currency) {
536 536
             case "GBP" :
537 537
             case "BRL" :
538 538
             case "EUR" :
@@ -543,83 +543,83 @@  discard block
 block discarded – undo
543 543
             case "MXN" :
544 544
             case "SGD" :
545 545
             case "JPY" :
546
-                $price = $position == 'right_space' ? $amount . ' ' .  $symbol : $amount . $symbol;
546
+                $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol;
547 547
                 break;
548 548
             default :
549 549
                 //$price = $amount . ' ' . $currency;
550
-                $price = $position == 'right_space' ? $amount . ' ' .  $symbol : $amount . $symbol;
550
+                $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol;
551 551
                 break;
552 552
         }
553 553
     }
554 554
     
555
-    if ( $negative ) {
555
+    if ($negative) {
556 556
         $price = '-' . $price;
557 557
     }
558 558
     
559
-    $price = apply_filters( 'wpinv_' . strtolower( $currency ) . '_currency_filter_' . $position, $price, $currency, $amount );
559
+    $price = apply_filters('wpinv_' . strtolower($currency) . '_currency_filter_' . $position, $price, $currency, $amount);
560 560
 
561 561
     return $price;
562 562
 }
563 563
 
564
-function wpinv_format_amount( $amount, $decimals = NULL, $calculate = false ) {
564
+function wpinv_format_amount($amount, $decimals = NULL, $calculate = false) {
565 565
     $thousands_sep = wpinv_thousands_separator();
566 566
     $decimal_sep   = wpinv_decimal_separator();
567 567
 
568
-    if ( $decimals === NULL ) {
568
+    if ($decimals === NULL) {
569 569
         $decimals = wpinv_decimals();
570 570
     }
571 571
 
572
-    if ( $decimal_sep == ',' && false !== ( $sep_found = strpos( $amount, $decimal_sep ) ) ) {
573
-        $whole = substr( $amount, 0, $sep_found );
574
-        $part = substr( $amount, $sep_found + 1, ( strlen( $amount ) - 1 ) );
572
+    if ($decimal_sep == ',' && false !== ($sep_found = strpos($amount, $decimal_sep))) {
573
+        $whole = substr($amount, 0, $sep_found);
574
+        $part = substr($amount, $sep_found + 1, (strlen($amount) - 1));
575 575
         $amount = $whole . '.' . $part;
576 576
     }
577 577
 
578
-    if ( $thousands_sep == ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
579
-        $amount = str_replace( ',', '', $amount );
578
+    if ($thousands_sep == ',' && false !== ($found = strpos($amount, $thousands_sep))) {
579
+        $amount = str_replace(',', '', $amount);
580 580
     }
581 581
 
582
-    if ( $thousands_sep == ' ' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) {
583
-        $amount = str_replace( ' ', '', $amount );
582
+    if ($thousands_sep == ' ' && false !== ($found = strpos($amount, $thousands_sep))) {
583
+        $amount = str_replace(' ', '', $amount);
584 584
     }
585 585
 
586
-    if ( empty( $amount ) ) {
586
+    if (empty($amount)) {
587 587
         $amount = 0;
588 588
     }
589 589
     
590
-    $decimals  = apply_filters( 'wpinv_amount_format_decimals', $decimals ? $decimals : 0, $amount, $calculate );
591
-    $formatted = number_format( (float)$amount, $decimals, $decimal_sep, $thousands_sep );
590
+    $decimals  = apply_filters('wpinv_amount_format_decimals', $decimals ? $decimals : 0, $amount, $calculate);
591
+    $formatted = number_format((float) $amount, $decimals, $decimal_sep, $thousands_sep);
592 592
     
593
-    if ( $calculate ) {
594
-        if ( $thousands_sep === "," ) {
595
-            $formatted = str_replace( ",", "", $formatted );
593
+    if ($calculate) {
594
+        if ($thousands_sep === ",") {
595
+            $formatted = str_replace(",", "", $formatted);
596 596
         }
597 597
         
598
-        if ( $decimal_sep === "," ) {
599
-            $formatted = str_replace( ",", ".", $formatted );
598
+        if ($decimal_sep === ",") {
599
+            $formatted = str_replace(",", ".", $formatted);
600 600
         }
601 601
     }
602 602
 
603
-    return apply_filters( 'wpinv_amount_format', $formatted, $amount, $decimals, $decimal_sep, $thousands_sep, $calculate );
603
+    return apply_filters('wpinv_amount_format', $formatted, $amount, $decimals, $decimal_sep, $thousands_sep, $calculate);
604 604
 }
605
-add_filter( 'wpinv_amount_format_decimals', 'wpinv_currency_decimal_filter', 10, 1 );
605
+add_filter('wpinv_amount_format_decimals', 'wpinv_currency_decimal_filter', 10, 1);
606 606
 
607
-function wpinv_sanitize_key( $key ) {
607
+function wpinv_sanitize_key($key) {
608 608
     $raw_key = $key;
609
-    $key = preg_replace( '/[^a-zA-Z0-9_\-\.\:\/]/', '', $key );
609
+    $key = preg_replace('/[^a-zA-Z0-9_\-\.\:\/]/', '', $key);
610 610
 
611
-    return apply_filters( 'wpinv_sanitize_key', $key, $raw_key );
611
+    return apply_filters('wpinv_sanitize_key', $key, $raw_key);
612 612
 }
613 613
 
614
-function wpinv_get_file_extension( $str ) {
615
-    $parts = explode( '.', $str );
616
-    return end( $parts );
614
+function wpinv_get_file_extension($str) {
615
+    $parts = explode('.', $str);
616
+    return end($parts);
617 617
 }
618 618
 
619
-function wpinv_string_is_image_url( $str ) {
620
-    $ext = wpinv_get_file_extension( $str );
619
+function wpinv_string_is_image_url($str) {
620
+    $ext = wpinv_get_file_extension($str);
621 621
 
622
-    switch ( strtolower( $ext ) ) {
622
+    switch (strtolower($ext)) {
623 623
         case 'jpeg';
624 624
         case 'jpg';
625 625
             $return = true;
@@ -635,32 +635,32 @@  discard block
 block discarded – undo
635 635
             break;
636 636
     }
637 637
 
638
-    return (bool)apply_filters( 'wpinv_string_is_image', $return, $str );
638
+    return (bool) apply_filters('wpinv_string_is_image', $return, $str);
639 639
 }
640 640
 
641
-function wpinv_error_log( $log, $title = '', $file = '', $line = '', $exit = false ) {
642
-    $should_log = apply_filters( 'wpinv_log_errors', WP_DEBUG );
641
+function wpinv_error_log($log, $title = '', $file = '', $line = '', $exit = false) {
642
+    $should_log = apply_filters('wpinv_log_errors', WP_DEBUG);
643 643
     
644
-    if ( true === $should_log ) {
644
+    if (true === $should_log) {
645 645
         $label = '';
646
-        if ( $file && $file !== '' ) {
647
-            $label .= basename( $file ) . ( $line ? '(' . $line . ')' : '' );
646
+        if ($file && $file !== '') {
647
+            $label .= basename($file) . ($line ? '(' . $line . ')' : '');
648 648
         }
649 649
         
650
-        if ( $title && $title !== '' ) {
650
+        if ($title && $title !== '') {
651 651
             $label = $label !== '' ? $label . ' ' : '';
652 652
             $label .= $title . ' ';
653 653
         }
654 654
         
655
-        $label = $label !== '' ? trim( $label ) . ' : ' : '';
655
+        $label = $label !== '' ? trim($label) . ' : ' : '';
656 656
         
657
-        if ( is_array( $log ) || is_object( $log ) ) {
658
-            error_log( $label . print_r( $log, true ) );
657
+        if (is_array($log) || is_object($log)) {
658
+            error_log($label . print_r($log, true));
659 659
         } else {
660
-            error_log( $label . $log );
660
+            error_log($label . $log);
661 661
         }
662 662
         
663
-        if ( $exit ) {
663
+        if ($exit) {
664 664
             exit;
665 665
         }
666 666
     }
@@ -668,65 +668,65 @@  discard block
 block discarded – undo
668 668
 
669 669
 function wpinv_is_ajax_disabled() {
670 670
     $retval = false;
671
-    return apply_filters( 'wpinv_is_ajax_disabled', $retval );
671
+    return apply_filters('wpinv_is_ajax_disabled', $retval);
672 672
 }
673 673
 
674
-function wpinv_get_current_page_url( $nocache = false ) {
674
+function wpinv_get_current_page_url($nocache = false) {
675 675
     global $wp;
676 676
 
677
-    if ( get_option( 'permalink_structure' ) ) {
678
-        $base = trailingslashit( home_url( $wp->request ) );
677
+    if (get_option('permalink_structure')) {
678
+        $base = trailingslashit(home_url($wp->request));
679 679
     } else {
680
-        $base = add_query_arg( $wp->query_string, '', trailingslashit( home_url( $wp->request ) ) );
681
-        $base = remove_query_arg( array( 'post_type', 'name' ), $base );
680
+        $base = add_query_arg($wp->query_string, '', trailingslashit(home_url($wp->request)));
681
+        $base = remove_query_arg(array('post_type', 'name'), $base);
682 682
     }
683 683
 
684 684
     $scheme = is_ssl() ? 'https' : 'http';
685
-    $uri    = set_url_scheme( $base, $scheme );
685
+    $uri    = set_url_scheme($base, $scheme);
686 686
 
687
-    if ( is_front_page() ) {
688
-        $uri = home_url( '/' );
689
-    } elseif ( wpinv_is_checkout( array(), false ) ) {
687
+    if (is_front_page()) {
688
+        $uri = home_url('/');
689
+    } elseif (wpinv_is_checkout(array(), false)) {
690 690
         $uri = wpinv_get_checkout_uri();
691 691
     }
692 692
 
693
-    $uri = apply_filters( 'wpinv_get_current_page_url', $uri );
693
+    $uri = apply_filters('wpinv_get_current_page_url', $uri);
694 694
 
695
-    if ( $nocache ) {
696
-        $uri = wpinv_add_cache_busting( $uri );
695
+    if ($nocache) {
696
+        $uri = wpinv_add_cache_busting($uri);
697 697
     }
698 698
 
699 699
     return $uri;
700 700
 }
701 701
 
702 702
 function wpinv_get_php_arg_separator_output() {
703
-	return ini_get( 'arg_separator.output' );
703
+	return ini_get('arg_separator.output');
704 704
 }
705 705
 
706
-function wpinv_rgb_from_hex( $color ) {
707
-    $color = str_replace( '#', '', $color );
706
+function wpinv_rgb_from_hex($color) {
707
+    $color = str_replace('#', '', $color);
708 708
     // Convert shorthand colors to full format, e.g. "FFF" -> "FFFFFF"
709
-    $color = preg_replace( '~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color );
709
+    $color = preg_replace('~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color);
710 710
 
711 711
     $rgb      = array();
712
-    $rgb['R'] = hexdec( $color{0}.$color{1} );
713
-    $rgb['G'] = hexdec( $color{2}.$color{3} );
714
-    $rgb['B'] = hexdec( $color{4}.$color{5} );
712
+    $rgb['R'] = hexdec($color{0} . $color{1} );
713
+    $rgb['G'] = hexdec($color{2} . $color{3} );
714
+    $rgb['B'] = hexdec($color{4} . $color{5} );
715 715
 
716 716
     return $rgb;
717 717
 }
718 718
 
719
-function wpinv_hex_darker( $color, $factor = 30 ) {
720
-    $base  = wpinv_rgb_from_hex( $color );
719
+function wpinv_hex_darker($color, $factor = 30) {
720
+    $base  = wpinv_rgb_from_hex($color);
721 721
     $color = '#';
722 722
 
723
-    foreach ( $base as $k => $v ) {
723
+    foreach ($base as $k => $v) {
724 724
         $amount      = $v / 100;
725
-        $amount      = round( $amount * $factor );
725
+        $amount      = round($amount * $factor);
726 726
         $new_decimal = $v - $amount;
727 727
 
728
-        $new_hex_component = dechex( $new_decimal );
729
-        if ( strlen( $new_hex_component ) < 2 ) {
728
+        $new_hex_component = dechex($new_decimal);
729
+        if (strlen($new_hex_component) < 2) {
730 730
             $new_hex_component = "0" . $new_hex_component;
731 731
         }
732 732
         $color .= $new_hex_component;
@@ -735,18 +735,18 @@  discard block
 block discarded – undo
735 735
     return $color;
736 736
 }
737 737
 
738
-function wpinv_hex_lighter( $color, $factor = 30 ) {
739
-    $base  = wpinv_rgb_from_hex( $color );
738
+function wpinv_hex_lighter($color, $factor = 30) {
739
+    $base  = wpinv_rgb_from_hex($color);
740 740
     $color = '#';
741 741
 
742
-    foreach ( $base as $k => $v ) {
742
+    foreach ($base as $k => $v) {
743 743
         $amount      = 255 - $v;
744 744
         $amount      = $amount / 100;
745
-        $amount      = round( $amount * $factor );
745
+        $amount      = round($amount * $factor);
746 746
         $new_decimal = $v + $amount;
747 747
 
748
-        $new_hex_component = dechex( $new_decimal );
749
-        if ( strlen( $new_hex_component ) < 2 ) {
748
+        $new_hex_component = dechex($new_decimal);
749
+        if (strlen($new_hex_component) < 2) {
750 750
             $new_hex_component = "0" . $new_hex_component;
751 751
         }
752 752
         $color .= $new_hex_component;
@@ -755,22 +755,22 @@  discard block
 block discarded – undo
755 755
     return $color;
756 756
 }
757 757
 
758
-function wpinv_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) {
759
-    $hex = str_replace( '#', '', $color );
758
+function wpinv_light_or_dark($color, $dark = '#000000', $light = '#FFFFFF') {
759
+    $hex = str_replace('#', '', $color);
760 760
 
761
-    $c_r = hexdec( substr( $hex, 0, 2 ) );
762
-    $c_g = hexdec( substr( $hex, 2, 2 ) );
763
-    $c_b = hexdec( substr( $hex, 4, 2 ) );
761
+    $c_r = hexdec(substr($hex, 0, 2));
762
+    $c_g = hexdec(substr($hex, 2, 2));
763
+    $c_b = hexdec(substr($hex, 4, 2));
764 764
 
765
-    $brightness = ( ( $c_r * 299 ) + ( $c_g * 587 ) + ( $c_b * 114 ) ) / 1000;
765
+    $brightness = (($c_r * 299) + ($c_g * 587) + ($c_b * 114)) / 1000;
766 766
 
767 767
     return $brightness > 155 ? $dark : $light;
768 768
 }
769 769
 
770
-function wpinv_format_hex( $hex ) {
771
-    $hex = trim( str_replace( '#', '', $hex ) );
770
+function wpinv_format_hex($hex) {
771
+    $hex = trim(str_replace('#', '', $hex));
772 772
 
773
-    if ( strlen( $hex ) == 3 ) {
773
+    if (strlen($hex) == 3) {
774 774
         $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
775 775
     }
776 776
 
@@ -790,12 +790,12 @@  discard block
 block discarded – undo
790 790
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
791 791
  * @return string
792 792
  */
793
-function wpinv_utf8_strimwidth( $str, $start, $width, $trimmaker = '', $encoding = 'UTF-8' ) {
794
-    if ( function_exists( 'mb_strimwidth' ) ) {
795
-        return mb_strimwidth( $str, $start, $width, $trimmaker, $encoding );
793
+function wpinv_utf8_strimwidth($str, $start, $width, $trimmaker = '', $encoding = 'UTF-8') {
794
+    if (function_exists('mb_strimwidth')) {
795
+        return mb_strimwidth($str, $start, $width, $trimmaker, $encoding);
796 796
     }
797 797
     
798
-    return wpinv_utf8_substr( $str, $start, $width, $encoding ) . $trimmaker;
798
+    return wpinv_utf8_substr($str, $start, $width, $encoding) . $trimmaker;
799 799
 }
800 800
 
801 801
 /**
@@ -807,28 +807,28 @@  discard block
 block discarded – undo
807 807
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
808 808
  * @return int Returns the number of characters in string.
809 809
  */
810
-function wpinv_utf8_strlen( $str, $encoding = 'UTF-8' ) {
811
-    if ( function_exists( 'mb_strlen' ) ) {
812
-        return mb_strlen( $str, $encoding );
810
+function wpinv_utf8_strlen($str, $encoding = 'UTF-8') {
811
+    if (function_exists('mb_strlen')) {
812
+        return mb_strlen($str, $encoding);
813 813
     }
814 814
         
815
-    return strlen( $str );
815
+    return strlen($str);
816 816
 }
817 817
 
818
-function wpinv_utf8_strtolower( $str, $encoding = 'UTF-8' ) {
819
-    if ( function_exists( 'mb_strtolower' ) ) {
820
-        return mb_strtolower( $str, $encoding );
818
+function wpinv_utf8_strtolower($str, $encoding = 'UTF-8') {
819
+    if (function_exists('mb_strtolower')) {
820
+        return mb_strtolower($str, $encoding);
821 821
     }
822 822
     
823
-    return strtolower( $str );
823
+    return strtolower($str);
824 824
 }
825 825
 
826
-function wpinv_utf8_strtoupper( $str, $encoding = 'UTF-8' ) {
827
-    if ( function_exists( 'mb_strtoupper' ) ) {
828
-        return mb_strtoupper( $str, $encoding );
826
+function wpinv_utf8_strtoupper($str, $encoding = 'UTF-8') {
827
+    if (function_exists('mb_strtoupper')) {
828
+        return mb_strtoupper($str, $encoding);
829 829
     }
830 830
     
831
-    return strtoupper( $str );
831
+    return strtoupper($str);
832 832
 }
833 833
 
834 834
 /**
@@ -842,12 +842,12 @@  discard block
 block discarded – undo
842 842
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
843 843
  * @return int Returns the position of the first occurrence of search in the string.
844 844
  */
845
-function wpinv_utf8_strpos( $str, $find, $offset = 0, $encoding = 'UTF-8' ) {
846
-    if ( function_exists( 'mb_strpos' ) ) {
847
-        return mb_strpos( $str, $find, $offset, $encoding );
845
+function wpinv_utf8_strpos($str, $find, $offset = 0, $encoding = 'UTF-8') {
846
+    if (function_exists('mb_strpos')) {
847
+        return mb_strpos($str, $find, $offset, $encoding);
848 848
     }
849 849
         
850
-    return strpos( $str, $find, $offset );
850
+    return strpos($str, $find, $offset);
851 851
 }
852 852
 
853 853
 /**
@@ -861,12 +861,12 @@  discard block
 block discarded – undo
861 861
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
862 862
  * @return int Returns the position of the last occurrence of search.
863 863
  */
864
-function wpinv_utf8_strrpos( $str, $find, $offset = 0, $encoding = 'UTF-8' ) {
865
-    if ( function_exists( 'mb_strrpos' ) ) {
866
-        return mb_strrpos( $str, $find, $offset, $encoding );
864
+function wpinv_utf8_strrpos($str, $find, $offset = 0, $encoding = 'UTF-8') {
865
+    if (function_exists('mb_strrpos')) {
866
+        return mb_strrpos($str, $find, $offset, $encoding);
867 867
     }
868 868
         
869
-    return strrpos( $str, $find, $offset );
869
+    return strrpos($str, $find, $offset);
870 870
 }
871 871
 
872 872
 /**
@@ -881,16 +881,16 @@  discard block
 block discarded – undo
881 881
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
882 882
  * @return string
883 883
  */
884
-function wpinv_utf8_substr( $str, $start, $length = null, $encoding = 'UTF-8' ) {
885
-    if ( function_exists( 'mb_substr' ) ) {
886
-        if ( $length === null ) {
887
-            return mb_substr( $str, $start, wpinv_utf8_strlen( $str, $encoding ), $encoding );
884
+function wpinv_utf8_substr($str, $start, $length = null, $encoding = 'UTF-8') {
885
+    if (function_exists('mb_substr')) {
886
+        if ($length === null) {
887
+            return mb_substr($str, $start, wpinv_utf8_strlen($str, $encoding), $encoding);
888 888
         } else {
889
-            return mb_substr( $str, $start, $length, $encoding );
889
+            return mb_substr($str, $start, $length, $encoding);
890 890
         }
891 891
     }
892 892
         
893
-    return substr( $str, $start, $length );
893
+    return substr($str, $start, $length);
894 894
 }
895 895
 
896 896
 /**
@@ -902,48 +902,48 @@  discard block
 block discarded – undo
902 902
  * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8".
903 903
  * @return string The width of string.
904 904
  */
905
-function wpinv_utf8_strwidth( $str, $encoding = 'UTF-8' ) {
906
-    if ( function_exists( 'mb_strwidth' ) ) {
907
-        return mb_strwidth( $str, $encoding );
905
+function wpinv_utf8_strwidth($str, $encoding = 'UTF-8') {
906
+    if (function_exists('mb_strwidth')) {
907
+        return mb_strwidth($str, $encoding);
908 908
     }
909 909
     
910
-    return wpinv_utf8_strlen( $str, $encoding );
910
+    return wpinv_utf8_strlen($str, $encoding);
911 911
 }
912 912
 
913
-function wpinv_utf8_ucfirst( $str, $lower_str_end = false, $encoding = 'UTF-8' ) {
914
-    if ( function_exists( 'mb_strlen' ) ) {
915
-        $first_letter = wpinv_utf8_strtoupper( wpinv_utf8_substr( $str, 0, 1, $encoding ), $encoding );
913
+function wpinv_utf8_ucfirst($str, $lower_str_end = false, $encoding = 'UTF-8') {
914
+    if (function_exists('mb_strlen')) {
915
+        $first_letter = wpinv_utf8_strtoupper(wpinv_utf8_substr($str, 0, 1, $encoding), $encoding);
916 916
         $str_end = "";
917 917
         
918
-        if ( $lower_str_end ) {
919
-            $str_end = wpinv_utf8_strtolower( wpinv_utf8_substr( $str, 1, wpinv_utf8_strlen( $str, $encoding ), $encoding ), $encoding );
918
+        if ($lower_str_end) {
919
+            $str_end = wpinv_utf8_strtolower(wpinv_utf8_substr($str, 1, wpinv_utf8_strlen($str, $encoding), $encoding), $encoding);
920 920
         } else {
921
-            $str_end = wpinv_utf8_substr( $str, 1, wpinv_utf8_strlen( $str, $encoding ), $encoding );
921
+            $str_end = wpinv_utf8_substr($str, 1, wpinv_utf8_strlen($str, $encoding), $encoding);
922 922
         }
923 923
 
924 924
         return $first_letter . $str_end;
925 925
     }
926 926
     
927
-    return ucfirst( $str );
927
+    return ucfirst($str);
928 928
 }
929 929
 
930
-function wpinv_utf8_ucwords( $str, $encoding = 'UTF-8' ) {
931
-    if ( function_exists( 'mb_convert_case' ) ) {
932
-        return mb_convert_case( $str, MB_CASE_TITLE, $encoding );
930
+function wpinv_utf8_ucwords($str, $encoding = 'UTF-8') {
931
+    if (function_exists('mb_convert_case')) {
932
+        return mb_convert_case($str, MB_CASE_TITLE, $encoding);
933 933
     }
934 934
     
935
-    return ucwords( $str );
935
+    return ucwords($str);
936 936
 }
937 937
 
938
-function wpinv_period_in_days( $period, $unit ) {
939
-    $period = absint( $period );
938
+function wpinv_period_in_days($period, $unit) {
939
+    $period = absint($period);
940 940
     
941
-    if ( $period > 0 ) {
942
-        if ( in_array( strtolower( $unit ), array( 'w', 'week', 'weeks' ) ) ) {
941
+    if ($period > 0) {
942
+        if (in_array(strtolower($unit), array('w', 'week', 'weeks'))) {
943 943
             $period = $period * 7;
944
-        } else if ( in_array( strtolower( $unit ), array( 'm', 'month', 'months' ) ) ) {
944
+        } else if (in_array(strtolower($unit), array('m', 'month', 'months'))) {
945 945
             $period = $period * 30;
946
-        } else if ( in_array( strtolower( $unit ), array( 'y', 'year', 'years' ) ) ) {
946
+        } else if (in_array(strtolower($unit), array('y', 'year', 'years'))) {
947 947
             $period = $period * 365;
948 948
         }
949 949
     }
@@ -951,14 +951,14 @@  discard block
 block discarded – undo
951 951
     return $period;
952 952
 }
953 953
 
954
-function wpinv_cal_days_in_month( $calendar, $month, $year ) {
955
-    if ( function_exists( 'cal_days_in_month' ) ) {
956
-        return cal_days_in_month( $calendar, $month, $year );
954
+function wpinv_cal_days_in_month($calendar, $month, $year) {
955
+    if (function_exists('cal_days_in_month')) {
956
+        return cal_days_in_month($calendar, $month, $year);
957 957
     }
958 958
 
959 959
     // Fallback in case the calendar extension is not loaded in PHP
960 960
     // Only supports Gregorian calendar
961
-    return date( 't', mktime( 0, 0, 0, $month, 1, $year ) );
961
+    return date('t', mktime(0, 0, 0, $month, 1, $year));
962 962
 }
963 963
 
964 964
 /**
@@ -969,11 +969,11 @@  discard block
 block discarded – undo
969 969
  *
970 970
  * @return string
971 971
  */
972
-function wpi_help_tip( $tip, $allow_html = false ) {
973
-    if ( $allow_html ) {
974
-        $tip = wpi_sanitize_tooltip( $tip );
972
+function wpi_help_tip($tip, $allow_html = false) {
973
+    if ($allow_html) {
974
+        $tip = wpi_sanitize_tooltip($tip);
975 975
     } else {
976
-        $tip = esc_attr( $tip );
976
+        $tip = esc_attr($tip);
977 977
     }
978 978
 
979 979
     return '<span class="wpi-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
@@ -987,8 +987,8 @@  discard block
 block discarded – undo
987 987
  * @param string $var
988 988
  * @return string
989 989
  */
990
-function wpi_sanitize_tooltip( $var ) {
991
-    return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
990
+function wpi_sanitize_tooltip($var) {
991
+    return htmlspecialchars(wp_kses(html_entity_decode($var), array(
992 992
         'br'     => array(),
993 993
         'em'     => array(),
994 994
         'strong' => array(),
@@ -998,7 +998,7 @@  discard block
 block discarded – undo
998 998
         'li'     => array(),
999 999
         'ol'     => array(),
1000 1000
         'p'      => array(),
1001
-    ) ) );
1001
+    )));
1002 1002
 }
1003 1003
 
1004 1004
 /**
@@ -1008,7 +1008,7 @@  discard block
 block discarded – undo
1008 1008
  */
1009 1009
 function wpinv_get_screen_ids() {
1010 1010
 
1011
-    $screen_id = sanitize_title( __( 'Invoicing', 'invoicing' ) );
1011
+    $screen_id = sanitize_title(__('Invoicing', 'invoicing'));
1012 1012
 
1013 1013
     $screen_ids = array(
1014 1014
         'toplevel_page_' . $screen_id,
@@ -1026,7 +1026,7 @@  discard block
 block discarded – undo
1026 1026
         'invoicing_page_wpi-addons',
1027 1027
     );
1028 1028
 
1029
-    return apply_filters( 'wpinv_screen_ids', $screen_ids );
1029
+    return apply_filters('wpinv_screen_ids', $screen_ids);
1030 1030
 }
1031 1031
 
1032 1032
 /**
@@ -1037,9 +1037,9 @@  discard block
 block discarded – undo
1037 1037
  * @param array|string $list List of values.
1038 1038
  * @return array Sanitized array of values.
1039 1039
  */
1040
-function wpinv_parse_list( $list ) {
1041
-	if ( ! is_array( $list ) ) {
1042
-		return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
1040
+function wpinv_parse_list($list) {
1041
+	if (!is_array($list)) {
1042
+		return preg_split('/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY);
1043 1043
 	}
1044 1044
 
1045 1045
 	return $list;
Please login to merge, or discard this patch.
includes/admin/wpinv-admin-functions.php 2 patches
Indentation   +45 added lines, -45 removed lines patch added patch discarded remove patch
@@ -101,9 +101,9 @@  discard block
 block discarded – undo
101 101
         case 'status' :
102 102
             $value   = $wpi_invoice->get_status( true ) . ( $wpi_invoice->is_recurring() && $wpi_invoice->is_parent() ? ' <span class="wpi-suffix">' . __( '(r)', 'invoicing' ) . '</span>' : '' );
103 103
             $is_viewed = wpinv_is_invoice_viewed( $wpi_invoice->ID );
104
-	        $gateway_title = wpinv_get_gateway_admin_label( $wpi_invoice->get_gateway() );
105
-	        $offline_gateways = apply_filters('wpinv_offline_payments', array('bank_transfer', 'cheque', 'cod'));
106
-	        $is_offline_payment = in_array($wpi_invoice->get_gateway(), $offline_gateways) ? true : false;
104
+            $gateway_title = wpinv_get_gateway_admin_label( $wpi_invoice->get_gateway() );
105
+            $offline_gateways = apply_filters('wpinv_offline_payments', array('bank_transfer', 'cheque', 'cod'));
106
+            $is_offline_payment = in_array($wpi_invoice->get_gateway(), $offline_gateways) ? true : false;
107 107
 
108 108
             if ( 1 == $is_viewed ) {
109 109
                 $value .= '&nbsp;&nbsp;<i class="fa fa-eye" title="'.__( 'Viewed by Customer', 'invoicing' ).'"></i>';
@@ -174,69 +174,69 @@  discard block
 block discarded – undo
174 174
 }
175 175
 
176 176
 function wpinv_admin_messages() {
177
-	global $wpinv_options, $pagenow, $post;
177
+    global $wpinv_options, $pagenow, $post;
178 178
 
179
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
180
-		 add_settings_error( 'wpinv-notices', 'wpinv-discount-added', __( 'Discount code added.', 'invoicing' ), 'updated' );
181
-	}
179
+    if ( isset( $_GET['wpinv-message'] ) && 'discount_added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
180
+            add_settings_error( 'wpinv-notices', 'wpinv-discount-added', __( 'Discount code added.', 'invoicing' ), 'updated' );
181
+    }
182 182
 
183
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_add_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
184
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-add-fail', __( 'There was a problem adding your discount code, please try again.', 'invoicing' ), 'error' );
185
-	}
183
+    if ( isset( $_GET['wpinv-message'] ) && 'discount_add_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
184
+        add_settings_error( 'wpinv-notices', 'wpinv-discount-add-fail', __( 'There was a problem adding your discount code, please try again.', 'invoicing' ), 'error' );
185
+    }
186 186
 
187
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_exists' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
188
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-exists', __( 'A discount with that code already exists, please use a different code.', 'invoicing' ), 'error' );
189
-	}
187
+    if ( isset( $_GET['wpinv-message'] ) && 'discount_exists' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
188
+        add_settings_error( 'wpinv-notices', 'wpinv-discount-exists', __( 'A discount with that code already exists, please use a different code.', 'invoicing' ), 'error' );
189
+    }
190 190
 
191
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
192
-		 add_settings_error( 'wpinv-notices', 'wpinv-discount-updated', __( 'Discount code updated.', 'invoicing' ), 'updated' );
193
-	}
191
+    if ( isset( $_GET['wpinv-message'] ) && 'discount_updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
192
+            add_settings_error( 'wpinv-notices', 'wpinv-discount-updated', __( 'Discount code updated.', 'invoicing' ), 'updated' );
193
+    }
194 194
 
195
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_update_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
196
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-updated-fail', __( 'There was a problem updating your discount code, please try again.', 'invoicing' ), 'error' );
197
-	}
195
+    if ( isset( $_GET['wpinv-message'] ) && 'discount_update_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
196
+        add_settings_error( 'wpinv-notices', 'wpinv-discount-updated-fail', __( 'There was a problem updating your discount code, please try again.', 'invoicing' ), 'error' );
197
+    }
198 198
 
199
-	if ( isset( $_GET['wpinv-message'] ) && 'invoice_deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
200
-		add_settings_error( 'wpinv-notices', 'wpinv-deleted', __( 'The invoice has been deleted.', 'invoicing' ), 'updated' );
201
-	}
199
+    if ( isset( $_GET['wpinv-message'] ) && 'invoice_deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
200
+        add_settings_error( 'wpinv-notices', 'wpinv-deleted', __( 'The invoice has been deleted.', 'invoicing' ), 'updated' );
201
+    }
202 202
 
203
-	if ( isset( $_GET['wpinv-message'] ) && 'email_disabled' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
204
-		add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Email notification is disabled. Please check settings.', 'invoicing' ), 'error' );
205
-	}
203
+    if ( isset( $_GET['wpinv-message'] ) && 'email_disabled' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
204
+        add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Email notification is disabled. Please check settings.', 'invoicing' ), 'error' );
205
+    }
206 206
 
207
-	if ( isset( $_GET['wpinv-message'] ) && 'email_sent' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
208
-		add_settings_error( 'wpinv-notices', 'wpinv-sent', __( 'The email has been sent to customer.', 'invoicing' ), 'updated' );
207
+    if ( isset( $_GET['wpinv-message'] ) && 'email_sent' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
208
+        add_settings_error( 'wpinv-notices', 'wpinv-sent', __( 'The email has been sent to customer.', 'invoicing' ), 'updated' );
209 209
     }
210 210
     
211 211
     if ( isset( $_GET['wpinv-message'] ) && 'email_fail' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
212
-		add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Fail to send email to the customer.', 'invoicing' ), 'error' );
212
+        add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Fail to send email to the customer.', 'invoicing' ), 'error' );
213 213
     }
214 214
 
215 215
     if ( isset( $_GET['wpinv-message'] ) && 'invoice-note-deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
216 216
         add_settings_error( 'wpinv-notices', 'wpinv-note-deleted', __( 'The invoice note has been deleted.', 'invoicing' ), 'updated' );
217 217
     }
218 218
 
219
-	if ( isset( $_GET['wpinv-message'] ) && 'settings-imported' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
220
-		add_settings_error( 'wpinv-notices', 'wpinv-settings-imported', __( 'The settings have been imported.', 'invoicing' ), 'updated' );
221
-	}
219
+    if ( isset( $_GET['wpinv-message'] ) && 'settings-imported' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
220
+        add_settings_error( 'wpinv-notices', 'wpinv-settings-imported', __( 'The settings have been imported.', 'invoicing' ), 'updated' );
221
+    }
222 222
 
223
-	if ( isset( $_GET['wpinv-message'] ) && 'note-added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
224
-		add_settings_error( 'wpinv-notices', 'wpinv-note-added', __( 'The invoice note has been added successfully.', 'invoicing' ), 'updated' );
225
-	}
223
+    if ( isset( $_GET['wpinv-message'] ) && 'note-added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
224
+        add_settings_error( 'wpinv-notices', 'wpinv-note-added', __( 'The invoice note has been added successfully.', 'invoicing' ), 'updated' );
225
+    }
226 226
 
227
-	if ( isset( $_GET['wpinv-message'] ) && 'invoice-updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
228
-		add_settings_error( 'wpinv-notices', 'wpinv-updated', __( 'The invoice has been successfully updated.', 'invoicing' ), 'updated' );
229
-	}
227
+    if ( isset( $_GET['wpinv-message'] ) && 'invoice-updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
228
+        add_settings_error( 'wpinv-notices', 'wpinv-updated', __( 'The invoice has been successfully updated.', 'invoicing' ), 'updated' );
229
+    }
230 230
     
231
-	if ( $pagenow == 'post.php' && !empty( $post->post_type ) && $post->post_type == 'wpi_item' && !wpinv_item_is_editable( $post ) ) {
232
-		$message = apply_filters( 'wpinv_item_non_editable_message', __( 'This item in not editable.', 'invoicing' ), $post->ID );
231
+    if ( $pagenow == 'post.php' && !empty( $post->post_type ) && $post->post_type == 'wpi_item' && !wpinv_item_is_editable( $post ) ) {
232
+        $message = apply_filters( 'wpinv_item_non_editable_message', __( 'This item in not editable.', 'invoicing' ), $post->ID );
233 233
 
234
-		if ( !empty( $message ) ) {
235
-			add_settings_error( 'wpinv-notices', 'wpinv-edit-n', $message, 'updated' );
236
-		}
237
-	}
234
+        if ( !empty( $message ) ) {
235
+            add_settings_error( 'wpinv-notices', 'wpinv-edit-n', $message, 'updated' );
236
+        }
237
+    }
238 238
 
239
-	settings_errors( 'wpinv-notices' );
239
+    settings_errors( 'wpinv-notices' );
240 240
 }
241 241
 add_action( 'admin_notices', 'wpinv_admin_messages' );
242 242
 
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
         break;
327 327
         case 'id' :
328 328
            echo $post->ID;
329
-           echo '<div class="hidden" id="wpinv_inline-' . $post->ID . '">
329
+            echo '<div class="hidden" id="wpinv_inline-' . $post->ID . '">
330 330
                     <div class="price">' . wpinv_get_item_price( $post->ID ) . '</div>';
331 331
                     if ( $wpinv_euvat->allow_vat_rules() ) {
332 332
                         echo '<div class="vat_rule">' . $wpinv_euvat->get_item_rule( $post->ID ) . '</div>';
Please login to merge, or discard this patch.
Spacing   +228 added lines, -228 removed lines patch added patch discarded remove patch
@@ -7,245 +7,245 @@  discard block
 block discarded – undo
7 7
  */
8 8
  
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14
-function wpinv_columns( $columns ) {
14
+function wpinv_columns($columns) {
15 15
     $columns = array(
16 16
         'cb'                => $columns['cb'],
17
-        'number'            => __( 'Number', 'invoicing' ),
18
-        'customer'          => __( 'Customer', 'invoicing' ),
19
-        'amount'            => __( 'Amount', 'invoicing' ),
20
-        'invoice_date'      => __( 'Created Date', 'invoicing' ),
21
-        'payment_date'      => __( 'Payment Date', 'invoicing' ),
22
-        'status'            => __( 'Status', 'invoicing' ),
23
-        'ID'                => __( 'ID', 'invoicing' ),
24
-        'wpi_actions'       => __( 'Actions', 'invoicing' ),
17
+        'number'            => __('Number', 'invoicing'),
18
+        'customer'          => __('Customer', 'invoicing'),
19
+        'amount'            => __('Amount', 'invoicing'),
20
+        'invoice_date'      => __('Created Date', 'invoicing'),
21
+        'payment_date'      => __('Payment Date', 'invoicing'),
22
+        'status'            => __('Status', 'invoicing'),
23
+        'ID'                => __('ID', 'invoicing'),
24
+        'wpi_actions'       => __('Actions', 'invoicing'),
25 25
     );
26 26
 
27
-    return apply_filters( 'wpi_invoice_table_columns', $columns );
27
+    return apply_filters('wpi_invoice_table_columns', $columns);
28 28
 }
29
-add_filter( 'manage_wpi_invoice_posts_columns', 'wpinv_columns' );
29
+add_filter('manage_wpi_invoice_posts_columns', 'wpinv_columns');
30 30
 
31
-function wpinv_bulk_actions( $actions ) {
32
-    if ( isset( $actions['edit'] ) ) {
33
-        unset( $actions['edit'] );
31
+function wpinv_bulk_actions($actions) {
32
+    if (isset($actions['edit'])) {
33
+        unset($actions['edit']);
34 34
     }
35 35
 
36 36
     return $actions;
37 37
 }
38
-add_filter( 'bulk_actions-edit-wpi_invoice', 'wpinv_bulk_actions' );
39
-add_filter( 'bulk_actions-edit-wpi_item', 'wpinv_bulk_actions' );
38
+add_filter('bulk_actions-edit-wpi_invoice', 'wpinv_bulk_actions');
39
+add_filter('bulk_actions-edit-wpi_item', 'wpinv_bulk_actions');
40 40
 
41
-function wpinv_sortable_columns( $columns ) {
41
+function wpinv_sortable_columns($columns) {
42 42
     $columns = array(
43
-        'ID'            => array( 'ID', true ),
44
-        'number'        => array( 'number', false ),
45
-        'amount'        => array( 'amount', false ),
46
-        'invoice_date'  => array( 'date', false ),
47
-        'payment_date'  => array( 'payment_date', true ),
48
-        'customer'      => array( 'customer', false ),
49
-        'status'        => array( 'status', false ),
43
+        'ID'            => array('ID', true),
44
+        'number'        => array('number', false),
45
+        'amount'        => array('amount', false),
46
+        'invoice_date'  => array('date', false),
47
+        'payment_date'  => array('payment_date', true),
48
+        'customer'      => array('customer', false),
49
+        'status'        => array('status', false),
50 50
     );
51 51
     
52
-    return apply_filters( 'wpi_invoice_table_sortable_columns', $columns );
52
+    return apply_filters('wpi_invoice_table_sortable_columns', $columns);
53 53
 }
54
-add_filter( 'manage_edit-wpi_invoice_sortable_columns', 'wpinv_sortable_columns' );
54
+add_filter('manage_edit-wpi_invoice_sortable_columns', 'wpinv_sortable_columns');
55 55
 
56
-add_action( 'manage_wpi_invoice_posts_custom_column', 'wpinv_posts_custom_column');
57
-function wpinv_posts_custom_column( $column_name, $post_id = 0 ) {
56
+add_action('manage_wpi_invoice_posts_custom_column', 'wpinv_posts_custom_column');
57
+function wpinv_posts_custom_column($column_name, $post_id = 0) {
58 58
     global $post, $wpi_invoice;
59 59
     
60
-    if ( empty( $wpi_invoice ) || ( !empty( $wpi_invoice ) && $post->ID != $wpi_invoice->ID ) ) {
61
-        $wpi_invoice = new WPInv_Invoice( $post->ID );
60
+    if (empty($wpi_invoice) || (!empty($wpi_invoice) && $post->ID != $wpi_invoice->ID)) {
61
+        $wpi_invoice = new WPInv_Invoice($post->ID);
62 62
     }
63 63
 
64 64
     $value = NULL;
65 65
     
66
-    switch ( $column_name ) {
66
+    switch ($column_name) {
67 67
         case 'email' :
68
-            $value   = $wpi_invoice->get_email();
68
+            $value = $wpi_invoice->get_email();
69 69
             break;
70 70
         case 'customer' :
71 71
             $customer_name = $wpi_invoice->get_user_full_name();
72
-            $customer_name = $customer_name != '' ? $customer_name : __( 'Customer', 'invoicing' );
73
-            $value = '<a href="' . esc_url( get_edit_user_link( $wpi_invoice->get_user_id() ) ) . '">' . $customer_name . '</a>';
74
-            if ( $email = $wpi_invoice->get_email() ) {
72
+            $customer_name = $customer_name != '' ? $customer_name : __('Customer', 'invoicing');
73
+            $value = '<a href="' . esc_url(get_edit_user_link($wpi_invoice->get_user_id())) . '">' . $customer_name . '</a>';
74
+            if ($email = $wpi_invoice->get_email()) {
75 75
                 $value .= '<br><a class="email" href="mailto:' . $email . '">' . $email . '</a>';
76 76
             }
77 77
             break;
78 78
         case 'amount' :
79
-            echo $wpi_invoice->get_total( true );
79
+            echo $wpi_invoice->get_total(true);
80 80
             break;
81 81
         case 'invoice_date' :
82
-            $date_format = get_option( 'date_format' );
82
+            $date_format = get_option('date_format');
83 83
             
84 84
             $m_time = $post->post_date;
85
-            $h_time = mysql2date( $date_format, $m_time );
85
+            $h_time = mysql2date($date_format, $m_time);
86 86
             
87
-            $value   = '<abbr title="' . $m_time . '">' . $h_time . '</abbr>';
87
+            $value = '<abbr title="' . $m_time . '">' . $h_time . '</abbr>';
88 88
             break;
89 89
         case 'payment_date' :
90
-            if ( $date_completed = $wpi_invoice->get_meta( '_wpinv_completed_date', true ) ) {
91
-                $date_format = get_option( 'date_format' );
90
+            if ($date_completed = $wpi_invoice->get_meta('_wpinv_completed_date', true)) {
91
+                $date_format = get_option('date_format');
92 92
                 
93 93
                 $m_time = $date_completed;
94
-                $h_time = mysql2date( $date_format, $m_time );
94
+                $h_time = mysql2date($date_format, $m_time);
95 95
                 
96
-                $value   = '<abbr title="' . $m_time . '">' . $h_time . '</abbr>';
96
+                $value = '<abbr title="' . $m_time . '">' . $h_time . '</abbr>';
97 97
             } else {
98 98
                 $value = '-';
99 99
             }
100 100
             break;
101 101
         case 'status' :
102
-            $value   = $wpi_invoice->get_status( true ) . ( $wpi_invoice->is_recurring() && $wpi_invoice->is_parent() ? ' <span class="wpi-suffix">' . __( '(r)', 'invoicing' ) . '</span>' : '' );
103
-            $is_viewed = wpinv_is_invoice_viewed( $wpi_invoice->ID );
104
-	        $gateway_title = wpinv_get_gateway_admin_label( $wpi_invoice->get_gateway() );
102
+            $value = $wpi_invoice->get_status(true) . ($wpi_invoice->is_recurring() && $wpi_invoice->is_parent() ? ' <span class="wpi-suffix">' . __('(r)', 'invoicing') . '</span>' : '');
103
+            $is_viewed = wpinv_is_invoice_viewed($wpi_invoice->ID);
104
+	        $gateway_title = wpinv_get_gateway_admin_label($wpi_invoice->get_gateway());
105 105
 	        $offline_gateways = apply_filters('wpinv_offline_payments', array('bank_transfer', 'cheque', 'cod'));
106 106
 	        $is_offline_payment = in_array($wpi_invoice->get_gateway(), $offline_gateways) ? true : false;
107 107
 
108
-            if ( 1 == $is_viewed ) {
109
-                $value .= '&nbsp;&nbsp;<i class="fa fa-eye" title="'.__( 'Viewed by Customer', 'invoicing' ).'"></i>';
108
+            if (1 == $is_viewed) {
109
+                $value .= '&nbsp;&nbsp;<i class="fa fa-eye" title="' . __('Viewed by Customer', 'invoicing') . '"></i>';
110 110
             }
111
-            if ( ( $wpi_invoice->is_paid() || $wpi_invoice->is_refunded() || $is_offline_payment ) && ( isset( $gateway_title ) ) ) {
112
-                $value .= '<br><small class="meta gateway">' . wp_sprintf( __( 'Via %s', 'invoicing' ), $gateway_title ) . '</small>';
111
+            if (($wpi_invoice->is_paid() || $wpi_invoice->is_refunded() || $is_offline_payment) && (isset($gateway_title))) {
112
+                $value .= '<br><small class="meta gateway">' . wp_sprintf(__('Via %s', 'invoicing'), $gateway_title) . '</small>';
113 113
             }
114 114
             break;
115 115
         case 'number' :
116
-            $edit_link = get_edit_post_link( $post->ID );
117
-            $value = '<a title="' . esc_attr__( 'View Invoice Details', 'invoicing' ) . '" href="' . esc_url( $edit_link ) . '">' . $wpi_invoice->get_number() . '</a>';
116
+            $edit_link = get_edit_post_link($post->ID);
117
+            $value = '<a title="' . esc_attr__('View Invoice Details', 'invoicing') . '" href="' . esc_url($edit_link) . '">' . $wpi_invoice->get_number() . '</a>';
118 118
             break;
119 119
         case 'wpi_actions' :
120 120
             $value = '';
121
-            if ( !empty( $post->post_name ) ) {
122
-                $value .= '<a title="' . esc_attr__( 'Print invoice', 'invoicing' ) . '" href="' . esc_url( get_permalink( $post->ID ) ) . '" class="button ui-tip column-act-btn" title="" target="_blank"><span class="dashicons dashicons-print"><i style="" class="fa fa-print"></i></span></a>';
121
+            if (!empty($post->post_name)) {
122
+                $value .= '<a title="' . esc_attr__('Print invoice', 'invoicing') . '" href="' . esc_url(get_permalink($post->ID)) . '" class="button ui-tip column-act-btn" title="" target="_blank"><span class="dashicons dashicons-print"><i style="" class="fa fa-print"></i></span></a>';
123 123
             }
124 124
             
125
-            if ( $email = $wpi_invoice->get_email() ) {
126
-                $value .= '<a title="' . esc_attr__( 'Send invoice to customer', 'invoicing' ) . '" href="' . esc_url( add_query_arg( array( 'wpi_action' => 'send_invoice', 'invoice_id' => $post->ID ) ) ) . '" class="button ui-tip column-act-btn"><span class="dashicons dashicons-email-alt"></span></a>';
125
+            if ($email = $wpi_invoice->get_email()) {
126
+                $value .= '<a title="' . esc_attr__('Send invoice to customer', 'invoicing') . '" href="' . esc_url(add_query_arg(array('wpi_action' => 'send_invoice', 'invoice_id' => $post->ID))) . '" class="button ui-tip column-act-btn"><span class="dashicons dashicons-email-alt"></span></a>';
127 127
             }
128 128
             
129 129
             break;
130 130
         default:
131
-            $value = isset( $post->$column_name ) ? $post->$column_name : '';
131
+            $value = isset($post->$column_name) ? $post->$column_name : '';
132 132
             break;
133 133
 
134 134
     }
135
-    $value = apply_filters( 'wpinv_payments_table_column', $value, $post->ID, $column_name );
135
+    $value = apply_filters('wpinv_payments_table_column', $value, $post->ID, $column_name);
136 136
     
137
-    if ( $value !== NULL ) {
137
+    if ($value !== NULL) {
138 138
         echo $value;
139 139
     }
140 140
 }
141 141
 
142
-function wpinv_admin_post_id( $id = 0 ) {
142
+function wpinv_admin_post_id($id = 0) {
143 143
     global $post;
144 144
 
145
-    if ( isset( $id ) && ! empty( $id ) ) {
146
-        return (int)$id;
147
-    } else if ( get_the_ID() ) {
145
+    if (isset($id) && !empty($id)) {
146
+        return (int) $id;
147
+    } else if (get_the_ID()) {
148 148
         return (int) get_the_ID();
149
-    } else if ( isset( $post->ID ) && !empty( $post->ID ) ) {
149
+    } else if (isset($post->ID) && !empty($post->ID)) {
150 150
         return (int) $post->ID;
151
-    } else if ( isset( $_GET['post'] ) && !empty( $_GET['post'] ) ) {
151
+    } else if (isset($_GET['post']) && !empty($_GET['post'])) {
152 152
         return (int) $_GET['post'];
153
-    } else if ( isset( $_GET['id'] ) && !empty( $_GET['id'] ) ) {
153
+    } else if (isset($_GET['id']) && !empty($_GET['id'])) {
154 154
         return (int) $_GET['id'];
155
-    } else if ( isset( $_POST['id'] ) && !empty( $_POST['id'] ) ) {
155
+    } else if (isset($_POST['id']) && !empty($_POST['id'])) {
156 156
         return (int) $_POST['id'];
157 157
     } 
158 158
 
159 159
     return null;
160 160
 }
161 161
     
162
-function wpinv_admin_post_type( $id = 0 ) {
163
-    if ( !$id ) {
162
+function wpinv_admin_post_type($id = 0) {
163
+    if (!$id) {
164 164
         $id = wpinv_admin_post_id();
165 165
     }
166 166
     
167
-    $type = get_post_type( $id );
167
+    $type = get_post_type($id);
168 168
     
169
-    if ( !$type ) {
170
-        $type = isset( $_GET['post_type'] ) && !empty( $_GET['post_type'] ) ? $_GET['post_type'] : null;
169
+    if (!$type) {
170
+        $type = isset($_GET['post_type']) && !empty($_GET['post_type']) ? $_GET['post_type'] : null;
171 171
     }
172 172
     
173
-    return apply_filters( 'wpinv_admin_post_type', $type, $id );
173
+    return apply_filters('wpinv_admin_post_type', $type, $id);
174 174
 }
175 175
 
176 176
 function wpinv_admin_messages() {
177 177
 	global $wpinv_options, $pagenow, $post;
178 178
 
179
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
180
-		 add_settings_error( 'wpinv-notices', 'wpinv-discount-added', __( 'Discount code added.', 'invoicing' ), 'updated' );
179
+	if (isset($_GET['wpinv-message']) && 'discount_added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
180
+		 add_settings_error('wpinv-notices', 'wpinv-discount-added', __('Discount code added.', 'invoicing'), 'updated');
181 181
 	}
182 182
 
183
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_add_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
184
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-add-fail', __( 'There was a problem adding your discount code, please try again.', 'invoicing' ), 'error' );
183
+	if (isset($_GET['wpinv-message']) && 'discount_add_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
184
+		add_settings_error('wpinv-notices', 'wpinv-discount-add-fail', __('There was a problem adding your discount code, please try again.', 'invoicing'), 'error');
185 185
 	}
186 186
 
187
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_exists' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
188
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-exists', __( 'A discount with that code already exists, please use a different code.', 'invoicing' ), 'error' );
187
+	if (isset($_GET['wpinv-message']) && 'discount_exists' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
188
+		add_settings_error('wpinv-notices', 'wpinv-discount-exists', __('A discount with that code already exists, please use a different code.', 'invoicing'), 'error');
189 189
 	}
190 190
 
191
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
192
-		 add_settings_error( 'wpinv-notices', 'wpinv-discount-updated', __( 'Discount code updated.', 'invoicing' ), 'updated' );
191
+	if (isset($_GET['wpinv-message']) && 'discount_updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
192
+		 add_settings_error('wpinv-notices', 'wpinv-discount-updated', __('Discount code updated.', 'invoicing'), 'updated');
193 193
 	}
194 194
 
195
-	if ( isset( $_GET['wpinv-message'] ) && 'discount_update_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
196
-		add_settings_error( 'wpinv-notices', 'wpinv-discount-updated-fail', __( 'There was a problem updating your discount code, please try again.', 'invoicing' ), 'error' );
195
+	if (isset($_GET['wpinv-message']) && 'discount_update_failed' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
196
+		add_settings_error('wpinv-notices', 'wpinv-discount-updated-fail', __('There was a problem updating your discount code, please try again.', 'invoicing'), 'error');
197 197
 	}
198 198
 
199
-	if ( isset( $_GET['wpinv-message'] ) && 'invoice_deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
200
-		add_settings_error( 'wpinv-notices', 'wpinv-deleted', __( 'The invoice has been deleted.', 'invoicing' ), 'updated' );
199
+	if (isset($_GET['wpinv-message']) && 'invoice_deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
200
+		add_settings_error('wpinv-notices', 'wpinv-deleted', __('The invoice has been deleted.', 'invoicing'), 'updated');
201 201
 	}
202 202
 
203
-	if ( isset( $_GET['wpinv-message'] ) && 'email_disabled' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
204
-		add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Email notification is disabled. Please check settings.', 'invoicing' ), 'error' );
203
+	if (isset($_GET['wpinv-message']) && 'email_disabled' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
204
+		add_settings_error('wpinv-notices', 'wpinv-sent-fail', __('Email notification is disabled. Please check settings.', 'invoicing'), 'error');
205 205
 	}
206 206
 
207
-	if ( isset( $_GET['wpinv-message'] ) && 'email_sent' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
208
-		add_settings_error( 'wpinv-notices', 'wpinv-sent', __( 'The email has been sent to customer.', 'invoicing' ), 'updated' );
207
+	if (isset($_GET['wpinv-message']) && 'email_sent' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
208
+		add_settings_error('wpinv-notices', 'wpinv-sent', __('The email has been sent to customer.', 'invoicing'), 'updated');
209 209
     }
210 210
     
211
-    if ( isset( $_GET['wpinv-message'] ) && 'email_fail' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
212
-		add_settings_error( 'wpinv-notices', 'wpinv-sent-fail', __( 'Fail to send email to the customer.', 'invoicing' ), 'error' );
211
+    if (isset($_GET['wpinv-message']) && 'email_fail' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
212
+		add_settings_error('wpinv-notices', 'wpinv-sent-fail', __('Fail to send email to the customer.', 'invoicing'), 'error');
213 213
     }
214 214
 
215
-    if ( isset( $_GET['wpinv-message'] ) && 'invoice-note-deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
216
-        add_settings_error( 'wpinv-notices', 'wpinv-note-deleted', __( 'The invoice note has been deleted.', 'invoicing' ), 'updated' );
215
+    if (isset($_GET['wpinv-message']) && 'invoice-note-deleted' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
216
+        add_settings_error('wpinv-notices', 'wpinv-note-deleted', __('The invoice note has been deleted.', 'invoicing'), 'updated');
217 217
     }
218 218
 
219
-	if ( isset( $_GET['wpinv-message'] ) && 'settings-imported' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
220
-		add_settings_error( 'wpinv-notices', 'wpinv-settings-imported', __( 'The settings have been imported.', 'invoicing' ), 'updated' );
219
+	if (isset($_GET['wpinv-message']) && 'settings-imported' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
220
+		add_settings_error('wpinv-notices', 'wpinv-settings-imported', __('The settings have been imported.', 'invoicing'), 'updated');
221 221
 	}
222 222
 
223
-	if ( isset( $_GET['wpinv-message'] ) && 'note-added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
224
-		add_settings_error( 'wpinv-notices', 'wpinv-note-added', __( 'The invoice note has been added successfully.', 'invoicing' ), 'updated' );
223
+	if (isset($_GET['wpinv-message']) && 'note-added' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
224
+		add_settings_error('wpinv-notices', 'wpinv-note-added', __('The invoice note has been added successfully.', 'invoicing'), 'updated');
225 225
 	}
226 226
 
227
-	if ( isset( $_GET['wpinv-message'] ) && 'invoice-updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing() ) {
228
-		add_settings_error( 'wpinv-notices', 'wpinv-updated', __( 'The invoice has been successfully updated.', 'invoicing' ), 'updated' );
227
+	if (isset($_GET['wpinv-message']) && 'invoice-updated' == $_GET['wpinv-message'] && wpinv_current_user_can_manage_invoicing()) {
228
+		add_settings_error('wpinv-notices', 'wpinv-updated', __('The invoice has been successfully updated.', 'invoicing'), 'updated');
229 229
 	}
230 230
     
231
-	if ( $pagenow == 'post.php' && !empty( $post->post_type ) && $post->post_type == 'wpi_item' && !wpinv_item_is_editable( $post ) ) {
232
-		$message = apply_filters( 'wpinv_item_non_editable_message', __( 'This item in not editable.', 'invoicing' ), $post->ID );
231
+	if ($pagenow == 'post.php' && !empty($post->post_type) && $post->post_type == 'wpi_item' && !wpinv_item_is_editable($post)) {
232
+		$message = apply_filters('wpinv_item_non_editable_message', __('This item in not editable.', 'invoicing'), $post->ID);
233 233
 
234
-		if ( !empty( $message ) ) {
235
-			add_settings_error( 'wpinv-notices', 'wpinv-edit-n', $message, 'updated' );
234
+		if (!empty($message)) {
235
+			add_settings_error('wpinv-notices', 'wpinv-edit-n', $message, 'updated');
236 236
 		}
237 237
 	}
238 238
 
239
-	settings_errors( 'wpinv-notices' );
239
+	settings_errors('wpinv-notices');
240 240
 }
241
-add_action( 'admin_notices', 'wpinv_admin_messages' );
241
+add_action('admin_notices', 'wpinv_admin_messages');
242 242
 
243
-add_action( 'admin_init', 'wpinv_show_test_payment_gateway_notice' );
244
-function wpinv_show_test_payment_gateway_notice(){
245
-    add_action( 'admin_notices', 'wpinv_test_payment_gateway_messages' );
243
+add_action('admin_init', 'wpinv_show_test_payment_gateway_notice');
244
+function wpinv_show_test_payment_gateway_notice() {
245
+    add_action('admin_notices', 'wpinv_test_payment_gateway_messages');
246 246
 }
247 247
 
248
-function wpinv_test_payment_gateway_messages(){
248
+function wpinv_test_payment_gateway_messages() {
249 249
     $gateways = wpinv_get_enabled_payment_gateways();
250 250
     $name = array(); $test_gateways = '';
251 251
     if ($gateways) {
@@ -256,9 +256,9 @@  discard block
 block discarded – undo
256 256
         }
257 257
         $test_gateways = implode(', ', $name);
258 258
     }
259
-    if(isset($test_gateways) && !empty($test_gateways)){
259
+    if (isset($test_gateways) && !empty($test_gateways)) {
260 260
         $link = admin_url('admin.php?page=wpinv-settings&tab=gateways');
261
-        $notice = wp_sprintf( __('<strong>Important:</strong> Payment Gateway(s) %s are in testing mode and will not receive real payments. Go to <a href="%s"> Gateway Settings</a>.', 'invoicing'), $test_gateways, $link );
261
+        $notice = wp_sprintf(__('<strong>Important:</strong> Payment Gateway(s) %s are in testing mode and will not receive real payments. Go to <a href="%s"> Gateway Settings</a>.', 'invoicing'), $test_gateways, $link);
262 262
         ?>
263 263
         <div class="notice notice-warning is-dismissible">
264 264
             <p><?php echo $notice; ?></p>
@@ -267,29 +267,29 @@  discard block
 block discarded – undo
267 267
     }
268 268
 }
269 269
 
270
-function wpinv_items_columns( $existing_columns ) {
270
+function wpinv_items_columns($existing_columns) {
271 271
     global $wpinv_euvat;
272 272
     
273 273
     $columns                = array();
274 274
     $columns['cb']          = $existing_columns['cb'];
275
-    $columns['title']       = __( 'Title', 'invoicing' );
276
-    $columns['price']       = __( 'Price', 'invoicing' );
277
-    if ( $wpinv_euvat->allow_vat_rules() ) {
278
-        $columns['vat_rule']    = __( 'VAT rule type', 'invoicing' );
275
+    $columns['title']       = __('Title', 'invoicing');
276
+    $columns['price']       = __('Price', 'invoicing');
277
+    if ($wpinv_euvat->allow_vat_rules()) {
278
+        $columns['vat_rule']    = __('VAT rule type', 'invoicing');
279 279
     }
280
-    if ( $wpinv_euvat->allow_vat_classes() ) {
281
-        $columns['vat_class']   = __( 'VAT class', 'invoicing' );
280
+    if ($wpinv_euvat->allow_vat_classes()) {
281
+        $columns['vat_class']   = __('VAT class', 'invoicing');
282 282
     }
283
-    $columns['type']        = __( 'Type', 'invoicing' );
284
-    $columns['recurring']   = __( 'Recurring', 'invoicing' );
285
-    $columns['date']        = __( 'Date', 'invoicing' );
286
-    $columns['id']          = __( 'ID', 'invoicing' );
283
+    $columns['type']        = __('Type', 'invoicing');
284
+    $columns['recurring']   = __('Recurring', 'invoicing');
285
+    $columns['date']        = __('Date', 'invoicing');
286
+    $columns['id']          = __('ID', 'invoicing');
287 287
 
288
-    return apply_filters( 'wpinv_items_columns', $columns );
288
+    return apply_filters('wpinv_items_columns', $columns);
289 289
 }
290
-add_filter( 'manage_wpi_item_posts_columns', 'wpinv_items_columns' );
290
+add_filter('manage_wpi_item_posts_columns', 'wpinv_items_columns');
291 291
 
292
-function wpinv_items_sortable_columns( $columns ) {
292
+function wpinv_items_sortable_columns($columns) {
293 293
     $columns['price']       = 'price';
294 294
     $columns['vat_rule']    = 'vat_rule';
295 295
     $columns['vat_class']   = 'vat_class';
@@ -299,151 +299,151 @@  discard block
 block discarded – undo
299 299
 
300 300
     return $columns;
301 301
 }
302
-add_filter( 'manage_edit-wpi_item_sortable_columns', 'wpinv_items_sortable_columns' );
302
+add_filter('manage_edit-wpi_item_sortable_columns', 'wpinv_items_sortable_columns');
303 303
 
304
-function wpinv_items_table_custom_column( $column ) {
304
+function wpinv_items_table_custom_column($column) {
305 305
     global $wpinv_euvat, $post, $wpi_item;
306 306
     
307
-    if ( empty( $wpi_item ) || ( !empty( $wpi_item ) && $post->ID != $wpi_item->ID ) ) {
308
-        $wpi_item = new WPInv_Item( $post->ID );
307
+    if (empty($wpi_item) || (!empty($wpi_item) && $post->ID != $wpi_item->ID)) {
308
+        $wpi_item = new WPInv_Item($post->ID);
309 309
     }
310 310
 
311
-    switch ( $column ) {
311
+    switch ($column) {
312 312
         case 'price' :
313
-            echo wpinv_item_price( $post->ID );
313
+            echo wpinv_item_price($post->ID);
314 314
         break;
315 315
         case 'vat_rule' :
316
-            echo $wpinv_euvat->item_rule_label( $post->ID );
316
+            echo $wpinv_euvat->item_rule_label($post->ID);
317 317
         break;
318 318
         case 'vat_class' :
319
-            echo $wpinv_euvat->item_class_label( $post->ID );
319
+            echo $wpinv_euvat->item_class_label($post->ID);
320 320
         break;
321 321
         case 'type' :
322
-            echo wpinv_item_type( $post->ID ) . '<span class="meta">' . $wpi_item->get_custom_singular_name() . '</span>';
322
+            echo wpinv_item_type($post->ID) . '<span class="meta">' . $wpi_item->get_custom_singular_name() . '</span>';
323 323
         break;
324 324
         case 'recurring' :
325
-            echo ( wpinv_is_recurring_item( $post->ID ) ? '<i class="fa fa-check fa-recurring-y"></i>' : '<i class="fa fa-close fa-recurring-n"></i>' );
325
+            echo (wpinv_is_recurring_item($post->ID) ? '<i class="fa fa-check fa-recurring-y"></i>' : '<i class="fa fa-close fa-recurring-n"></i>');
326 326
         break;
327 327
         case 'id' :
328 328
            echo $post->ID;
329 329
            echo '<div class="hidden" id="wpinv_inline-' . $post->ID . '">
330
-                    <div class="price">' . wpinv_get_item_price( $post->ID ) . '</div>';
331
-                    if ( $wpinv_euvat->allow_vat_rules() ) {
332
-                        echo '<div class="vat_rule">' . $wpinv_euvat->get_item_rule( $post->ID ) . '</div>';
330
+                    <div class="price">' . wpinv_get_item_price($post->ID) . '</div>';
331
+                    if ($wpinv_euvat->allow_vat_rules()) {
332
+                        echo '<div class="vat_rule">' . $wpinv_euvat->get_item_rule($post->ID) . '</div>';
333 333
                     }
334
-                    if ( $wpinv_euvat->allow_vat_classes() ) {
335
-                        echo '<div class="vat_class">' . $wpinv_euvat->get_item_class( $post->ID ) . '</div>';
334
+                    if ($wpinv_euvat->allow_vat_classes()) {
335
+                        echo '<div class="vat_class">' . $wpinv_euvat->get_item_class($post->ID) . '</div>';
336 336
                     }
337
-                    echo '<div class="type">' . wpinv_get_item_type( $post->ID ) . '</div>
337
+                    echo '<div class="type">' . wpinv_get_item_type($post->ID) . '</div>
338 338
                 </div>';
339 339
         break;
340 340
     }
341 341
     
342
-    do_action( 'wpinv_items_table_column_item_' . $column, $wpi_item, $post );
342
+    do_action('wpinv_items_table_column_item_' . $column, $wpi_item, $post);
343 343
 }
344
-add_action( 'manage_wpi_item_posts_custom_column', 'wpinv_items_table_custom_column' );
344
+add_action('manage_wpi_item_posts_custom_column', 'wpinv_items_table_custom_column');
345 345
 
346 346
 function wpinv_add_items_filters() {
347 347
     global $wpinv_euvat, $typenow;
348 348
 
349 349
     // Checks if the current post type is 'item'
350
-    if ( $typenow == 'wpi_item') {
351
-        if ( $wpinv_euvat->allow_vat_rules() ) {
352
-            echo wpinv_html_select( array(
353
-                    'options'          => array_merge( array( '' => __( 'All VAT rules', 'invoicing' ) ), $wpinv_euvat->get_rules() ),
350
+    if ($typenow == 'wpi_item') {
351
+        if ($wpinv_euvat->allow_vat_rules()) {
352
+            echo wpinv_html_select(array(
353
+                    'options'          => array_merge(array('' => __('All VAT rules', 'invoicing')), $wpinv_euvat->get_rules()),
354 354
                     'name'             => 'vat_rule',
355 355
                     'id'               => 'vat_rule',
356
-                    'selected'         => ( isset( $_GET['vat_rule'] ) ? $_GET['vat_rule'] : '' ),
356
+                    'selected'         => (isset($_GET['vat_rule']) ? $_GET['vat_rule'] : ''),
357 357
                     'show_option_all'  => false,
358 358
                     'show_option_none' => false,
359 359
                     'class'            => 'gdmbx2-text-medium wpi_select2',
360
-                ) );
360
+                ));
361 361
         }
362 362
         
363
-        if ( $wpinv_euvat->allow_vat_classes() ) {
364
-            echo wpinv_html_select( array(
365
-                    'options'          => array_merge( array( '' => __( 'All VAT classes', 'invoicing' ) ), $wpinv_euvat->get_all_classes() ),
363
+        if ($wpinv_euvat->allow_vat_classes()) {
364
+            echo wpinv_html_select(array(
365
+                    'options'          => array_merge(array('' => __('All VAT classes', 'invoicing')), $wpinv_euvat->get_all_classes()),
366 366
                     'name'             => 'vat_class',
367 367
                     'id'               => 'vat_class',
368
-                    'selected'         => ( isset( $_GET['vat_class'] ) ? $_GET['vat_class'] : '' ),
368
+                    'selected'         => (isset($_GET['vat_class']) ? $_GET['vat_class'] : ''),
369 369
                     'show_option_all'  => false,
370 370
                     'show_option_none' => false,
371 371
                     'class'            => 'gdmbx2-text-medium wpi_select2',
372
-                ) );
372
+                ));
373 373
         }
374 374
             
375
-        echo wpinv_html_select( array(
376
-                'options'          => array_merge( array( '' => __( 'All item types', 'invoicing' ) ), wpinv_get_item_types() ),
375
+        echo wpinv_html_select(array(
376
+                'options'          => array_merge(array('' => __('All item types', 'invoicing')), wpinv_get_item_types()),
377 377
                 'name'             => 'type',
378 378
                 'id'               => 'type',
379
-                'selected'         => ( isset( $_GET['type'] ) ? $_GET['type'] : '' ),
379
+                'selected'         => (isset($_GET['type']) ? $_GET['type'] : ''),
380 380
                 'show_option_all'  => false,
381 381
                 'show_option_none' => false,
382 382
                 'class'            => 'gdmbx2-text-medium',
383
-            ) );
383
+            ));
384 384
 
385
-        if ( isset( $_REQUEST['all_posts'] ) && '1' === $_REQUEST['all_posts'] ) {
385
+        if (isset($_REQUEST['all_posts']) && '1' === $_REQUEST['all_posts']) {
386 386
             echo '<input type="hidden" name="all_posts" value="1" />';
387 387
         }
388 388
     }
389 389
 }
390
-add_action( 'restrict_manage_posts', 'wpinv_add_items_filters', 100 );
390
+add_action('restrict_manage_posts', 'wpinv_add_items_filters', 100);
391 391
 
392
-function wpinv_send_invoice_after_save( $invoice ) {
393
-    if ( empty( $_POST['wpi_save_send'] ) ) {
392
+function wpinv_send_invoice_after_save($invoice) {
393
+    if (empty($_POST['wpi_save_send'])) {
394 394
         return;
395 395
     }
396 396
     
397
-    if ( !empty( $invoice->ID ) && !empty( $invoice->post_type ) && 'wpi_invoice' == $invoice->post_type ) {
398
-        wpinv_user_invoice_notification( $invoice->ID );
397
+    if (!empty($invoice->ID) && !empty($invoice->post_type) && 'wpi_invoice' == $invoice->post_type) {
398
+        wpinv_user_invoice_notification($invoice->ID);
399 399
     }
400 400
 }
401
-add_action( 'wpinv_invoice_metabox_saved', 'wpinv_send_invoice_after_save', 100, 1 );
401
+add_action('wpinv_invoice_metabox_saved', 'wpinv_send_invoice_after_save', 100, 1);
402 402
 
403
-function wpinv_send_register_new_user( $data, $postarr ) {
404
-    if ( wpinv_current_user_can_manage_invoicing() && !empty( $data['post_type'] ) && ( 'wpi_invoice' == $data['post_type'] || 'wpi_quote' == $data['post_type'] ) ) {
405
-        $is_new_user = !empty( $postarr['wpinv_new_user'] ) ? true : false;
406
-        $email = !empty( $postarr['wpinv_email'] ) && $postarr['wpinv_email'] && is_email( $postarr['wpinv_email'] ) ? $postarr['wpinv_email'] : NULL;
403
+function wpinv_send_register_new_user($data, $postarr) {
404
+    if (wpinv_current_user_can_manage_invoicing() && !empty($data['post_type']) && ('wpi_invoice' == $data['post_type'] || 'wpi_quote' == $data['post_type'])) {
405
+        $is_new_user = !empty($postarr['wpinv_new_user']) ? true : false;
406
+        $email = !empty($postarr['wpinv_email']) && $postarr['wpinv_email'] && is_email($postarr['wpinv_email']) ? $postarr['wpinv_email'] : NULL;
407 407
         
408
-        if ( $is_new_user && $email && !email_exists( $email ) ) {
409
-            $first_name = !empty( $postarr['wpinv_first_name'] ) ? sanitize_text_field( $postarr['wpinv_first_name'] ) : '';
410
-            $last_name = !empty( $postarr['wpinv_last_name'] ) ? sanitize_text_field( $postarr['wpinv_last_name'] ) : '';
411
-            $display_name = $first_name || $last_name ? trim( $first_name . ' ' . $last_name ) : '';
412
-            $user_nicename = $display_name ? trim( $display_name ) : $email;
413
-            $user_company = !empty( $postarr['wpinv_company'] ) ? sanitize_text_field( $postarr['wpinv_company'] ) : '';
408
+        if ($is_new_user && $email && !email_exists($email)) {
409
+            $first_name = !empty($postarr['wpinv_first_name']) ? sanitize_text_field($postarr['wpinv_first_name']) : '';
410
+            $last_name = !empty($postarr['wpinv_last_name']) ? sanitize_text_field($postarr['wpinv_last_name']) : '';
411
+            $display_name = $first_name || $last_name ? trim($first_name . ' ' . $last_name) : '';
412
+            $user_nicename = $display_name ? trim($display_name) : $email;
413
+            $user_company = !empty($postarr['wpinv_company']) ? sanitize_text_field($postarr['wpinv_company']) : '';
414 414
             
415
-            $user_login = sanitize_user( str_replace( ' ', '', $display_name ), true );
416
-            if ( !( validate_username( $user_login ) && !username_exists( $user_login ) ) ) {
415
+            $user_login = sanitize_user(str_replace(' ', '', $display_name), true);
416
+            if (!(validate_username($user_login) && !username_exists($user_login))) {
417 417
                 $new_user_login = strstr($email, '@', true);
418
-                if ( validate_username( $user_login ) && username_exists( $user_login ) ) {
419
-                    $user_login = sanitize_user($new_user_login, true );
418
+                if (validate_username($user_login) && username_exists($user_login)) {
419
+                    $user_login = sanitize_user($new_user_login, true);
420 420
                 }
421
-                if ( validate_username( $user_login ) && username_exists( $user_login ) ) {
422
-                    $user_append_text = rand(10,1000);
423
-                    $user_login = sanitize_user($new_user_login.$user_append_text, true );
421
+                if (validate_username($user_login) && username_exists($user_login)) {
422
+                    $user_append_text = rand(10, 1000);
423
+                    $user_login = sanitize_user($new_user_login . $user_append_text, true);
424 424
                 }
425 425
                 
426
-                if ( !( validate_username( $user_login ) && !username_exists( $user_login ) ) ) {
426
+                if (!(validate_username($user_login) && !username_exists($user_login))) {
427 427
                     $user_login = $email;
428 428
                 }
429 429
             }
430 430
             
431 431
             $userdata = array(
432 432
                 'user_login' => $user_login,
433
-                'user_pass' => wp_generate_password( 12, false ),
434
-                'user_email' => sanitize_text_field( $email ),
433
+                'user_pass' => wp_generate_password(12, false),
434
+                'user_email' => sanitize_text_field($email),
435 435
                 'first_name' => $first_name,
436 436
                 'last_name' => $last_name,
437
-                'user_nicename' => wpinv_utf8_substr( $user_nicename, 0, 50 ),
437
+                'user_nicename' => wpinv_utf8_substr($user_nicename, 0, 50),
438 438
                 'nickname' => $display_name,
439 439
                 'display_name' => $display_name,
440 440
             );
441 441
 
442
-            $userdata = apply_filters( 'wpinv_register_new_user_data', $userdata );
442
+            $userdata = apply_filters('wpinv_register_new_user_data', $userdata);
443 443
             
444
-            $new_user_id = wp_insert_user( $userdata );
444
+            $new_user_id = wp_insert_user($userdata);
445 445
             
446
-            if ( !is_wp_error( $new_user_id ) ) {
446
+            if (!is_wp_error($new_user_id)) {
447 447
                 $data['post_author'] = $new_user_id;
448 448
                 $_POST['post_author'] = $new_user_id;
449 449
                 $_POST['post_author_override'] = $new_user_id;
@@ -464,72 +464,72 @@  discard block
 block discarded – undo
464 464
                 
465 465
                 $meta = array();
466 466
                 ///$meta['_wpinv_user_id'] = $new_user_id;
467
-                foreach ( $meta_fields as $field ) {
468
-                    $meta['_wpinv_' . $field] = isset( $postarr['wpinv_' . $field] ) ? sanitize_text_field( $postarr['wpinv_' . $field] ) : '';
467
+                foreach ($meta_fields as $field) {
468
+                    $meta['_wpinv_' . $field] = isset($postarr['wpinv_' . $field]) ? sanitize_text_field($postarr['wpinv_' . $field]) : '';
469 469
                 }
470 470
                 
471
-                $meta = apply_filters( 'wpinv_register_new_user_meta', $meta, $new_user_id );
471
+                $meta = apply_filters('wpinv_register_new_user_meta', $meta, $new_user_id);
472 472
 
473 473
                 // Update user meta.
474
-                foreach ( $meta as $key => $value ) {
475
-                    update_user_meta( $new_user_id, $key, $value );
474
+                foreach ($meta as $key => $value) {
475
+                    update_user_meta($new_user_id, $key, $value);
476 476
                 }
477 477
                 
478
-                if ( function_exists( 'wp_send_new_user_notifications' ) ) {
478
+                if (function_exists('wp_send_new_user_notifications')) {
479 479
                     // Send email notifications related to the creation of new user.
480
-                    wp_send_new_user_notifications( $new_user_id, 'user' );
480
+                    wp_send_new_user_notifications($new_user_id, 'user');
481 481
                 }
482 482
             } else {
483
-                wpinv_error_log( $new_user_id->get_error_message(), 'Invoice add new user', __FILE__, __LINE__ );
483
+                wpinv_error_log($new_user_id->get_error_message(), 'Invoice add new user', __FILE__, __LINE__);
484 484
             }
485 485
         }
486 486
     }
487 487
     
488 488
     return $data;
489 489
 }
490
-add_filter( 'wp_insert_post_data', 'wpinv_send_register_new_user', 10, 2 );
490
+add_filter('wp_insert_post_data', 'wpinv_send_register_new_user', 10, 2);
491 491
 
492
-function wpinv_show_recurring_supported_gateways( $item_ID ) {
492
+function wpinv_show_recurring_supported_gateways($item_ID) {
493 493
     $all_gateways = wpinv_get_payment_gateways();
494 494
 
495
-    if ( !empty( $all_gateways ) ) {
495
+    if (!empty($all_gateways)) {
496 496
         $gateways = array();
497 497
 
498
-        foreach ( $all_gateways as $key => $gateway ) {
499
-            if ( wpinv_gateway_support_subscription( $key ) ) {
498
+        foreach ($all_gateways as $key => $gateway) {
499
+            if (wpinv_gateway_support_subscription($key)) {
500 500
                 $gateways[] = $gateway['admin_label'];
501 501
             }
502 502
         }
503 503
 
504
-        if ( !empty( $gateways ) ) {
504
+        if (!empty($gateways)) {
505 505
             ?>
506
-            <span class="description"><?php echo wp_sprintf( __( 'Recurring payments only supported by: %s', 'invoicing' ), implode( ', ', $gateways ) ); ?></span>
506
+            <span class="description"><?php echo wp_sprintf(__('Recurring payments only supported by: %s', 'invoicing'), implode(', ', $gateways)); ?></span>
507 507
             <?php
508 508
         }
509 509
     }
510 510
 }
511
-add_action( 'wpinv_item_price_field', 'wpinv_show_recurring_supported_gateways', -10, 1 );
511
+add_action('wpinv_item_price_field', 'wpinv_show_recurring_supported_gateways', -10, 1);
512 512
 
513
-function wpinv_post_updated_messages( $messages ) {
513
+function wpinv_post_updated_messages($messages) {
514 514
     global $post, $post_ID;
515 515
 
516 516
     $messages['wpi_discount'] = array(
517 517
         0   => '',
518
-        1   => __( 'Discount updated.', 'invoicing' ),
519
-        2   => __( 'Custom field updated.', 'invoicing' ),
520
-        3   => __( 'Custom field deleted.', 'invoicing' ),
521
-        4   => __( 'Discount updated.', 'invoicing' ),
522
-        5   => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
523
-        6   => __( 'Discount updated.', 'invoicing' ),
524
-        7   => __( 'Discount saved.', 'invoicing' ),
525
-        8   => __( 'Discount submitted.', 'invoicing' ),
526
-        9   => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
527
-        10  => __( 'Discount draft updated.', 'invoicing' ),
518
+        1   => __('Discount updated.', 'invoicing'),
519
+        2   => __('Custom field updated.', 'invoicing'),
520
+        3   => __('Custom field deleted.', 'invoicing'),
521
+        4   => __('Discount updated.', 'invoicing'),
522
+        5   => isset($_GET['revision']) ? wp_sprintf(__('Discount restored to revision from %s', 'invoicing'), wp_post_revision_title((int) $_GET['revision'], false)) : false,
523
+        6   => __('Discount updated.', 'invoicing'),
524
+        7   => __('Discount saved.', 'invoicing'),
525
+        8   => __('Discount submitted.', 'invoicing'),
526
+        9   => wp_sprintf(__('Discount scheduled for: <strong>%1$s</strong>.', 'invoicing'), date_i18n(__('M j, Y @ G:i', 'invoicing'), strtotime($post->post_date))),
527
+        10  => __('Discount draft updated.', 'invoicing'),
528 528
     );
529 529
 
530 530
     return $messages;
531 531
 }
532
-add_filter( 'post_updated_messages', 'wpinv_post_updated_messages', 10, 1 );
532
+add_filter('post_updated_messages', 'wpinv_post_updated_messages', 10, 1);
533 533
 
534 534
 add_action('admin_init', 'admin_init_example_type');
535 535
 
@@ -539,7 +539,7 @@  discard block
 block discarded – undo
539 539
 function admin_init_example_type() {
540 540
     global $typenow;
541 541
 
542
-    if ($typenow === 'wpi_invoice' || $typenow === 'wpi_quote' ) {
542
+    if ($typenow === 'wpi_invoice' || $typenow === 'wpi_quote') {
543 543
         add_filter('posts_search', 'posts_search_example_type', 10, 2);
544 544
     }
545 545
 }
@@ -554,9 +554,9 @@  discard block
 block discarded – undo
554 554
     global $wpdb;
555 555
 
556 556
     if ($query->is_main_query() && !empty($query->query['s'])) {
557
-        $conditions_str = "{$wpdb->posts}.post_author IN ( SELECT ID FROM {$wpdb->users} WHERE user_email LIKE '%" . esc_sql( $query->query['s'] ) . "%' )";
558
-        if ( ! empty( $search ) ) {
559
-            $search = preg_replace( '/^ AND /', '', $search );
557
+        $conditions_str = "{$wpdb->posts}.post_author IN ( SELECT ID FROM {$wpdb->users} WHERE user_email LIKE '%" . esc_sql($query->query['s']) . "%' )";
558
+        if (!empty($search)) {
559
+            $search = preg_replace('/^ AND /', '', $search);
560 560
             $search = " AND ( {$search} OR ( {$conditions_str} ) )";
561 561
         } else {
562 562
             $search = " AND ( {$conditions_str} )";
@@ -566,9 +566,9 @@  discard block
 block discarded – undo
566 566
     return $search;
567 567
 }
568 568
 
569
-add_action( 'admin_init', 'wpinv_reset_invoice_count' );
570
-function wpinv_reset_invoice_count(){
571
-    if(isset($_GET['reset_invoice_count']) && 1 == $_GET['reset_invoice_count'] && isset($_GET['_nonce']) && wp_verify_nonce($_GET['_nonce'], 'reset_invoice_count')) {
569
+add_action('admin_init', 'wpinv_reset_invoice_count');
570
+function wpinv_reset_invoice_count() {
571
+    if (isset($_GET['reset_invoice_count']) && 1 == $_GET['reset_invoice_count'] && isset($_GET['_nonce']) && wp_verify_nonce($_GET['_nonce'], 'reset_invoice_count')) {
572 572
         wpinv_update_option('invoice_sequence_start', 1);
573 573
         delete_option('wpinv_last_invoice_number');
574 574
         $url = add_query_arg(array('reset_invoice_done' => 1));
@@ -579,8 +579,8 @@  discard block
 block discarded – undo
579 579
 }
580 580
 
581 581
 add_action('admin_notices', 'wpinv_invoice_count_reset_message');
582
-function wpinv_invoice_count_reset_message(){
583
-    if(isset($_GET['reset_invoice_done']) && 1 == $_GET['reset_invoice_done']) {
582
+function wpinv_invoice_count_reset_message() {
583
+    if (isset($_GET['reset_invoice_done']) && 1 == $_GET['reset_invoice_done']) {
584 584
         $notice = __('Invoice number sequence reset successfully.', 'invoicing');
585 585
         ?>
586 586
         <div class="notice notice-success is-dismissible">
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-items-controller.php 2 patches
Indentation   +987 added lines, -987 removed lines patch added patch discarded remove patch
@@ -20,91 +20,91 @@  discard block
 block discarded – undo
20 20
 class WPInv_REST_Items_Controller extends WP_REST_Posts_Controller {
21 21
 
22 22
     /**
23
-	 * Post type.
24
-	 *
25
-	 * @var string
26
-	 */
27
-	protected $post_type = 'wpi_item';
23
+     * Post type.
24
+     *
25
+     * @var string
26
+     */
27
+    protected $post_type = 'wpi_item';
28 28
 	
29
-	/**
30
-	 * Cached results of get_item_schema.
31
-	 *
32
-	 * @since 1.0.13
33
-	 * @var array
34
-	 */
35
-	protected $schema;
29
+    /**
30
+     * Cached results of get_item_schema.
31
+     *
32
+     * @since 1.0.13
33
+     * @var array
34
+     */
35
+    protected $schema;
36 36
 
37 37
     /**
38
-	 * Constructor.
39
-	 *
40
-	 * @since 1.0.13
41
-	 *
42
-	 * @param string $namespace Api Namespace
43
-	 */
44
-	public function __construct( $namespace ) {
38
+     * Constructor.
39
+     *
40
+     * @since 1.0.13
41
+     *
42
+     * @param string $namespace Api Namespace
43
+     */
44
+    public function __construct( $namespace ) {
45 45
         
46 46
         // Set api namespace...
47
-		$this->namespace = $namespace;
47
+        $this->namespace = $namespace;
48 48
 
49 49
         // ... and the rest base
50 50
         $this->rest_base = 'items';
51 51
 		
52 52
     }
53 53
 	
54
-	/**
55
-	 * Registers the routes for the objects of the controller.
56
-	 *
57
-	 * @since 1.0.13
58
-	 *
59
-	 * @see register_rest_route()
60
-	 */
61
-	public function register_routes() {
62
-
63
-		parent::register_routes();
64
-
65
-		register_rest_route(
66
-			$this->namespace,
67
-			'/' . $this->rest_base . '/item-types',
68
-			array(
69
-				array(
70
-					'methods'             => WP_REST_Server::READABLE,
71
-					'callback'            => array( $this, 'get_item_types' ),
72
-				),
73
-			)
74
-		);
75
-
76
-	}
54
+    /**
55
+     * Registers the routes for the objects of the controller.
56
+     *
57
+     * @since 1.0.13
58
+     *
59
+     * @see register_rest_route()
60
+     */
61
+    public function register_routes() {
62
+
63
+        parent::register_routes();
64
+
65
+        register_rest_route(
66
+            $this->namespace,
67
+            '/' . $this->rest_base . '/item-types',
68
+            array(
69
+                array(
70
+                    'methods'             => WP_REST_Server::READABLE,
71
+                    'callback'            => array( $this, 'get_item_types' ),
72
+                ),
73
+            )
74
+        );
75
+
76
+    }
77 77
 
78 78
     /**
79
-	 * Checks if a given request has access to read items.
79
+     * Checks if a given request has access to read items.
80 80
      * 
81
-	 *
82
-	 * @since 1.0.13
83
-	 *
84
-	 * @param WP_REST_Request $request Full details about the request.
85
-	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86
-	 */
87
-	public function get_items_permissions_check( $request ) {
81
+     *
82
+     * @since 1.0.13
83
+     *
84
+     * @param WP_REST_Request $request Full details about the request.
85
+     * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86
+     */
87
+    public function get_items_permissions_check( $request ) {
88 88
 	
89
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
90
-			return true;
91
-		}
89
+        if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
90
+            return true;
91
+        }
92 92
 
93
-		return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice items.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
93
+        return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice items.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
94 94
 
95 95
     }
96 96
     
97 97
     /**
98
-	 * Retrieves a collection of invoice items.
99
-	 *
100
-	 * @since 1.0.13
101
-	 *
102
-	 * @param WP_REST_Request $request Full details about the request.
103
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104
-	 */
105
-	public function get_items( $request ) {
98
+     * Retrieves a collection of invoice items.
99
+     *
100
+     * @since 1.0.13
101
+     *
102
+     * @param WP_REST_Request $request Full details about the request.
103
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104
+     */
105
+    public function get_items( $request ) {
106 106
 		
107
-		// Retrieve the list of registered item query parameters.
107
+        // Retrieve the list of registered item query parameters.
108 108
         $registered = $this->get_collection_params();
109 109
         
110 110
         $args       = array();
@@ -117,54 +117,54 @@  discard block
 block discarded – undo
117 117
 
118 118
         }
119 119
 
120
-		/**
121
-		 * Filters the wpinv_get_items arguments for items rest requests.
122
-		 *
123
-		 *
124
-		 * @since 1.0.13
125
-		 *
126
-		 *
127
-		 * @param array           $args    Key value array of query var to query value.
128
-		 * @param WP_REST_Request $request The request used.
129
-		 */
120
+        /**
121
+         * Filters the wpinv_get_items arguments for items rest requests.
122
+         *
123
+         *
124
+         * @since 1.0.13
125
+         *
126
+         *
127
+         * @param array           $args    Key value array of query var to query value.
128
+         * @param WP_REST_Request $request The request used.
129
+         */
130 130
         $args       = apply_filters( "wpinv_rest_get_items_arguments", $args, $request, $this );
131 131
 		
132
-		// Special args
133
-		$args[ 'return' ]   = 'objects';
134
-		$args[ 'paginate' ] = true;
132
+        // Special args
133
+        $args[ 'return' ]   = 'objects';
134
+        $args[ 'paginate' ] = true;
135 135
 
136 136
         // Run the query.
137
-		$query = wpinv_get_all_items( $args );
137
+        $query = wpinv_get_all_items( $args );
138 138
 		
139
-		// Prepare the retrieved items
140
-		$items = array();
141
-		foreach( $query->items as $item ) {
142
-
143
-			if ( ! $this->check_read_permission( $item ) ) {
144
-				continue;
145
-			}
146
-
147
-			$data       = $this->prepare_item_for_response( $item, $request );
148
-			$items[]    = $this->prepare_response_for_collection( $data );
149
-
150
-		}
151
-
152
-		// Prepare the response.
153
-		$response = rest_ensure_response( $items );
154
-		$response->header( 'X-WP-Total', (int) $query->total );
155
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
156
-
157
-		/**
158
-		 * Filters the responses for item requests.
159
-		 *
160
-		 *
161
-		 * @since 1.0.13
162
-		 *
163
-		 *
164
-		 * @param arrWP_REST_Response $response    Response object.
165
-		 * @param WP_REST_Request     $request The request used.
139
+        // Prepare the retrieved items
140
+        $items = array();
141
+        foreach( $query->items as $item ) {
142
+
143
+            if ( ! $this->check_read_permission( $item ) ) {
144
+                continue;
145
+            }
146
+
147
+            $data       = $this->prepare_item_for_response( $item, $request );
148
+            $items[]    = $this->prepare_response_for_collection( $data );
149
+
150
+        }
151
+
152
+        // Prepare the response.
153
+        $response = rest_ensure_response( $items );
154
+        $response->header( 'X-WP-Total', (int) $query->total );
155
+        $response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
156
+
157
+        /**
158
+         * Filters the responses for item requests.
159
+         *
160
+         *
161
+         * @since 1.0.13
162
+         *
163
+         *
164
+         * @param arrWP_REST_Response $response    Response object.
165
+         * @param WP_REST_Request     $request The request used.
166 166
          * @param array               $args Array of args used to retrieve the items
167
-		 */
167
+         */
168 168
         $response       = apply_filters( "wpinv_rest_items_response", $response, $request, $args );
169 169
 
170 170
         return rest_ensure_response( $response );
@@ -172,25 +172,25 @@  discard block
 block discarded – undo
172 172
     }
173 173
 
174 174
     /**
175
-	 * Get the post, if the ID is valid.
176
-	 *
177
-	 * @since 1.0.13
178
-	 *
179
-	 * @param int $item_id Supplied ID.
180
-	 * @return WPInv_Item|WP_Error Item object if ID is valid, WP_Error otherwise.
181
-	 */
182
-	protected function get_post( $item_id ) {
175
+     * Get the post, if the ID is valid.
176
+     *
177
+     * @since 1.0.13
178
+     *
179
+     * @param int $item_id Supplied ID.
180
+     * @return WPInv_Item|WP_Error Item object if ID is valid, WP_Error otherwise.
181
+     */
182
+    protected function get_post( $item_id ) {
183 183
 		
184
-		$error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid item ID.', 'invoicing' ), array( 'status' => 404 ) );
184
+        $error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid item ID.', 'invoicing' ), array( 'status' => 404 ) );
185 185
 
186 186
         // Ids start from 1
187 187
         if ( (int) $item_id <= 0 ) {
188
-			return $error;
189
-		}
188
+            return $error;
189
+        }
190 190
 
191
-		$item = wpinv_get_item_by( 'id', (int) $item_id );
192
-		if ( empty( $item ) ) {
193
-			return $error;
191
+        $item = wpinv_get_item_by( 'id', (int) $item_id );
192
+        if ( empty( $item ) ) {
193
+            return $error;
194 194
         }
195 195
 
196 196
         return $item;
@@ -198,27 +198,27 @@  discard block
 block discarded – undo
198 198
     }
199 199
 
200 200
     /**
201
-	 * Checks if a given request has access to read an invoice item.
202
-	 *
203
-	 * @since 1.0.13
204
-	 *
205
-	 * @param WP_REST_Request $request Full details about the request.
206
-	 * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
207
-	 */
208
-	public function get_item_permissions_check( $request ) {
201
+     * Checks if a given request has access to read an invoice item.
202
+     *
203
+     * @since 1.0.13
204
+     *
205
+     * @param WP_REST_Request $request Full details about the request.
206
+     * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
207
+     */
208
+    public function get_item_permissions_check( $request ) {
209 209
 
210 210
         // Retrieve the item object.
211 211
         $item = $this->get_post( $request['id'] );
212 212
         
213 213
         // Ensure it is valid.
214
-		if ( is_wp_error( $item ) ) {
215
-			return $item;
216
-		}
214
+        if ( is_wp_error( $item ) ) {
215
+            return $item;
216
+        }
217 217
 
218
-		$post_type = get_post_type_object( $this->post_type );
218
+        $post_type = get_post_type_object( $this->post_type );
219 219
 
220
-		if ( ! current_user_can(  $post_type->cap->read_post, $item->ID  ) ) {
221
-			return new WP_Error( 
220
+        if ( ! current_user_can(  $post_type->cap->read_post, $item->ID  ) ) {
221
+            return new WP_Error( 
222 222
                 'rest_cannot_edit', 
223 223
                 __( 'Sorry, you are not allowed to view this item.', 'invoicing' ), 
224 224
                 array( 
@@ -227,61 +227,61 @@  discard block
 block discarded – undo
227 227
             );
228 228
         }
229 229
 
230
-		return $this->check_read_permission( $item );
230
+        return $this->check_read_permission( $item );
231 231
     }
232 232
     
233 233
     /**
234
-	 * Checks if an item can be read.
235
-	 * 
236
-	 * An item can be read by site admins.
237
-	 *
238
-	 *
239
-	 * @since 1.0.13
240
-	 *
241
-	 * @param WPInv_Item $item WPInv_Item object.
242
-	 * @return bool Whether the post can be read.
243
-	 */
244
-	public function check_read_permission( $item ) {
245
-
246
-		// An item can be read by an admin...
247
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
248
-			return true;
249
-		}
250
-
251
-		return false;
234
+     * Checks if an item can be read.
235
+     * 
236
+     * An item can be read by site admins.
237
+     *
238
+     *
239
+     * @since 1.0.13
240
+     *
241
+     * @param WPInv_Item $item WPInv_Item object.
242
+     * @return bool Whether the post can be read.
243
+     */
244
+    public function check_read_permission( $item ) {
245
+
246
+        // An item can be read by an admin...
247
+        if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
248
+            return true;
249
+        }
250
+
251
+        return false;
252 252
     }
253 253
     
254 254
     /**
255
-	 * Retrieves a single invoice item.
256
-	 *
257
-	 * @since 1.0.13
258
-	 *
259
-	 * @param WP_REST_Request $request Full details about the request.
260
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
261
-	 */
262
-	public function get_item( $request ) {
255
+     * Retrieves a single invoice item.
256
+     *
257
+     * @since 1.0.13
258
+     *
259
+     * @param WP_REST_Request $request Full details about the request.
260
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
261
+     */
262
+    public function get_item( $request ) {
263 263
 
264 264
         // Fetch the item.
265 265
         $item = $this->get_post( $request['id'] );
266 266
         
267 267
         // Abort early if it does not exist
268
-		if ( is_wp_error( $item ) ) {
269
-			return $item;
270
-		}
271
-
272
-		// Prepare the response
273
-		$response = $this->prepare_item_for_response( $item, $request );
274
-
275
-		/**
276
-		 * Filters the responses for single invoice item requests.
277
-		 *
278
-		 *
279
-		 * @since 1.0.13
280
-		 * @var WP_HTTP_Response
281
-		 *
282
-		 * @param WP_HTTP_Response $response Response.
283
-		 * @param WP_REST_Request  $request The request used.
284
-		 */
268
+        if ( is_wp_error( $item ) ) {
269
+            return $item;
270
+        }
271
+
272
+        // Prepare the response
273
+        $response = $this->prepare_item_for_response( $item, $request );
274
+
275
+        /**
276
+         * Filters the responses for single invoice item requests.
277
+         *
278
+         *
279
+         * @since 1.0.13
280
+         * @var WP_HTTP_Response
281
+         *
282
+         * @param WP_HTTP_Response $response Response.
283
+         * @param WP_REST_Request  $request The request used.
284
+         */
285 285
         $response       = apply_filters( "wpinv_rest_get_item_response", $response, $request );
286 286
 
287 287
         return rest_ensure_response( $response );
@@ -289,26 +289,26 @@  discard block
 block discarded – undo
289 289
     }
290 290
     
291 291
     /**
292
-	 * Checks if a given request has access to create an invoice item.
293
-	 *
294
-	 * @since 1.0.13
295
-	 *
296
-	 * @param WP_REST_Request $request Full details about the request.
297
-	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
298
-	 */
299
-	public function create_item_permissions_check( $request ) {
292
+     * Checks if a given request has access to create an invoice item.
293
+     *
294
+     * @since 1.0.13
295
+     *
296
+     * @param WP_REST_Request $request Full details about the request.
297
+     * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
298
+     */
299
+    public function create_item_permissions_check( $request ) {
300 300
 	
301
-		if ( ! empty( $request['id'] ) ) {
302
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
303
-		}
301
+        if ( ! empty( $request['id'] ) ) {
302
+            return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
303
+        }
304 304
 
305
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
306
-			return true;
307
-		}
305
+        if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
306
+            return true;
307
+        }
308 308
 
309
-		$post_type = get_post_type_object( $this->post_type );
310
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
311
-			return new WP_Error( 
309
+        $post_type = get_post_type_object( $this->post_type );
310
+        if ( ! current_user_can( $post_type->cap->create_posts ) ) {
311
+            return new WP_Error( 
312 312
                 'rest_cannot_create', 
313 313
                 __( 'Sorry, you are not allowed to create invoice items as this user.', 'invoicing' ), 
314 314
                 array( 
@@ -317,253 +317,253 @@  discard block
 block discarded – undo
317 317
             );
318 318
         }
319 319
 
320
-		return true;
320
+        return true;
321 321
     }
322 322
     
323 323
     /**
324
-	 * Creates a single invoice item.
325
-	 *
326
-	 * @since 1.0.13
327
-	 *
328
-	 * @param WP_REST_Request $request Full details about the request.
329
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
330
-	 */
331
-	public function create_item( $request ) {
332
-
333
-		if ( ! empty( $request['id'] ) ) {
334
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing invoice item.', 'invoicing' ), array( 'status' => 400 ) );
335
-		}
324
+     * Creates a single invoice item.
325
+     *
326
+     * @since 1.0.13
327
+     *
328
+     * @param WP_REST_Request $request Full details about the request.
329
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
330
+     */
331
+    public function create_item( $request ) {
332
+
333
+        if ( ! empty( $request['id'] ) ) {
334
+            return new WP_Error( 'rest_item_exists', __( 'Cannot create existing invoice item.', 'invoicing' ), array( 'status' => 400 ) );
335
+        }
336 336
 
337
-		$request->set_param( 'context', 'edit' );
337
+        $request->set_param( 'context', 'edit' );
338 338
 
339
-		// Prepare the updated data.
340
-		$item_data = $this->prepare_item_for_database( $request );
339
+        // Prepare the updated data.
340
+        $item_data = $this->prepare_item_for_database( $request );
341 341
 
342
-		if ( is_wp_error( $item_data ) ) {
343
-			return $item_data;
344
-		}
342
+        if ( is_wp_error( $item_data ) ) {
343
+            return $item_data;
344
+        }
345 345
 
346
-		// Try creating the item.
346
+        // Try creating the item.
347 347
         $item = wpinv_create_item( $item_data, true );
348 348
 
349
-		if ( is_wp_error( $item ) ) {
349
+        if ( is_wp_error( $item ) ) {
350 350
             return $item;
351
-		}
352
-
353
-		// Prepare the response
354
-		$response = $this->prepare_item_for_response( $item, $request );
355
-
356
-		/**
357
-		 * Fires after a single invoice item is created or updated via the REST API.
358
-		 *
359
-		 * @since 1.0.13
360
-		 *
361
-		 * @param WPinv_Item   $item  Inserted or updated item object.
362
-		 * @param WP_REST_Request $request  Request object.
363
-		 * @param bool            $creating True when creating a post, false when updating.
364
-		 */
365
-		do_action( "wpinv_rest_insert_item", $item, $request, true );
366
-
367
-		/**
368
-		 * Filters the responses for creating single item requests.
369
-		 *
370
-		 *
371
-		 * @since 1.0.13
372
-		 *
373
-		 *
374
-		 * @param array           $item_data Invoice properties.
375
-		 * @param WP_REST_Request $request The request used.
376
-		 */
351
+        }
352
+
353
+        // Prepare the response
354
+        $response = $this->prepare_item_for_response( $item, $request );
355
+
356
+        /**
357
+         * Fires after a single invoice item is created or updated via the REST API.
358
+         *
359
+         * @since 1.0.13
360
+         *
361
+         * @param WPinv_Item   $item  Inserted or updated item object.
362
+         * @param WP_REST_Request $request  Request object.
363
+         * @param bool            $creating True when creating a post, false when updating.
364
+         */
365
+        do_action( "wpinv_rest_insert_item", $item, $request, true );
366
+
367
+        /**
368
+         * Filters the responses for creating single item requests.
369
+         *
370
+         *
371
+         * @since 1.0.13
372
+         *
373
+         *
374
+         * @param array           $item_data Invoice properties.
375
+         * @param WP_REST_Request $request The request used.
376
+         */
377 377
         $response       = apply_filters( "wpinv_rest_create_item_response", $response, $request );
378 378
 
379 379
         return rest_ensure_response( $response );
380
-	}
381
-
382
-	/**
383
-	 * Checks if a given request has access to update an item.
384
-	 *
385
-	 * @since 1.0.13
386
-	 *
387
-	 * @param WP_REST_Request $request Full details about the request.
388
-	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
389
-	 */
390
-	public function update_item_permissions_check( $request ) {
391
-
392
-		// Retrieve the item.
393
-		$item = $this->get_post( $request['id'] );
394
-		if ( is_wp_error( $item ) ) {
395
-			return $item;
396
-		}
397
-
398
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
399
-			return true;
400
-		}
401
-
402
-		return new WP_Error( 
403
-			'rest_cannot_edit', 
404
-			__( 'Sorry, you are not allowed to update this item.', 'invoicing' ), 
405
-			array( 
406
-				'status' => rest_authorization_required_code(),
407
-			)
408
-		);
409
-
410
-	}
411
-
412
-	/**
413
-	 * Updates a single item.
414
-	 *
415
-	 * @since 1.0.13
416
-	 *
417
-	 * @param WP_REST_Request $request Full details about the request.
418
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
419
-	 */
420
-	public function update_item( $request ) {
380
+    }
381
+
382
+    /**
383
+     * Checks if a given request has access to update an item.
384
+     *
385
+     * @since 1.0.13
386
+     *
387
+     * @param WP_REST_Request $request Full details about the request.
388
+     * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
389
+     */
390
+    public function update_item_permissions_check( $request ) {
391
+
392
+        // Retrieve the item.
393
+        $item = $this->get_post( $request['id'] );
394
+        if ( is_wp_error( $item ) ) {
395
+            return $item;
396
+        }
397
+
398
+        if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
399
+            return true;
400
+        }
401
+
402
+        return new WP_Error( 
403
+            'rest_cannot_edit', 
404
+            __( 'Sorry, you are not allowed to update this item.', 'invoicing' ), 
405
+            array( 
406
+                'status' => rest_authorization_required_code(),
407
+            )
408
+        );
409
+
410
+    }
411
+
412
+    /**
413
+     * Updates a single item.
414
+     *
415
+     * @since 1.0.13
416
+     *
417
+     * @param WP_REST_Request $request Full details about the request.
418
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
419
+     */
420
+    public function update_item( $request ) {
421 421
 		
422
-		// Ensure the item exists.
422
+        // Ensure the item exists.
423 423
         $valid_check = $this->get_post( $request['id'] );
424 424
         
425 425
         // Abort early if it does not exist
426
-		if ( is_wp_error( $valid_check ) ) {
427
-			return $valid_check;
428
-		}
426
+        if ( is_wp_error( $valid_check ) ) {
427
+            return $valid_check;
428
+        }
429 429
 
430
-		$request->set_param( 'context', 'edit' );
430
+        $request->set_param( 'context', 'edit' );
431 431
 
432
-		// Prepare the updated data.
433
-		$data_to_update = $this->prepare_item_for_database( $request );
432
+        // Prepare the updated data.
433
+        $data_to_update = $this->prepare_item_for_database( $request );
434 434
 
435
-		if ( is_wp_error( $data_to_update ) ) {
436
-			return $data_to_update;
437
-		}
435
+        if ( is_wp_error( $data_to_update ) ) {
436
+            return $data_to_update;
437
+        }
438 438
 
439
-		// Abort if no item data is provided
439
+        // Abort if no item data is provided
440 440
         if( empty( $data_to_update ) ) {
441 441
             return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
442 442
         }
443 443
 
444
-		// Include the item ID
445
-		$data_to_update['ID'] = $request['id'];
446
-
447
-		// Update the item
448
-		$updated_item = wpinv_update_item( $data_to_update, true );
449
-
450
-		// Incase the update operation failed...
451
-		if ( is_wp_error( $updated_item ) ) {
452
-			return $updated_item;
453
-		}
454
-
455
-		// Prepare the response
456
-		$response = $this->prepare_item_for_response( $updated_item, $request );
457
-
458
-		/** This action is documented in includes/class-wpinv-rest-item-controller.php */
459
-		do_action( "wpinv_rest_insert_item", $updated_item, $request, false );
460
-
461
-		/**
462
-		 * Filters the responses for updating single item requests.
463
-		 *
464
-		 *
465
-		 * @since 1.0.13
466
-		 *
467
-		 *
468
-		 * @param array           $item_data Item properties.
469
-		 * @param WP_REST_Request $request The request used.
470
-		 */
444
+        // Include the item ID
445
+        $data_to_update['ID'] = $request['id'];
446
+
447
+        // Update the item
448
+        $updated_item = wpinv_update_item( $data_to_update, true );
449
+
450
+        // Incase the update operation failed...
451
+        if ( is_wp_error( $updated_item ) ) {
452
+            return $updated_item;
453
+        }
454
+
455
+        // Prepare the response
456
+        $response = $this->prepare_item_for_response( $updated_item, $request );
457
+
458
+        /** This action is documented in includes/class-wpinv-rest-item-controller.php */
459
+        do_action( "wpinv_rest_insert_item", $updated_item, $request, false );
460
+
461
+        /**
462
+         * Filters the responses for updating single item requests.
463
+         *
464
+         *
465
+         * @since 1.0.13
466
+         *
467
+         *
468
+         * @param array           $item_data Item properties.
469
+         * @param WP_REST_Request $request The request used.
470
+         */
471 471
         $response       = apply_filters( "wpinv_rest_update_item_response", $response,  $data_to_update, $request );
472 472
 
473 473
         return rest_ensure_response( $response );
474
-	}
475
-
476
-	/**
477
-	 * Checks if a given request has access to delete an item.
478
-	 *
479
-	 * @since 1.0.13
480
-	 *
481
-	 * @param WP_REST_Request $request Full details about the request.
482
-	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
483
-	 */
484
-	public function delete_item_permissions_check( $request ) {
485
-
486
-		// Retrieve the item.
487
-		$item = $this->get_post( $request['id'] );
488
-		if ( is_wp_error( $item ) ) {
489
-			return $item;
490
-		}
491
-
492
-		// 
493
-
494
-		// Ensure the current user can delete the item
495
-		if (! wpinv_can_delete_item( $request['id'] ) ) {
496
-			return new WP_Error( 
474
+    }
475
+
476
+    /**
477
+     * Checks if a given request has access to delete an item.
478
+     *
479
+     * @since 1.0.13
480
+     *
481
+     * @param WP_REST_Request $request Full details about the request.
482
+     * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
483
+     */
484
+    public function delete_item_permissions_check( $request ) {
485
+
486
+        // Retrieve the item.
487
+        $item = $this->get_post( $request['id'] );
488
+        if ( is_wp_error( $item ) ) {
489
+            return $item;
490
+        }
491
+
492
+        // 
493
+
494
+        // Ensure the current user can delete the item
495
+        if (! wpinv_can_delete_item( $request['id'] ) ) {
496
+            return new WP_Error( 
497 497
                 'rest_cannot_delete', 
498 498
                 __( 'Sorry, you are not allowed to delete this item.', 'invoicing' ), 
499 499
                 array( 
500 500
                     'status' => rest_authorization_required_code(),
501 501
                 )
502 502
             );
503
-		}
504
-
505
-		return true;
506
-	}
507
-
508
-	/**
509
-	 * Deletes a single item.
510
-	 *
511
-	 * @since 1.0.13
512
-	 *
513
-	 * @param WP_REST_Request $request Full details about the request.
514
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
515
-	 */
516
-	public function delete_item( $request ) {
503
+        }
504
+
505
+        return true;
506
+    }
507
+
508
+    /**
509
+     * Deletes a single item.
510
+     *
511
+     * @since 1.0.13
512
+     *
513
+     * @param WP_REST_Request $request Full details about the request.
514
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
515
+     */
516
+    public function delete_item( $request ) {
517 517
 		
518
-		// Retrieve the item.
519
-		$item = $this->get_post( $request['id'] );
520
-		if ( is_wp_error( $item ) ) {
521
-			return $item;
522
-		}
518
+        // Retrieve the item.
519
+        $item = $this->get_post( $request['id'] );
520
+        if ( is_wp_error( $item ) ) {
521
+            return $item;
522
+        }
523 523
 
524
-		$request->set_param( 'context', 'edit' );
524
+        $request->set_param( 'context', 'edit' );
525 525
 
526
-		// Prepare the item id
527
-		$id    = $item->ID;
526
+        // Prepare the item id
527
+        $id    = $item->ID;
528 528
 
529
-		// Prepare the response
530
-		$response = $this->prepare_item_for_response( $item, $request );
529
+        // Prepare the response
530
+        $response = $this->prepare_item_for_response( $item, $request );
531 531
 
532
-		// Check if the user wants to bypass the trash...
533
-		$force_delete = (bool) $request['force'];
532
+        // Check if the user wants to bypass the trash...
533
+        $force_delete = (bool) $request['force'];
534 534
 
535
-		// Try deleting the item.
536
-		$deleted = wp_delete_post( $id, $force_delete );
535
+        // Try deleting the item.
536
+        $deleted = wp_delete_post( $id, $force_delete );
537 537
 
538
-		// Abort early if we can't delete the item.
539
-		if ( ! $deleted ) {
540
-			return new WP_Error( 'rest_cannot_delete', __( 'The item cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
541
-		}
538
+        // Abort early if we can't delete the item.
539
+        if ( ! $deleted ) {
540
+            return new WP_Error( 'rest_cannot_delete', __( 'The item cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
541
+        }
542 542
 
543
-		/**
544
-		 * Fires immediately after a single item is deleted or trashed via the REST API.
545
-		 *
546
-		 *
547
-		 * @since 1.0.13
548
-		 *
549
-		 * @param WPInv_Item    $item  The deleted or trashed item.
550
-		 * @param WP_REST_Request  $request  The request sent to the API.
551
-		 */
552
-		do_action( "wpinv_rest_delete_item", $item, $request );
543
+        /**
544
+         * Fires immediately after a single item is deleted or trashed via the REST API.
545
+         *
546
+         *
547
+         * @since 1.0.13
548
+         *
549
+         * @param WPInv_Item    $item  The deleted or trashed item.
550
+         * @param WP_REST_Request  $request  The request sent to the API.
551
+         */
552
+        do_action( "wpinv_rest_delete_item", $item, $request );
553 553
 
554
-		return $response;
554
+        return $response;
555 555
 
556
-	}
556
+    }
557 557
     
558 558
     
559 559
     /**
560
-	 * Retrieves the query params for the items collection.
561
-	 *
562
-	 * @since 1.0.13
563
-	 *
564
-	 * @return array Collection parameters.
565
-	 */
566
-	public function get_collection_params() {
560
+     * Retrieves the query params for the items collection.
561
+     *
562
+     * @since 1.0.13
563
+     *
564
+     * @return array Collection parameters.
565
+     */
566
+    public function get_collection_params() {
567 567
         
568 568
         $query_params               = array(
569 569
 
@@ -577,27 +577,27 @@  discard block
 block discarded – undo
577 577
             
578 578
             // Item types
579 579
             'type'                  => array(
580
-				'description'       => __( 'Type of items to fetch.', 'invoicing' ),
581
-				'type'              => 'array',
582
-				'default'           => wpinv_item_types(),
583
-				'items'             => array(
580
+                'description'       => __( 'Type of items to fetch.', 'invoicing' ),
581
+                'type'              => 'array',
582
+                'default'           => wpinv_item_types(),
583
+                'items'             => array(
584 584
                     'enum'          => wpinv_item_types(),
585 585
                     'type'          => 'string',
586 586
                 ),
587
-			),
587
+            ),
588 588
 			
589
-			// Number of results per page
589
+            // Number of results per page
590 590
             'limit'                 => array(
591
-				'description'       => __( 'Number of items to fetch.', 'invoicing' ),
592
-				'type'              => 'integer',
593
-				'default'           => (int) get_option( 'posts_per_page' ),
591
+                'description'       => __( 'Number of items to fetch.', 'invoicing' ),
592
+                'type'              => 'integer',
593
+                'default'           => (int) get_option( 'posts_per_page' ),
594 594
             ),
595 595
 
596 596
             // Pagination
597 597
             'page'     => array(
598
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
599
-				'type'              => 'integer',
600
-				'default'           => 1,
598
+                'description'       => __( 'Current page to fetch.', 'invoicing' ),
599
+                'type'              => 'integer',
600
+                'default'           => 1,
601 601
             ),
602 602
 
603 603
             // Exclude certain items
@@ -620,9 +620,9 @@  discard block
 block discarded – undo
620 620
                     'date',
621 621
                     'ID',
622 622
                     'modified',
623
-					'title',
624
-					'relevance',
625
-					'rand'
623
+                    'title',
624
+                    'relevance',
625
+                    'rand'
626 626
                 ),
627 627
             ),
628 628
 
@@ -632,617 +632,617 @@  discard block
 block discarded – undo
632 632
                 'type'        => 'string',
633 633
                 'default'     => 'DESC',
634 634
                 'enum'        => array( 'ASC', 'DESC' ),
635
-			),
635
+            ),
636 636
 			
637
-			// Search term
637
+            // Search term
638 638
             'search'                => array(
639
-				'description'       => __( 'Return items that match the search term.', 'invoicing' ),
640
-				'type'              => 'string',
639
+                'description'       => __( 'Return items that match the search term.', 'invoicing' ),
640
+                'type'              => 'string',
641 641
             ),
642 642
         );
643 643
 
644
-		/**
645
-		 * Filter collection parameters for the items controller.
646
-		 *
647
-		 *
648
-		 * @since 1.0.13
649
-		 *
650
-		 * @param array        $query_params JSON Schema-formatted collection parameters.
651
-		 */
652
-		return apply_filters( "wpinv_rest_items_collection_params", $query_params );
644
+        /**
645
+         * Filter collection parameters for the items controller.
646
+         *
647
+         *
648
+         * @since 1.0.13
649
+         *
650
+         * @param array        $query_params JSON Schema-formatted collection parameters.
651
+         */
652
+        return apply_filters( "wpinv_rest_items_collection_params", $query_params );
653 653
     }
654 654
     
655 655
     /**
656
-	 * Checks if a given post type can be viewed or managed.
657
-	 *
658
-	 * @since 1.0.13
659
-	 *
660
-	 * @param object|string $post_type Post type name or object.
661
-	 * @return bool Whether the post type is allowed in REST.
662
-	 */
663
-	protected function check_is_post_type_allowed( $post_type ) {
664
-		return true;
665
-	}
666
-
667
-	/**
668
-	 * Prepares a single item for create or update.
669
-	 *
670
-	 * @since 1.0.13
671
-	 *
672
-	 * @param WP_REST_Request $request Request object.
673
-	 * @return array|WP_Error Invoice Properties or WP_Error.
674
-	 */
675
-	protected function prepare_item_for_database( $request ) {
676
-		$prepared_item = new stdClass();
677
-
678
-		// Post ID.
679
-		if ( isset( $request['id'] ) ) {
680
-			$existing_item = $this->get_post( $request['id'] );
681
-			if ( is_wp_error( $existing_item ) ) {
682
-				return $existing_item;
683
-			}
684
-
685
-			$prepared_item->ID 		  = $existing_item->ID;
686
-		}
687
-
688
-		$schema = $this->get_item_schema();
689
-
690
-		// item title.
691
-		if ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) {
692
-			$prepared_item->title = sanitize_text_field( $request['name'] );
693
-		}
694
-
695
-		// item summary.
696
-		if ( ! empty( $schema['properties']['summary'] ) && isset( $request['summary'] ) ) {
697
-			$prepared_item->excerpt = wp_kses_post( $request['summary'] );
698
-		}
699
-
700
-		// item price.
701
-		if ( ! empty( $schema['properties']['price'] ) && isset( $request['price'] ) ) {
702
-			$prepared_item->price = floatval( $request['price'] );
703
-		}
704
-
705
-		// minimum price (for dynamc items).
706
-		if ( ! empty( $schema['properties']['minimum_price'] ) && isset( $request['minimum_price'] ) ) {
707
-			$prepared_item->minimum_price = floatval( $request['minimum_price'] );
708
-		}
709
-
710
-		// item status.
711
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
712
-			$prepared_item->status = 'publish' === $request['status'] ? 'publish' : 'pending';
713
-		}
714
-
715
-		// item type.
716
-		if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] ) ) {
717
-			$prepared_item->type = in_array( $request['type'], wpinv_item_types() ) ? trim( strtolower( $request['type'] ) ) : 'custom';
718
-		}
719
-
720
-		// VAT rule.
721
-		if ( ! empty( $schema['properties']['vat_rule'] ) && isset( $request['vat_rule'] ) ) {
722
-			$prepared_item->vat_rule = 'digital' === $request['vat_rule'] ? 'digital' : 'physical';
723
-		}
724
-
725
-		// Simple strings.
726
-		foreach( array( 'custom_id', 'custom_name', 'custom_singular_name' ) as $property ) {
727
-
728
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
729
-				$prepared_item->$property = sanitize_text_field( $request[$property] );
730
-			}
731
-
732
-		}
733
-
734
-		// Simple integers.
735
-		foreach( array( 'is_recurring', 'recurring_interval', 'recurring_limit', 'free_trial', 'trial_interval', 'dynamic_pricing', 'editable' ) as $property ) {
736
-
737
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
738
-				$prepared_item->$property = intval( $request[$property] );
739
-			}
740
-
741
-		}
742
-
743
-		// Time periods.
744
-		foreach( array( 'recurring_period',  'trial_period' ) as $property ) {
745
-
746
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
747
-				$prepared_item->$property = in_array( $request[$property], array( 'D', 'W', 'M', 'Y' ) ) ? trim( strtoupper( $request[$property] ) ) : 'D';
748
-			}
749
-
750
-		}
751
-
752
-		$item_data = (array) wp_unslash( $prepared_item );
753
-
754
-		/**
755
-		 * Filters an item before it is inserted via the REST API.
756
-		 *
757
-		 * @since 1.0.13
758
-		 *
759
-		 * @param array        $item_data An array of item data
760
-		 * @param WP_REST_Request $request       Request object.
761
-		 */
762
-		return apply_filters( "wpinv_rest_pre_insert_item", $item_data, $request );
763
-
764
-	}
765
-
766
-	/**
767
-	 * Prepares a single item output for response.
768
-	 *
769
-	 * @since 1.0.13
770
-	 *
771
-	 * @param WPInv_Item   $item    item object.
772
-	 * @param WP_REST_Request $request Request object.
773
-	 * @return WP_REST_Response Response object.
774
-	 */
775
-	public function prepare_item_for_response( $item, $request ) {
656
+     * Checks if a given post type can be viewed or managed.
657
+     *
658
+     * @since 1.0.13
659
+     *
660
+     * @param object|string $post_type Post type name or object.
661
+     * @return bool Whether the post type is allowed in REST.
662
+     */
663
+    protected function check_is_post_type_allowed( $post_type ) {
664
+        return true;
665
+    }
776 666
 
777
-		$GLOBALS['post'] = get_post( $item->get_ID() );
667
+    /**
668
+     * Prepares a single item for create or update.
669
+     *
670
+     * @since 1.0.13
671
+     *
672
+     * @param WP_REST_Request $request Request object.
673
+     * @return array|WP_Error Invoice Properties or WP_Error.
674
+     */
675
+    protected function prepare_item_for_database( $request ) {
676
+        $prepared_item = new stdClass();
677
+
678
+        // Post ID.
679
+        if ( isset( $request['id'] ) ) {
680
+            $existing_item = $this->get_post( $request['id'] );
681
+            if ( is_wp_error( $existing_item ) ) {
682
+                return $existing_item;
683
+            }
778 684
 
779
-		setup_postdata( $item->get_ID() );
685
+            $prepared_item->ID 		  = $existing_item->ID;
686
+        }
780 687
 
781
-		// Fetch the fields to include in this response.
782
-		$fields = $this->get_fields_for_response( $request );
688
+        $schema = $this->get_item_schema();
783 689
 
784
-		// Base fields for every item.
785
-		$data = array();
690
+        // item title.
691
+        if ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) {
692
+            $prepared_item->title = sanitize_text_field( $request['name'] );
693
+        }
786 694
 
787
-		// Set up ID
788
-		if ( rest_is_field_included( 'id', $fields ) ) {
789
-			$data['id'] = $item->get_ID();
790
-		}
695
+        // item summary.
696
+        if ( ! empty( $schema['properties']['summary'] ) && isset( $request['summary'] ) ) {
697
+            $prepared_item->excerpt = wp_kses_post( $request['summary'] );
698
+        }
791 699
 
700
+        // item price.
701
+        if ( ! empty( $schema['properties']['price'] ) && isset( $request['price'] ) ) {
702
+            $prepared_item->price = floatval( $request['price'] );
703
+        }
792 704
 
793
-		// Item properties
794
-		$item_properties = array(
795
-			'name', 'summary', 'price', 'status', 'type',
796
-			'vat_rule', 'vat_class',
797
-			'custom_id', 'custom_name', 'custom_singular_name', 
798
-			'editable'
799
-		);
705
+        // minimum price (for dynamc items).
706
+        if ( ! empty( $schema['properties']['minimum_price'] ) && isset( $request['minimum_price'] ) ) {
707
+            $prepared_item->minimum_price = floatval( $request['minimum_price'] );
708
+        }
709
+
710
+        // item status.
711
+        if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
712
+            $prepared_item->status = 'publish' === $request['status'] ? 'publish' : 'pending';
713
+        }
800 714
 
801
-		foreach( $item_properties as $property ) {
715
+        // item type.
716
+        if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] ) ) {
717
+            $prepared_item->type = in_array( $request['type'], wpinv_item_types() ) ? trim( strtolower( $request['type'] ) ) : 'custom';
718
+        }
802 719
 
803
-			if ( rest_is_field_included( $property, $fields ) && method_exists( $item, 'get_' . $property ) ) {
804
-				$data[$property] = call_user_func( array( $item, 'get_' . $property ) );
805
-			}
720
+        // VAT rule.
721
+        if ( ! empty( $schema['properties']['vat_rule'] ) && isset( $request['vat_rule'] ) ) {
722
+            $prepared_item->vat_rule = 'digital' === $request['vat_rule'] ? 'digital' : 'physical';
723
+        }
806 724
 
807
-		}
725
+        // Simple strings.
726
+        foreach( array( 'custom_id', 'custom_name', 'custom_singular_name' ) as $property ) {
808 727
 
809
-		// Dynamic pricing.
810
-		if( $item->supports_dynamic_pricing() ) {
728
+            if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
729
+                $prepared_item->$property = sanitize_text_field( $request[$property] );
730
+            }
811 731
 
812
-			if( rest_is_field_included( 'dynamic_pricing', $fields ) ) {
813
-				$data['dynamic_pricing'] = $item->get_is_dynamic_pricing();
814
-			}
732
+        }
815 733
 
816
-			if( rest_is_field_included( 'minimum_price', $fields ) ) {
817
-				$data['minimum_price'] = $item->get_minimum_price();
818
-			}
819
-		}
734
+        // Simple integers.
735
+        foreach( array( 'is_recurring', 'recurring_interval', 'recurring_limit', 'free_trial', 'trial_interval', 'dynamic_pricing', 'editable' ) as $property ) {
820 736
 
821
-		// Subscriptions.
822
-		if( rest_is_field_included( 'is_recurring', $fields ) ) {
823
-			$data['is_recurring'] = $item->get_is_recurring();
824
-		}
737
+            if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
738
+                $prepared_item->$property = intval( $request[$property] );
739
+            }
825 740
 
826
-		if( $item->is_recurring() ) {
741
+        }
827 742
 
828
-			$recurring_fields = array( 'is_recurring', 'recurring_period', 'recurring_interval', 'recurring_limit', 'free_trial' );
829
-			foreach( $recurring_fields as $field ) {
743
+        // Time periods.
744
+        foreach( array( 'recurring_period',  'trial_period' ) as $property ) {
830 745
 
831
-				if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
832
-					$data[$field] = call_user_func( array( $item, 'get_' . $field ) );
833
-				}
746
+            if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
747
+                $prepared_item->$property = in_array( $request[$property], array( 'D', 'W', 'M', 'Y' ) ) ? trim( strtoupper( $request[$property] ) ) : 'D';
748
+            }
749
+
750
+        }
751
+
752
+        $item_data = (array) wp_unslash( $prepared_item );
753
+
754
+        /**
755
+         * Filters an item before it is inserted via the REST API.
756
+         *
757
+         * @since 1.0.13
758
+         *
759
+         * @param array        $item_data An array of item data
760
+         * @param WP_REST_Request $request       Request object.
761
+         */
762
+        return apply_filters( "wpinv_rest_pre_insert_item", $item_data, $request );
763
+
764
+    }
765
+
766
+    /**
767
+     * Prepares a single item output for response.
768
+     *
769
+     * @since 1.0.13
770
+     *
771
+     * @param WPInv_Item   $item    item object.
772
+     * @param WP_REST_Request $request Request object.
773
+     * @return WP_REST_Response Response object.
774
+     */
775
+    public function prepare_item_for_response( $item, $request ) {
776
+
777
+        $GLOBALS['post'] = get_post( $item->get_ID() );
778
+
779
+        setup_postdata( $item->get_ID() );
780
+
781
+        // Fetch the fields to include in this response.
782
+        $fields = $this->get_fields_for_response( $request );
783
+
784
+        // Base fields for every item.
785
+        $data = array();
786
+
787
+        // Set up ID
788
+        if ( rest_is_field_included( 'id', $fields ) ) {
789
+            $data['id'] = $item->get_ID();
790
+        }
791
+
792
+
793
+        // Item properties
794
+        $item_properties = array(
795
+            'name', 'summary', 'price', 'status', 'type',
796
+            'vat_rule', 'vat_class',
797
+            'custom_id', 'custom_name', 'custom_singular_name', 
798
+            'editable'
799
+        );
800
+
801
+        foreach( $item_properties as $property ) {
802
+
803
+            if ( rest_is_field_included( $property, $fields ) && method_exists( $item, 'get_' . $property ) ) {
804
+                $data[$property] = call_user_func( array( $item, 'get_' . $property ) );
805
+            }
806
+
807
+        }
808
+
809
+        // Dynamic pricing.
810
+        if( $item->supports_dynamic_pricing() ) {
811
+
812
+            if( rest_is_field_included( 'dynamic_pricing', $fields ) ) {
813
+                $data['dynamic_pricing'] = $item->get_is_dynamic_pricing();
814
+            }
815
+
816
+            if( rest_is_field_included( 'minimum_price', $fields ) ) {
817
+                $data['minimum_price'] = $item->get_minimum_price();
818
+            }
819
+        }
820
+
821
+        // Subscriptions.
822
+        if( rest_is_field_included( 'is_recurring', $fields ) ) {
823
+            $data['is_recurring'] = $item->get_is_recurring();
824
+        }
825
+
826
+        if( $item->is_recurring() ) {
827
+
828
+            $recurring_fields = array( 'is_recurring', 'recurring_period', 'recurring_interval', 'recurring_limit', 'free_trial' );
829
+            foreach( $recurring_fields as $field ) {
830
+
831
+                if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
832
+                    $data[$field] = call_user_func( array( $item, 'get_' . $field ) );
833
+                }
834 834
 	
835
-			}
835
+            }
836 836
 
837
-			if( $item->has_free_trial() ) {
837
+            if( $item->has_free_trial() ) {
838 838
 
839
-				$trial_fields = array( 'trial_period', 'trial_interval' );
840
-				foreach( $trial_fields as $field ) {
839
+                $trial_fields = array( 'trial_period', 'trial_interval' );
840
+                foreach( $trial_fields as $field ) {
841 841
 
842
-					if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
843
-						$data[$field] = call_user_func( array( $item, 'get_' . $field ) );
844
-					}
842
+                    if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
843
+                        $data[$field] = call_user_func( array( $item, 'get_' . $field ) );
844
+                    }
845 845
 	
846
-				}
847
-
848
-			}
849
-
850
-		}
851
-
852
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
-		$data    = $this->add_additional_fields_to_object( $data, $request );
854
-		$data    = $this->filter_response_by_context( $data, $context );
855
-
856
-		// Wrap the data in a response object.
857
-		$response = rest_ensure_response( $data );
858
-
859
-		$links = $this->prepare_links( $item );
860
-		$response->add_links( $links );
861
-
862
-		if ( ! empty( $links['self']['href'] ) ) {
863
-			$actions = $this->get_available_actions( $item, $request );
864
-
865
-			$self = $links['self']['href'];
866
-
867
-			foreach ( $actions as $rel ) {
868
-				$response->add_link( $rel, $self );
869
-			}
870
-		}
871
-
872
-		/**
873
-		 * Filters the item data for a response.
874
-		 *
875
-		 * @since 1.0.13
876
-		 *
877
-		 * @param WP_REST_Response $response The response object.
878
-		 * @param WPInv_Item    $item  The item object.
879
-		 * @param WP_REST_Request  $request  Request object.
880
-		 */
881
-		return apply_filters( "wpinv_rest_prepare_item", $response, $item, $request );
882
-	}
883
-
884
-	/**
885
-	 * Gets an array of fields to be included on the response.
886
-	 *
887
-	 * Included fields are based on item schema and `_fields=` request argument.
888
-	 *
889
-	 * @since 1.0.13
890
-	 *
891
-	 * @param WP_REST_Request $request Full details about the request.
892
-	 * @return array Fields to be included in the response.
893
-	 */
894
-	public function get_fields_for_response( $request ) {
895
-		$schema     = $this->get_item_schema();
896
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
897
-
898
-		$additional_fields = $this->get_additional_fields();
899
-		foreach ( $additional_fields as $field_name => $field_options ) {
900
-			// For back-compat, include any field with an empty schema
901
-			// because it won't be present in $this->get_item_schema().
902
-			if ( is_null( $field_options['schema'] ) ) {
903
-				$properties[ $field_name ] = $field_options;
904
-			}
905
-		}
906
-
907
-		// Exclude fields that specify a different context than the request context.
908
-		$context = $request['context'];
909
-		if ( $context ) {
910
-			foreach ( $properties as $name => $options ) {
911
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
-					unset( $properties[ $name ] );
913
-				}
914
-			}
915
-		}
916
-
917
-		$fields = array_keys( $properties );
918
-
919
-		if ( ! isset( $request['_fields'] ) ) {
920
-			return $fields;
921
-		}
922
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
923
-		if ( 0 === count( $requested_fields ) ) {
924
-			return $fields;
925
-		}
926
-		// Trim off outside whitespace from the comma delimited list.
927
-		$requested_fields = array_map( 'trim', $requested_fields );
928
-		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
-		if ( in_array( 'id', $fields, true ) ) {
930
-			$requested_fields[] = 'id';
931
-		}
932
-		// Return the list of all requested fields which appear in the schema.
933
-		return array_reduce(
934
-			$requested_fields,
935
-			function( $response_fields, $field ) use ( $fields ) {
936
-				if ( in_array( $field, $fields, true ) ) {
937
-					$response_fields[] = $field;
938
-					return $response_fields;
939
-				}
940
-				// Check for nested fields if $field is not a direct match.
941
-				$nested_fields = explode( '.', $field );
942
-				// A nested field is included so long as its top-level property is
943
-				// present in the schema.
944
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
945
-					$response_fields[] = $field;
946
-				}
947
-				return $response_fields;
948
-			},
949
-			array()
950
-		);
951
-	}
952
-
953
-	/**
954
-	 * Retrieves the item's schema, conforming to JSON Schema.
955
-	 *
956
-	 * @since 1.0.13
957
-	 *
958
-	 * @return array Item schema data.
959
-	 */
960
-	public function get_item_schema() {
961
-
962
-		// Maybe retrieve the schema from cache.
963
-		if ( $this->schema ) {
964
-			return $this->add_additional_fields_schema( $this->schema );
965
-		}
966
-
967
-		$schema = array(
968
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
969
-			'title'      => $this->post_type,
970
-			'type'       => 'object',
971
-
972
-			// Base properties for every Item.
973
-			'properties' 		  => array(
974
-
975
-				'id'           => array(
976
-					'description' => __( 'Unique identifier for the item.', 'invoicing' ),
977
-					'type'        => 'integer',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
979
-					'readonly'    => true,
980
-				),
981
-
982
-				'name'			  => array(
983
-					'description' => __( 'The name for the item.', 'invoicing' ),
984
-					'type'        => 'string',
985
-					'context'     => array( 'view', 'edit', 'embed' ),
986
-				),
987
-
988
-				'summary'        => array(
989
-					'description' => __( 'A summary for the item.', 'invoicing' ),
990
-					'type'        => 'string',
991
-					'context'     => array( 'view', 'edit', 'embed' ),
992
-				),
993
-
994
-				'price'        => array(
995
-					'description' => __( 'The price for the item.', 'invoicing' ),
996
-					'type'        => 'number',
997
-					'context'     => array( 'view', 'edit', 'embed' ),
998
-				),
999
-
1000
-				'status'       => array(
1001
-					'description' => __( 'A named status for the item.', 'invoicing' ),
1002
-					'type'        => 'string',
1003
-					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1004
-					'context'     => array( 'view', 'edit' ),
1005
-				),
1006
-
1007
-				'type'       => array(
1008
-					'description' => __( 'The item type.', 'invoicing' ),
1009
-					'type'        => 'string',
1010
-					'enum'        => wpinv_item_types(),
1011
-					'context'     => array( 'view', 'edit', 'embed' ),
1012
-				),
1013
-
1014
-				'vat_rule'       => array(
1015
-					'description' => __( 'VAT rule applied to the item.', 'invoicing' ),
1016
-					'type'        => 'string',
1017
-					'enum'        => array( 'digital', 'physical' ),
1018
-					'context'     => array( 'view', 'edit' ),
1019
-				),
1020
-
1021
-				'vat_class'       => array(
1022
-					'description' => __( 'VAT class for the item.', 'invoicing' ),
1023
-					'type'        => 'string',
1024
-					'context'     => array( 'view', 'edit' ),
1025
-					'readonly'    => true,
1026
-				),
1027
-
1028
-				'custom_id'       => array(
1029
-					'description' => __( 'Custom id for the item.', 'invoicing' ),
1030
-					'type'        => 'string',
1031
-					'context'     => array( 'view', 'edit', 'embed' ),
1032
-				),
846
+                }
847
+
848
+            }
849
+
850
+        }
851
+
852
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
+        $data    = $this->add_additional_fields_to_object( $data, $request );
854
+        $data    = $this->filter_response_by_context( $data, $context );
855
+
856
+        // Wrap the data in a response object.
857
+        $response = rest_ensure_response( $data );
858
+
859
+        $links = $this->prepare_links( $item );
860
+        $response->add_links( $links );
861
+
862
+        if ( ! empty( $links['self']['href'] ) ) {
863
+            $actions = $this->get_available_actions( $item, $request );
864
+
865
+            $self = $links['self']['href'];
866
+
867
+            foreach ( $actions as $rel ) {
868
+                $response->add_link( $rel, $self );
869
+            }
870
+        }
871
+
872
+        /**
873
+         * Filters the item data for a response.
874
+         *
875
+         * @since 1.0.13
876
+         *
877
+         * @param WP_REST_Response $response The response object.
878
+         * @param WPInv_Item    $item  The item object.
879
+         * @param WP_REST_Request  $request  Request object.
880
+         */
881
+        return apply_filters( "wpinv_rest_prepare_item", $response, $item, $request );
882
+    }
883
+
884
+    /**
885
+     * Gets an array of fields to be included on the response.
886
+     *
887
+     * Included fields are based on item schema and `_fields=` request argument.
888
+     *
889
+     * @since 1.0.13
890
+     *
891
+     * @param WP_REST_Request $request Full details about the request.
892
+     * @return array Fields to be included in the response.
893
+     */
894
+    public function get_fields_for_response( $request ) {
895
+        $schema     = $this->get_item_schema();
896
+        $properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
897
+
898
+        $additional_fields = $this->get_additional_fields();
899
+        foreach ( $additional_fields as $field_name => $field_options ) {
900
+            // For back-compat, include any field with an empty schema
901
+            // because it won't be present in $this->get_item_schema().
902
+            if ( is_null( $field_options['schema'] ) ) {
903
+                $properties[ $field_name ] = $field_options;
904
+            }
905
+        }
906
+
907
+        // Exclude fields that specify a different context than the request context.
908
+        $context = $request['context'];
909
+        if ( $context ) {
910
+            foreach ( $properties as $name => $options ) {
911
+                if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
+                    unset( $properties[ $name ] );
913
+                }
914
+            }
915
+        }
916
+
917
+        $fields = array_keys( $properties );
918
+
919
+        if ( ! isset( $request['_fields'] ) ) {
920
+            return $fields;
921
+        }
922
+        $requested_fields = wpinv_parse_list( $request['_fields'] );
923
+        if ( 0 === count( $requested_fields ) ) {
924
+            return $fields;
925
+        }
926
+        // Trim off outside whitespace from the comma delimited list.
927
+        $requested_fields = array_map( 'trim', $requested_fields );
928
+        // Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
+        if ( in_array( 'id', $fields, true ) ) {
930
+            $requested_fields[] = 'id';
931
+        }
932
+        // Return the list of all requested fields which appear in the schema.
933
+        return array_reduce(
934
+            $requested_fields,
935
+            function( $response_fields, $field ) use ( $fields ) {
936
+                if ( in_array( $field, $fields, true ) ) {
937
+                    $response_fields[] = $field;
938
+                    return $response_fields;
939
+                }
940
+                // Check for nested fields if $field is not a direct match.
941
+                $nested_fields = explode( '.', $field );
942
+                // A nested field is included so long as its top-level property is
943
+                // present in the schema.
944
+                if ( in_array( $nested_fields[0], $fields, true ) ) {
945
+                    $response_fields[] = $field;
946
+                }
947
+                return $response_fields;
948
+            },
949
+            array()
950
+        );
951
+    }
952
+
953
+    /**
954
+     * Retrieves the item's schema, conforming to JSON Schema.
955
+     *
956
+     * @since 1.0.13
957
+     *
958
+     * @return array Item schema data.
959
+     */
960
+    public function get_item_schema() {
961
+
962
+        // Maybe retrieve the schema from cache.
963
+        if ( $this->schema ) {
964
+            return $this->add_additional_fields_schema( $this->schema );
965
+        }
966
+
967
+        $schema = array(
968
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
969
+            'title'      => $this->post_type,
970
+            'type'       => 'object',
971
+
972
+            // Base properties for every Item.
973
+            'properties' 		  => array(
974
+
975
+                'id'           => array(
976
+                    'description' => __( 'Unique identifier for the item.', 'invoicing' ),
977
+                    'type'        => 'integer',
978
+                    'context'     => array( 'view', 'edit', 'embed' ),
979
+                    'readonly'    => true,
980
+                ),
981
+
982
+                'name'			  => array(
983
+                    'description' => __( 'The name for the item.', 'invoicing' ),
984
+                    'type'        => 'string',
985
+                    'context'     => array( 'view', 'edit', 'embed' ),
986
+                ),
987
+
988
+                'summary'        => array(
989
+                    'description' => __( 'A summary for the item.', 'invoicing' ),
990
+                    'type'        => 'string',
991
+                    'context'     => array( 'view', 'edit', 'embed' ),
992
+                ),
993
+
994
+                'price'        => array(
995
+                    'description' => __( 'The price for the item.', 'invoicing' ),
996
+                    'type'        => 'number',
997
+                    'context'     => array( 'view', 'edit', 'embed' ),
998
+                ),
999
+
1000
+                'status'       => array(
1001
+                    'description' => __( 'A named status for the item.', 'invoicing' ),
1002
+                    'type'        => 'string',
1003
+                    'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1004
+                    'context'     => array( 'view', 'edit' ),
1005
+                ),
1006
+
1007
+                'type'       => array(
1008
+                    'description' => __( 'The item type.', 'invoicing' ),
1009
+                    'type'        => 'string',
1010
+                    'enum'        => wpinv_item_types(),
1011
+                    'context'     => array( 'view', 'edit', 'embed' ),
1012
+                ),
1013
+
1014
+                'vat_rule'       => array(
1015
+                    'description' => __( 'VAT rule applied to the item.', 'invoicing' ),
1016
+                    'type'        => 'string',
1017
+                    'enum'        => array( 'digital', 'physical' ),
1018
+                    'context'     => array( 'view', 'edit' ),
1019
+                ),
1020
+
1021
+                'vat_class'       => array(
1022
+                    'description' => __( 'VAT class for the item.', 'invoicing' ),
1023
+                    'type'        => 'string',
1024
+                    'context'     => array( 'view', 'edit' ),
1025
+                    'readonly'    => true,
1026
+                ),
1027
+
1028
+                'custom_id'       => array(
1029
+                    'description' => __( 'Custom id for the item.', 'invoicing' ),
1030
+                    'type'        => 'string',
1031
+                    'context'     => array( 'view', 'edit', 'embed' ),
1032
+                ),
1033 1033
 				
1034
-				'custom_name'       => array(
1035
-					'description' => __( 'Custom name for the item.', 'invoicing' ),
1036
-					'type'        => 'string',
1037
-					'context'     => array( 'view', 'edit', 'embed' ),
1038
-				),
1039
-
1040
-				'custom_singular_name'       => array(
1041
-					'description' => __( 'Custom singular name for the item.', 'invoicing' ),
1042
-					'type'        => 'string',
1043
-					'context'     => array( 'view', 'edit', 'embed' ),
1044
-				),
1045
-
1046
-				'dynamic_pricing'        => array(
1047
-					'description' => __( 'Whether the item allows a user to set their own price.', 'invoicing' ),
1048
-					'type'        => 'integer',
1049
-					'context'     => array( 'view', 'edit', 'embed' ),
1050
-				),
1051
-
1052
-				'minimum_price'        => array(
1053
-					'description' => __( 'For dynamic prices, this is the minimum price that a user can set.', 'invoicing' ),
1054
-					'type'        => 'number',
1055
-					'context'     => array( 'view', 'edit', 'embed' ),
1056
-				),
1057
-
1058
-				'is_recurring'        => array(
1059
-					'description' => __( 'Whether the item is a subscription item.', 'invoicing' ),
1060
-					'type'        => 'integer',
1061
-					'context'     => array( 'view', 'edit', 'embed' ),
1062
-				),
1063
-
1064
-				'recurring_period'        => array(
1065
-					'description' => __( 'The recurring period for a recurring item.', 'invoicing' ),
1066
-					'type'        => 'string',
1067
-					'context'     => array( 'view', 'edit', 'embed' ),
1068
-					'enum'        => array( 'D', 'W', 'M', 'Y' ),
1069
-				),
1070
-
1071
-				'recurring_interval'        => array(
1072
-					'description' => __( 'The recurring interval for a subscription item.', 'invoicing' ),
1073
-					'type'        => 'integer',
1074
-					'context'     => array( 'view', 'edit', 'embed' ),
1075
-				),
1076
-
1077
-				'recurring_limit'        => array(
1078
-					'description' => __( 'The maximum number of renewals for a subscription item.', 'invoicing' ),
1079
-					'type'        => 'integer',
1080
-					'context'     => array( 'view', 'edit', 'embed' ),
1081
-				),
1082
-
1083
-				'free_trial'        => array(
1084
-					'description' => __( 'Whether the item has a free trial period.', 'invoicing' ),
1085
-					'type'        => 'integer',
1086
-					'context'     => array( 'view', 'edit', 'embed' ),
1087
-				),
1088
-
1089
-				'trial_period'        => array(
1090
-					'description' => __( 'The trial period of a recurring item.', 'invoicing' ),
1091
-					'type'        => 'string',
1092
-					'context'     => array( 'view', 'edit', 'embed' ),
1093
-					'enum'        => array( 'D', 'W', 'M', 'Y' ),
1094
-				),
1095
-
1096
-				'trial_interval'        => array(
1097
-					'description' => __( 'The trial interval for a subscription item.', 'invoicing' ),
1098
-					'type'        => 'integer',
1099
-					'context'     => array( 'view', 'edit', 'embed' ),
1100
-				),
1101
-
1102
-				'editable'        => array(
1103
-					'description' => __( 'Whether or not the item is editable.', 'invoicing' ),
1104
-					'type'        => 'integer',
1105
-					'context'     => array( 'view', 'edit' ),
1106
-				),
1107
-
1108
-			),
1109
-		);
1110
-
1111
-		// Add helpful links to the item schem.
1112
-		$schema['links'] = $this->get_schema_links();
1113
-
1114
-		/**
1115
-		 * Filters the item schema for the REST API.
1116
-		 *
1117
-		 * Enables adding extra properties to items.
1118
-		 *
1119
-		 * @since 1.0.13
1120
-		 *
1121
-		 * @param array   $schema    The item schema.
1122
-		 */
1034
+                'custom_name'       => array(
1035
+                    'description' => __( 'Custom name for the item.', 'invoicing' ),
1036
+                    'type'        => 'string',
1037
+                    'context'     => array( 'view', 'edit', 'embed' ),
1038
+                ),
1039
+
1040
+                'custom_singular_name'       => array(
1041
+                    'description' => __( 'Custom singular name for the item.', 'invoicing' ),
1042
+                    'type'        => 'string',
1043
+                    'context'     => array( 'view', 'edit', 'embed' ),
1044
+                ),
1045
+
1046
+                'dynamic_pricing'        => array(
1047
+                    'description' => __( 'Whether the item allows a user to set their own price.', 'invoicing' ),
1048
+                    'type'        => 'integer',
1049
+                    'context'     => array( 'view', 'edit', 'embed' ),
1050
+                ),
1051
+
1052
+                'minimum_price'        => array(
1053
+                    'description' => __( 'For dynamic prices, this is the minimum price that a user can set.', 'invoicing' ),
1054
+                    'type'        => 'number',
1055
+                    'context'     => array( 'view', 'edit', 'embed' ),
1056
+                ),
1057
+
1058
+                'is_recurring'        => array(
1059
+                    'description' => __( 'Whether the item is a subscription item.', 'invoicing' ),
1060
+                    'type'        => 'integer',
1061
+                    'context'     => array( 'view', 'edit', 'embed' ),
1062
+                ),
1063
+
1064
+                'recurring_period'        => array(
1065
+                    'description' => __( 'The recurring period for a recurring item.', 'invoicing' ),
1066
+                    'type'        => 'string',
1067
+                    'context'     => array( 'view', 'edit', 'embed' ),
1068
+                    'enum'        => array( 'D', 'W', 'M', 'Y' ),
1069
+                ),
1070
+
1071
+                'recurring_interval'        => array(
1072
+                    'description' => __( 'The recurring interval for a subscription item.', 'invoicing' ),
1073
+                    'type'        => 'integer',
1074
+                    'context'     => array( 'view', 'edit', 'embed' ),
1075
+                ),
1076
+
1077
+                'recurring_limit'        => array(
1078
+                    'description' => __( 'The maximum number of renewals for a subscription item.', 'invoicing' ),
1079
+                    'type'        => 'integer',
1080
+                    'context'     => array( 'view', 'edit', 'embed' ),
1081
+                ),
1082
+
1083
+                'free_trial'        => array(
1084
+                    'description' => __( 'Whether the item has a free trial period.', 'invoicing' ),
1085
+                    'type'        => 'integer',
1086
+                    'context'     => array( 'view', 'edit', 'embed' ),
1087
+                ),
1088
+
1089
+                'trial_period'        => array(
1090
+                    'description' => __( 'The trial period of a recurring item.', 'invoicing' ),
1091
+                    'type'        => 'string',
1092
+                    'context'     => array( 'view', 'edit', 'embed' ),
1093
+                    'enum'        => array( 'D', 'W', 'M', 'Y' ),
1094
+                ),
1095
+
1096
+                'trial_interval'        => array(
1097
+                    'description' => __( 'The trial interval for a subscription item.', 'invoicing' ),
1098
+                    'type'        => 'integer',
1099
+                    'context'     => array( 'view', 'edit', 'embed' ),
1100
+                ),
1101
+
1102
+                'editable'        => array(
1103
+                    'description' => __( 'Whether or not the item is editable.', 'invoicing' ),
1104
+                    'type'        => 'integer',
1105
+                    'context'     => array( 'view', 'edit' ),
1106
+                ),
1107
+
1108
+            ),
1109
+        );
1110
+
1111
+        // Add helpful links to the item schem.
1112
+        $schema['links'] = $this->get_schema_links();
1113
+
1114
+        /**
1115
+         * Filters the item schema for the REST API.
1116
+         *
1117
+         * Enables adding extra properties to items.
1118
+         *
1119
+         * @since 1.0.13
1120
+         *
1121
+         * @param array   $schema    The item schema.
1122
+         */
1123 1123
         $schema = apply_filters( "wpinv_rest_item_schema", $schema );
1124 1124
 
1125
-		//  Cache the item schema.
1126
-		$this->schema = $schema;
1125
+        //  Cache the item schema.
1126
+        $this->schema = $schema;
1127 1127
 		
1128
-		return $this->add_additional_fields_schema( $this->schema );
1129
-	}
1130
-
1131
-	/**
1132
-	 * Retrieve Link Description Objects that should be added to the Schema for the invoices collection.
1133
-	 *
1134
-	 * @since 1.0.13
1135
-	 *
1136
-	 * @return array
1137
-	 */
1138
-	protected function get_schema_links() {
1139
-
1140
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1141
-
1142
-		$links = array();
1143
-
1144
-		$links[] = array(
1145
-			'rel'          => 'https://api.w.org/action-publish',
1146
-			'title'        => __( 'The current user can publish this item.' ),
1147
-			'href'         => $href,
1148
-			'targetSchema' => array(
1149
-				'type'       => 'object',
1150
-				'properties' => array(
1151
-					'status' => array(
1152
-						'type' => 'string',
1153
-						'enum' => array( 'publish', 'future' ),
1154
-					),
1155
-				),
1156
-			),
1157
-		);
1158
-
1159
-		return $links;
1160
-	}
1161
-
1162
-	/**
1163
-	 * Prepares links for the request.
1164
-	 *
1165
-	 * @since 1.0.13
1166
-	 *
1167
-	 * @param WPInv_Item $item Item Object.
1168
-	 * @return array Links for the given item.
1169
-	 */
1170
-	protected function prepare_links( $item ) {
1171
-
1172
-		// Prepare the base REST API endpoint for items.
1173
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1174
-
1175
-		// Entity meta.
1176
-		$links = array(
1177
-			'self'       => array(
1178
-				'href' => rest_url( trailingslashit( $base ) . $item->ID ),
1179
-			),
1180
-			'collection' => array(
1181
-				'href' => rest_url( $base ),
1182
-			),
1183
-		);
1184
-
1185
-		/**
1186
-		 * Filters the returned item links for the REST API.
1187
-		 *
1188
-		 * Enables adding extra links to item API responses.
1189
-		 *
1190
-		 * @since 1.0.13
1191
-		 *
1192
-		 * @param array   $links    Rest links.
1193
-		 */
1194
-		return apply_filters( "wpinv_rest_item_links", $links );
1195
-
1196
-	}
1197
-
1198
-	/**
1199
-	 * Get the link relations available for the post and current user.
1200
-	 *
1201
-	 * @since 1.0.13
1202
-	 *
1203
-	 * @param WPInv_Item   $item    Item object.
1204
-	 * @param WP_REST_Request $request Request object.
1205
-	 * @return array List of link relations.
1206
-	 */
1207
-	protected function get_available_actions( $item, $request ) {
1208
-
1209
-		if ( 'edit' !== $request['context'] ) {
1210
-			return array();
1211
-		}
1212
-
1213
-		$rels = array();
1214
-
1215
-		// Retrieve the post type object.
1216
-		$post_type = get_post_type_object( $item->post_type );
1217
-
1218
-		// Mark item as published.
1219
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1220
-			$rels[] = 'https://api.w.org/action-publish';
1221
-		}
1222
-
1223
-		/**
1224
-		 * Filters the available item link relations for the REST API.
1225
-		 *
1226
-		 * Enables adding extra link relation for the current user and request to item responses.
1227
-		 *
1228
-		 * @since 1.0.13
1229
-		 *
1230
-		 * @param array   $rels    Available link relations.
1231
-		 */
1232
-		return apply_filters( "wpinv_rest_item_link_relations", $rels );
1233
-	}
1234
-
1235
-	/**
1236
-	 * Handles rest requests for item types.
1237
-	 *
1238
-	 * @since 1.0.13
1239
-	 * 
1240
-	 * 
1241
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1242
-	 */
1243
-	public function get_item_types() {
1244
-		return rest_ensure_response( wpinv_get_item_types() );
1245
-	}
1128
+        return $this->add_additional_fields_schema( $this->schema );
1129
+    }
1130
+
1131
+    /**
1132
+     * Retrieve Link Description Objects that should be added to the Schema for the invoices collection.
1133
+     *
1134
+     * @since 1.0.13
1135
+     *
1136
+     * @return array
1137
+     */
1138
+    protected function get_schema_links() {
1139
+
1140
+        $href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1141
+
1142
+        $links = array();
1143
+
1144
+        $links[] = array(
1145
+            'rel'          => 'https://api.w.org/action-publish',
1146
+            'title'        => __( 'The current user can publish this item.' ),
1147
+            'href'         => $href,
1148
+            'targetSchema' => array(
1149
+                'type'       => 'object',
1150
+                'properties' => array(
1151
+                    'status' => array(
1152
+                        'type' => 'string',
1153
+                        'enum' => array( 'publish', 'future' ),
1154
+                    ),
1155
+                ),
1156
+            ),
1157
+        );
1158
+
1159
+        return $links;
1160
+    }
1161
+
1162
+    /**
1163
+     * Prepares links for the request.
1164
+     *
1165
+     * @since 1.0.13
1166
+     *
1167
+     * @param WPInv_Item $item Item Object.
1168
+     * @return array Links for the given item.
1169
+     */
1170
+    protected function prepare_links( $item ) {
1171
+
1172
+        // Prepare the base REST API endpoint for items.
1173
+        $base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1174
+
1175
+        // Entity meta.
1176
+        $links = array(
1177
+            'self'       => array(
1178
+                'href' => rest_url( trailingslashit( $base ) . $item->ID ),
1179
+            ),
1180
+            'collection' => array(
1181
+                'href' => rest_url( $base ),
1182
+            ),
1183
+        );
1184
+
1185
+        /**
1186
+         * Filters the returned item links for the REST API.
1187
+         *
1188
+         * Enables adding extra links to item API responses.
1189
+         *
1190
+         * @since 1.0.13
1191
+         *
1192
+         * @param array   $links    Rest links.
1193
+         */
1194
+        return apply_filters( "wpinv_rest_item_links", $links );
1195
+
1196
+    }
1197
+
1198
+    /**
1199
+     * Get the link relations available for the post and current user.
1200
+     *
1201
+     * @since 1.0.13
1202
+     *
1203
+     * @param WPInv_Item   $item    Item object.
1204
+     * @param WP_REST_Request $request Request object.
1205
+     * @return array List of link relations.
1206
+     */
1207
+    protected function get_available_actions( $item, $request ) {
1208
+
1209
+        if ( 'edit' !== $request['context'] ) {
1210
+            return array();
1211
+        }
1212
+
1213
+        $rels = array();
1214
+
1215
+        // Retrieve the post type object.
1216
+        $post_type = get_post_type_object( $item->post_type );
1217
+
1218
+        // Mark item as published.
1219
+        if ( current_user_can( $post_type->cap->publish_posts ) ) {
1220
+            $rels[] = 'https://api.w.org/action-publish';
1221
+        }
1222
+
1223
+        /**
1224
+         * Filters the available item link relations for the REST API.
1225
+         *
1226
+         * Enables adding extra link relation for the current user and request to item responses.
1227
+         *
1228
+         * @since 1.0.13
1229
+         *
1230
+         * @param array   $rels    Available link relations.
1231
+         */
1232
+        return apply_filters( "wpinv_rest_item_link_relations", $rels );
1233
+    }
1234
+
1235
+    /**
1236
+     * Handles rest requests for item types.
1237
+     *
1238
+     * @since 1.0.13
1239
+     * 
1240
+     * 
1241
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1242
+     */
1243
+    public function get_item_types() {
1244
+        return rest_ensure_response( wpinv_get_item_types() );
1245
+    }
1246 1246
 
1247 1247
     
1248 1248
 }
1249 1249
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +254 added lines, -254 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @since    1.0.13
9 9
  */
10 10
 
11
-if ( !defined( 'WPINC' ) ) {
11
+if (!defined('WPINC')) {
12 12
     exit;
13 13
 }
14 14
 
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
 	 *
42 42
 	 * @param string $namespace Api Namespace
43 43
 	 */
44
-	public function __construct( $namespace ) {
44
+	public function __construct($namespace) {
45 45
         
46 46
         // Set api namespace...
47 47
 		$this->namespace = $namespace;
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
 			array(
69 69
 				array(
70 70
 					'methods'             => WP_REST_Server::READABLE,
71
-					'callback'            => array( $this, 'get_item_types' ),
71
+					'callback'            => array($this, 'get_item_types'),
72 72
 				),
73 73
 			)
74 74
 		);
@@ -84,13 +84,13 @@  discard block
 block discarded – undo
84 84
 	 * @param WP_REST_Request $request Full details about the request.
85 85
 	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86 86
 	 */
87
-	public function get_items_permissions_check( $request ) {
87
+	public function get_items_permissions_check($request) {
88 88
 	
89
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
89
+		if (current_user_can('manage_options') || current_user_can('manage_invoicing')) {
90 90
 			return true;
91 91
 		}
92 92
 
93
-		return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice items.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
93
+		return new WP_Error('rest_forbidden_context', __('Sorry, you are not allowed to view invoice items.', 'invoicing'), array('status' => rest_authorization_required_code()));
94 94
 
95 95
     }
96 96
     
@@ -102,17 +102,17 @@  discard block
 block discarded – undo
102 102
 	 * @param WP_REST_Request $request Full details about the request.
103 103
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104 104
 	 */
105
-	public function get_items( $request ) {
105
+	public function get_items($request) {
106 106
 		
107 107
 		// Retrieve the list of registered item query parameters.
108 108
         $registered = $this->get_collection_params();
109 109
         
110 110
         $args       = array();
111 111
 
112
-        foreach( array_keys( $registered ) as $key ) {
112
+        foreach (array_keys($registered) as $key) {
113 113
 
114
-            if( isset( $request[ $key] ) ) {
115
-                $args[ $key ] = $request[ $key];
114
+            if (isset($request[$key])) {
115
+                $args[$key] = $request[$key];
116 116
             }
117 117
 
118 118
         }
@@ -127,32 +127,32 @@  discard block
 block discarded – undo
127 127
 		 * @param array           $args    Key value array of query var to query value.
128 128
 		 * @param WP_REST_Request $request The request used.
129 129
 		 */
130
-        $args       = apply_filters( "wpinv_rest_get_items_arguments", $args, $request, $this );
130
+        $args = apply_filters("wpinv_rest_get_items_arguments", $args, $request, $this);
131 131
 		
132 132
 		// Special args
133
-		$args[ 'return' ]   = 'objects';
134
-		$args[ 'paginate' ] = true;
133
+		$args['return']   = 'objects';
134
+		$args['paginate'] = true;
135 135
 
136 136
         // Run the query.
137
-		$query = wpinv_get_all_items( $args );
137
+		$query = wpinv_get_all_items($args);
138 138
 		
139 139
 		// Prepare the retrieved items
140 140
 		$items = array();
141
-		foreach( $query->items as $item ) {
141
+		foreach ($query->items as $item) {
142 142
 
143
-			if ( ! $this->check_read_permission( $item ) ) {
143
+			if (!$this->check_read_permission($item)) {
144 144
 				continue;
145 145
 			}
146 146
 
147
-			$data       = $this->prepare_item_for_response( $item, $request );
148
-			$items[]    = $this->prepare_response_for_collection( $data );
147
+			$data       = $this->prepare_item_for_response($item, $request);
148
+			$items[]    = $this->prepare_response_for_collection($data);
149 149
 
150 150
 		}
151 151
 
152 152
 		// Prepare the response.
153
-		$response = rest_ensure_response( $items );
154
-		$response->header( 'X-WP-Total', (int) $query->total );
155
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
153
+		$response = rest_ensure_response($items);
154
+		$response->header('X-WP-Total', (int) $query->total);
155
+		$response->header('X-WP-TotalPages', (int) $query->max_num_pages);
156 156
 
157 157
 		/**
158 158
 		 * Filters the responses for item requests.
@@ -165,9 +165,9 @@  discard block
 block discarded – undo
165 165
 		 * @param WP_REST_Request     $request The request used.
166 166
          * @param array               $args Array of args used to retrieve the items
167 167
 		 */
168
-        $response       = apply_filters( "wpinv_rest_items_response", $response, $request, $args );
168
+        $response = apply_filters("wpinv_rest_items_response", $response, $request, $args);
169 169
 
170
-        return rest_ensure_response( $response );
170
+        return rest_ensure_response($response);
171 171
         
172 172
     }
173 173
 
@@ -179,17 +179,17 @@  discard block
 block discarded – undo
179 179
 	 * @param int $item_id Supplied ID.
180 180
 	 * @return WPInv_Item|WP_Error Item object if ID is valid, WP_Error otherwise.
181 181
 	 */
182
-	protected function get_post( $item_id ) {
182
+	protected function get_post($item_id) {
183 183
 		
184
-		$error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid item ID.', 'invoicing' ), array( 'status' => 404 ) );
184
+		$error = new WP_Error('rest_item_invalid_id', __('Invalid item ID.', 'invoicing'), array('status' => 404));
185 185
 
186 186
         // Ids start from 1
187
-        if ( (int) $item_id <= 0 ) {
187
+        if ((int) $item_id <= 0) {
188 188
 			return $error;
189 189
 		}
190 190
 
191
-		$item = wpinv_get_item_by( 'id', (int) $item_id );
192
-		if ( empty( $item ) ) {
191
+		$item = wpinv_get_item_by('id', (int) $item_id);
192
+		if (empty($item)) {
193 193
 			return $error;
194 194
         }
195 195
 
@@ -205,29 +205,29 @@  discard block
 block discarded – undo
205 205
 	 * @param WP_REST_Request $request Full details about the request.
206 206
 	 * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
207 207
 	 */
208
-	public function get_item_permissions_check( $request ) {
208
+	public function get_item_permissions_check($request) {
209 209
 
210 210
         // Retrieve the item object.
211
-        $item = $this->get_post( $request['id'] );
211
+        $item = $this->get_post($request['id']);
212 212
         
213 213
         // Ensure it is valid.
214
-		if ( is_wp_error( $item ) ) {
214
+		if (is_wp_error($item)) {
215 215
 			return $item;
216 216
 		}
217 217
 
218
-		$post_type = get_post_type_object( $this->post_type );
218
+		$post_type = get_post_type_object($this->post_type);
219 219
 
220
-		if ( ! current_user_can(  $post_type->cap->read_post, $item->ID  ) ) {
220
+		if (!current_user_can($post_type->cap->read_post, $item->ID)) {
221 221
 			return new WP_Error( 
222 222
                 'rest_cannot_edit', 
223
-                __( 'Sorry, you are not allowed to view this item.', 'invoicing' ), 
223
+                __('Sorry, you are not allowed to view this item.', 'invoicing'), 
224 224
                 array( 
225 225
                     'status' => rest_authorization_required_code(),
226 226
                 )
227 227
             );
228 228
         }
229 229
 
230
-		return $this->check_read_permission( $item );
230
+		return $this->check_read_permission($item);
231 231
     }
232 232
     
233 233
     /**
@@ -241,10 +241,10 @@  discard block
 block discarded – undo
241 241
 	 * @param WPInv_Item $item WPInv_Item object.
242 242
 	 * @return bool Whether the post can be read.
243 243
 	 */
244
-	public function check_read_permission( $item ) {
244
+	public function check_read_permission($item) {
245 245
 
246 246
 		// An item can be read by an admin...
247
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
247
+		if (current_user_can('manage_options') || current_user_can('manage_invoicing')) {
248 248
 			return true;
249 249
 		}
250 250
 
@@ -259,18 +259,18 @@  discard block
 block discarded – undo
259 259
 	 * @param WP_REST_Request $request Full details about the request.
260 260
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
261 261
 	 */
262
-	public function get_item( $request ) {
262
+	public function get_item($request) {
263 263
 
264 264
         // Fetch the item.
265
-        $item = $this->get_post( $request['id'] );
265
+        $item = $this->get_post($request['id']);
266 266
         
267 267
         // Abort early if it does not exist
268
-		if ( is_wp_error( $item ) ) {
268
+		if (is_wp_error($item)) {
269 269
 			return $item;
270 270
 		}
271 271
 
272 272
 		// Prepare the response
273
-		$response = $this->prepare_item_for_response( $item, $request );
273
+		$response = $this->prepare_item_for_response($item, $request);
274 274
 
275 275
 		/**
276 276
 		 * Filters the responses for single invoice item requests.
@@ -282,9 +282,9 @@  discard block
 block discarded – undo
282 282
 		 * @param WP_HTTP_Response $response Response.
283 283
 		 * @param WP_REST_Request  $request The request used.
284 284
 		 */
285
-        $response       = apply_filters( "wpinv_rest_get_item_response", $response, $request );
285
+        $response = apply_filters("wpinv_rest_get_item_response", $response, $request);
286 286
 
287
-        return rest_ensure_response( $response );
287
+        return rest_ensure_response($response);
288 288
 
289 289
     }
290 290
     
@@ -296,21 +296,21 @@  discard block
 block discarded – undo
296 296
 	 * @param WP_REST_Request $request Full details about the request.
297 297
 	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
298 298
 	 */
299
-	public function create_item_permissions_check( $request ) {
299
+	public function create_item_permissions_check($request) {
300 300
 	
301
-		if ( ! empty( $request['id'] ) ) {
302
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
301
+		if (!empty($request['id'])) {
302
+			return new WP_Error('rest_item_exists', __('Cannot create existing item.', 'invoicing'), array('status' => 400));
303 303
 		}
304 304
 
305
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
305
+		if (current_user_can('manage_options') || current_user_can('manage_invoicing')) {
306 306
 			return true;
307 307
 		}
308 308
 
309
-		$post_type = get_post_type_object( $this->post_type );
310
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
309
+		$post_type = get_post_type_object($this->post_type);
310
+		if (!current_user_can($post_type->cap->create_posts)) {
311 311
 			return new WP_Error( 
312 312
                 'rest_cannot_create', 
313
-                __( 'Sorry, you are not allowed to create invoice items as this user.', 'invoicing' ), 
313
+                __('Sorry, you are not allowed to create invoice items as this user.', 'invoicing'), 
314 314
                 array( 
315 315
                     'status' => rest_authorization_required_code(),
316 316
                 )
@@ -328,30 +328,30 @@  discard block
 block discarded – undo
328 328
 	 * @param WP_REST_Request $request Full details about the request.
329 329
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
330 330
 	 */
331
-	public function create_item( $request ) {
331
+	public function create_item($request) {
332 332
 
333
-		if ( ! empty( $request['id'] ) ) {
334
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing invoice item.', 'invoicing' ), array( 'status' => 400 ) );
333
+		if (!empty($request['id'])) {
334
+			return new WP_Error('rest_item_exists', __('Cannot create existing invoice item.', 'invoicing'), array('status' => 400));
335 335
 		}
336 336
 
337
-		$request->set_param( 'context', 'edit' );
337
+		$request->set_param('context', 'edit');
338 338
 
339 339
 		// Prepare the updated data.
340
-		$item_data = $this->prepare_item_for_database( $request );
340
+		$item_data = $this->prepare_item_for_database($request);
341 341
 
342
-		if ( is_wp_error( $item_data ) ) {
342
+		if (is_wp_error($item_data)) {
343 343
 			return $item_data;
344 344
 		}
345 345
 
346 346
 		// Try creating the item.
347
-        $item = wpinv_create_item( $item_data, true );
347
+        $item = wpinv_create_item($item_data, true);
348 348
 
349
-		if ( is_wp_error( $item ) ) {
349
+		if (is_wp_error($item)) {
350 350
             return $item;
351 351
 		}
352 352
 
353 353
 		// Prepare the response
354
-		$response = $this->prepare_item_for_response( $item, $request );
354
+		$response = $this->prepare_item_for_response($item, $request);
355 355
 
356 356
 		/**
357 357
 		 * Fires after a single invoice item is created or updated via the REST API.
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
 		 * @param WP_REST_Request $request  Request object.
363 363
 		 * @param bool            $creating True when creating a post, false when updating.
364 364
 		 */
365
-		do_action( "wpinv_rest_insert_item", $item, $request, true );
365
+		do_action("wpinv_rest_insert_item", $item, $request, true);
366 366
 
367 367
 		/**
368 368
 		 * Filters the responses for creating single item requests.
@@ -374,9 +374,9 @@  discard block
 block discarded – undo
374 374
 		 * @param array           $item_data Invoice properties.
375 375
 		 * @param WP_REST_Request $request The request used.
376 376
 		 */
377
-        $response       = apply_filters( "wpinv_rest_create_item_response", $response, $request );
377
+        $response = apply_filters("wpinv_rest_create_item_response", $response, $request);
378 378
 
379
-        return rest_ensure_response( $response );
379
+        return rest_ensure_response($response);
380 380
 	}
381 381
 
382 382
 	/**
@@ -387,21 +387,21 @@  discard block
 block discarded – undo
387 387
 	 * @param WP_REST_Request $request Full details about the request.
388 388
 	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
389 389
 	 */
390
-	public function update_item_permissions_check( $request ) {
390
+	public function update_item_permissions_check($request) {
391 391
 
392 392
 		// Retrieve the item.
393
-		$item = $this->get_post( $request['id'] );
394
-		if ( is_wp_error( $item ) ) {
393
+		$item = $this->get_post($request['id']);
394
+		if (is_wp_error($item)) {
395 395
 			return $item;
396 396
 		}
397 397
 
398
-		if ( current_user_can( 'manage_options' ) ||  current_user_can( 'manage_invoicing' ) ) {
398
+		if (current_user_can('manage_options') || current_user_can('manage_invoicing')) {
399 399
 			return true;
400 400
 		}
401 401
 
402 402
 		return new WP_Error( 
403 403
 			'rest_cannot_edit', 
404
-			__( 'Sorry, you are not allowed to update this item.', 'invoicing' ), 
404
+			__('Sorry, you are not allowed to update this item.', 'invoicing'), 
405 405
 			array( 
406 406
 				'status' => rest_authorization_required_code(),
407 407
 			)
@@ -417,46 +417,46 @@  discard block
 block discarded – undo
417 417
 	 * @param WP_REST_Request $request Full details about the request.
418 418
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
419 419
 	 */
420
-	public function update_item( $request ) {
420
+	public function update_item($request) {
421 421
 		
422 422
 		// Ensure the item exists.
423
-        $valid_check = $this->get_post( $request['id'] );
423
+        $valid_check = $this->get_post($request['id']);
424 424
         
425 425
         // Abort early if it does not exist
426
-		if ( is_wp_error( $valid_check ) ) {
426
+		if (is_wp_error($valid_check)) {
427 427
 			return $valid_check;
428 428
 		}
429 429
 
430
-		$request->set_param( 'context', 'edit' );
430
+		$request->set_param('context', 'edit');
431 431
 
432 432
 		// Prepare the updated data.
433
-		$data_to_update = $this->prepare_item_for_database( $request );
433
+		$data_to_update = $this->prepare_item_for_database($request);
434 434
 
435
-		if ( is_wp_error( $data_to_update ) ) {
435
+		if (is_wp_error($data_to_update)) {
436 436
 			return $data_to_update;
437 437
 		}
438 438
 
439 439
 		// Abort if no item data is provided
440
-        if( empty( $data_to_update ) ) {
441
-            return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
440
+        if (empty($data_to_update)) {
441
+            return new WP_Error('missing_data', __('An update request cannot be empty.', 'invoicing'));
442 442
         }
443 443
 
444 444
 		// Include the item ID
445 445
 		$data_to_update['ID'] = $request['id'];
446 446
 
447 447
 		// Update the item
448
-		$updated_item = wpinv_update_item( $data_to_update, true );
448
+		$updated_item = wpinv_update_item($data_to_update, true);
449 449
 
450 450
 		// Incase the update operation failed...
451
-		if ( is_wp_error( $updated_item ) ) {
451
+		if (is_wp_error($updated_item)) {
452 452
 			return $updated_item;
453 453
 		}
454 454
 
455 455
 		// Prepare the response
456
-		$response = $this->prepare_item_for_response( $updated_item, $request );
456
+		$response = $this->prepare_item_for_response($updated_item, $request);
457 457
 
458 458
 		/** This action is documented in includes/class-wpinv-rest-item-controller.php */
459
-		do_action( "wpinv_rest_insert_item", $updated_item, $request, false );
459
+		do_action("wpinv_rest_insert_item", $updated_item, $request, false);
460 460
 
461 461
 		/**
462 462
 		 * Filters the responses for updating single item requests.
@@ -468,9 +468,9 @@  discard block
 block discarded – undo
468 468
 		 * @param array           $item_data Item properties.
469 469
 		 * @param WP_REST_Request $request The request used.
470 470
 		 */
471
-        $response       = apply_filters( "wpinv_rest_update_item_response", $response,  $data_to_update, $request );
471
+        $response = apply_filters("wpinv_rest_update_item_response", $response, $data_to_update, $request);
472 472
 
473
-        return rest_ensure_response( $response );
473
+        return rest_ensure_response($response);
474 474
 	}
475 475
 
476 476
 	/**
@@ -481,21 +481,21 @@  discard block
 block discarded – undo
481 481
 	 * @param WP_REST_Request $request Full details about the request.
482 482
 	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
483 483
 	 */
484
-	public function delete_item_permissions_check( $request ) {
484
+	public function delete_item_permissions_check($request) {
485 485
 
486 486
 		// Retrieve the item.
487
-		$item = $this->get_post( $request['id'] );
488
-		if ( is_wp_error( $item ) ) {
487
+		$item = $this->get_post($request['id']);
488
+		if (is_wp_error($item)) {
489 489
 			return $item;
490 490
 		}
491 491
 
492 492
 		// 
493 493
 
494 494
 		// Ensure the current user can delete the item
495
-		if (! wpinv_can_delete_item( $request['id'] ) ) {
495
+		if (!wpinv_can_delete_item($request['id'])) {
496 496
 			return new WP_Error( 
497 497
                 'rest_cannot_delete', 
498
-                __( 'Sorry, you are not allowed to delete this item.', 'invoicing' ), 
498
+                __('Sorry, you are not allowed to delete this item.', 'invoicing'), 
499 499
                 array( 
500 500
                     'status' => rest_authorization_required_code(),
501 501
                 )
@@ -513,31 +513,31 @@  discard block
 block discarded – undo
513 513
 	 * @param WP_REST_Request $request Full details about the request.
514 514
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
515 515
 	 */
516
-	public function delete_item( $request ) {
516
+	public function delete_item($request) {
517 517
 		
518 518
 		// Retrieve the item.
519
-		$item = $this->get_post( $request['id'] );
520
-		if ( is_wp_error( $item ) ) {
519
+		$item = $this->get_post($request['id']);
520
+		if (is_wp_error($item)) {
521 521
 			return $item;
522 522
 		}
523 523
 
524
-		$request->set_param( 'context', 'edit' );
524
+		$request->set_param('context', 'edit');
525 525
 
526 526
 		// Prepare the item id
527
-		$id    = $item->ID;
527
+		$id = $item->ID;
528 528
 
529 529
 		// Prepare the response
530
-		$response = $this->prepare_item_for_response( $item, $request );
530
+		$response = $this->prepare_item_for_response($item, $request);
531 531
 
532 532
 		// Check if the user wants to bypass the trash...
533 533
 		$force_delete = (bool) $request['force'];
534 534
 
535 535
 		// Try deleting the item.
536
-		$deleted = wp_delete_post( $id, $force_delete );
536
+		$deleted = wp_delete_post($id, $force_delete);
537 537
 
538 538
 		// Abort early if we can't delete the item.
539
-		if ( ! $deleted ) {
540
-			return new WP_Error( 'rest_cannot_delete', __( 'The item cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
539
+		if (!$deleted) {
540
+			return new WP_Error('rest_cannot_delete', __('The item cannot be deleted.', 'invoicing'), array('status' => 500));
541 541
 		}
542 542
 
543 543
 		/**
@@ -549,7 +549,7 @@  discard block
 block discarded – undo
549 549
 		 * @param WPInv_Item    $item  The deleted or trashed item.
550 550
 		 * @param WP_REST_Request  $request  The request sent to the API.
551 551
 		 */
552
-		do_action( "wpinv_rest_delete_item", $item, $request );
552
+		do_action("wpinv_rest_delete_item", $item, $request);
553 553
 
554 554
 		return $response;
555 555
 
@@ -565,19 +565,19 @@  discard block
 block discarded – undo
565 565
 	 */
566 566
 	public function get_collection_params() {
567 567
         
568
-        $query_params               = array(
568
+        $query_params = array(
569 569
 
570 570
             // Invoice status.
571 571
             'status'                => array(
572 572
                 'default'           => 'publish',
573
-                'description'       => __( 'Limit result set to items assigned one or more statuses.', 'invoicing' ),
573
+                'description'       => __('Limit result set to items assigned one or more statuses.', 'invoicing'),
574 574
                 'type'              => 'array',
575
-                'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
575
+                'sanitize_callback' => array($this, 'sanitize_post_statuses'),
576 576
             ),
577 577
             
578 578
             // Item types
579 579
             'type'                  => array(
580
-				'description'       => __( 'Type of items to fetch.', 'invoicing' ),
580
+				'description'       => __('Type of items to fetch.', 'invoicing'),
581 581
 				'type'              => 'array',
582 582
 				'default'           => wpinv_item_types(),
583 583
 				'items'             => array(
@@ -588,21 +588,21 @@  discard block
 block discarded – undo
588 588
 			
589 589
 			// Number of results per page
590 590
             'limit'                 => array(
591
-				'description'       => __( 'Number of items to fetch.', 'invoicing' ),
591
+				'description'       => __('Number of items to fetch.', 'invoicing'),
592 592
 				'type'              => 'integer',
593
-				'default'           => (int) get_option( 'posts_per_page' ),
593
+				'default'           => (int) get_option('posts_per_page'),
594 594
             ),
595 595
 
596 596
             // Pagination
597 597
             'page'     => array(
598
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
598
+				'description'       => __('Current page to fetch.', 'invoicing'),
599 599
 				'type'              => 'integer',
600 600
 				'default'           => 1,
601 601
             ),
602 602
 
603 603
             // Exclude certain items
604 604
             'exclude'  => array(
605
-                'description' => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
605
+                'description' => __('Ensure result set excludes specific IDs.', 'invoicing'),
606 606
                 'type'        => 'array',
607 607
                 'items'       => array(
608 608
                     'type' => 'integer',
@@ -612,7 +612,7 @@  discard block
 block discarded – undo
612 612
 
613 613
             // Order items by
614 614
             'orderby'  => array(
615
-                'description' => __( 'Sort items by object attribute.', 'invoicing' ),
615
+                'description' => __('Sort items by object attribute.', 'invoicing'),
616 616
                 'type'        => 'string',
617 617
                 'default'     => 'date',
618 618
                 'enum'        => array(
@@ -628,15 +628,15 @@  discard block
 block discarded – undo
628 628
 
629 629
             // How to order
630 630
             'order'    => array(
631
-                'description' => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
631
+                'description' => __('Order sort attribute ascending or descending.', 'invoicing'),
632 632
                 'type'        => 'string',
633 633
                 'default'     => 'DESC',
634
-                'enum'        => array( 'ASC', 'DESC' ),
634
+                'enum'        => array('ASC', 'DESC'),
635 635
 			),
636 636
 			
637 637
 			// Search term
638 638
             'search'                => array(
639
-				'description'       => __( 'Return items that match the search term.', 'invoicing' ),
639
+				'description'       => __('Return items that match the search term.', 'invoicing'),
640 640
 				'type'              => 'string',
641 641
             ),
642 642
         );
@@ -649,7 +649,7 @@  discard block
 block discarded – undo
649 649
 		 *
650 650
 		 * @param array        $query_params JSON Schema-formatted collection parameters.
651 651
 		 */
652
-		return apply_filters( "wpinv_rest_items_collection_params", $query_params );
652
+		return apply_filters("wpinv_rest_items_collection_params", $query_params);
653 653
     }
654 654
     
655 655
     /**
@@ -660,7 +660,7 @@  discard block
 block discarded – undo
660 660
 	 * @param object|string $post_type Post type name or object.
661 661
 	 * @return bool Whether the post type is allowed in REST.
662 662
 	 */
663
-	protected function check_is_post_type_allowed( $post_type ) {
663
+	protected function check_is_post_type_allowed($post_type) {
664 664
 		return true;
665 665
 	}
666 666
 
@@ -672,84 +672,84 @@  discard block
 block discarded – undo
672 672
 	 * @param WP_REST_Request $request Request object.
673 673
 	 * @return array|WP_Error Invoice Properties or WP_Error.
674 674
 	 */
675
-	protected function prepare_item_for_database( $request ) {
675
+	protected function prepare_item_for_database($request) {
676 676
 		$prepared_item = new stdClass();
677 677
 
678 678
 		// Post ID.
679
-		if ( isset( $request['id'] ) ) {
680
-			$existing_item = $this->get_post( $request['id'] );
681
-			if ( is_wp_error( $existing_item ) ) {
679
+		if (isset($request['id'])) {
680
+			$existing_item = $this->get_post($request['id']);
681
+			if (is_wp_error($existing_item)) {
682 682
 				return $existing_item;
683 683
 			}
684 684
 
685
-			$prepared_item->ID 		  = $existing_item->ID;
685
+			$prepared_item->ID = $existing_item->ID;
686 686
 		}
687 687
 
688 688
 		$schema = $this->get_item_schema();
689 689
 
690 690
 		// item title.
691
-		if ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) {
692
-			$prepared_item->title = sanitize_text_field( $request['name'] );
691
+		if (!empty($schema['properties']['name']) && isset($request['name'])) {
692
+			$prepared_item->title = sanitize_text_field($request['name']);
693 693
 		}
694 694
 
695 695
 		// item summary.
696
-		if ( ! empty( $schema['properties']['summary'] ) && isset( $request['summary'] ) ) {
697
-			$prepared_item->excerpt = wp_kses_post( $request['summary'] );
696
+		if (!empty($schema['properties']['summary']) && isset($request['summary'])) {
697
+			$prepared_item->excerpt = wp_kses_post($request['summary']);
698 698
 		}
699 699
 
700 700
 		// item price.
701
-		if ( ! empty( $schema['properties']['price'] ) && isset( $request['price'] ) ) {
702
-			$prepared_item->price = floatval( $request['price'] );
701
+		if (!empty($schema['properties']['price']) && isset($request['price'])) {
702
+			$prepared_item->price = floatval($request['price']);
703 703
 		}
704 704
 
705 705
 		// minimum price (for dynamc items).
706
-		if ( ! empty( $schema['properties']['minimum_price'] ) && isset( $request['minimum_price'] ) ) {
707
-			$prepared_item->minimum_price = floatval( $request['minimum_price'] );
706
+		if (!empty($schema['properties']['minimum_price']) && isset($request['minimum_price'])) {
707
+			$prepared_item->minimum_price = floatval($request['minimum_price']);
708 708
 		}
709 709
 
710 710
 		// item status.
711
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
711
+		if (!empty($schema['properties']['status']) && isset($request['status'])) {
712 712
 			$prepared_item->status = 'publish' === $request['status'] ? 'publish' : 'pending';
713 713
 		}
714 714
 
715 715
 		// item type.
716
-		if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] ) ) {
717
-			$prepared_item->type = in_array( $request['type'], wpinv_item_types() ) ? trim( strtolower( $request['type'] ) ) : 'custom';
716
+		if (!empty($schema['properties']['type']) && isset($request['type'])) {
717
+			$prepared_item->type = in_array($request['type'], wpinv_item_types()) ? trim(strtolower($request['type'])) : 'custom';
718 718
 		}
719 719
 
720 720
 		// VAT rule.
721
-		if ( ! empty( $schema['properties']['vat_rule'] ) && isset( $request['vat_rule'] ) ) {
721
+		if (!empty($schema['properties']['vat_rule']) && isset($request['vat_rule'])) {
722 722
 			$prepared_item->vat_rule = 'digital' === $request['vat_rule'] ? 'digital' : 'physical';
723 723
 		}
724 724
 
725 725
 		// Simple strings.
726
-		foreach( array( 'custom_id', 'custom_name', 'custom_singular_name' ) as $property ) {
726
+		foreach (array('custom_id', 'custom_name', 'custom_singular_name') as $property) {
727 727
 
728
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
729
-				$prepared_item->$property = sanitize_text_field( $request[$property] );
728
+			if (!empty($schema['properties'][$property]) && isset($request[$property])) {
729
+				$prepared_item->$property = sanitize_text_field($request[$property]);
730 730
 			}
731 731
 
732 732
 		}
733 733
 
734 734
 		// Simple integers.
735
-		foreach( array( 'is_recurring', 'recurring_interval', 'recurring_limit', 'free_trial', 'trial_interval', 'dynamic_pricing', 'editable' ) as $property ) {
735
+		foreach (array('is_recurring', 'recurring_interval', 'recurring_limit', 'free_trial', 'trial_interval', 'dynamic_pricing', 'editable') as $property) {
736 736
 
737
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
738
-				$prepared_item->$property = intval( $request[$property] );
737
+			if (!empty($schema['properties'][$property]) && isset($request[$property])) {
738
+				$prepared_item->$property = intval($request[$property]);
739 739
 			}
740 740
 
741 741
 		}
742 742
 
743 743
 		// Time periods.
744
-		foreach( array( 'recurring_period',  'trial_period' ) as $property ) {
744
+		foreach (array('recurring_period', 'trial_period') as $property) {
745 745
 
746
-			if ( ! empty( $schema['properties'][$property] ) && isset( $request[$property] ) ) {
747
-				$prepared_item->$property = in_array( $request[$property], array( 'D', 'W', 'M', 'Y' ) ) ? trim( strtoupper( $request[$property] ) ) : 'D';
746
+			if (!empty($schema['properties'][$property]) && isset($request[$property])) {
747
+				$prepared_item->$property = in_array($request[$property], array('D', 'W', 'M', 'Y')) ? trim(strtoupper($request[$property])) : 'D';
748 748
 			}
749 749
 
750 750
 		}
751 751
 
752
-		$item_data = (array) wp_unslash( $prepared_item );
752
+		$item_data = (array) wp_unslash($prepared_item);
753 753
 
754 754
 		/**
755 755
 		 * Filters an item before it is inserted via the REST API.
@@ -759,7 +759,7 @@  discard block
 block discarded – undo
759 759
 		 * @param array        $item_data An array of item data
760 760
 		 * @param WP_REST_Request $request       Request object.
761 761
 		 */
762
-		return apply_filters( "wpinv_rest_pre_insert_item", $item_data, $request );
762
+		return apply_filters("wpinv_rest_pre_insert_item", $item_data, $request);
763 763
 
764 764
 	}
765 765
 
@@ -772,20 +772,20 @@  discard block
 block discarded – undo
772 772
 	 * @param WP_REST_Request $request Request object.
773 773
 	 * @return WP_REST_Response Response object.
774 774
 	 */
775
-	public function prepare_item_for_response( $item, $request ) {
775
+	public function prepare_item_for_response($item, $request) {
776 776
 
777
-		$GLOBALS['post'] = get_post( $item->get_ID() );
777
+		$GLOBALS['post'] = get_post($item->get_ID());
778 778
 
779
-		setup_postdata( $item->get_ID() );
779
+		setup_postdata($item->get_ID());
780 780
 
781 781
 		// Fetch the fields to include in this response.
782
-		$fields = $this->get_fields_for_response( $request );
782
+		$fields = $this->get_fields_for_response($request);
783 783
 
784 784
 		// Base fields for every item.
785 785
 		$data = array();
786 786
 
787 787
 		// Set up ID
788
-		if ( rest_is_field_included( 'id', $fields ) ) {
788
+		if (rest_is_field_included('id', $fields)) {
789 789
 			$data['id'] = $item->get_ID();
790 790
 		}
791 791
 
@@ -798,49 +798,49 @@  discard block
 block discarded – undo
798 798
 			'editable'
799 799
 		);
800 800
 
801
-		foreach( $item_properties as $property ) {
801
+		foreach ($item_properties as $property) {
802 802
 
803
-			if ( rest_is_field_included( $property, $fields ) && method_exists( $item, 'get_' . $property ) ) {
804
-				$data[$property] = call_user_func( array( $item, 'get_' . $property ) );
803
+			if (rest_is_field_included($property, $fields) && method_exists($item, 'get_' . $property)) {
804
+				$data[$property] = call_user_func(array($item, 'get_' . $property));
805 805
 			}
806 806
 
807 807
 		}
808 808
 
809 809
 		// Dynamic pricing.
810
-		if( $item->supports_dynamic_pricing() ) {
810
+		if ($item->supports_dynamic_pricing()) {
811 811
 
812
-			if( rest_is_field_included( 'dynamic_pricing', $fields ) ) {
812
+			if (rest_is_field_included('dynamic_pricing', $fields)) {
813 813
 				$data['dynamic_pricing'] = $item->get_is_dynamic_pricing();
814 814
 			}
815 815
 
816
-			if( rest_is_field_included( 'minimum_price', $fields ) ) {
816
+			if (rest_is_field_included('minimum_price', $fields)) {
817 817
 				$data['minimum_price'] = $item->get_minimum_price();
818 818
 			}
819 819
 		}
820 820
 
821 821
 		// Subscriptions.
822
-		if( rest_is_field_included( 'is_recurring', $fields ) ) {
822
+		if (rest_is_field_included('is_recurring', $fields)) {
823 823
 			$data['is_recurring'] = $item->get_is_recurring();
824 824
 		}
825 825
 
826
-		if( $item->is_recurring() ) {
826
+		if ($item->is_recurring()) {
827 827
 
828
-			$recurring_fields = array( 'is_recurring', 'recurring_period', 'recurring_interval', 'recurring_limit', 'free_trial' );
829
-			foreach( $recurring_fields as $field ) {
828
+			$recurring_fields = array('is_recurring', 'recurring_period', 'recurring_interval', 'recurring_limit', 'free_trial');
829
+			foreach ($recurring_fields as $field) {
830 830
 
831
-				if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
832
-					$data[$field] = call_user_func( array( $item, 'get_' . $field ) );
831
+				if (rest_is_field_included($field, $fields) && method_exists($item, 'get_' . $field)) {
832
+					$data[$field] = call_user_func(array($item, 'get_' . $field));
833 833
 				}
834 834
 	
835 835
 			}
836 836
 
837
-			if( $item->has_free_trial() ) {
837
+			if ($item->has_free_trial()) {
838 838
 
839
-				$trial_fields = array( 'trial_period', 'trial_interval' );
840
-				foreach( $trial_fields as $field ) {
839
+				$trial_fields = array('trial_period', 'trial_interval');
840
+				foreach ($trial_fields as $field) {
841 841
 
842
-					if ( rest_is_field_included( $field, $fields ) && method_exists( $item, 'get_' . $field ) ) {
843
-						$data[$field] = call_user_func( array( $item, 'get_' . $field ) );
842
+					if (rest_is_field_included($field, $fields) && method_exists($item, 'get_' . $field)) {
843
+						$data[$field] = call_user_func(array($item, 'get_' . $field));
844 844
 					}
845 845
 	
846 846
 				}
@@ -849,23 +849,23 @@  discard block
 block discarded – undo
849 849
 
850 850
 		}
851 851
 
852
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
-		$data    = $this->add_additional_fields_to_object( $data, $request );
854
-		$data    = $this->filter_response_by_context( $data, $context );
852
+		$context = !empty($request['context']) ? $request['context'] : 'view';
853
+		$data    = $this->add_additional_fields_to_object($data, $request);
854
+		$data    = $this->filter_response_by_context($data, $context);
855 855
 
856 856
 		// Wrap the data in a response object.
857
-		$response = rest_ensure_response( $data );
857
+		$response = rest_ensure_response($data);
858 858
 
859
-		$links = $this->prepare_links( $item );
860
-		$response->add_links( $links );
859
+		$links = $this->prepare_links($item);
860
+		$response->add_links($links);
861 861
 
862
-		if ( ! empty( $links['self']['href'] ) ) {
863
-			$actions = $this->get_available_actions( $item, $request );
862
+		if (!empty($links['self']['href'])) {
863
+			$actions = $this->get_available_actions($item, $request);
864 864
 
865 865
 			$self = $links['self']['href'];
866 866
 
867
-			foreach ( $actions as $rel ) {
868
-				$response->add_link( $rel, $self );
867
+			foreach ($actions as $rel) {
868
+				$response->add_link($rel, $self);
869 869
 			}
870 870
 		}
871 871
 
@@ -878,7 +878,7 @@  discard block
 block discarded – undo
878 878
 		 * @param WPInv_Item    $item  The item object.
879 879
 		 * @param WP_REST_Request  $request  Request object.
880 880
 		 */
881
-		return apply_filters( "wpinv_rest_prepare_item", $response, $item, $request );
881
+		return apply_filters("wpinv_rest_prepare_item", $response, $item, $request);
882 882
 	}
883 883
 
884 884
 	/**
@@ -891,57 +891,57 @@  discard block
 block discarded – undo
891 891
 	 * @param WP_REST_Request $request Full details about the request.
892 892
 	 * @return array Fields to be included in the response.
893 893
 	 */
894
-	public function get_fields_for_response( $request ) {
894
+	public function get_fields_for_response($request) {
895 895
 		$schema     = $this->get_item_schema();
896
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
896
+		$properties = isset($schema['properties']) ? $schema['properties'] : array();
897 897
 
898 898
 		$additional_fields = $this->get_additional_fields();
899
-		foreach ( $additional_fields as $field_name => $field_options ) {
899
+		foreach ($additional_fields as $field_name => $field_options) {
900 900
 			// For back-compat, include any field with an empty schema
901 901
 			// because it won't be present in $this->get_item_schema().
902
-			if ( is_null( $field_options['schema'] ) ) {
903
-				$properties[ $field_name ] = $field_options;
902
+			if (is_null($field_options['schema'])) {
903
+				$properties[$field_name] = $field_options;
904 904
 			}
905 905
 		}
906 906
 
907 907
 		// Exclude fields that specify a different context than the request context.
908 908
 		$context = $request['context'];
909
-		if ( $context ) {
910
-			foreach ( $properties as $name => $options ) {
911
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
-					unset( $properties[ $name ] );
909
+		if ($context) {
910
+			foreach ($properties as $name => $options) {
911
+				if (!empty($options['context']) && !in_array($context, $options['context'], true)) {
912
+					unset($properties[$name]);
913 913
 				}
914 914
 			}
915 915
 		}
916 916
 
917
-		$fields = array_keys( $properties );
917
+		$fields = array_keys($properties);
918 918
 
919
-		if ( ! isset( $request['_fields'] ) ) {
919
+		if (!isset($request['_fields'])) {
920 920
 			return $fields;
921 921
 		}
922
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
923
-		if ( 0 === count( $requested_fields ) ) {
922
+		$requested_fields = wpinv_parse_list($request['_fields']);
923
+		if (0 === count($requested_fields)) {
924 924
 			return $fields;
925 925
 		}
926 926
 		// Trim off outside whitespace from the comma delimited list.
927
-		$requested_fields = array_map( 'trim', $requested_fields );
927
+		$requested_fields = array_map('trim', $requested_fields);
928 928
 		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
-		if ( in_array( 'id', $fields, true ) ) {
929
+		if (in_array('id', $fields, true)) {
930 930
 			$requested_fields[] = 'id';
931 931
 		}
932 932
 		// Return the list of all requested fields which appear in the schema.
933 933
 		return array_reduce(
934 934
 			$requested_fields,
935
-			function( $response_fields, $field ) use ( $fields ) {
936
-				if ( in_array( $field, $fields, true ) ) {
935
+			function($response_fields, $field) use ($fields) {
936
+				if (in_array($field, $fields, true)) {
937 937
 					$response_fields[] = $field;
938 938
 					return $response_fields;
939 939
 				}
940 940
 				// Check for nested fields if $field is not a direct match.
941
-				$nested_fields = explode( '.', $field );
941
+				$nested_fields = explode('.', $field);
942 942
 				// A nested field is included so long as its top-level property is
943 943
 				// present in the schema.
944
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
944
+				if (in_array($nested_fields[0], $fields, true)) {
945 945
 					$response_fields[] = $field;
946 946
 				}
947 947
 				return $response_fields;
@@ -960,8 +960,8 @@  discard block
 block discarded – undo
960 960
 	public function get_item_schema() {
961 961
 
962 962
 		// Maybe retrieve the schema from cache.
963
-		if ( $this->schema ) {
964
-			return $this->add_additional_fields_schema( $this->schema );
963
+		if ($this->schema) {
964
+			return $this->add_additional_fields_schema($this->schema);
965 965
 		}
966 966
 
967 967
 		$schema = array(
@@ -973,136 +973,136 @@  discard block
 block discarded – undo
973 973
 			'properties' 		  => array(
974 974
 
975 975
 				'id'           => array(
976
-					'description' => __( 'Unique identifier for the item.', 'invoicing' ),
976
+					'description' => __('Unique identifier for the item.', 'invoicing'),
977 977
 					'type'        => 'integer',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
978
+					'context'     => array('view', 'edit', 'embed'),
979 979
 					'readonly'    => true,
980 980
 				),
981 981
 
982 982
 				'name'			  => array(
983
-					'description' => __( 'The name for the item.', 'invoicing' ),
983
+					'description' => __('The name for the item.', 'invoicing'),
984 984
 					'type'        => 'string',
985
-					'context'     => array( 'view', 'edit', 'embed' ),
985
+					'context'     => array('view', 'edit', 'embed'),
986 986
 				),
987 987
 
988 988
 				'summary'        => array(
989
-					'description' => __( 'A summary for the item.', 'invoicing' ),
989
+					'description' => __('A summary for the item.', 'invoicing'),
990 990
 					'type'        => 'string',
991
-					'context'     => array( 'view', 'edit', 'embed' ),
991
+					'context'     => array('view', 'edit', 'embed'),
992 992
 				),
993 993
 
994 994
 				'price'        => array(
995
-					'description' => __( 'The price for the item.', 'invoicing' ),
995
+					'description' => __('The price for the item.', 'invoicing'),
996 996
 					'type'        => 'number',
997
-					'context'     => array( 'view', 'edit', 'embed' ),
997
+					'context'     => array('view', 'edit', 'embed'),
998 998
 				),
999 999
 
1000 1000
 				'status'       => array(
1001
-					'description' => __( 'A named status for the item.', 'invoicing' ),
1001
+					'description' => __('A named status for the item.', 'invoicing'),
1002 1002
 					'type'        => 'string',
1003
-					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1004
-					'context'     => array( 'view', 'edit' ),
1003
+					'enum'        => array_keys(get_post_stati(array('internal' => false))),
1004
+					'context'     => array('view', 'edit'),
1005 1005
 				),
1006 1006
 
1007 1007
 				'type'       => array(
1008
-					'description' => __( 'The item type.', 'invoicing' ),
1008
+					'description' => __('The item type.', 'invoicing'),
1009 1009
 					'type'        => 'string',
1010 1010
 					'enum'        => wpinv_item_types(),
1011
-					'context'     => array( 'view', 'edit', 'embed' ),
1011
+					'context'     => array('view', 'edit', 'embed'),
1012 1012
 				),
1013 1013
 
1014 1014
 				'vat_rule'       => array(
1015
-					'description' => __( 'VAT rule applied to the item.', 'invoicing' ),
1015
+					'description' => __('VAT rule applied to the item.', 'invoicing'),
1016 1016
 					'type'        => 'string',
1017
-					'enum'        => array( 'digital', 'physical' ),
1018
-					'context'     => array( 'view', 'edit' ),
1017
+					'enum'        => array('digital', 'physical'),
1018
+					'context'     => array('view', 'edit'),
1019 1019
 				),
1020 1020
 
1021 1021
 				'vat_class'       => array(
1022
-					'description' => __( 'VAT class for the item.', 'invoicing' ),
1022
+					'description' => __('VAT class for the item.', 'invoicing'),
1023 1023
 					'type'        => 'string',
1024
-					'context'     => array( 'view', 'edit' ),
1024
+					'context'     => array('view', 'edit'),
1025 1025
 					'readonly'    => true,
1026 1026
 				),
1027 1027
 
1028 1028
 				'custom_id'       => array(
1029
-					'description' => __( 'Custom id for the item.', 'invoicing' ),
1029
+					'description' => __('Custom id for the item.', 'invoicing'),
1030 1030
 					'type'        => 'string',
1031
-					'context'     => array( 'view', 'edit', 'embed' ),
1031
+					'context'     => array('view', 'edit', 'embed'),
1032 1032
 				),
1033 1033
 				
1034 1034
 				'custom_name'       => array(
1035
-					'description' => __( 'Custom name for the item.', 'invoicing' ),
1035
+					'description' => __('Custom name for the item.', 'invoicing'),
1036 1036
 					'type'        => 'string',
1037
-					'context'     => array( 'view', 'edit', 'embed' ),
1037
+					'context'     => array('view', 'edit', 'embed'),
1038 1038
 				),
1039 1039
 
1040 1040
 				'custom_singular_name'       => array(
1041
-					'description' => __( 'Custom singular name for the item.', 'invoicing' ),
1041
+					'description' => __('Custom singular name for the item.', 'invoicing'),
1042 1042
 					'type'        => 'string',
1043
-					'context'     => array( 'view', 'edit', 'embed' ),
1043
+					'context'     => array('view', 'edit', 'embed'),
1044 1044
 				),
1045 1045
 
1046 1046
 				'dynamic_pricing'        => array(
1047
-					'description' => __( 'Whether the item allows a user to set their own price.', 'invoicing' ),
1047
+					'description' => __('Whether the item allows a user to set their own price.', 'invoicing'),
1048 1048
 					'type'        => 'integer',
1049
-					'context'     => array( 'view', 'edit', 'embed' ),
1049
+					'context'     => array('view', 'edit', 'embed'),
1050 1050
 				),
1051 1051
 
1052 1052
 				'minimum_price'        => array(
1053
-					'description' => __( 'For dynamic prices, this is the minimum price that a user can set.', 'invoicing' ),
1053
+					'description' => __('For dynamic prices, this is the minimum price that a user can set.', 'invoicing'),
1054 1054
 					'type'        => 'number',
1055
-					'context'     => array( 'view', 'edit', 'embed' ),
1055
+					'context'     => array('view', 'edit', 'embed'),
1056 1056
 				),
1057 1057
 
1058 1058
 				'is_recurring'        => array(
1059
-					'description' => __( 'Whether the item is a subscription item.', 'invoicing' ),
1059
+					'description' => __('Whether the item is a subscription item.', 'invoicing'),
1060 1060
 					'type'        => 'integer',
1061
-					'context'     => array( 'view', 'edit', 'embed' ),
1061
+					'context'     => array('view', 'edit', 'embed'),
1062 1062
 				),
1063 1063
 
1064 1064
 				'recurring_period'        => array(
1065
-					'description' => __( 'The recurring period for a recurring item.', 'invoicing' ),
1065
+					'description' => __('The recurring period for a recurring item.', 'invoicing'),
1066 1066
 					'type'        => 'string',
1067
-					'context'     => array( 'view', 'edit', 'embed' ),
1068
-					'enum'        => array( 'D', 'W', 'M', 'Y' ),
1067
+					'context'     => array('view', 'edit', 'embed'),
1068
+					'enum'        => array('D', 'W', 'M', 'Y'),
1069 1069
 				),
1070 1070
 
1071 1071
 				'recurring_interval'        => array(
1072
-					'description' => __( 'The recurring interval for a subscription item.', 'invoicing' ),
1072
+					'description' => __('The recurring interval for a subscription item.', 'invoicing'),
1073 1073
 					'type'        => 'integer',
1074
-					'context'     => array( 'view', 'edit', 'embed' ),
1074
+					'context'     => array('view', 'edit', 'embed'),
1075 1075
 				),
1076 1076
 
1077 1077
 				'recurring_limit'        => array(
1078
-					'description' => __( 'The maximum number of renewals for a subscription item.', 'invoicing' ),
1078
+					'description' => __('The maximum number of renewals for a subscription item.', 'invoicing'),
1079 1079
 					'type'        => 'integer',
1080
-					'context'     => array( 'view', 'edit', 'embed' ),
1080
+					'context'     => array('view', 'edit', 'embed'),
1081 1081
 				),
1082 1082
 
1083 1083
 				'free_trial'        => array(
1084
-					'description' => __( 'Whether the item has a free trial period.', 'invoicing' ),
1084
+					'description' => __('Whether the item has a free trial period.', 'invoicing'),
1085 1085
 					'type'        => 'integer',
1086
-					'context'     => array( 'view', 'edit', 'embed' ),
1086
+					'context'     => array('view', 'edit', 'embed'),
1087 1087
 				),
1088 1088
 
1089 1089
 				'trial_period'        => array(
1090
-					'description' => __( 'The trial period of a recurring item.', 'invoicing' ),
1090
+					'description' => __('The trial period of a recurring item.', 'invoicing'),
1091 1091
 					'type'        => 'string',
1092
-					'context'     => array( 'view', 'edit', 'embed' ),
1093
-					'enum'        => array( 'D', 'W', 'M', 'Y' ),
1092
+					'context'     => array('view', 'edit', 'embed'),
1093
+					'enum'        => array('D', 'W', 'M', 'Y'),
1094 1094
 				),
1095 1095
 
1096 1096
 				'trial_interval'        => array(
1097
-					'description' => __( 'The trial interval for a subscription item.', 'invoicing' ),
1097
+					'description' => __('The trial interval for a subscription item.', 'invoicing'),
1098 1098
 					'type'        => 'integer',
1099
-					'context'     => array( 'view', 'edit', 'embed' ),
1099
+					'context'     => array('view', 'edit', 'embed'),
1100 1100
 				),
1101 1101
 
1102 1102
 				'editable'        => array(
1103
-					'description' => __( 'Whether or not the item is editable.', 'invoicing' ),
1103
+					'description' => __('Whether or not the item is editable.', 'invoicing'),
1104 1104
 					'type'        => 'integer',
1105
-					'context'     => array( 'view', 'edit' ),
1105
+					'context'     => array('view', 'edit'),
1106 1106
 				),
1107 1107
 
1108 1108
 			),
@@ -1120,12 +1120,12 @@  discard block
 block discarded – undo
1120 1120
 		 *
1121 1121
 		 * @param array   $schema    The item schema.
1122 1122
 		 */
1123
-        $schema = apply_filters( "wpinv_rest_item_schema", $schema );
1123
+        $schema = apply_filters("wpinv_rest_item_schema", $schema);
1124 1124
 
1125 1125
 		//  Cache the item schema.
1126 1126
 		$this->schema = $schema;
1127 1127
 		
1128
-		return $this->add_additional_fields_schema( $this->schema );
1128
+		return $this->add_additional_fields_schema($this->schema);
1129 1129
 	}
1130 1130
 
1131 1131
 	/**
@@ -1137,20 +1137,20 @@  discard block
 block discarded – undo
1137 1137
 	 */
1138 1138
 	protected function get_schema_links() {
1139 1139
 
1140
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1140
+		$href = rest_url("{$this->namespace}/{$this->rest_base}/{id}");
1141 1141
 
1142 1142
 		$links = array();
1143 1143
 
1144 1144
 		$links[] = array(
1145 1145
 			'rel'          => 'https://api.w.org/action-publish',
1146
-			'title'        => __( 'The current user can publish this item.' ),
1146
+			'title'        => __('The current user can publish this item.'),
1147 1147
 			'href'         => $href,
1148 1148
 			'targetSchema' => array(
1149 1149
 				'type'       => 'object',
1150 1150
 				'properties' => array(
1151 1151
 					'status' => array(
1152 1152
 						'type' => 'string',
1153
-						'enum' => array( 'publish', 'future' ),
1153
+						'enum' => array('publish', 'future'),
1154 1154
 					),
1155 1155
 				),
1156 1156
 			),
@@ -1167,18 +1167,18 @@  discard block
 block discarded – undo
1167 1167
 	 * @param WPInv_Item $item Item Object.
1168 1168
 	 * @return array Links for the given item.
1169 1169
 	 */
1170
-	protected function prepare_links( $item ) {
1170
+	protected function prepare_links($item) {
1171 1171
 
1172 1172
 		// Prepare the base REST API endpoint for items.
1173
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1173
+		$base = sprintf('%s/%s', $this->namespace, $this->rest_base);
1174 1174
 
1175 1175
 		// Entity meta.
1176 1176
 		$links = array(
1177 1177
 			'self'       => array(
1178
-				'href' => rest_url( trailingslashit( $base ) . $item->ID ),
1178
+				'href' => rest_url(trailingslashit($base) . $item->ID),
1179 1179
 			),
1180 1180
 			'collection' => array(
1181
-				'href' => rest_url( $base ),
1181
+				'href' => rest_url($base),
1182 1182
 			),
1183 1183
 		);
1184 1184
 
@@ -1191,7 +1191,7 @@  discard block
 block discarded – undo
1191 1191
 		 *
1192 1192
 		 * @param array   $links    Rest links.
1193 1193
 		 */
1194
-		return apply_filters( "wpinv_rest_item_links", $links );
1194
+		return apply_filters("wpinv_rest_item_links", $links);
1195 1195
 
1196 1196
 	}
1197 1197
 
@@ -1204,19 +1204,19 @@  discard block
 block discarded – undo
1204 1204
 	 * @param WP_REST_Request $request Request object.
1205 1205
 	 * @return array List of link relations.
1206 1206
 	 */
1207
-	protected function get_available_actions( $item, $request ) {
1207
+	protected function get_available_actions($item, $request) {
1208 1208
 
1209
-		if ( 'edit' !== $request['context'] ) {
1209
+		if ('edit' !== $request['context']) {
1210 1210
 			return array();
1211 1211
 		}
1212 1212
 
1213 1213
 		$rels = array();
1214 1214
 
1215 1215
 		// Retrieve the post type object.
1216
-		$post_type = get_post_type_object( $item->post_type );
1216
+		$post_type = get_post_type_object($item->post_type);
1217 1217
 
1218 1218
 		// Mark item as published.
1219
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1219
+		if (current_user_can($post_type->cap->publish_posts)) {
1220 1220
 			$rels[] = 'https://api.w.org/action-publish';
1221 1221
 		}
1222 1222
 
@@ -1229,7 +1229,7 @@  discard block
 block discarded – undo
1229 1229
 		 *
1230 1230
 		 * @param array   $rels    Available link relations.
1231 1231
 		 */
1232
-		return apply_filters( "wpinv_rest_item_link_relations", $rels );
1232
+		return apply_filters("wpinv_rest_item_link_relations", $rels);
1233 1233
 	}
1234 1234
 
1235 1235
 	/**
@@ -1241,7 +1241,7 @@  discard block
 block discarded – undo
1241 1241
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1242 1242
 	 */
1243 1243
 	public function get_item_types() {
1244
-		return rest_ensure_response( wpinv_get_item_types() );
1244
+		return rest_ensure_response(wpinv_get_item_types());
1245 1245
 	}
1246 1246
 
1247 1247
     
Please login to merge, or discard this patch.
includes/class-wpinv-api.php 2 patches
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -52,14 +52,14 @@
 block discarded – undo
52 52
     }
53 53
 
54 54
 
55
-	/**
56
-	 * Registers routes
57
-	 *
55
+    /**
56
+     * Registers routes
57
+     *
58 58
      * @since 1.0.13
59
-	 */
60
-	public function register_rest_routes() {
59
+     */
60
+    public function register_rest_routes() {
61 61
 
62
-		// Invoices.
62
+        // Invoices.
63 63
         $this->invoices_controller->register_routes();
64 64
         
65 65
         // Items.
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  */
8 8
  
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
10
+if (!defined('WPINC')) {
11 11
     exit;
12 12
 }
13 13
 
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
     /**
20 20
      * @param string A prefix for our REST routes
21 21
      */
22
-    public $api_namespace    = '';
22
+    public $api_namespace = '';
23 23
 
24 24
     /**
25 25
      * @param WPInv_REST_Invoice_Controller Invoices controller
@@ -37,18 +37,18 @@  discard block
 block discarded – undo
37 37
      * @since 1.0.13
38 38
      * Sets the API namespace and inits hooks
39 39
      */
40
-    public function __construct( $api_namespace = 'invoicing/v1' ) {
40
+    public function __construct($api_namespace = 'invoicing/v1') {
41 41
 
42 42
         // Include controllers and related files
43 43
         $this->includes();
44 44
 
45 45
         // Set up class variables
46
-        $this->api_namespace       = apply_filters( 'wpinv_rest_api_namespace', $api_namespace );
47
-        $this->invoices_controller = new WPInv_REST_Invoice_Controller( $this->api_namespace );
48
-        $this->items_controller    = new WPInv_REST_Items_Controller( $this->api_namespace );
46
+        $this->api_namespace       = apply_filters('wpinv_rest_api_namespace', $api_namespace);
47
+        $this->invoices_controller = new WPInv_REST_Invoice_Controller($this->api_namespace);
48
+        $this->items_controller    = new WPInv_REST_Items_Controller($this->api_namespace);
49 49
 
50 50
         //Register REST routes
51
-        add_action( 'rest_api_init', array( $this, 'register_rest_routes' ) );
51
+        add_action('rest_api_init', array($this, 'register_rest_routes'));
52 52
     }
53 53
 
54 54
 
@@ -76,10 +76,10 @@  discard block
 block discarded – undo
76 76
     protected function includes() {
77 77
         
78 78
         // Invoices
79
-        require_once( WPINV_PLUGIN_DIR . 'includes/api/class-wpinv-rest-invoice-controller.php' );
79
+        require_once(WPINV_PLUGIN_DIR . 'includes/api/class-wpinv-rest-invoice-controller.php');
80 80
 
81 81
         // Items
82
-        require_once( WPINV_PLUGIN_DIR . 'includes/api/class-wpinv-rest-items-controller.php' );
82
+        require_once(WPINV_PLUGIN_DIR . 'includes/api/class-wpinv-rest-items-controller.php');
83 83
 
84 84
     }
85 85
     
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-invoice-controller.php 2 patches
Indentation   +1114 added lines, -1114 removed lines patch added patch discarded remove patch
@@ -20,31 +20,31 @@  discard block
 block discarded – undo
20 20
 class WPInv_REST_Invoice_Controller extends WP_REST_Posts_Controller {
21 21
 
22 22
     /**
23
-	 * Post type.
24
-	 *
25
-	 * @var string
26
-	 */
27
-	protected $post_type = 'wpi_invoice';
23
+     * Post type.
24
+     *
25
+     * @var string
26
+     */
27
+    protected $post_type = 'wpi_invoice';
28 28
 	
29
-	/**
30
-	 * Cached results of get_item_schema.
31
-	 *
32
-	 * @since 1.0.13
33
-	 * @var array
34
-	 */
35
-	protected $schema;
29
+    /**
30
+     * Cached results of get_item_schema.
31
+     *
32
+     * @since 1.0.13
33
+     * @var array
34
+     */
35
+    protected $schema;
36 36
 
37 37
     /**
38
-	 * Constructor.
39
-	 *
40
-	 * @since 1.0.13
41
-	 *
42
-	 * @param string $namespace Api Namespace
43
-	 */
44
-	public function __construct( $namespace ) {
38
+     * Constructor.
39
+     *
40
+     * @since 1.0.13
41
+     *
42
+     * @param string $namespace Api Namespace
43
+     */
44
+    public function __construct( $namespace ) {
45 45
         
46 46
         // Set api namespace...
47
-		$this->namespace = $namespace;
47
+        $this->namespace = $namespace;
48 48
 
49 49
         // ... and the rest base
50 50
         $this->rest_base = 'invoices';
@@ -52,39 +52,39 @@  discard block
 block discarded – undo
52 52
     }
53 53
     
54 54
     /**
55
-	 * Checks if a given request has access to read invoices.
55
+     * Checks if a given request has access to read invoices.
56 56
      * 
57
-	 *
58
-	 * @since 1.0.13
59
-	 *
60
-	 * @param WP_REST_Request $request Full details about the request.
61
-	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
62
-	 */
63
-	public function get_items_permissions_check( $request ) {
57
+     *
58
+     * @since 1.0.13
59
+     *
60
+     * @param WP_REST_Request $request Full details about the request.
61
+     * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
62
+     */
63
+    public function get_items_permissions_check( $request ) {
64 64
 	
65 65
         $post_type = get_post_type_object( $this->post_type );
66 66
 
67
-		if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {
68
-			return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit invoices.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
69
-		}
67
+        if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {
68
+            return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit invoices.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
69
+        }
70 70
 
71
-		// Read checks will be evaluated on a per invoice basis
71
+        // Read checks will be evaluated on a per invoice basis
72 72
 
73
-		return true;
73
+        return true;
74 74
 
75 75
     }
76 76
     
77 77
     /**
78
-	 * Retrieves a collection of invoices.
79
-	 *
80
-	 * @since 1.0.13
81
-	 *
82
-	 * @param WP_REST_Request $request Full details about the request.
83
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
84
-	 */
85
-	public function get_items( $request ) {
78
+     * Retrieves a collection of invoices.
79
+     *
80
+     * @since 1.0.13
81
+     *
82
+     * @param WP_REST_Request $request Full details about the request.
83
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
84
+     */
85
+    public function get_items( $request ) {
86 86
 		
87
-		// Retrieve the list of registered invoice query parameters.
87
+        // Retrieve the list of registered invoice query parameters.
88 88
         $registered = $this->get_collection_params();
89 89
         
90 90
         $args       = array();
@@ -97,54 +97,54 @@  discard block
 block discarded – undo
97 97
 
98 98
         }
99 99
 
100
-		/**
101
-		 * Filters the wpinv_get_invoices arguments for invoices requests.
102
-		 *
103
-		 *
104
-		 * @since 1.0.13
105
-		 *
106
-		 *
107
-		 * @param array           $args    Key value array of query var to query value.
108
-		 * @param WP_REST_Request $request The request used.
109
-		 */
100
+        /**
101
+         * Filters the wpinv_get_invoices arguments for invoices requests.
102
+         *
103
+         *
104
+         * @since 1.0.13
105
+         *
106
+         *
107
+         * @param array           $args    Key value array of query var to query value.
108
+         * @param WP_REST_Request $request The request used.
109
+         */
110 110
         $args       = apply_filters( "wpinv_rest_get_invoices_arguments", $args, $request, $this );
111 111
 		
112
-		// Special args
113
-		$args[ 'return' ]   = 'objects';
114
-		$args[ 'paginate' ] = true;
112
+        // Special args
113
+        $args[ 'return' ]   = 'objects';
114
+        $args[ 'paginate' ] = true;
115 115
 
116 116
         // Run the query.
117
-		$query = wpinv_get_invoices( $args );
117
+        $query = wpinv_get_invoices( $args );
118 118
 		
119
-		// Prepare the retrieved invoices
120
-		$invoices = array();
121
-		foreach( $query->invoices as $invoice ) {
122
-
123
-			if ( ! $this->check_read_permission( $invoice ) ) {
124
-				continue;
125
-			}
126
-
127
-			$data       = $this->prepare_item_for_response( $invoice, $request );
128
-			$invoices[] = $this->prepare_response_for_collection( $data );
129
-
130
-		}
131
-
132
-		// Prepare the response.
133
-		$response = rest_ensure_response( $invoices );
134
-		$response->header( 'X-WP-Total', (int) $query->total );
135
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
136
-
137
-		/**
138
-		 * Filters the responses for invoices requests.
139
-		 *
140
-		 *
141
-		 * @since 1.0.13
142
-		 *
143
-		 *
144
-		 * @param arrWP_REST_Response $response    Response object.
145
-		 * @param WP_REST_Request     $request The request used.
119
+        // Prepare the retrieved invoices
120
+        $invoices = array();
121
+        foreach( $query->invoices as $invoice ) {
122
+
123
+            if ( ! $this->check_read_permission( $invoice ) ) {
124
+                continue;
125
+            }
126
+
127
+            $data       = $this->prepare_item_for_response( $invoice, $request );
128
+            $invoices[] = $this->prepare_response_for_collection( $data );
129
+
130
+        }
131
+
132
+        // Prepare the response.
133
+        $response = rest_ensure_response( $invoices );
134
+        $response->header( 'X-WP-Total', (int) $query->total );
135
+        $response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
136
+
137
+        /**
138
+         * Filters the responses for invoices requests.
139
+         *
140
+         *
141
+         * @since 1.0.13
142
+         *
143
+         *
144
+         * @param arrWP_REST_Response $response    Response object.
145
+         * @param WP_REST_Request     $request The request used.
146 146
          * @param array               $args Array of args used to retrieve the invoices
147
-		 */
147
+         */
148 148
         $response       = apply_filters( "wpinv_rest_invoices_response", $response, $request, $args );
149 149
 
150 150
         return rest_ensure_response( $response );
@@ -152,25 +152,25 @@  discard block
 block discarded – undo
152 152
     }
153 153
 
154 154
     /**
155
-	 * Get the post, if the ID is valid.
156
-	 *
157
-	 * @since 1.0.13
158
-	 *
159
-	 * @param int $invoice_id Supplied ID.
160
-	 * @return WPInv_Invoice|WP_Error Invoice object if ID is valid, WP_Error otherwise.
161
-	 */
162
-	protected function get_post( $invoice_id ) {
155
+     * Get the post, if the ID is valid.
156
+     *
157
+     * @since 1.0.13
158
+     *
159
+     * @param int $invoice_id Supplied ID.
160
+     * @return WPInv_Invoice|WP_Error Invoice object if ID is valid, WP_Error otherwise.
161
+     */
162
+    protected function get_post( $invoice_id ) {
163 163
 		
164
-		$error     = new WP_Error( 'rest_invoice_invalid_id', __( 'Invalid invoice ID.', 'invoicing' ), array( 'status' => 404 ) );
164
+        $error     = new WP_Error( 'rest_invoice_invalid_id', __( 'Invalid invoice ID.', 'invoicing' ), array( 'status' => 404 ) );
165 165
 
166 166
         // Ids start from 1
167 167
         if ( (int) $invoice_id <= 0 ) {
168
-			return $error;
169
-		}
168
+            return $error;
169
+        }
170 170
 
171
-		$invoice = wpinv_get_invoice( (int) $invoice_id );
172
-		if ( empty( $invoice ) ) {
173
-			return $error;
171
+        $invoice = wpinv_get_invoice( (int) $invoice_id );
172
+        if ( empty( $invoice ) ) {
173
+            return $error;
174 174
         }
175 175
 
176 176
         return $invoice;
@@ -178,77 +178,77 @@  discard block
 block discarded – undo
178 178
     }
179 179
 
180 180
     /**
181
-	 * Checks if a given request has access to read an invoice.
182
-	 *
183
-	 * @since 1.0.13
184
-	 *
185
-	 * @param WP_REST_Request $request Full details about the request.
186
-	 * @return bool|WP_Error True if the request has read access for the invoice, WP_Error object otherwise.
187
-	 */
188
-	public function get_item_permissions_check( $request ) {
181
+     * Checks if a given request has access to read an invoice.
182
+     *
183
+     * @since 1.0.13
184
+     *
185
+     * @param WP_REST_Request $request Full details about the request.
186
+     * @return bool|WP_Error True if the request has read access for the invoice, WP_Error object otherwise.
187
+     */
188
+    public function get_item_permissions_check( $request ) {
189 189
 
190 190
         // Retrieve the invoice object.
191 191
         $invoice = $this->get_post( $request['id'] );
192 192
         
193 193
         // Ensure it is valid.
194
-		if ( is_wp_error( $invoice ) ) {
195
-			return $invoice;
196
-		}
194
+        if ( is_wp_error( $invoice ) ) {
195
+            return $invoice;
196
+        }
197 197
 
198
-		if ( $invoice ) {
199
-			return $this->check_read_permission( $invoice );
200
-		}
198
+        if ( $invoice ) {
199
+            return $this->check_read_permission( $invoice );
200
+        }
201 201
 
202
-		return true;
202
+        return true;
203 203
     }
204 204
     
205 205
     /**
206
-	 * Checks if an invoice can be read.
207
-	 * 
208
-	 * An invoice can be read by site admins and owners of the invoice
209
-	 *
210
-	 *
211
-	 * @since 1.0.13
212
-	 *
213
-	 * @param WPInv_Invoice $invoice WPInv_Invoice object.
214
-	 * @return bool Whether the post can be read.
215
-	 */
216
-	public function check_read_permission( $invoice ) {
217
-		return wpinv_user_can_view_invoice( $invoice->ID );
206
+     * Checks if an invoice can be read.
207
+     * 
208
+     * An invoice can be read by site admins and owners of the invoice
209
+     *
210
+     *
211
+     * @since 1.0.13
212
+     *
213
+     * @param WPInv_Invoice $invoice WPInv_Invoice object.
214
+     * @return bool Whether the post can be read.
215
+     */
216
+    public function check_read_permission( $invoice ) {
217
+        return wpinv_user_can_view_invoice( $invoice->ID );
218 218
     }
219 219
     
220 220
     /**
221
-	 * Retrieves a single invoice.
222
-	 *
223
-	 * @since 1.0.13
224
-	 *
225
-	 * @param WP_REST_Request $request Full details about the request.
226
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
227
-	 */
228
-	public function get_item( $request ) {
221
+     * Retrieves a single invoice.
222
+     *
223
+     * @since 1.0.13
224
+     *
225
+     * @param WP_REST_Request $request Full details about the request.
226
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
227
+     */
228
+    public function get_item( $request ) {
229 229
 
230 230
         // Fetch the invoice.
231 231
         $invoice = $this->get_post( $request['id'] );
232 232
         
233 233
         // Abort early if it does not exist
234
-		if ( is_wp_error( $invoice ) ) {
235
-			return $invoice;
236
-		}
237
-
238
-		// Prepare the response
239
-		$response = $this->prepare_item_for_response( $invoice, $request );
240
-		$response->link_header( 'alternate', esc_url( $invoice->get_view_url() ), array( 'type' => 'text/html' ) );
241
-
242
-		/**
243
-		 * Filters the responses for single invoice requests.
244
-		 *
245
-		 *
246
-		 * @since 1.0.13
247
-		 * @var WP_HTTP_Response
248
-		 *
249
-		 * @param WP_HTTP_Response $response Response.
250
-		 * @param WP_REST_Request  $request The request used.
251
-		 */
234
+        if ( is_wp_error( $invoice ) ) {
235
+            return $invoice;
236
+        }
237
+
238
+        // Prepare the response
239
+        $response = $this->prepare_item_for_response( $invoice, $request );
240
+        $response->link_header( 'alternate', esc_url( $invoice->get_view_url() ), array( 'type' => 'text/html' ) );
241
+
242
+        /**
243
+         * Filters the responses for single invoice requests.
244
+         *
245
+         *
246
+         * @since 1.0.13
247
+         * @var WP_HTTP_Response
248
+         *
249
+         * @param WP_HTTP_Response $response Response.
250
+         * @param WP_REST_Request  $request The request used.
251
+         */
252 252
         $response       = apply_filters( "wpinv_rest_get_invoice_response", $response, $request );
253 253
 
254 254
         return rest_ensure_response( $response );
@@ -256,23 +256,23 @@  discard block
 block discarded – undo
256 256
     }
257 257
     
258 258
     /**
259
-	 * Checks if a given request has access to create an invoice.
260
-	 *
261
-	 * @since 1.0.13
262
-	 *
263
-	 * @param WP_REST_Request $request Full details about the request.
264
-	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
265
-	 */
266
-	public function create_item_permissions_check( $request ) {
259
+     * Checks if a given request has access to create an invoice.
260
+     *
261
+     * @since 1.0.13
262
+     *
263
+     * @param WP_REST_Request $request Full details about the request.
264
+     * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
265
+     */
266
+    public function create_item_permissions_check( $request ) {
267 267
 	
268
-		if ( ! empty( $request['id'] ) ) {
269
-			return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
270
-		}
268
+        if ( ! empty( $request['id'] ) ) {
269
+            return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
270
+        }
271 271
 
272
-		$post_type = get_post_type_object( $this->post_type );
272
+        $post_type = get_post_type_object( $this->post_type );
273 273
 
274
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
275
-			return new WP_Error( 
274
+        if ( ! current_user_can( $post_type->cap->create_posts ) ) {
275
+            return new WP_Error( 
276 276
                 'rest_cannot_create', 
277 277
                 __( 'Sorry, you are not allowed to create invoices as this user.', 'invoicing' ), 
278 278
                 array( 
@@ -281,88 +281,88 @@  discard block
 block discarded – undo
281 281
             );
282 282
         }
283 283
 
284
-		return true;
284
+        return true;
285 285
     }
286 286
     
287 287
     /**
288
-	 * Creates a single invoice.
289
-	 *
290
-	 * @since 1.0.13
291
-	 *
292
-	 * @param WP_REST_Request $request Full details about the request.
293
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
294
-	 */
295
-	public function create_item( $request ) {
296
-
297
-		if ( ! empty( $request['id'] ) ) {
298
-			return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
299
-		}
288
+     * Creates a single invoice.
289
+     *
290
+     * @since 1.0.13
291
+     *
292
+     * @param WP_REST_Request $request Full details about the request.
293
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
294
+     */
295
+    public function create_item( $request ) {
296
+
297
+        if ( ! empty( $request['id'] ) ) {
298
+            return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
299
+        }
300 300
 
301
-		$request->set_param( 'context', 'edit' );
301
+        $request->set_param( 'context', 'edit' );
302 302
 
303
-		// Prepare the updated data.
304
-		$invoice_data = $this->prepare_item_for_database( $request );
303
+        // Prepare the updated data.
304
+        $invoice_data = $this->prepare_item_for_database( $request );
305 305
 
306
-		if ( is_wp_error( $invoice_data ) ) {
307
-			return $invoice_data;
308
-		}
306
+        if ( is_wp_error( $invoice_data ) ) {
307
+            return $invoice_data;
308
+        }
309 309
 
310
-		// Try creating the invoice
310
+        // Try creating the invoice
311 311
         $invoice = wpinv_insert_invoice( $invoice_data, true );
312 312
 
313
-		if ( is_wp_error( $invoice ) ) {
313
+        if ( is_wp_error( $invoice ) ) {
314 314
             return $invoice;
315
-		}
316
-
317
-		// Prepare the response
318
-		$response = $this->prepare_item_for_response( $invoice, $request );
319
-
320
-		/**
321
-		 * Fires after a single invoice is created or updated via the REST API.
322
-		 *
323
-		 * @since 1.0.13
324
-		 *
325
-		 * @param WPinv_Invoice   $invoice  Inserted or updated invoice object.
326
-		 * @param WP_REST_Request $request  Request object.
327
-		 * @param bool            $creating True when creating a post, false when updating.
328
-		 */
329
-		do_action( "wpinv_rest_insert_invoice", $invoice, $request, true );
330
-
331
-		/**
332
-		 * Filters the responses for creating single invoice requests.
333
-		 *
334
-		 *
335
-		 * @since 1.0.13
336
-		 *
337
-		 *
338
-		 * @param array           $invoice_data Invoice properties.
339
-		 * @param WP_REST_Request $request The request used.
340
-		 */
315
+        }
316
+
317
+        // Prepare the response
318
+        $response = $this->prepare_item_for_response( $invoice, $request );
319
+
320
+        /**
321
+         * Fires after a single invoice is created or updated via the REST API.
322
+         *
323
+         * @since 1.0.13
324
+         *
325
+         * @param WPinv_Invoice   $invoice  Inserted or updated invoice object.
326
+         * @param WP_REST_Request $request  Request object.
327
+         * @param bool            $creating True when creating a post, false when updating.
328
+         */
329
+        do_action( "wpinv_rest_insert_invoice", $invoice, $request, true );
330
+
331
+        /**
332
+         * Filters the responses for creating single invoice requests.
333
+         *
334
+         *
335
+         * @since 1.0.13
336
+         *
337
+         *
338
+         * @param array           $invoice_data Invoice properties.
339
+         * @param WP_REST_Request $request The request used.
340
+         */
341 341
         $response       = apply_filters( "wpinv_rest_create_invoice_response", $response, $request );
342 342
 
343 343
         return rest_ensure_response( $response );
344
-	}
345
-
346
-	/**
347
-	 * Checks if a given request has access to update an invoice.
348
-	 *
349
-	 * @since 1.0.13
350
-	 *
351
-	 * @param WP_REST_Request $request Full details about the request.
352
-	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
353
-	 */
354
-	public function update_item_permissions_check( $request ) {
355
-
356
-		// Retrieve the invoice.
357
-		$invoice = $this->get_post( $request['id'] );
358
-		if ( is_wp_error( $invoice ) ) {
359
-			return $invoice;
360
-		}
361
-
362
-		$post_type = get_post_type_object( $this->post_type );
363
-
364
-		if ( ! current_user_can(  $post_type->cap->edit_post, $invoice->ID  ) ) {
365
-			return new WP_Error( 
344
+    }
345
+
346
+    /**
347
+     * Checks if a given request has access to update an invoice.
348
+     *
349
+     * @since 1.0.13
350
+     *
351
+     * @param WP_REST_Request $request Full details about the request.
352
+     * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
353
+     */
354
+    public function update_item_permissions_check( $request ) {
355
+
356
+        // Retrieve the invoice.
357
+        $invoice = $this->get_post( $request['id'] );
358
+        if ( is_wp_error( $invoice ) ) {
359
+            return $invoice;
360
+        }
361
+
362
+        $post_type = get_post_type_object( $this->post_type );
363
+
364
+        if ( ! current_user_can(  $post_type->cap->edit_post, $invoice->ID  ) ) {
365
+            return new WP_Error( 
366 366
                 'rest_cannot_edit', 
367 367
                 __( 'Sorry, you are not allowed to update this invoice.', 'invoicing' ), 
368 368
                 array( 
@@ -371,162 +371,162 @@  discard block
 block discarded – undo
371 371
             );
372 372
         }
373 373
 
374
-		return true;
375
-	}
376
-
377
-	/**
378
-	 * Updates a single invoice.
379
-	 *
380
-	 * @since 1.0.13
381
-	 *
382
-	 * @param WP_REST_Request $request Full details about the request.
383
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
384
-	 */
385
-	public function update_item( $request ) {
374
+        return true;
375
+    }
376
+
377
+    /**
378
+     * Updates a single invoice.
379
+     *
380
+     * @since 1.0.13
381
+     *
382
+     * @param WP_REST_Request $request Full details about the request.
383
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
384
+     */
385
+    public function update_item( $request ) {
386 386
 		
387
-		// Ensure the invoice exists.
387
+        // Ensure the invoice exists.
388 388
         $valid_check = $this->get_post( $request['id'] );
389 389
         
390 390
         // Abort early if it does not exist
391
-		if ( is_wp_error( $valid_check ) ) {
392
-			return $valid_check;
393
-		}
391
+        if ( is_wp_error( $valid_check ) ) {
392
+            return $valid_check;
393
+        }
394 394
 
395
-		$request->set_param( 'context', 'edit' );
395
+        $request->set_param( 'context', 'edit' );
396 396
 
397
-		// Prepare the updated data.
398
-		$data_to_update = $this->prepare_item_for_database( $request );
397
+        // Prepare the updated data.
398
+        $data_to_update = $this->prepare_item_for_database( $request );
399 399
 
400
-		if ( is_wp_error( $data_to_update ) ) {
401
-			return $data_to_update;
402
-		}
400
+        if ( is_wp_error( $data_to_update ) ) {
401
+            return $data_to_update;
402
+        }
403 403
 
404
-		// Abort if no invoice data is provided
404
+        // Abort if no invoice data is provided
405 405
         if( empty( $data_to_update ) ) {
406 406
             return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
407 407
         }
408 408
 
409
-		// Include the invoice ID
410
-		$data_to_update['ID'] = $request['id'];
411
-
412
-		// Update the invoice
413
-		$updated_invoice = wpinv_update_invoice( $data_to_update, true );
414
-
415
-		// Incase the update operation failed...
416
-		if ( is_wp_error( $updated_invoice ) ) {
417
-			return $updated_invoice;
418
-		}
419
-
420
-		// Prepare the response
421
-		$response = $this->prepare_item_for_response( $updated_invoice, $request );
422
-
423
-		/** This action is documented in includes/class-wpinv-rest-invoice-controller.php */
424
-		do_action( "wpinv_rest_insert_invoice", $updated_invoice, $request, false );
425
-
426
-		/**
427
-		 * Filters the responses for updating single invoice requests.
428
-		 *
429
-		 *
430
-		 * @since 1.0.13
431
-		 *
432
-		 *
433
-		 * @param array           $invoice_data Invoice properties.
434
-		 * @param WP_REST_Request $request The request used.
435
-		 */
409
+        // Include the invoice ID
410
+        $data_to_update['ID'] = $request['id'];
411
+
412
+        // Update the invoice
413
+        $updated_invoice = wpinv_update_invoice( $data_to_update, true );
414
+
415
+        // Incase the update operation failed...
416
+        if ( is_wp_error( $updated_invoice ) ) {
417
+            return $updated_invoice;
418
+        }
419
+
420
+        // Prepare the response
421
+        $response = $this->prepare_item_for_response( $updated_invoice, $request );
422
+
423
+        /** This action is documented in includes/class-wpinv-rest-invoice-controller.php */
424
+        do_action( "wpinv_rest_insert_invoice", $updated_invoice, $request, false );
425
+
426
+        /**
427
+         * Filters the responses for updating single invoice requests.
428
+         *
429
+         *
430
+         * @since 1.0.13
431
+         *
432
+         *
433
+         * @param array           $invoice_data Invoice properties.
434
+         * @param WP_REST_Request $request The request used.
435
+         */
436 436
         $response       = apply_filters( "wpinv_rest_update_invoice_response", $response, $request );
437 437
 
438 438
         return rest_ensure_response( $response );
439
-	}
440
-
441
-	/**
442
-	 * Checks if a given request has access to delete an invoice.
443
-	 *
444
-	 * @since 1.0.13
445
-	 *
446
-	 * @param WP_REST_Request $request Full details about the request.
447
-	 * @return true|WP_Error True if the request has access to delete the invoice, WP_Error object otherwise.
448
-	 */
449
-	public function delete_item_permissions_check( $request ) {
450
-
451
-		// Retrieve the invoice.
452
-		$invoice = $this->get_post( $request['id'] );
453
-		if ( is_wp_error( $invoice ) ) {
454
-			return $invoice;
455
-		}
456
-
457
-		// Ensure the current user can delete invoices
458
-		if ( wpinv_current_user_can_manage_invoicing() ||  current_user_can( 'delete_invoices', $request['id'] ) ) {
459
-			return new WP_Error( 
439
+    }
440
+
441
+    /**
442
+     * Checks if a given request has access to delete an invoice.
443
+     *
444
+     * @since 1.0.13
445
+     *
446
+     * @param WP_REST_Request $request Full details about the request.
447
+     * @return true|WP_Error True if the request has access to delete the invoice, WP_Error object otherwise.
448
+     */
449
+    public function delete_item_permissions_check( $request ) {
450
+
451
+        // Retrieve the invoice.
452
+        $invoice = $this->get_post( $request['id'] );
453
+        if ( is_wp_error( $invoice ) ) {
454
+            return $invoice;
455
+        }
456
+
457
+        // Ensure the current user can delete invoices
458
+        if ( wpinv_current_user_can_manage_invoicing() ||  current_user_can( 'delete_invoices', $request['id'] ) ) {
459
+            return new WP_Error( 
460 460
                 'rest_cannot_delete', 
461 461
                 __( 'Sorry, you are not allowed to delete this invoice.', 'invoicing' ), 
462 462
                 array( 
463 463
                     'status' => rest_authorization_required_code(),
464 464
                 )
465 465
             );
466
-		}
467
-
468
-		return true;
469
-	}
470
-
471
-	/**
472
-	 * Deletes a single invoice.
473
-	 *
474
-	 * @since 1.0.13
475
-	 *
476
-	 * @param WP_REST_Request $request Full details about the request.
477
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
478
-	 */
479
-	public function delete_item( $request ) {
466
+        }
467
+
468
+        return true;
469
+    }
470
+
471
+    /**
472
+     * Deletes a single invoice.
473
+     *
474
+     * @since 1.0.13
475
+     *
476
+     * @param WP_REST_Request $request Full details about the request.
477
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
478
+     */
479
+    public function delete_item( $request ) {
480 480
 		
481
-		// Retrieve the invoice.
482
-		$invoice = $this->get_post( $request['id'] );
483
-		if ( is_wp_error( $invoice ) ) {
484
-			return $invoice;
485
-		}
481
+        // Retrieve the invoice.
482
+        $invoice = $this->get_post( $request['id'] );
483
+        if ( is_wp_error( $invoice ) ) {
484
+            return $invoice;
485
+        }
486 486
 
487
-		$request->set_param( 'context', 'edit' );
487
+        $request->set_param( 'context', 'edit' );
488 488
 
489
-		// Prepare the invoice id
490
-		$id    = $invoice->ID;
489
+        // Prepare the invoice id
490
+        $id    = $invoice->ID;
491 491
 
492
-		// Prepare the response
493
-		$response = $this->prepare_item_for_response( $invoice, $request );
492
+        // Prepare the response
493
+        $response = $this->prepare_item_for_response( $invoice, $request );
494 494
 
495
-		// Check if the user wants to bypass the trash...
496
-		$force_delete = (bool) $request['force'];
495
+        // Check if the user wants to bypass the trash...
496
+        $force_delete = (bool) $request['force'];
497 497
 
498
-		// Try deleting the invoice.
499
-		$deleted = wp_delete_post( $id, $force_delete );
498
+        // Try deleting the invoice.
499
+        $deleted = wp_delete_post( $id, $force_delete );
500 500
 
501
-		// Abort early if we can't delete the invoice.
502
-		if ( ! $deleted ) {
503
-			return new WP_Error( 'rest_cannot_delete', __( 'The invoice cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
504
-		}
501
+        // Abort early if we can't delete the invoice.
502
+        if ( ! $deleted ) {
503
+            return new WP_Error( 'rest_cannot_delete', __( 'The invoice cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
504
+        }
505 505
 
506
-		/**
507
-		 * Fires immediately after a single invoice is deleted or trashed via the REST API.
508
-		 *
509
-		 *
510
-		 * @since 1.0.13
511
-		 *
512
-		 * @param WPInv_Invoice    $invoice  The deleted or trashed invoice.
513
-		 * @param WP_REST_Request  $request  The request sent to the API.
514
-		 */
515
-		do_action( "wpinv_rest_delete_invoice", $invoice, $request );
506
+        /**
507
+         * Fires immediately after a single invoice is deleted or trashed via the REST API.
508
+         *
509
+         *
510
+         * @since 1.0.13
511
+         *
512
+         * @param WPInv_Invoice    $invoice  The deleted or trashed invoice.
513
+         * @param WP_REST_Request  $request  The request sent to the API.
514
+         */
515
+        do_action( "wpinv_rest_delete_invoice", $invoice, $request );
516 516
 
517
-		return $response;
517
+        return $response;
518 518
 
519
-	}
519
+    }
520 520
     
521 521
     
522 522
     /**
523
-	 * Retrieves the query params for the invoices collection.
524
-	 *
525
-	 * @since 1.0.13
526
-	 *
527
-	 * @return array Collection parameters.
528
-	 */
529
-	public function get_collection_params() {
523
+     * Retrieves the query params for the invoices collection.
524
+     *
525
+     * @since 1.0.13
526
+     *
527
+     * @return array Collection parameters.
528
+     */
529
+    public function get_collection_params() {
530 530
         
531 531
         $query_params               = array(
532 532
 
@@ -544,22 +544,22 @@  discard block
 block discarded – undo
544 544
 
545 545
             // User.
546 546
             'user'                  => array(
547
-				'description'       => __( 'Limit result set to invoices for a specif user.', 'invoicing' ),
548
-				'type'              => 'integer',
547
+                'description'       => __( 'Limit result set to invoices for a specif user.', 'invoicing' ),
548
+                'type'              => 'integer',
549 549
             ),
550 550
             
551 551
             // Number of results per page
552 552
             'limit'                 => array(
553
-				'description'       => __( 'Number of invoices to fetch.', 'invoicing' ),
554
-				'type'              => 'integer',
555
-				'default'           => (int) get_option( 'posts_per_page' ),
553
+                'description'       => __( 'Number of invoices to fetch.', 'invoicing' ),
554
+                'type'              => 'integer',
555
+                'default'           => (int) get_option( 'posts_per_page' ),
556 556
             ),
557 557
 
558 558
             // Pagination
559 559
             'page'     => array(
560
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
561
-				'type'              => 'integer',
562
-				'default'           => 1,
560
+                'description'       => __( 'Current page to fetch.', 'invoicing' ),
561
+                'type'              => 'integer',
562
+                'default'           => 1,
563 563
             ),
564 564
 
565 565
             // Exclude certain invoices
@@ -595,789 +595,789 @@  discard block
 block discarded – undo
595 595
             ),
596 596
         );
597 597
 
598
-		/**
599
-		 * Filter collection parameters for the invoices controller.
600
-		 *
601
-		 *
602
-		 * @since 1.0.13
603
-		 *
604
-		 * @param array        $query_params JSON Schema-formatted collection parameters.
605
-		 */
606
-		return apply_filters( "wpinv_rest_invoices_collection_params", $query_params );
598
+        /**
599
+         * Filter collection parameters for the invoices controller.
600
+         *
601
+         *
602
+         * @since 1.0.13
603
+         *
604
+         * @param array        $query_params JSON Schema-formatted collection parameters.
605
+         */
606
+        return apply_filters( "wpinv_rest_invoices_collection_params", $query_params );
607 607
     }
608 608
     
609 609
     /**
610
-	 * Checks if a given post type can be viewed or managed.
611
-	 *
612
-	 * @since 1.0.13
613
-	 *
614
-	 * @param object|string $post_type Post type name or object.
615
-	 * @return bool Whether the post type is allowed in REST.
616
-	 */
617
-	protected function check_is_post_type_allowed( $post_type ) {
618
-		return true;
619
-	}
620
-
621
-	/**
622
-	 * Prepares a single invoice for create or update.
623
-	 *
624
-	 * @since 1.0.13
625
-	 *
626
-	 * @param WP_REST_Request $request Request object.
627
-	 * @return array|WP_Error Invoice Properties or WP_Error.
628
-	 */
629
-	protected function prepare_item_for_database( $request ) {
630
-		$prepared_invoice = new stdClass();
631
-
632
-		// Post ID.
633
-		if ( isset( $request['id'] ) ) {
634
-			$existing_invoice = $this->get_post( $request['id'] );
635
-			if ( is_wp_error( $existing_invoice ) ) {
636
-				return $existing_invoice;
637
-			}
638
-
639
-			$prepared_invoice->ID 		  = $existing_invoice->ID;
640
-			$prepared_invoice->invoice_id = $existing_invoice->ID;
641
-		}
642
-
643
-		$schema = $this->get_item_schema();
644
-
645
-		// Invoice owner.
646
-		if ( ! empty( $schema['properties']['user_id'] ) && isset( $request['user_id'] ) ) {
647
-			$prepared_invoice->user_id = (int) $request['user_id'];
648
-		}
649
-
650
-		// Cart details.
651
-		if ( ! empty( $schema['properties']['cart_details'] ) && isset( $request['cart_details'] ) ) {
652
-			$prepared_invoice->cart_details = (array) $request['cart_details'];
653
-		}
654
-
655
-		// Invoice status.
656
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
657
-
658
-			if ( in_array( $request['status'], array_keys( wpinv_get_invoice_statuses( true, true ) ), true ) ) {
659
-				$prepared_invoice->status = $request['status'];
660
-			}
661
-
662
-		}
663
-
664
-		// User info
665
-		if ( ! empty( $schema['properties']['user_info'] ) && isset( $request['user_info'] ) ) {
666
-			$prepared_invoice->user_info = array();
667
-			$user_info = (array) $request['user_info'];
668
-
669
-			foreach( $user_info as $prop => $value ) {
670
-
671
-				if ( ! empty( $schema['properties']['user_info']['properties'][$prop] ) ) {
672
-
673
-					$prepared_invoice->user_info[$prop] = $value;
610
+     * Checks if a given post type can be viewed or managed.
611
+     *
612
+     * @since 1.0.13
613
+     *
614
+     * @param object|string $post_type Post type name or object.
615
+     * @return bool Whether the post type is allowed in REST.
616
+     */
617
+    protected function check_is_post_type_allowed( $post_type ) {
618
+        return true;
619
+    }
620
+
621
+    /**
622
+     * Prepares a single invoice for create or update.
623
+     *
624
+     * @since 1.0.13
625
+     *
626
+     * @param WP_REST_Request $request Request object.
627
+     * @return array|WP_Error Invoice Properties or WP_Error.
628
+     */
629
+    protected function prepare_item_for_database( $request ) {
630
+        $prepared_invoice = new stdClass();
631
+
632
+        // Post ID.
633
+        if ( isset( $request['id'] ) ) {
634
+            $existing_invoice = $this->get_post( $request['id'] );
635
+            if ( is_wp_error( $existing_invoice ) ) {
636
+                return $existing_invoice;
637
+            }
638
+
639
+            $prepared_invoice->ID 		  = $existing_invoice->ID;
640
+            $prepared_invoice->invoice_id = $existing_invoice->ID;
641
+        }
642
+
643
+        $schema = $this->get_item_schema();
644
+
645
+        // Invoice owner.
646
+        if ( ! empty( $schema['properties']['user_id'] ) && isset( $request['user_id'] ) ) {
647
+            $prepared_invoice->user_id = (int) $request['user_id'];
648
+        }
649
+
650
+        // Cart details.
651
+        if ( ! empty( $schema['properties']['cart_details'] ) && isset( $request['cart_details'] ) ) {
652
+            $prepared_invoice->cart_details = (array) $request['cart_details'];
653
+        }
654
+
655
+        // Invoice status.
656
+        if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
657
+
658
+            if ( in_array( $request['status'], array_keys( wpinv_get_invoice_statuses( true, true ) ), true ) ) {
659
+                $prepared_invoice->status = $request['status'];
660
+            }
661
+
662
+        }
663
+
664
+        // User info
665
+        if ( ! empty( $schema['properties']['user_info'] ) && isset( $request['user_info'] ) ) {
666
+            $prepared_invoice->user_info = array();
667
+            $user_info = (array) $request['user_info'];
668
+
669
+            foreach( $user_info as $prop => $value ) {
670
+
671
+                if ( ! empty( $schema['properties']['user_info']['properties'][$prop] ) ) {
672
+
673
+                    $prepared_invoice->user_info[$prop] = $value;
674 674
 		
675
-				}
675
+                }
676 676
 
677
-			}
677
+            }
678 678
 
679
-		}
679
+        }
680 680
 
681
-		// IP
682
-		if ( ! empty( $schema['properties']['ip'] ) && isset( $request['ip'] ) ) {
683
-			$prepared_invoice->ip = $request['ip'];
684
-		}
681
+        // IP
682
+        if ( ! empty( $schema['properties']['ip'] ) && isset( $request['ip'] ) ) {
683
+            $prepared_invoice->ip = $request['ip'];
684
+        }
685 685
 
686
-		// Payment details
687
-		$prepared_invoice->payment_details = array();
686
+        // Payment details
687
+        $prepared_invoice->payment_details = array();
688 688
 
689
-		if ( ! empty( $schema['properties']['gateway'] ) && isset( $request['gateway'] ) ) {
690
-			$prepared_invoice->payment_details['gateway'] = $request['gateway'];
691
-		}
689
+        if ( ! empty( $schema['properties']['gateway'] ) && isset( $request['gateway'] ) ) {
690
+            $prepared_invoice->payment_details['gateway'] = $request['gateway'];
691
+        }
692 692
 
693
-		if ( ! empty( $schema['properties']['gateway_title'] ) && isset( $request['gateway_title'] ) ) {
694
-			$prepared_invoice->payment_details['gateway_title'] = $request['gateway_title'];
695
-		}
693
+        if ( ! empty( $schema['properties']['gateway_title'] ) && isset( $request['gateway_title'] ) ) {
694
+            $prepared_invoice->payment_details['gateway_title'] = $request['gateway_title'];
695
+        }
696 696
 
697
-		if ( ! empty( $schema['properties']['currency'] ) && isset( $request['currency'] ) ) {
698
-			$prepared_invoice->payment_details['currency'] = $request['currency'];
699
-		}
697
+        if ( ! empty( $schema['properties']['currency'] ) && isset( $request['currency'] ) ) {
698
+            $prepared_invoice->payment_details['currency'] = $request['currency'];
699
+        }
700 700
 
701
-		if ( ! empty( $schema['properties']['transaction_id'] ) && isset( $request['transaction_id'] ) ) {
702
-			$prepared_invoice->payment_details['transaction_id'] = $request['transaction_id'];
703
-		}
701
+        if ( ! empty( $schema['properties']['transaction_id'] ) && isset( $request['transaction_id'] ) ) {
702
+            $prepared_invoice->payment_details['transaction_id'] = $request['transaction_id'];
703
+        }
704 704
 
705
-		// Dates
706
-		if ( ! empty( $schema['properties']['date'] ) && isset( $request['date'] ) ) {
707
-			$post_date = rest_get_date_with_gmt( $request['date'] );
705
+        // Dates
706
+        if ( ! empty( $schema['properties']['date'] ) && isset( $request['date'] ) ) {
707
+            $post_date = rest_get_date_with_gmt( $request['date'] );
708 708
 
709
-			if ( ! empty( $post_date ) ) {
710
-				$prepared_invoice->post_date = $post_date[0];
711
-			}
709
+            if ( ! empty( $post_date ) ) {
710
+                $prepared_invoice->post_date = $post_date[0];
711
+            }
712 712
 			
713
-		}
713
+        }
714 714
 
715
-		if ( ! empty( $schema['properties']['due_date'] ) && isset( $request['due_date'] ) ) {
716
-			$due_date = rest_get_date_with_gmt( $request['due_date'] );
715
+        if ( ! empty( $schema['properties']['due_date'] ) && isset( $request['due_date'] ) ) {
716
+            $due_date = rest_get_date_with_gmt( $request['due_date'] );
717 717
 
718
-			if ( ! empty( $due_date ) ) {
719
-				$prepared_invoice->due_date = $due_date[0];
720
-			}
718
+            if ( ! empty( $due_date ) ) {
719
+                $prepared_invoice->due_date = $due_date[0];
720
+            }
721 721
 
722
-		}
722
+        }
723 723
 
724
-		$invoice_data = (array) wp_unslash( $prepared_invoice );
724
+        $invoice_data = (array) wp_unslash( $prepared_invoice );
725 725
 
726
-		/**
727
-		 * Filters an invoice before it is inserted via the REST API.
728
-		 *
729
-		 * @since 1.0.13
730
-		 *
731
-		 * @param array        $invoice_data An array of invoice data
732
-		 * @param WP_REST_Request $request       Request object.
733
-		 */
734
-		return apply_filters( "wpinv_rest_pre_insert_invoice", $invoice_data, $request );
726
+        /**
727
+         * Filters an invoice before it is inserted via the REST API.
728
+         *
729
+         * @since 1.0.13
730
+         *
731
+         * @param array        $invoice_data An array of invoice data
732
+         * @param WP_REST_Request $request       Request object.
733
+         */
734
+        return apply_filters( "wpinv_rest_pre_insert_invoice", $invoice_data, $request );
735 735
 
736
-	}
736
+    }
737
+
738
+    /**
739
+     * Prepares a single invoice output for response.
740
+     *
741
+     * @since 1.0.13
742
+     *
743
+     * @param WPInv_Invoice   $invoice    Invoice object.
744
+     * @param WP_REST_Request $request Request object.
745
+     * @return WP_REST_Response Response object.
746
+     */
747
+    public function prepare_item_for_response( $invoice, $request ) {
737 748
 
738
-	/**
739
-	 * Prepares a single invoice output for response.
740
-	 *
741
-	 * @since 1.0.13
742
-	 *
743
-	 * @param WPInv_Invoice   $invoice    Invoice object.
744
-	 * @param WP_REST_Request $request Request object.
745
-	 * @return WP_REST_Response Response object.
746
-	 */
747
-	public function prepare_item_for_response( $invoice, $request ) {
749
+        $GLOBALS['post'] = get_post( $invoice->ID );
748 750
 
749
-		$GLOBALS['post'] = get_post( $invoice->ID );
751
+        setup_postdata( $invoice->ID );
750 752
 
751
-		setup_postdata( $invoice->ID );
753
+        // Fetch the fields to include in this response.
754
+        $fields = $this->get_fields_for_response( $request );
752 755
 
753
-		// Fetch the fields to include in this response.
754
-		$fields = $this->get_fields_for_response( $request );
756
+        // Base fields for every invoice.
757
+        $data = array();
758
+
759
+        // Set up ID
760
+        if ( rest_is_field_included( 'id', $fields ) ) {
761
+            $data['id'] = $invoice->ID;
762
+        }
763
+
764
+
765
+        // Basic properties
766
+        $invoice_properties = array(
767
+            'title', 'email', 'ip', 
768
+            'key', 'number', 'transaction_id', 'mode',
769
+            'gateway', 'gateway_title',
770
+            'total', 'discount', 'discount_code', 
771
+            'tax', 'fees_total', 'subtotal', 'currency',
772
+            'status', 'status_nicename', 'post_type'
773
+        );
774
+
775
+        foreach( $invoice_properties as $property ) {
776
+
777
+            if ( rest_is_field_included( $property, $fields ) ) {
778
+                $data[$property] = $invoice->get( $property );
779
+            }
780
+
781
+        }
782
+
783
+        // Cart details
784
+        if ( rest_is_field_included( 'cart_details', $fields ) ) {
785
+            $data['cart_details'] = $invoice->get( 'cart_details' );
786
+        }
787
+
788
+        //Dates
789
+        $invoice_properties = array( 'date', 'due_date', 'completed_date' );
790
+
791
+        foreach( $invoice_properties as $property ) {
792
+
793
+            if ( rest_is_field_included( $property, $fields ) ) {
794
+                $data[$property] = $this->prepare_date_response( '0000-00-00 00:00:00', $invoice->get( $property ) );
795
+            }
796
+
797
+        }
798
+
799
+        // User id
800
+        if ( rest_is_field_included( 'user_id', $fields ) ) {
801
+            $data['user_id'] = (int) $invoice->get( 'user_id' );
802
+        }
803
+
804
+        // User info
805
+        $user_info = array( 'first_name', 'last_name', 'company', 'vat_number', 'vat_rate', 'address', 'city', 'country', 'state', 'zip', 'phone' );
806
+
807
+        foreach( $user_info as $property ) {
808
+
809
+            if ( rest_is_field_included( "user_info.$property", $fields ) ) {
810
+                $data['user_info'][$property] = $invoice->get( $property );
811
+            }
812
+
813
+        }
814
+
815
+        // Slug
816
+        if ( rest_is_field_included( 'slug', $fields ) ) {
817
+            $data['slug'] = $invoice->get( 'post_name' );
818
+        }
819
+
820
+        // View invoice link
821
+        if ( rest_is_field_included( 'link', $fields ) ) {
822
+            $data['link'] = esc_url( $invoice->get_view_url() );
823
+        }
755 824
 
756
-		// Base fields for every invoice.
757
-		$data = array();
758 825
 
759
-		// Set up ID
760
-		if ( rest_is_field_included( 'id', $fields ) ) {
761
-			$data['id'] = $invoice->ID;
762
-		}
826
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
827
+        $data    = $this->add_additional_fields_to_object( $data, $request );
828
+        $data    = $this->filter_response_by_context( $data, $context );
763 829
 
830
+        // Wrap the data in a response object.
831
+        $response = rest_ensure_response( $data );
764 832
 
765
-		// Basic properties
766
-		$invoice_properties = array(
767
-			'title', 'email', 'ip', 
768
-			'key', 'number', 'transaction_id', 'mode',
769
-			'gateway', 'gateway_title',
770
-			'total', 'discount', 'discount_code', 
771
-			'tax', 'fees_total', 'subtotal', 'currency',
772
-			'status', 'status_nicename', 'post_type'
773
-		);
774
-
775
-		foreach( $invoice_properties as $property ) {
776
-
777
-			if ( rest_is_field_included( $property, $fields ) ) {
778
-				$data[$property] = $invoice->get( $property );
779
-			}
780
-
781
-		}
782
-
783
-		// Cart details
784
-		if ( rest_is_field_included( 'cart_details', $fields ) ) {
785
-			$data['cart_details'] = $invoice->get( 'cart_details' );
786
-		}
787
-
788
-		//Dates
789
-		$invoice_properties = array( 'date', 'due_date', 'completed_date' );
790
-
791
-		foreach( $invoice_properties as $property ) {
792
-
793
-			if ( rest_is_field_included( $property, $fields ) ) {
794
-				$data[$property] = $this->prepare_date_response( '0000-00-00 00:00:00', $invoice->get( $property ) );
795
-			}
796
-
797
-		}
798
-
799
-		// User id
800
-		if ( rest_is_field_included( 'user_id', $fields ) ) {
801
-			$data['user_id'] = (int) $invoice->get( 'user_id' );
802
-		}
803
-
804
-		// User info
805
-		$user_info = array( 'first_name', 'last_name', 'company', 'vat_number', 'vat_rate', 'address', 'city', 'country', 'state', 'zip', 'phone' );
806
-
807
-		foreach( $user_info as $property ) {
808
-
809
-			if ( rest_is_field_included( "user_info.$property", $fields ) ) {
810
-				$data['user_info'][$property] = $invoice->get( $property );
811
-			}
812
-
813
-		}
814
-
815
-		// Slug
816
-		if ( rest_is_field_included( 'slug', $fields ) ) {
817
-			$data['slug'] = $invoice->get( 'post_name' );
818
-		}
819
-
820
-		// View invoice link
821
-		if ( rest_is_field_included( 'link', $fields ) ) {
822
-			$data['link'] = esc_url( $invoice->get_view_url() );
823
-		}
824
-
825
-
826
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
827
-		$data    = $this->add_additional_fields_to_object( $data, $request );
828
-		$data    = $this->filter_response_by_context( $data, $context );
829
-
830
-		// Wrap the data in a response object.
831
-		$response = rest_ensure_response( $data );
832
-
833
-		$links = $this->prepare_links( $invoice );
834
-		$response->add_links( $links );
835
-
836
-		if ( ! empty( $links['self']['href'] ) ) {
837
-			$actions = $this->get_available_actions( $invoice, $request );
838
-
839
-			$self = $links['self']['href'];
840
-
841
-			foreach ( $actions as $rel ) {
842
-				$response->add_link( $rel, $self );
843
-			}
844
-		}
845
-
846
-		/**
847
-		 * Filters the invoice data for a response.
848
-		 *
849
-		 * @since 1.0.13
850
-		 *
851
-		 * @param WP_REST_Response $response The response object.
852
-		 * @param WPInv_Invoice    $invoice  The invoice object.
853
-		 * @param WP_REST_Request  $request  Request object.
854
-		 */
855
-		return apply_filters( "wpinv_rest_prepare_invoice", $response, $invoice, $request );
856
-	}
857
-
858
-	/**
859
-	 * Gets an array of fields to be included on the response.
860
-	 *
861
-	 * Included fields are based on item schema and `_fields=` request argument.
862
-	 *
863
-	 * @since 1.0.13
864
-	 *
865
-	 * @param WP_REST_Request $request Full details about the request.
866
-	 * @return array Fields to be included in the response.
867
-	 */
868
-	public function get_fields_for_response( $request ) {
869
-		$schema     = $this->get_item_schema();
870
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
871
-
872
-		$additional_fields = $this->get_additional_fields();
873
-		foreach ( $additional_fields as $field_name => $field_options ) {
874
-			// For back-compat, include any field with an empty schema
875
-			// because it won't be present in $this->get_item_schema().
876
-			if ( is_null( $field_options['schema'] ) ) {
877
-				$properties[ $field_name ] = $field_options;
878
-			}
879
-		}
880
-
881
-		// Exclude fields that specify a different context than the request context.
882
-		$context = $request['context'];
883
-		if ( $context ) {
884
-			foreach ( $properties as $name => $options ) {
885
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
886
-					unset( $properties[ $name ] );
887
-				}
888
-			}
889
-		}
890
-
891
-		$fields = array_keys( $properties );
892
-
893
-		if ( ! isset( $request['_fields'] ) ) {
894
-			return $fields;
895
-		}
896
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
897
-		if ( 0 === count( $requested_fields ) ) {
898
-			return $fields;
899
-		}
900
-		// Trim off outside whitespace from the comma delimited list.
901
-		$requested_fields = array_map( 'trim', $requested_fields );
902
-		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
903
-		if ( in_array( 'id', $fields, true ) ) {
904
-			$requested_fields[] = 'id';
905
-		}
906
-		// Return the list of all requested fields which appear in the schema.
907
-		return array_reduce(
908
-			$requested_fields,
909
-			function( $response_fields, $field ) use ( $fields ) {
910
-				if ( in_array( $field, $fields, true ) ) {
911
-					$response_fields[] = $field;
912
-					return $response_fields;
913
-				}
914
-				// Check for nested fields if $field is not a direct match.
915
-				$nested_fields = explode( '.', $field );
916
-				// A nested field is included so long as its top-level property is
917
-				// present in the schema.
918
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
919
-					$response_fields[] = $field;
920
-				}
921
-				return $response_fields;
922
-			},
923
-			array()
924
-		);
925
-	}
926
-
927
-	/**
928
-	 * Retrieves the invoice's schema, conforming to JSON Schema.
929
-	 *
930
-	 * @since 1.0.13
931
-	 *
932
-	 * @return array Invoice schema data.
933
-	 */
934
-	public function get_item_schema() {
935
-
936
-		// Maybe retrieve the schema from cache.
937
-		if ( $this->schema ) {
938
-			return $this->add_additional_fields_schema( $this->schema );
939
-		}
940
-
941
-		$schema = array(
942
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
943
-			'title'      => $this->post_type,
944
-			'type'       => 'object',
945
-
946
-			// Base properties for every Invoice.
947
-			'properties' 		  => array(
948
-
949
-				'title'			  => array(
950
-					'description' => __( 'The title for the invoice.', 'invoicing' ),
951
-					'type'        => 'string',
952
-					'context'     => array( 'view', 'edit', 'embed' ),
953
-					'readonly'    => true,
954
-				),
955
-
956
-				'user_id'		  => array(
957
-					'description' => __( 'The ID of the owner of the invoice.', 'invoicing' ),
958
-					'type'        => 'integer',
959
-					'context'     => array( 'view', 'edit', 'embed' ),
960
-				),
961
-
962
-				'email'		  	  => array(
963
-					'description' => __( 'The email of the owner of the invoice.', 'invoicing' ),
964
-					'type'        => 'string',
965
-					'context'     => array( 'view', 'edit', 'embed' ),
966
-					'readonly'    => true,
967
-				),
968
-
969
-				'ip'			  => array(
970
-					'description' => __( 'The IP of the owner of the invoice.', 'invoicing' ),
971
-					'type'        => 'string',
972
-					'context'     => array( 'view', 'edit', 'embed' ),
973
-				),
974
-
975
-				'user_info'       => array(
976
-					'description' => __( 'Information about the owner of the invoice.', 'invoicing' ),
977
-					'type'        => 'object',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
979
-					'properties'  => array(
980
-
981
-						'first_name'      => array(
982
-							'description' => __( 'The first name of the owner of the invoice.', 'invoicing' ),
983
-							'type'        => 'string',
984
-							'context'     => array( 'view', 'edit', 'embed' ),
985
-						),
986
-
987
-						'last_name'       => array(
988
-							'description' => __( 'The last name of the owner of the invoice.', 'invoicing' ),
989
-							'type'        => 'string',
990
-							'context'     => array( 'view', 'edit', 'embed' ),
991
-						),
992
-
993
-						'company'         => array(
994
-							'description' => __( 'The company of the owner of the invoice.', 'invoicing' ),
995
-							'type'        => 'string',
996
-							'context'     => array( 'view', 'edit', 'embed' ),
997
-						),
998
-
999
-						'vat_number'      => array(
1000
-							'description' => __( 'The VAT number of the owner of the invoice.', 'invoicing' ),
1001
-							'type'        => 'string',
1002
-							'context'     => array( 'view', 'edit', 'embed' ),
1003
-						),
1004
-
1005
-						'vat_rate'        => array(
1006
-							'description' => __( 'The VAT rate applied on the invoice.', 'invoicing' ),
1007
-							'type'        => 'string',
1008
-							'context'     => array( 'view', 'edit', 'embed' ),
1009
-						),
1010
-
1011
-						'address'        => array(
1012
-							'description' => __( 'The address of the invoice owner.', 'invoicing' ),
1013
-							'type'        => 'string',
1014
-							'context'     => array( 'view', 'edit', 'embed' ),
1015
-						),
1016
-
1017
-						'city'            => array(
1018
-							'description' => __( 'The city of the invoice owner.', 'invoicing' ),
1019
-							'type'        => 'string',
1020
-							'context'     => array( 'view', 'edit', 'embed' ),
1021
-						),
1022
-
1023
-						'country'         => array(
1024
-							'description' => __( 'The country of the invoice owner.', 'invoicing' ),
1025
-							'type'        => 'string',
1026
-							'context'     => array( 'view', 'edit', 'embed' ),
1027
-						),
1028
-
1029
-						'state'           => array(
1030
-							'description' => __( 'The state of the invoice owner.', 'invoicing' ),
1031
-							'type'        => 'string',
1032
-							'context'     => array( 'view', 'edit', 'embed' ),
1033
-						),
1034
-
1035
-						'zip'             => array(
1036
-							'description' => __( 'The zip code of the invoice owner.', 'invoicing' ),
1037
-							'type'        => 'string',
1038
-							'context'     => array( 'view', 'edit', 'embed' ),
1039
-						),
1040
-
1041
-						'phone'             => array(
1042
-							'description' => __( 'The phone number of the invoice owner.', 'invoicing' ),
1043
-							'type'        => 'string',
1044
-							'context'     => array( 'view', 'edit', 'embed' ),
1045
-						),
1046
-					),
1047
-				),
1048
-
1049
-				'id'           => array(
1050
-					'description' => __( 'Unique identifier for the invoice.', 'invoicing' ),
1051
-					'type'        => 'integer',
1052
-					'context'     => array( 'view', 'edit', 'embed' ),
1053
-					'readonly'    => true,
1054
-				),
1055
-
1056
-				'key'			  => array(
1057
-					'description' => __( 'A unique key for the invoice.', 'invoicing' ),
1058
-					'type'        => 'string',
1059
-					'context'     => array( 'view', 'edit', 'embed' ),
1060
-					'readonly'    => true,
1061
-				),
1062
-
1063
-				'number'		  => array(
1064
-					'description' => __( 'The invoice number.', 'invoicing' ),
1065
-					'type'        => 'string',
1066
-					'context'     => array( 'view', 'edit', 'embed' ),
1067
-					'readonly'    => true,
1068
-				),
1069
-
1070
-				'transaction_id'  => array(
1071
-					'description' => __( 'The transaction id of the invoice.', 'invoicing' ),
1072
-					'type'        => 'string',
1073
-					'context'     => array( 'view', 'edit', 'embed' ),
1074
-				),
1075
-
1076
-				'gateway'		  => array(
1077
-					'description' => __( 'The gateway used to process the invoice.', 'invoicing' ),
1078
-					'type'        => 'string',
1079
-					'context'     => array( 'view', 'edit', 'embed' ),
1080
-				),
1081
-
1082
-				'gateway_title'	  => array(
1083
-					'description' => __( 'The title of the gateway used to process the invoice.', 'invoicing' ),
1084
-					'type'        => 'string',
1085
-					'context'     => array( 'view', 'edit', 'embed' ),
1086
-				),
1087
-
1088
-				'total'	  		  => array(
1089
-					'description' => __( 'The total amount of the invoice.', 'invoicing' ),
1090
-					'type'        => 'number',
1091
-					'context'     => array( 'view', 'edit', 'embed' ),
1092
-					'readonly'    => true,
1093
-				),
1094
-
1095
-				'discount'		  => array(
1096
-					'description' => __( 'The discount applied to the invoice.', 'invoicing' ),
1097
-					'type'        => 'number',
1098
-					'context'     => array( 'view', 'edit', 'embed' ),
1099
-					'readonly'    => true,
1100
-				),
1101
-
1102
-				'discount_code'	  => array(
1103
-					'description' => __( 'The discount code applied to the invoice.', 'invoicing' ),
1104
-					'type'        => 'string',
1105
-					'context'     => array( 'view', 'edit', 'embed' ),
1106
-					'readonly'    => true,
1107
-				),
1108
-
1109
-				'tax'	  		  => array(
1110
-					'description' => __( 'The tax applied to the invoice.', 'invoicing' ),
1111
-					'type'        => 'number',
1112
-					'context'     => array( 'view', 'edit', 'embed' ),
1113
-					'readonly'    => true,
1114
-				),
1115
-
1116
-				'fees_total'	  => array(
1117
-					'description' => __( 'The total fees applied to the invoice.', 'invoicing' ),
1118
-					'type'        => 'number',
1119
-					'context'     => array( 'view', 'edit', 'embed' ),
1120
-					'readonly'    => true,
1121
-				),
1122
-
1123
-				'subtotal'	  	  => array(
1124
-					'description' => __( 'The sub-total for the invoice.', 'invoicing' ),
1125
-					'type'        => 'number',
1126
-					'context'     => array( 'view', 'edit', 'embed' ),
1127
-					'readonly'    => true,
1128
-				),
1129
-
1130
-				'currency'	  	  => array(
1131
-					'description' => __( 'The currency used to process the invoice.', 'invoicing' ),
1132
-					'type'        => 'string',
1133
-					'context'     => array( 'view', 'edit', 'embed' ),
1134
-				),
1135
-
1136
-				'cart_details'	  => array(
1137
-					'description' => __( 'The cart details for invoice.', 'invoicing' ),
1138
-					'type'        => 'array',
1139
-					'context'     => array( 'view', 'edit', 'embed' ),
1140
-					'required'	  => true,
1141
-				),
1142
-
1143
-				'date'         => array(
1144
-					'description' => __( "The date the invoice was published, in the site's timezone.", 'invoicing' ),
1145
-					'type'        => array( 'string', 'null' ),
1146
-					'format'      => 'date-time',
1147
-					'context'     => array( 'view', 'edit', 'embed' ),
1148
-				),
1149
-
1150
-				'due_date'     => array(
1151
-					'description' => __( 'The due date for the invoice.', 'invoicing' ),
1152
-					'type'        => array( 'string', 'null' ),
1153
-					'format'      => 'date-time',
1154
-					'context'     => array( 'view', 'edit', 'embed' ),
1155
-				),
1156
-
1157
-				'completed_date'  => array(
1158
-					'description' => __( 'The completed date for the invoice.', 'invoicing' ),
1159
-					'type'        => array( 'string', 'null' ),
1160
-					'format'      => 'date-time',
1161
-					'context'     => array( 'view', 'edit', 'embed' ),
1162
-					'readonly'    => true,
1163
-				),
833
+        $links = $this->prepare_links( $invoice );
834
+        $response->add_links( $links );
835
+
836
+        if ( ! empty( $links['self']['href'] ) ) {
837
+            $actions = $this->get_available_actions( $invoice, $request );
838
+
839
+            $self = $links['self']['href'];
840
+
841
+            foreach ( $actions as $rel ) {
842
+                $response->add_link( $rel, $self );
843
+            }
844
+        }
845
+
846
+        /**
847
+         * Filters the invoice data for a response.
848
+         *
849
+         * @since 1.0.13
850
+         *
851
+         * @param WP_REST_Response $response The response object.
852
+         * @param WPInv_Invoice    $invoice  The invoice object.
853
+         * @param WP_REST_Request  $request  Request object.
854
+         */
855
+        return apply_filters( "wpinv_rest_prepare_invoice", $response, $invoice, $request );
856
+    }
857
+
858
+    /**
859
+     * Gets an array of fields to be included on the response.
860
+     *
861
+     * Included fields are based on item schema and `_fields=` request argument.
862
+     *
863
+     * @since 1.0.13
864
+     *
865
+     * @param WP_REST_Request $request Full details about the request.
866
+     * @return array Fields to be included in the response.
867
+     */
868
+    public function get_fields_for_response( $request ) {
869
+        $schema     = $this->get_item_schema();
870
+        $properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
871
+
872
+        $additional_fields = $this->get_additional_fields();
873
+        foreach ( $additional_fields as $field_name => $field_options ) {
874
+            // For back-compat, include any field with an empty schema
875
+            // because it won't be present in $this->get_item_schema().
876
+            if ( is_null( $field_options['schema'] ) ) {
877
+                $properties[ $field_name ] = $field_options;
878
+            }
879
+        }
880
+
881
+        // Exclude fields that specify a different context than the request context.
882
+        $context = $request['context'];
883
+        if ( $context ) {
884
+            foreach ( $properties as $name => $options ) {
885
+                if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
886
+                    unset( $properties[ $name ] );
887
+                }
888
+            }
889
+        }
890
+
891
+        $fields = array_keys( $properties );
892
+
893
+        if ( ! isset( $request['_fields'] ) ) {
894
+            return $fields;
895
+        }
896
+        $requested_fields = wpinv_parse_list( $request['_fields'] );
897
+        if ( 0 === count( $requested_fields ) ) {
898
+            return $fields;
899
+        }
900
+        // Trim off outside whitespace from the comma delimited list.
901
+        $requested_fields = array_map( 'trim', $requested_fields );
902
+        // Always persist 'id', because it can be needed for add_additional_fields_to_object().
903
+        if ( in_array( 'id', $fields, true ) ) {
904
+            $requested_fields[] = 'id';
905
+        }
906
+        // Return the list of all requested fields which appear in the schema.
907
+        return array_reduce(
908
+            $requested_fields,
909
+            function( $response_fields, $field ) use ( $fields ) {
910
+                if ( in_array( $field, $fields, true ) ) {
911
+                    $response_fields[] = $field;
912
+                    return $response_fields;
913
+                }
914
+                // Check for nested fields if $field is not a direct match.
915
+                $nested_fields = explode( '.', $field );
916
+                // A nested field is included so long as its top-level property is
917
+                // present in the schema.
918
+                if ( in_array( $nested_fields[0], $fields, true ) ) {
919
+                    $response_fields[] = $field;
920
+                }
921
+                return $response_fields;
922
+            },
923
+            array()
924
+        );
925
+    }
926
+
927
+    /**
928
+     * Retrieves the invoice's schema, conforming to JSON Schema.
929
+     *
930
+     * @since 1.0.13
931
+     *
932
+     * @return array Invoice schema data.
933
+     */
934
+    public function get_item_schema() {
935
+
936
+        // Maybe retrieve the schema from cache.
937
+        if ( $this->schema ) {
938
+            return $this->add_additional_fields_schema( $this->schema );
939
+        }
940
+
941
+        $schema = array(
942
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
943
+            'title'      => $this->post_type,
944
+            'type'       => 'object',
945
+
946
+            // Base properties for every Invoice.
947
+            'properties' 		  => array(
948
+
949
+                'title'			  => array(
950
+                    'description' => __( 'The title for the invoice.', 'invoicing' ),
951
+                    'type'        => 'string',
952
+                    'context'     => array( 'view', 'edit', 'embed' ),
953
+                    'readonly'    => true,
954
+                ),
955
+
956
+                'user_id'		  => array(
957
+                    'description' => __( 'The ID of the owner of the invoice.', 'invoicing' ),
958
+                    'type'        => 'integer',
959
+                    'context'     => array( 'view', 'edit', 'embed' ),
960
+                ),
961
+
962
+                'email'		  	  => array(
963
+                    'description' => __( 'The email of the owner of the invoice.', 'invoicing' ),
964
+                    'type'        => 'string',
965
+                    'context'     => array( 'view', 'edit', 'embed' ),
966
+                    'readonly'    => true,
967
+                ),
968
+
969
+                'ip'			  => array(
970
+                    'description' => __( 'The IP of the owner of the invoice.', 'invoicing' ),
971
+                    'type'        => 'string',
972
+                    'context'     => array( 'view', 'edit', 'embed' ),
973
+                ),
974
+
975
+                'user_info'       => array(
976
+                    'description' => __( 'Information about the owner of the invoice.', 'invoicing' ),
977
+                    'type'        => 'object',
978
+                    'context'     => array( 'view', 'edit', 'embed' ),
979
+                    'properties'  => array(
980
+
981
+                        'first_name'      => array(
982
+                            'description' => __( 'The first name of the owner of the invoice.', 'invoicing' ),
983
+                            'type'        => 'string',
984
+                            'context'     => array( 'view', 'edit', 'embed' ),
985
+                        ),
986
+
987
+                        'last_name'       => array(
988
+                            'description' => __( 'The last name of the owner of the invoice.', 'invoicing' ),
989
+                            'type'        => 'string',
990
+                            'context'     => array( 'view', 'edit', 'embed' ),
991
+                        ),
992
+
993
+                        'company'         => array(
994
+                            'description' => __( 'The company of the owner of the invoice.', 'invoicing' ),
995
+                            'type'        => 'string',
996
+                            'context'     => array( 'view', 'edit', 'embed' ),
997
+                        ),
998
+
999
+                        'vat_number'      => array(
1000
+                            'description' => __( 'The VAT number of the owner of the invoice.', 'invoicing' ),
1001
+                            'type'        => 'string',
1002
+                            'context'     => array( 'view', 'edit', 'embed' ),
1003
+                        ),
1004
+
1005
+                        'vat_rate'        => array(
1006
+                            'description' => __( 'The VAT rate applied on the invoice.', 'invoicing' ),
1007
+                            'type'        => 'string',
1008
+                            'context'     => array( 'view', 'edit', 'embed' ),
1009
+                        ),
1010
+
1011
+                        'address'        => array(
1012
+                            'description' => __( 'The address of the invoice owner.', 'invoicing' ),
1013
+                            'type'        => 'string',
1014
+                            'context'     => array( 'view', 'edit', 'embed' ),
1015
+                        ),
1016
+
1017
+                        'city'            => array(
1018
+                            'description' => __( 'The city of the invoice owner.', 'invoicing' ),
1019
+                            'type'        => 'string',
1020
+                            'context'     => array( 'view', 'edit', 'embed' ),
1021
+                        ),
1022
+
1023
+                        'country'         => array(
1024
+                            'description' => __( 'The country of the invoice owner.', 'invoicing' ),
1025
+                            'type'        => 'string',
1026
+                            'context'     => array( 'view', 'edit', 'embed' ),
1027
+                        ),
1028
+
1029
+                        'state'           => array(
1030
+                            'description' => __( 'The state of the invoice owner.', 'invoicing' ),
1031
+                            'type'        => 'string',
1032
+                            'context'     => array( 'view', 'edit', 'embed' ),
1033
+                        ),
1034
+
1035
+                        'zip'             => array(
1036
+                            'description' => __( 'The zip code of the invoice owner.', 'invoicing' ),
1037
+                            'type'        => 'string',
1038
+                            'context'     => array( 'view', 'edit', 'embed' ),
1039
+                        ),
1040
+
1041
+                        'phone'             => array(
1042
+                            'description' => __( 'The phone number of the invoice owner.', 'invoicing' ),
1043
+                            'type'        => 'string',
1044
+                            'context'     => array( 'view', 'edit', 'embed' ),
1045
+                        ),
1046
+                    ),
1047
+                ),
1048
+
1049
+                'id'           => array(
1050
+                    'description' => __( 'Unique identifier for the invoice.', 'invoicing' ),
1051
+                    'type'        => 'integer',
1052
+                    'context'     => array( 'view', 'edit', 'embed' ),
1053
+                    'readonly'    => true,
1054
+                ),
1055
+
1056
+                'key'			  => array(
1057
+                    'description' => __( 'A unique key for the invoice.', 'invoicing' ),
1058
+                    'type'        => 'string',
1059
+                    'context'     => array( 'view', 'edit', 'embed' ),
1060
+                    'readonly'    => true,
1061
+                ),
1062
+
1063
+                'number'		  => array(
1064
+                    'description' => __( 'The invoice number.', 'invoicing' ),
1065
+                    'type'        => 'string',
1066
+                    'context'     => array( 'view', 'edit', 'embed' ),
1067
+                    'readonly'    => true,
1068
+                ),
1069
+
1070
+                'transaction_id'  => array(
1071
+                    'description' => __( 'The transaction id of the invoice.', 'invoicing' ),
1072
+                    'type'        => 'string',
1073
+                    'context'     => array( 'view', 'edit', 'embed' ),
1074
+                ),
1075
+
1076
+                'gateway'		  => array(
1077
+                    'description' => __( 'The gateway used to process the invoice.', 'invoicing' ),
1078
+                    'type'        => 'string',
1079
+                    'context'     => array( 'view', 'edit', 'embed' ),
1080
+                ),
1081
+
1082
+                'gateway_title'	  => array(
1083
+                    'description' => __( 'The title of the gateway used to process the invoice.', 'invoicing' ),
1084
+                    'type'        => 'string',
1085
+                    'context'     => array( 'view', 'edit', 'embed' ),
1086
+                ),
1087
+
1088
+                'total'	  		  => array(
1089
+                    'description' => __( 'The total amount of the invoice.', 'invoicing' ),
1090
+                    'type'        => 'number',
1091
+                    'context'     => array( 'view', 'edit', 'embed' ),
1092
+                    'readonly'    => true,
1093
+                ),
1094
+
1095
+                'discount'		  => array(
1096
+                    'description' => __( 'The discount applied to the invoice.', 'invoicing' ),
1097
+                    'type'        => 'number',
1098
+                    'context'     => array( 'view', 'edit', 'embed' ),
1099
+                    'readonly'    => true,
1100
+                ),
1101
+
1102
+                'discount_code'	  => array(
1103
+                    'description' => __( 'The discount code applied to the invoice.', 'invoicing' ),
1104
+                    'type'        => 'string',
1105
+                    'context'     => array( 'view', 'edit', 'embed' ),
1106
+                    'readonly'    => true,
1107
+                ),
1108
+
1109
+                'tax'	  		  => array(
1110
+                    'description' => __( 'The tax applied to the invoice.', 'invoicing' ),
1111
+                    'type'        => 'number',
1112
+                    'context'     => array( 'view', 'edit', 'embed' ),
1113
+                    'readonly'    => true,
1114
+                ),
1115
+
1116
+                'fees_total'	  => array(
1117
+                    'description' => __( 'The total fees applied to the invoice.', 'invoicing' ),
1118
+                    'type'        => 'number',
1119
+                    'context'     => array( 'view', 'edit', 'embed' ),
1120
+                    'readonly'    => true,
1121
+                ),
1122
+
1123
+                'subtotal'	  	  => array(
1124
+                    'description' => __( 'The sub-total for the invoice.', 'invoicing' ),
1125
+                    'type'        => 'number',
1126
+                    'context'     => array( 'view', 'edit', 'embed' ),
1127
+                    'readonly'    => true,
1128
+                ),
1129
+
1130
+                'currency'	  	  => array(
1131
+                    'description' => __( 'The currency used to process the invoice.', 'invoicing' ),
1132
+                    'type'        => 'string',
1133
+                    'context'     => array( 'view', 'edit', 'embed' ),
1134
+                ),
1135
+
1136
+                'cart_details'	  => array(
1137
+                    'description' => __( 'The cart details for invoice.', 'invoicing' ),
1138
+                    'type'        => 'array',
1139
+                    'context'     => array( 'view', 'edit', 'embed' ),
1140
+                    'required'	  => true,
1141
+                ),
1142
+
1143
+                'date'         => array(
1144
+                    'description' => __( "The date the invoice was published, in the site's timezone.", 'invoicing' ),
1145
+                    'type'        => array( 'string', 'null' ),
1146
+                    'format'      => 'date-time',
1147
+                    'context'     => array( 'view', 'edit', 'embed' ),
1148
+                ),
1149
+
1150
+                'due_date'     => array(
1151
+                    'description' => __( 'The due date for the invoice.', 'invoicing' ),
1152
+                    'type'        => array( 'string', 'null' ),
1153
+                    'format'      => 'date-time',
1154
+                    'context'     => array( 'view', 'edit', 'embed' ),
1155
+                ),
1156
+
1157
+                'completed_date'  => array(
1158
+                    'description' => __( 'The completed date for the invoice.', 'invoicing' ),
1159
+                    'type'        => array( 'string', 'null' ),
1160
+                    'format'      => 'date-time',
1161
+                    'context'     => array( 'view', 'edit', 'embed' ),
1162
+                    'readonly'    => true,
1163
+                ),
1164 1164
 				
1165
-				'link'         => array(
1166
-					'description' => __( 'URL to the invoice.', 'invoicing' ),
1167
-					'type'        => 'string',
1168
-					'format'      => 'uri',
1169
-					'context'     => array( 'view', 'edit', 'embed' ),
1170
-					'readonly'    => true,
1171
-				),
1172
-
1173
-				'mode'       	  => array(
1174
-					'description' => __( 'The mode used to process the invoice.', 'invoicing' ),
1175
-					'type'        => 'string',
1176
-					'enum'        => array( 'live', 'test' ),
1177
-					'context'     => array( 'view', 'edit', 'embed' ),
1178
-					'readonly'    => true,
1179
-				),
1180
-
1181
-				'slug'       	  => array(
1182
-					'description' => __( 'An alphanumeric identifier for the invoice.', 'invoicing' ),
1183
-					'type'        => 'string',
1184
-					'context'     => array( 'view', 'edit', 'embed' ),
1185
-					'arg_options' => array(
1186
-						'sanitize_callback' => array( $this, 'sanitize_slug' ),
1187
-					),
1188
-					'readonly'    => true,
1189
-				),
1190
-
1191
-				'status'       	  => array(
1192
-					'description' => __( 'A named status for the invoice.', 'invoicing' ),
1193
-					'type'        => 'string',
1194
-					'enum'        => array_keys( wpinv_get_invoice_statuses( true, true ) ),
1195
-					'context'     => array( 'view', 'edit' ),
1196
-					'default'	  => 'wpi-pending',
1197
-				),
1198
-
1199
-				'status_nicename' => array(
1200
-					'description' => __( 'A human-readable status name for the invoice.', 'invoicing' ),
1201
-					'type'        => 'string',
1202
-					'context'     => array( 'view', 'embed' ),
1203
-					'readonly'    => true,
1204
-				),
1205
-
1206
-				'post_type'       => array(
1207
-					'description' => __( 'The post type for the invoice.', 'invoicing' ),
1208
-					'type'        => 'string',
1209
-					'context'     => array( 'view' ),
1210
-					'readonly'    => true,
1211
-				),
1212
-			),
1213
-		);
1214
-
1215
-		// Add helpful links to the invoice schem.
1216
-		$schema['links'] = $this->get_schema_links();
1217
-
1218
-		/**
1219
-		 * Filters the invoice schema for the REST API.
1220
-		 *
1221
-		 * Enables adding extra properties to invoices.
1222
-		 *
1223
-		 * @since 1.0.13
1224
-		 *
1225
-		 * @param array   $schema    The invoice schema.
1226
-		 */
1165
+                'link'         => array(
1166
+                    'description' => __( 'URL to the invoice.', 'invoicing' ),
1167
+                    'type'        => 'string',
1168
+                    'format'      => 'uri',
1169
+                    'context'     => array( 'view', 'edit', 'embed' ),
1170
+                    'readonly'    => true,
1171
+                ),
1172
+
1173
+                'mode'       	  => array(
1174
+                    'description' => __( 'The mode used to process the invoice.', 'invoicing' ),
1175
+                    'type'        => 'string',
1176
+                    'enum'        => array( 'live', 'test' ),
1177
+                    'context'     => array( 'view', 'edit', 'embed' ),
1178
+                    'readonly'    => true,
1179
+                ),
1180
+
1181
+                'slug'       	  => array(
1182
+                    'description' => __( 'An alphanumeric identifier for the invoice.', 'invoicing' ),
1183
+                    'type'        => 'string',
1184
+                    'context'     => array( 'view', 'edit', 'embed' ),
1185
+                    'arg_options' => array(
1186
+                        'sanitize_callback' => array( $this, 'sanitize_slug' ),
1187
+                    ),
1188
+                    'readonly'    => true,
1189
+                ),
1190
+
1191
+                'status'       	  => array(
1192
+                    'description' => __( 'A named status for the invoice.', 'invoicing' ),
1193
+                    'type'        => 'string',
1194
+                    'enum'        => array_keys( wpinv_get_invoice_statuses( true, true ) ),
1195
+                    'context'     => array( 'view', 'edit' ),
1196
+                    'default'	  => 'wpi-pending',
1197
+                ),
1198
+
1199
+                'status_nicename' => array(
1200
+                    'description' => __( 'A human-readable status name for the invoice.', 'invoicing' ),
1201
+                    'type'        => 'string',
1202
+                    'context'     => array( 'view', 'embed' ),
1203
+                    'readonly'    => true,
1204
+                ),
1205
+
1206
+                'post_type'       => array(
1207
+                    'description' => __( 'The post type for the invoice.', 'invoicing' ),
1208
+                    'type'        => 'string',
1209
+                    'context'     => array( 'view' ),
1210
+                    'readonly'    => true,
1211
+                ),
1212
+            ),
1213
+        );
1214
+
1215
+        // Add helpful links to the invoice schem.
1216
+        $schema['links'] = $this->get_schema_links();
1217
+
1218
+        /**
1219
+         * Filters the invoice schema for the REST API.
1220
+         *
1221
+         * Enables adding extra properties to invoices.
1222
+         *
1223
+         * @since 1.0.13
1224
+         *
1225
+         * @param array   $schema    The invoice schema.
1226
+         */
1227 1227
         $schema = apply_filters( "wpinv_rest_invoice_schema", $schema );
1228 1228
 
1229
-		// Cache the invoice schema.
1230
-		$this->schema = $schema;
1229
+        // Cache the invoice schema.
1230
+        $this->schema = $schema;
1231 1231
 		
1232
-		return $this->add_additional_fields_schema( $this->schema );
1233
-	}
1234
-
1235
-	/**
1236
-	 * Retrieve Link Description Objects that should be added to the Schema for the invoices collection.
1237
-	 *
1238
-	 * @since 1.0.13
1239
-	 *
1240
-	 * @return array
1241
-	 */
1242
-	protected function get_schema_links() {
1243
-
1244
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1245
-
1246
-		$links = array();
1247
-
1248
-		$links[] = array(
1249
-			'rel'          => 'https://api.w.org/action-publish',
1250
-			'title'        => __( 'The current user can mark this invoice as completed.', 'invoicing' ),
1251
-			'href'         => $href,
1252
-			'targetSchema' => array(
1253
-				'type'       => 'object',
1254
-				'properties' => array(
1255
-					'status' => array(
1256
-						'type' => 'string',
1257
-						'enum' => array( 'publish', 'wpi-renewal' ),
1258
-					),
1259
-				),
1260
-			),
1261
-		);
1262
-
1263
-		$links[] = array(
1264
-			'rel'          => 'https://api.w.org/action-assign-author',
1265
-			'title'        => __( 'The current user can change the owner of this invoice.', 'invoicing' ),
1266
-			'href'         => $href,
1267
-			'targetSchema' => array(
1268
-				'type'       => 'object',
1269
-				'properties'   => array(
1270
-					'user_id'  => array(
1271
-						'type' => 'integer',
1272
-					),
1273
-				),
1274
-			),
1275
-		);
1276
-
1277
-		return $links;
1278
-	}
1279
-
1280
-	/**
1281
-	 * Prepares links for the request.
1282
-	 *
1283
-	 * @since 1.0.13
1284
-	 *
1285
-	 * @param WPInv_Invoice $invoice Invoice Object.
1286
-	 * @return array Links for the given invoice.
1287
-	 */
1288
-	protected function prepare_links( $invoice ) {
1289
-
1290
-		// Prepare the base REST API endpoint for invoices.
1291
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1292
-
1293
-		// Entity meta.
1294
-		$links = array(
1295
-			'self'       => array(
1296
-				'href' => rest_url( trailingslashit( $base ) . $invoice->ID ),
1297
-			),
1298
-			'collection' => array(
1299
-				'href' => rest_url( $base ),
1300
-			),
1301
-		);
1302
-
1303
-		if ( ! empty( $invoice->user_id ) ) {
1304
-			$links['user'] = array(
1305
-				'href'       => rest_url( 'wp/v2/users/' . $invoice->user_id ),
1306
-				'embeddable' => true,
1307
-			);
1308
-		}
1309
-
1310
-		/**
1311
-		 * Filters the returned invoice links for the REST API.
1312
-		 *
1313
-		 * Enables adding extra links to invoice API responses.
1314
-		 *
1315
-		 * @since 1.0.13
1316
-		 *
1317
-		 * @param array   $links    Rest links.
1318
-		 */
1319
-		return apply_filters( "wpinv_rest_invoice_links", $links );
1320
-
1321
-	}
1322
-
1323
-	/**
1324
-	 * Get the link relations available for the post and current user.
1325
-	 *
1326
-	 * @since 1.0.13
1327
-	 *
1328
-	 * @param WPInv_Invoice   $invoice    Invoice object.
1329
-	 * @param WP_REST_Request $request Request object.
1330
-	 * @return array List of link relations.
1331
-	 */
1332
-	protected function get_available_actions( $invoice, $request ) {
1333
-
1334
-		if ( 'edit' !== $request['context'] ) {
1335
-			return array();
1336
-		}
1337
-
1338
-		$rels = array();
1339
-
1340
-		// Retrieve the post type object.
1341
-		$post_type = get_post_type_object( $invoice->post_type );
1342
-
1343
-		// Mark invoice as completed.
1344
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1345
-			$rels[] = 'https://api.w.org/action-publish';
1346
-		}
1347
-
1348
-		// Change the owner of the invoice.
1349
-		if ( current_user_can( $post_type->cap->edit_others_posts ) ) {
1350
-			$rels[] = 'https://api.w.org/action-assign-author';
1351
-		}
1352
-
1353
-		/**
1354
-		 * Filters the available invoice link relations for the REST API.
1355
-		 *
1356
-		 * Enables adding extra link relation for the current user and request to invoice responses.
1357
-		 *
1358
-		 * @since 1.0.13
1359
-		 *
1360
-		 * @param array   $rels    Available link relations.
1361
-		 */
1362
-		return apply_filters( "wpinv_rest_invoice_link_relations", $rels );
1363
-	}
1364
-
1365
-	/**
1366
-	 * Sanitizes and validates the list of post statuses.
1367
-	 *
1368
-	 * @since 1.0.13
1369
-	 *
1370
-	 * @param string|array    $statuses  One or more post statuses.
1371
-	 * @param WP_REST_Request $request   Full details about the request.
1372
-	 * @param string          $parameter Additional parameter to pass to validation.
1373
-	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
1374
-	 */
1375
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
1376
-
1377
-		$statuses 	  = wp_parse_slug_list( $statuses );
1378
-		$valid_statuses = array_keys( wpinv_get_invoice_statuses( true, true ) );
1379
-		return array_intersect( $statuses, $valid_statuses );
1232
+        return $this->add_additional_fields_schema( $this->schema );
1233
+    }
1234
+
1235
+    /**
1236
+     * Retrieve Link Description Objects that should be added to the Schema for the invoices collection.
1237
+     *
1238
+     * @since 1.0.13
1239
+     *
1240
+     * @return array
1241
+     */
1242
+    protected function get_schema_links() {
1243
+
1244
+        $href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1245
+
1246
+        $links = array();
1247
+
1248
+        $links[] = array(
1249
+            'rel'          => 'https://api.w.org/action-publish',
1250
+            'title'        => __( 'The current user can mark this invoice as completed.', 'invoicing' ),
1251
+            'href'         => $href,
1252
+            'targetSchema' => array(
1253
+                'type'       => 'object',
1254
+                'properties' => array(
1255
+                    'status' => array(
1256
+                        'type' => 'string',
1257
+                        'enum' => array( 'publish', 'wpi-renewal' ),
1258
+                    ),
1259
+                ),
1260
+            ),
1261
+        );
1262
+
1263
+        $links[] = array(
1264
+            'rel'          => 'https://api.w.org/action-assign-author',
1265
+            'title'        => __( 'The current user can change the owner of this invoice.', 'invoicing' ),
1266
+            'href'         => $href,
1267
+            'targetSchema' => array(
1268
+                'type'       => 'object',
1269
+                'properties'   => array(
1270
+                    'user_id'  => array(
1271
+                        'type' => 'integer',
1272
+                    ),
1273
+                ),
1274
+            ),
1275
+        );
1276
+
1277
+        return $links;
1278
+    }
1279
+
1280
+    /**
1281
+     * Prepares links for the request.
1282
+     *
1283
+     * @since 1.0.13
1284
+     *
1285
+     * @param WPInv_Invoice $invoice Invoice Object.
1286
+     * @return array Links for the given invoice.
1287
+     */
1288
+    protected function prepare_links( $invoice ) {
1289
+
1290
+        // Prepare the base REST API endpoint for invoices.
1291
+        $base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1292
+
1293
+        // Entity meta.
1294
+        $links = array(
1295
+            'self'       => array(
1296
+                'href' => rest_url( trailingslashit( $base ) . $invoice->ID ),
1297
+            ),
1298
+            'collection' => array(
1299
+                'href' => rest_url( $base ),
1300
+            ),
1301
+        );
1302
+
1303
+        if ( ! empty( $invoice->user_id ) ) {
1304
+            $links['user'] = array(
1305
+                'href'       => rest_url( 'wp/v2/users/' . $invoice->user_id ),
1306
+                'embeddable' => true,
1307
+            );
1308
+        }
1309
+
1310
+        /**
1311
+         * Filters the returned invoice links for the REST API.
1312
+         *
1313
+         * Enables adding extra links to invoice API responses.
1314
+         *
1315
+         * @since 1.0.13
1316
+         *
1317
+         * @param array   $links    Rest links.
1318
+         */
1319
+        return apply_filters( "wpinv_rest_invoice_links", $links );
1320
+
1321
+    }
1322
+
1323
+    /**
1324
+     * Get the link relations available for the post and current user.
1325
+     *
1326
+     * @since 1.0.13
1327
+     *
1328
+     * @param WPInv_Invoice   $invoice    Invoice object.
1329
+     * @param WP_REST_Request $request Request object.
1330
+     * @return array List of link relations.
1331
+     */
1332
+    protected function get_available_actions( $invoice, $request ) {
1333
+
1334
+        if ( 'edit' !== $request['context'] ) {
1335
+            return array();
1336
+        }
1337
+
1338
+        $rels = array();
1339
+
1340
+        // Retrieve the post type object.
1341
+        $post_type = get_post_type_object( $invoice->post_type );
1342
+
1343
+        // Mark invoice as completed.
1344
+        if ( current_user_can( $post_type->cap->publish_posts ) ) {
1345
+            $rels[] = 'https://api.w.org/action-publish';
1346
+        }
1347
+
1348
+        // Change the owner of the invoice.
1349
+        if ( current_user_can( $post_type->cap->edit_others_posts ) ) {
1350
+            $rels[] = 'https://api.w.org/action-assign-author';
1351
+        }
1352
+
1353
+        /**
1354
+         * Filters the available invoice link relations for the REST API.
1355
+         *
1356
+         * Enables adding extra link relation for the current user and request to invoice responses.
1357
+         *
1358
+         * @since 1.0.13
1359
+         *
1360
+         * @param array   $rels    Available link relations.
1361
+         */
1362
+        return apply_filters( "wpinv_rest_invoice_link_relations", $rels );
1363
+    }
1364
+
1365
+    /**
1366
+     * Sanitizes and validates the list of post statuses.
1367
+     *
1368
+     * @since 1.0.13
1369
+     *
1370
+     * @param string|array    $statuses  One or more post statuses.
1371
+     * @param WP_REST_Request $request   Full details about the request.
1372
+     * @param string          $parameter Additional parameter to pass to validation.
1373
+     * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
1374
+     */
1375
+    public function sanitize_post_statuses( $statuses, $request, $parameter ) {
1376
+
1377
+        $statuses 	  = wp_parse_slug_list( $statuses );
1378
+        $valid_statuses = array_keys( wpinv_get_invoice_statuses( true, true ) );
1379
+        return array_intersect( $statuses, $valid_statuses );
1380 1380
 		
1381
-	}
1381
+    }
1382 1382
     
1383 1383
 }
1384 1384
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +297 added lines, -297 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @since    1.0.13
9 9
  */
10 10
 
11
-if ( !defined( 'WPINC' ) ) {
11
+if (!defined('WPINC')) {
12 12
     exit;
13 13
 }
14 14
 
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
 	 *
42 42
 	 * @param string $namespace Api Namespace
43 43
 	 */
44
-	public function __construct( $namespace ) {
44
+	public function __construct($namespace) {
45 45
         
46 46
         // Set api namespace...
47 47
 		$this->namespace = $namespace;
@@ -60,12 +60,12 @@  discard block
 block discarded – undo
60 60
 	 * @param WP_REST_Request $request Full details about the request.
61 61
 	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
62 62
 	 */
63
-	public function get_items_permissions_check( $request ) {
63
+	public function get_items_permissions_check($request) {
64 64
 	
65
-        $post_type = get_post_type_object( $this->post_type );
65
+        $post_type = get_post_type_object($this->post_type);
66 66
 
67
-		if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {
68
-			return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit invoices.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
67
+		if ('edit' === $request['context'] && !current_user_can($post_type->cap->edit_posts)) {
68
+			return new WP_Error('rest_forbidden_context', __('Sorry, you are not allowed to edit invoices.', 'invoicing'), array('status' => rest_authorization_required_code()));
69 69
 		}
70 70
 
71 71
 		// Read checks will be evaluated on a per invoice basis
@@ -82,17 +82,17 @@  discard block
 block discarded – undo
82 82
 	 * @param WP_REST_Request $request Full details about the request.
83 83
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
84 84
 	 */
85
-	public function get_items( $request ) {
85
+	public function get_items($request) {
86 86
 		
87 87
 		// Retrieve the list of registered invoice query parameters.
88 88
         $registered = $this->get_collection_params();
89 89
         
90 90
         $args       = array();
91 91
 
92
-        foreach( array_keys( $registered ) as $key ) {
92
+        foreach (array_keys($registered) as $key) {
93 93
 
94
-            if( isset( $request[ $key] ) ) {
95
-                $args[ $key ] = $request[ $key];
94
+            if (isset($request[$key])) {
95
+                $args[$key] = $request[$key];
96 96
             }
97 97
 
98 98
         }
@@ -107,32 +107,32 @@  discard block
 block discarded – undo
107 107
 		 * @param array           $args    Key value array of query var to query value.
108 108
 		 * @param WP_REST_Request $request The request used.
109 109
 		 */
110
-        $args       = apply_filters( "wpinv_rest_get_invoices_arguments", $args, $request, $this );
110
+        $args = apply_filters("wpinv_rest_get_invoices_arguments", $args, $request, $this);
111 111
 		
112 112
 		// Special args
113
-		$args[ 'return' ]   = 'objects';
114
-		$args[ 'paginate' ] = true;
113
+		$args['return']   = 'objects';
114
+		$args['paginate'] = true;
115 115
 
116 116
         // Run the query.
117
-		$query = wpinv_get_invoices( $args );
117
+		$query = wpinv_get_invoices($args);
118 118
 		
119 119
 		// Prepare the retrieved invoices
120 120
 		$invoices = array();
121
-		foreach( $query->invoices as $invoice ) {
121
+		foreach ($query->invoices as $invoice) {
122 122
 
123
-			if ( ! $this->check_read_permission( $invoice ) ) {
123
+			if (!$this->check_read_permission($invoice)) {
124 124
 				continue;
125 125
 			}
126 126
 
127
-			$data       = $this->prepare_item_for_response( $invoice, $request );
128
-			$invoices[] = $this->prepare_response_for_collection( $data );
127
+			$data       = $this->prepare_item_for_response($invoice, $request);
128
+			$invoices[] = $this->prepare_response_for_collection($data);
129 129
 
130 130
 		}
131 131
 
132 132
 		// Prepare the response.
133
-		$response = rest_ensure_response( $invoices );
134
-		$response->header( 'X-WP-Total', (int) $query->total );
135
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
133
+		$response = rest_ensure_response($invoices);
134
+		$response->header('X-WP-Total', (int) $query->total);
135
+		$response->header('X-WP-TotalPages', (int) $query->max_num_pages);
136 136
 
137 137
 		/**
138 138
 		 * Filters the responses for invoices requests.
@@ -145,9 +145,9 @@  discard block
 block discarded – undo
145 145
 		 * @param WP_REST_Request     $request The request used.
146 146
          * @param array               $args Array of args used to retrieve the invoices
147 147
 		 */
148
-        $response       = apply_filters( "wpinv_rest_invoices_response", $response, $request, $args );
148
+        $response = apply_filters("wpinv_rest_invoices_response", $response, $request, $args);
149 149
 
150
-        return rest_ensure_response( $response );
150
+        return rest_ensure_response($response);
151 151
         
152 152
     }
153 153
 
@@ -159,17 +159,17 @@  discard block
 block discarded – undo
159 159
 	 * @param int $invoice_id Supplied ID.
160 160
 	 * @return WPInv_Invoice|WP_Error Invoice object if ID is valid, WP_Error otherwise.
161 161
 	 */
162
-	protected function get_post( $invoice_id ) {
162
+	protected function get_post($invoice_id) {
163 163
 		
164
-		$error     = new WP_Error( 'rest_invoice_invalid_id', __( 'Invalid invoice ID.', 'invoicing' ), array( 'status' => 404 ) );
164
+		$error = new WP_Error('rest_invoice_invalid_id', __('Invalid invoice ID.', 'invoicing'), array('status' => 404));
165 165
 
166 166
         // Ids start from 1
167
-        if ( (int) $invoice_id <= 0 ) {
167
+        if ((int) $invoice_id <= 0) {
168 168
 			return $error;
169 169
 		}
170 170
 
171
-		$invoice = wpinv_get_invoice( (int) $invoice_id );
172
-		if ( empty( $invoice ) ) {
171
+		$invoice = wpinv_get_invoice((int) $invoice_id);
172
+		if (empty($invoice)) {
173 173
 			return $error;
174 174
         }
175 175
 
@@ -185,18 +185,18 @@  discard block
 block discarded – undo
185 185
 	 * @param WP_REST_Request $request Full details about the request.
186 186
 	 * @return bool|WP_Error True if the request has read access for the invoice, WP_Error object otherwise.
187 187
 	 */
188
-	public function get_item_permissions_check( $request ) {
188
+	public function get_item_permissions_check($request) {
189 189
 
190 190
         // Retrieve the invoice object.
191
-        $invoice = $this->get_post( $request['id'] );
191
+        $invoice = $this->get_post($request['id']);
192 192
         
193 193
         // Ensure it is valid.
194
-		if ( is_wp_error( $invoice ) ) {
194
+		if (is_wp_error($invoice)) {
195 195
 			return $invoice;
196 196
 		}
197 197
 
198
-		if ( $invoice ) {
199
-			return $this->check_read_permission( $invoice );
198
+		if ($invoice) {
199
+			return $this->check_read_permission($invoice);
200 200
 		}
201 201
 
202 202
 		return true;
@@ -213,8 +213,8 @@  discard block
 block discarded – undo
213 213
 	 * @param WPInv_Invoice $invoice WPInv_Invoice object.
214 214
 	 * @return bool Whether the post can be read.
215 215
 	 */
216
-	public function check_read_permission( $invoice ) {
217
-		return wpinv_user_can_view_invoice( $invoice->ID );
216
+	public function check_read_permission($invoice) {
217
+		return wpinv_user_can_view_invoice($invoice->ID);
218 218
     }
219 219
     
220 220
     /**
@@ -225,19 +225,19 @@  discard block
 block discarded – undo
225 225
 	 * @param WP_REST_Request $request Full details about the request.
226 226
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
227 227
 	 */
228
-	public function get_item( $request ) {
228
+	public function get_item($request) {
229 229
 
230 230
         // Fetch the invoice.
231
-        $invoice = $this->get_post( $request['id'] );
231
+        $invoice = $this->get_post($request['id']);
232 232
         
233 233
         // Abort early if it does not exist
234
-		if ( is_wp_error( $invoice ) ) {
234
+		if (is_wp_error($invoice)) {
235 235
 			return $invoice;
236 236
 		}
237 237
 
238 238
 		// Prepare the response
239
-		$response = $this->prepare_item_for_response( $invoice, $request );
240
-		$response->link_header( 'alternate', esc_url( $invoice->get_view_url() ), array( 'type' => 'text/html' ) );
239
+		$response = $this->prepare_item_for_response($invoice, $request);
240
+		$response->link_header('alternate', esc_url($invoice->get_view_url()), array('type' => 'text/html'));
241 241
 
242 242
 		/**
243 243
 		 * Filters the responses for single invoice requests.
@@ -249,9 +249,9 @@  discard block
 block discarded – undo
249 249
 		 * @param WP_HTTP_Response $response Response.
250 250
 		 * @param WP_REST_Request  $request The request used.
251 251
 		 */
252
-        $response       = apply_filters( "wpinv_rest_get_invoice_response", $response, $request );
252
+        $response = apply_filters("wpinv_rest_get_invoice_response", $response, $request);
253 253
 
254
-        return rest_ensure_response( $response );
254
+        return rest_ensure_response($response);
255 255
 
256 256
     }
257 257
     
@@ -263,18 +263,18 @@  discard block
 block discarded – undo
263 263
 	 * @param WP_REST_Request $request Full details about the request.
264 264
 	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
265 265
 	 */
266
-	public function create_item_permissions_check( $request ) {
266
+	public function create_item_permissions_check($request) {
267 267
 	
268
-		if ( ! empty( $request['id'] ) ) {
269
-			return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
268
+		if (!empty($request['id'])) {
269
+			return new WP_Error('rest_invoice_exists', __('Cannot create existing invoice.', 'invoicing'), array('status' => 400));
270 270
 		}
271 271
 
272
-		$post_type = get_post_type_object( $this->post_type );
272
+		$post_type = get_post_type_object($this->post_type);
273 273
 
274
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
274
+		if (!current_user_can($post_type->cap->create_posts)) {
275 275
 			return new WP_Error( 
276 276
                 'rest_cannot_create', 
277
-                __( 'Sorry, you are not allowed to create invoices as this user.', 'invoicing' ), 
277
+                __('Sorry, you are not allowed to create invoices as this user.', 'invoicing'), 
278 278
                 array( 
279 279
                     'status' => rest_authorization_required_code(),
280 280
                 )
@@ -292,30 +292,30 @@  discard block
 block discarded – undo
292 292
 	 * @param WP_REST_Request $request Full details about the request.
293 293
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
294 294
 	 */
295
-	public function create_item( $request ) {
295
+	public function create_item($request) {
296 296
 
297
-		if ( ! empty( $request['id'] ) ) {
298
-			return new WP_Error( 'rest_invoice_exists', __( 'Cannot create existing invoice.', 'invoicing' ), array( 'status' => 400 ) );
297
+		if (!empty($request['id'])) {
298
+			return new WP_Error('rest_invoice_exists', __('Cannot create existing invoice.', 'invoicing'), array('status' => 400));
299 299
 		}
300 300
 
301
-		$request->set_param( 'context', 'edit' );
301
+		$request->set_param('context', 'edit');
302 302
 
303 303
 		// Prepare the updated data.
304
-		$invoice_data = $this->prepare_item_for_database( $request );
304
+		$invoice_data = $this->prepare_item_for_database($request);
305 305
 
306
-		if ( is_wp_error( $invoice_data ) ) {
306
+		if (is_wp_error($invoice_data)) {
307 307
 			return $invoice_data;
308 308
 		}
309 309
 
310 310
 		// Try creating the invoice
311
-        $invoice = wpinv_insert_invoice( $invoice_data, true );
311
+        $invoice = wpinv_insert_invoice($invoice_data, true);
312 312
 
313
-		if ( is_wp_error( $invoice ) ) {
313
+		if (is_wp_error($invoice)) {
314 314
             return $invoice;
315 315
 		}
316 316
 
317 317
 		// Prepare the response
318
-		$response = $this->prepare_item_for_response( $invoice, $request );
318
+		$response = $this->prepare_item_for_response($invoice, $request);
319 319
 
320 320
 		/**
321 321
 		 * Fires after a single invoice is created or updated via the REST API.
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
 		 * @param WP_REST_Request $request  Request object.
327 327
 		 * @param bool            $creating True when creating a post, false when updating.
328 328
 		 */
329
-		do_action( "wpinv_rest_insert_invoice", $invoice, $request, true );
329
+		do_action("wpinv_rest_insert_invoice", $invoice, $request, true);
330 330
 
331 331
 		/**
332 332
 		 * Filters the responses for creating single invoice requests.
@@ -338,9 +338,9 @@  discard block
 block discarded – undo
338 338
 		 * @param array           $invoice_data Invoice properties.
339 339
 		 * @param WP_REST_Request $request The request used.
340 340
 		 */
341
-        $response       = apply_filters( "wpinv_rest_create_invoice_response", $response, $request );
341
+        $response = apply_filters("wpinv_rest_create_invoice_response", $response, $request);
342 342
 
343
-        return rest_ensure_response( $response );
343
+        return rest_ensure_response($response);
344 344
 	}
345 345
 
346 346
 	/**
@@ -351,20 +351,20 @@  discard block
 block discarded – undo
351 351
 	 * @param WP_REST_Request $request Full details about the request.
352 352
 	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
353 353
 	 */
354
-	public function update_item_permissions_check( $request ) {
354
+	public function update_item_permissions_check($request) {
355 355
 
356 356
 		// Retrieve the invoice.
357
-		$invoice = $this->get_post( $request['id'] );
358
-		if ( is_wp_error( $invoice ) ) {
357
+		$invoice = $this->get_post($request['id']);
358
+		if (is_wp_error($invoice)) {
359 359
 			return $invoice;
360 360
 		}
361 361
 
362
-		$post_type = get_post_type_object( $this->post_type );
362
+		$post_type = get_post_type_object($this->post_type);
363 363
 
364
-		if ( ! current_user_can(  $post_type->cap->edit_post, $invoice->ID  ) ) {
364
+		if (!current_user_can($post_type->cap->edit_post, $invoice->ID)) {
365 365
 			return new WP_Error( 
366 366
                 'rest_cannot_edit', 
367
-                __( 'Sorry, you are not allowed to update this invoice.', 'invoicing' ), 
367
+                __('Sorry, you are not allowed to update this invoice.', 'invoicing'), 
368 368
                 array( 
369 369
                     'status' => rest_authorization_required_code(),
370 370
                 )
@@ -382,46 +382,46 @@  discard block
 block discarded – undo
382 382
 	 * @param WP_REST_Request $request Full details about the request.
383 383
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
384 384
 	 */
385
-	public function update_item( $request ) {
385
+	public function update_item($request) {
386 386
 		
387 387
 		// Ensure the invoice exists.
388
-        $valid_check = $this->get_post( $request['id'] );
388
+        $valid_check = $this->get_post($request['id']);
389 389
         
390 390
         // Abort early if it does not exist
391
-		if ( is_wp_error( $valid_check ) ) {
391
+		if (is_wp_error($valid_check)) {
392 392
 			return $valid_check;
393 393
 		}
394 394
 
395
-		$request->set_param( 'context', 'edit' );
395
+		$request->set_param('context', 'edit');
396 396
 
397 397
 		// Prepare the updated data.
398
-		$data_to_update = $this->prepare_item_for_database( $request );
398
+		$data_to_update = $this->prepare_item_for_database($request);
399 399
 
400
-		if ( is_wp_error( $data_to_update ) ) {
400
+		if (is_wp_error($data_to_update)) {
401 401
 			return $data_to_update;
402 402
 		}
403 403
 
404 404
 		// Abort if no invoice data is provided
405
-        if( empty( $data_to_update ) ) {
406
-            return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
405
+        if (empty($data_to_update)) {
406
+            return new WP_Error('missing_data', __('An update request cannot be empty.', 'invoicing'));
407 407
         }
408 408
 
409 409
 		// Include the invoice ID
410 410
 		$data_to_update['ID'] = $request['id'];
411 411
 
412 412
 		// Update the invoice
413
-		$updated_invoice = wpinv_update_invoice( $data_to_update, true );
413
+		$updated_invoice = wpinv_update_invoice($data_to_update, true);
414 414
 
415 415
 		// Incase the update operation failed...
416
-		if ( is_wp_error( $updated_invoice ) ) {
416
+		if (is_wp_error($updated_invoice)) {
417 417
 			return $updated_invoice;
418 418
 		}
419 419
 
420 420
 		// Prepare the response
421
-		$response = $this->prepare_item_for_response( $updated_invoice, $request );
421
+		$response = $this->prepare_item_for_response($updated_invoice, $request);
422 422
 
423 423
 		/** This action is documented in includes/class-wpinv-rest-invoice-controller.php */
424
-		do_action( "wpinv_rest_insert_invoice", $updated_invoice, $request, false );
424
+		do_action("wpinv_rest_insert_invoice", $updated_invoice, $request, false);
425 425
 
426 426
 		/**
427 427
 		 * Filters the responses for updating single invoice requests.
@@ -433,9 +433,9 @@  discard block
 block discarded – undo
433 433
 		 * @param array           $invoice_data Invoice properties.
434 434
 		 * @param WP_REST_Request $request The request used.
435 435
 		 */
436
-        $response       = apply_filters( "wpinv_rest_update_invoice_response", $response, $request );
436
+        $response = apply_filters("wpinv_rest_update_invoice_response", $response, $request);
437 437
 
438
-        return rest_ensure_response( $response );
438
+        return rest_ensure_response($response);
439 439
 	}
440 440
 
441 441
 	/**
@@ -446,19 +446,19 @@  discard block
 block discarded – undo
446 446
 	 * @param WP_REST_Request $request Full details about the request.
447 447
 	 * @return true|WP_Error True if the request has access to delete the invoice, WP_Error object otherwise.
448 448
 	 */
449
-	public function delete_item_permissions_check( $request ) {
449
+	public function delete_item_permissions_check($request) {
450 450
 
451 451
 		// Retrieve the invoice.
452
-		$invoice = $this->get_post( $request['id'] );
453
-		if ( is_wp_error( $invoice ) ) {
452
+		$invoice = $this->get_post($request['id']);
453
+		if (is_wp_error($invoice)) {
454 454
 			return $invoice;
455 455
 		}
456 456
 
457 457
 		// Ensure the current user can delete invoices
458
-		if ( wpinv_current_user_can_manage_invoicing() ||  current_user_can( 'delete_invoices', $request['id'] ) ) {
458
+		if (wpinv_current_user_can_manage_invoicing() || current_user_can('delete_invoices', $request['id'])) {
459 459
 			return new WP_Error( 
460 460
                 'rest_cannot_delete', 
461
-                __( 'Sorry, you are not allowed to delete this invoice.', 'invoicing' ), 
461
+                __('Sorry, you are not allowed to delete this invoice.', 'invoicing'), 
462 462
                 array( 
463 463
                     'status' => rest_authorization_required_code(),
464 464
                 )
@@ -476,31 +476,31 @@  discard block
 block discarded – undo
476 476
 	 * @param WP_REST_Request $request Full details about the request.
477 477
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
478 478
 	 */
479
-	public function delete_item( $request ) {
479
+	public function delete_item($request) {
480 480
 		
481 481
 		// Retrieve the invoice.
482
-		$invoice = $this->get_post( $request['id'] );
483
-		if ( is_wp_error( $invoice ) ) {
482
+		$invoice = $this->get_post($request['id']);
483
+		if (is_wp_error($invoice)) {
484 484
 			return $invoice;
485 485
 		}
486 486
 
487
-		$request->set_param( 'context', 'edit' );
487
+		$request->set_param('context', 'edit');
488 488
 
489 489
 		// Prepare the invoice id
490
-		$id    = $invoice->ID;
490
+		$id = $invoice->ID;
491 491
 
492 492
 		// Prepare the response
493
-		$response = $this->prepare_item_for_response( $invoice, $request );
493
+		$response = $this->prepare_item_for_response($invoice, $request);
494 494
 
495 495
 		// Check if the user wants to bypass the trash...
496 496
 		$force_delete = (bool) $request['force'];
497 497
 
498 498
 		// Try deleting the invoice.
499
-		$deleted = wp_delete_post( $id, $force_delete );
499
+		$deleted = wp_delete_post($id, $force_delete);
500 500
 
501 501
 		// Abort early if we can't delete the invoice.
502
-		if ( ! $deleted ) {
503
-			return new WP_Error( 'rest_cannot_delete', __( 'The invoice cannot be deleted.', 'invoicing' ), array( 'status' => 500 ) );
502
+		if (!$deleted) {
503
+			return new WP_Error('rest_cannot_delete', __('The invoice cannot be deleted.', 'invoicing'), array('status' => 500));
504 504
 		}
505 505
 
506 506
 		/**
@@ -512,7 +512,7 @@  discard block
 block discarded – undo
512 512
 		 * @param WPInv_Invoice    $invoice  The deleted or trashed invoice.
513 513
 		 * @param WP_REST_Request  $request  The request sent to the API.
514 514
 		 */
515
-		do_action( "wpinv_rest_delete_invoice", $invoice, $request );
515
+		do_action("wpinv_rest_delete_invoice", $invoice, $request);
516 516
 
517 517
 		return $response;
518 518
 
@@ -528,43 +528,43 @@  discard block
 block discarded – undo
528 528
 	 */
529 529
 	public function get_collection_params() {
530 530
         
531
-        $query_params               = array(
531
+        $query_params = array(
532 532
 
533 533
             // Invoice status.
534 534
             'status'                => array(
535 535
                 'default'           => 'publish',
536
-                'description'       => __( 'Limit result set to invoices assigned one or more statuses.', 'invoicing' ),
536
+                'description'       => __('Limit result set to invoices assigned one or more statuses.', 'invoicing'),
537 537
                 'type'              => 'array',
538 538
                 'items'             => array(
539
-                    'enum'          => array_keys( wpinv_get_invoice_statuses( true, true ) ),
539
+                    'enum'          => array_keys(wpinv_get_invoice_statuses(true, true)),
540 540
                     'type'          => 'string',
541 541
                 ),
542
-                'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
542
+                'sanitize_callback' => array($this, 'sanitize_post_statuses'),
543 543
             ),
544 544
 
545 545
             // User.
546 546
             'user'                  => array(
547
-				'description'       => __( 'Limit result set to invoices for a specif user.', 'invoicing' ),
547
+				'description'       => __('Limit result set to invoices for a specif user.', 'invoicing'),
548 548
 				'type'              => 'integer',
549 549
             ),
550 550
             
551 551
             // Number of results per page
552 552
             'limit'                 => array(
553
-				'description'       => __( 'Number of invoices to fetch.', 'invoicing' ),
553
+				'description'       => __('Number of invoices to fetch.', 'invoicing'),
554 554
 				'type'              => 'integer',
555
-				'default'           => (int) get_option( 'posts_per_page' ),
555
+				'default'           => (int) get_option('posts_per_page'),
556 556
             ),
557 557
 
558 558
             // Pagination
559 559
             'page'     => array(
560
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
560
+				'description'       => __('Current page to fetch.', 'invoicing'),
561 561
 				'type'              => 'integer',
562 562
 				'default'           => 1,
563 563
             ),
564 564
 
565 565
             // Exclude certain invoices
566 566
             'exclude'  => array(
567
-                'description' => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
567
+                'description' => __('Ensure result set excludes specific IDs.', 'invoicing'),
568 568
                 'type'        => 'array',
569 569
                 'items'       => array(
570 570
                     'type' => 'integer',
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
 
575 575
             // Order invoices by
576 576
             'orderby'  => array(
577
-                'description' => __( 'Sort invoices by object attribute.', 'invoicing' ),
577
+                'description' => __('Sort invoices by object attribute.', 'invoicing'),
578 578
                 'type'        => 'string',
579 579
                 'default'     => 'date',
580 580
                 'enum'        => array(
@@ -588,10 +588,10 @@  discard block
 block discarded – undo
588 588
 
589 589
             // How to order
590 590
             'order'    => array(
591
-                'description' => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
591
+                'description' => __('Order sort attribute ascending or descending.', 'invoicing'),
592 592
                 'type'        => 'string',
593 593
                 'default'     => 'DESC',
594
-                'enum'        => array( 'ASC', 'DESC' ),
594
+                'enum'        => array('ASC', 'DESC'),
595 595
             ),
596 596
         );
597 597
 
@@ -603,7 +603,7 @@  discard block
 block discarded – undo
603 603
 		 *
604 604
 		 * @param array        $query_params JSON Schema-formatted collection parameters.
605 605
 		 */
606
-		return apply_filters( "wpinv_rest_invoices_collection_params", $query_params );
606
+		return apply_filters("wpinv_rest_invoices_collection_params", $query_params);
607 607
     }
608 608
     
609 609
     /**
@@ -614,7 +614,7 @@  discard block
 block discarded – undo
614 614
 	 * @param object|string $post_type Post type name or object.
615 615
 	 * @return bool Whether the post type is allowed in REST.
616 616
 	 */
617
-	protected function check_is_post_type_allowed( $post_type ) {
617
+	protected function check_is_post_type_allowed($post_type) {
618 618
 		return true;
619 619
 	}
620 620
 
@@ -626,49 +626,49 @@  discard block
 block discarded – undo
626 626
 	 * @param WP_REST_Request $request Request object.
627 627
 	 * @return array|WP_Error Invoice Properties or WP_Error.
628 628
 	 */
629
-	protected function prepare_item_for_database( $request ) {
629
+	protected function prepare_item_for_database($request) {
630 630
 		$prepared_invoice = new stdClass();
631 631
 
632 632
 		// Post ID.
633
-		if ( isset( $request['id'] ) ) {
634
-			$existing_invoice = $this->get_post( $request['id'] );
635
-			if ( is_wp_error( $existing_invoice ) ) {
633
+		if (isset($request['id'])) {
634
+			$existing_invoice = $this->get_post($request['id']);
635
+			if (is_wp_error($existing_invoice)) {
636 636
 				return $existing_invoice;
637 637
 			}
638 638
 
639
-			$prepared_invoice->ID 		  = $existing_invoice->ID;
639
+			$prepared_invoice->ID = $existing_invoice->ID;
640 640
 			$prepared_invoice->invoice_id = $existing_invoice->ID;
641 641
 		}
642 642
 
643 643
 		$schema = $this->get_item_schema();
644 644
 
645 645
 		// Invoice owner.
646
-		if ( ! empty( $schema['properties']['user_id'] ) && isset( $request['user_id'] ) ) {
646
+		if (!empty($schema['properties']['user_id']) && isset($request['user_id'])) {
647 647
 			$prepared_invoice->user_id = (int) $request['user_id'];
648 648
 		}
649 649
 
650 650
 		// Cart details.
651
-		if ( ! empty( $schema['properties']['cart_details'] ) && isset( $request['cart_details'] ) ) {
651
+		if (!empty($schema['properties']['cart_details']) && isset($request['cart_details'])) {
652 652
 			$prepared_invoice->cart_details = (array) $request['cart_details'];
653 653
 		}
654 654
 
655 655
 		// Invoice status.
656
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
656
+		if (!empty($schema['properties']['status']) && isset($request['status'])) {
657 657
 
658
-			if ( in_array( $request['status'], array_keys( wpinv_get_invoice_statuses( true, true ) ), true ) ) {
658
+			if (in_array($request['status'], array_keys(wpinv_get_invoice_statuses(true, true)), true)) {
659 659
 				$prepared_invoice->status = $request['status'];
660 660
 			}
661 661
 
662 662
 		}
663 663
 
664 664
 		// User info
665
-		if ( ! empty( $schema['properties']['user_info'] ) && isset( $request['user_info'] ) ) {
665
+		if (!empty($schema['properties']['user_info']) && isset($request['user_info'])) {
666 666
 			$prepared_invoice->user_info = array();
667 667
 			$user_info = (array) $request['user_info'];
668 668
 
669
-			foreach( $user_info as $prop => $value ) {
669
+			foreach ($user_info as $prop => $value) {
670 670
 
671
-				if ( ! empty( $schema['properties']['user_info']['properties'][$prop] ) ) {
671
+				if (!empty($schema['properties']['user_info']['properties'][$prop])) {
672 672
 
673 673
 					$prepared_invoice->user_info[$prop] = $value;
674 674
 		
@@ -679,49 +679,49 @@  discard block
 block discarded – undo
679 679
 		}
680 680
 
681 681
 		// IP
682
-		if ( ! empty( $schema['properties']['ip'] ) && isset( $request['ip'] ) ) {
682
+		if (!empty($schema['properties']['ip']) && isset($request['ip'])) {
683 683
 			$prepared_invoice->ip = $request['ip'];
684 684
 		}
685 685
 
686 686
 		// Payment details
687 687
 		$prepared_invoice->payment_details = array();
688 688
 
689
-		if ( ! empty( $schema['properties']['gateway'] ) && isset( $request['gateway'] ) ) {
689
+		if (!empty($schema['properties']['gateway']) && isset($request['gateway'])) {
690 690
 			$prepared_invoice->payment_details['gateway'] = $request['gateway'];
691 691
 		}
692 692
 
693
-		if ( ! empty( $schema['properties']['gateway_title'] ) && isset( $request['gateway_title'] ) ) {
693
+		if (!empty($schema['properties']['gateway_title']) && isset($request['gateway_title'])) {
694 694
 			$prepared_invoice->payment_details['gateway_title'] = $request['gateway_title'];
695 695
 		}
696 696
 
697
-		if ( ! empty( $schema['properties']['currency'] ) && isset( $request['currency'] ) ) {
697
+		if (!empty($schema['properties']['currency']) && isset($request['currency'])) {
698 698
 			$prepared_invoice->payment_details['currency'] = $request['currency'];
699 699
 		}
700 700
 
701
-		if ( ! empty( $schema['properties']['transaction_id'] ) && isset( $request['transaction_id'] ) ) {
701
+		if (!empty($schema['properties']['transaction_id']) && isset($request['transaction_id'])) {
702 702
 			$prepared_invoice->payment_details['transaction_id'] = $request['transaction_id'];
703 703
 		}
704 704
 
705 705
 		// Dates
706
-		if ( ! empty( $schema['properties']['date'] ) && isset( $request['date'] ) ) {
707
-			$post_date = rest_get_date_with_gmt( $request['date'] );
706
+		if (!empty($schema['properties']['date']) && isset($request['date'])) {
707
+			$post_date = rest_get_date_with_gmt($request['date']);
708 708
 
709
-			if ( ! empty( $post_date ) ) {
709
+			if (!empty($post_date)) {
710 710
 				$prepared_invoice->post_date = $post_date[0];
711 711
 			}
712 712
 			
713 713
 		}
714 714
 
715
-		if ( ! empty( $schema['properties']['due_date'] ) && isset( $request['due_date'] ) ) {
716
-			$due_date = rest_get_date_with_gmt( $request['due_date'] );
715
+		if (!empty($schema['properties']['due_date']) && isset($request['due_date'])) {
716
+			$due_date = rest_get_date_with_gmt($request['due_date']);
717 717
 
718
-			if ( ! empty( $due_date ) ) {
718
+			if (!empty($due_date)) {
719 719
 				$prepared_invoice->due_date = $due_date[0];
720 720
 			}
721 721
 
722 722
 		}
723 723
 
724
-		$invoice_data = (array) wp_unslash( $prepared_invoice );
724
+		$invoice_data = (array) wp_unslash($prepared_invoice);
725 725
 
726 726
 		/**
727 727
 		 * Filters an invoice before it is inserted via the REST API.
@@ -731,7 +731,7 @@  discard block
 block discarded – undo
731 731
 		 * @param array        $invoice_data An array of invoice data
732 732
 		 * @param WP_REST_Request $request       Request object.
733 733
 		 */
734
-		return apply_filters( "wpinv_rest_pre_insert_invoice", $invoice_data, $request );
734
+		return apply_filters("wpinv_rest_pre_insert_invoice", $invoice_data, $request);
735 735
 
736 736
 	}
737 737
 
@@ -744,20 +744,20 @@  discard block
 block discarded – undo
744 744
 	 * @param WP_REST_Request $request Request object.
745 745
 	 * @return WP_REST_Response Response object.
746 746
 	 */
747
-	public function prepare_item_for_response( $invoice, $request ) {
747
+	public function prepare_item_for_response($invoice, $request) {
748 748
 
749
-		$GLOBALS['post'] = get_post( $invoice->ID );
749
+		$GLOBALS['post'] = get_post($invoice->ID);
750 750
 
751
-		setup_postdata( $invoice->ID );
751
+		setup_postdata($invoice->ID);
752 752
 
753 753
 		// Fetch the fields to include in this response.
754
-		$fields = $this->get_fields_for_response( $request );
754
+		$fields = $this->get_fields_for_response($request);
755 755
 
756 756
 		// Base fields for every invoice.
757 757
 		$data = array();
758 758
 
759 759
 		// Set up ID
760
-		if ( rest_is_field_included( 'id', $fields ) ) {
760
+		if (rest_is_field_included('id', $fields)) {
761 761
 			$data['id'] = $invoice->ID;
762 762
 		}
763 763
 
@@ -772,74 +772,74 @@  discard block
 block discarded – undo
772 772
 			'status', 'status_nicename', 'post_type'
773 773
 		);
774 774
 
775
-		foreach( $invoice_properties as $property ) {
775
+		foreach ($invoice_properties as $property) {
776 776
 
777
-			if ( rest_is_field_included( $property, $fields ) ) {
778
-				$data[$property] = $invoice->get( $property );
777
+			if (rest_is_field_included($property, $fields)) {
778
+				$data[$property] = $invoice->get($property);
779 779
 			}
780 780
 
781 781
 		}
782 782
 
783 783
 		// Cart details
784
-		if ( rest_is_field_included( 'cart_details', $fields ) ) {
785
-			$data['cart_details'] = $invoice->get( 'cart_details' );
784
+		if (rest_is_field_included('cart_details', $fields)) {
785
+			$data['cart_details'] = $invoice->get('cart_details');
786 786
 		}
787 787
 
788 788
 		//Dates
789
-		$invoice_properties = array( 'date', 'due_date', 'completed_date' );
789
+		$invoice_properties = array('date', 'due_date', 'completed_date');
790 790
 
791
-		foreach( $invoice_properties as $property ) {
791
+		foreach ($invoice_properties as $property) {
792 792
 
793
-			if ( rest_is_field_included( $property, $fields ) ) {
794
-				$data[$property] = $this->prepare_date_response( '0000-00-00 00:00:00', $invoice->get( $property ) );
793
+			if (rest_is_field_included($property, $fields)) {
794
+				$data[$property] = $this->prepare_date_response('0000-00-00 00:00:00', $invoice->get($property));
795 795
 			}
796 796
 
797 797
 		}
798 798
 
799 799
 		// User id
800
-		if ( rest_is_field_included( 'user_id', $fields ) ) {
801
-			$data['user_id'] = (int) $invoice->get( 'user_id' );
800
+		if (rest_is_field_included('user_id', $fields)) {
801
+			$data['user_id'] = (int) $invoice->get('user_id');
802 802
 		}
803 803
 
804 804
 		// User info
805
-		$user_info = array( 'first_name', 'last_name', 'company', 'vat_number', 'vat_rate', 'address', 'city', 'country', 'state', 'zip', 'phone' );
805
+		$user_info = array('first_name', 'last_name', 'company', 'vat_number', 'vat_rate', 'address', 'city', 'country', 'state', 'zip', 'phone');
806 806
 
807
-		foreach( $user_info as $property ) {
807
+		foreach ($user_info as $property) {
808 808
 
809
-			if ( rest_is_field_included( "user_info.$property", $fields ) ) {
810
-				$data['user_info'][$property] = $invoice->get( $property );
809
+			if (rest_is_field_included("user_info.$property", $fields)) {
810
+				$data['user_info'][$property] = $invoice->get($property);
811 811
 			}
812 812
 
813 813
 		}
814 814
 
815 815
 		// Slug
816
-		if ( rest_is_field_included( 'slug', $fields ) ) {
817
-			$data['slug'] = $invoice->get( 'post_name' );
816
+		if (rest_is_field_included('slug', $fields)) {
817
+			$data['slug'] = $invoice->get('post_name');
818 818
 		}
819 819
 
820 820
 		// View invoice link
821
-		if ( rest_is_field_included( 'link', $fields ) ) {
822
-			$data['link'] = esc_url( $invoice->get_view_url() );
821
+		if (rest_is_field_included('link', $fields)) {
822
+			$data['link'] = esc_url($invoice->get_view_url());
823 823
 		}
824 824
 
825 825
 
826
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
827
-		$data    = $this->add_additional_fields_to_object( $data, $request );
828
-		$data    = $this->filter_response_by_context( $data, $context );
826
+		$context = !empty($request['context']) ? $request['context'] : 'view';
827
+		$data    = $this->add_additional_fields_to_object($data, $request);
828
+		$data    = $this->filter_response_by_context($data, $context);
829 829
 
830 830
 		// Wrap the data in a response object.
831
-		$response = rest_ensure_response( $data );
831
+		$response = rest_ensure_response($data);
832 832
 
833
-		$links = $this->prepare_links( $invoice );
834
-		$response->add_links( $links );
833
+		$links = $this->prepare_links($invoice);
834
+		$response->add_links($links);
835 835
 
836
-		if ( ! empty( $links['self']['href'] ) ) {
837
-			$actions = $this->get_available_actions( $invoice, $request );
836
+		if (!empty($links['self']['href'])) {
837
+			$actions = $this->get_available_actions($invoice, $request);
838 838
 
839 839
 			$self = $links['self']['href'];
840 840
 
841
-			foreach ( $actions as $rel ) {
842
-				$response->add_link( $rel, $self );
841
+			foreach ($actions as $rel) {
842
+				$response->add_link($rel, $self);
843 843
 			}
844 844
 		}
845 845
 
@@ -852,7 +852,7 @@  discard block
 block discarded – undo
852 852
 		 * @param WPInv_Invoice    $invoice  The invoice object.
853 853
 		 * @param WP_REST_Request  $request  Request object.
854 854
 		 */
855
-		return apply_filters( "wpinv_rest_prepare_invoice", $response, $invoice, $request );
855
+		return apply_filters("wpinv_rest_prepare_invoice", $response, $invoice, $request);
856 856
 	}
857 857
 
858 858
 	/**
@@ -865,57 +865,57 @@  discard block
 block discarded – undo
865 865
 	 * @param WP_REST_Request $request Full details about the request.
866 866
 	 * @return array Fields to be included in the response.
867 867
 	 */
868
-	public function get_fields_for_response( $request ) {
868
+	public function get_fields_for_response($request) {
869 869
 		$schema     = $this->get_item_schema();
870
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
870
+		$properties = isset($schema['properties']) ? $schema['properties'] : array();
871 871
 
872 872
 		$additional_fields = $this->get_additional_fields();
873
-		foreach ( $additional_fields as $field_name => $field_options ) {
873
+		foreach ($additional_fields as $field_name => $field_options) {
874 874
 			// For back-compat, include any field with an empty schema
875 875
 			// because it won't be present in $this->get_item_schema().
876
-			if ( is_null( $field_options['schema'] ) ) {
877
-				$properties[ $field_name ] = $field_options;
876
+			if (is_null($field_options['schema'])) {
877
+				$properties[$field_name] = $field_options;
878 878
 			}
879 879
 		}
880 880
 
881 881
 		// Exclude fields that specify a different context than the request context.
882 882
 		$context = $request['context'];
883
-		if ( $context ) {
884
-			foreach ( $properties as $name => $options ) {
885
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
886
-					unset( $properties[ $name ] );
883
+		if ($context) {
884
+			foreach ($properties as $name => $options) {
885
+				if (!empty($options['context']) && !in_array($context, $options['context'], true)) {
886
+					unset($properties[$name]);
887 887
 				}
888 888
 			}
889 889
 		}
890 890
 
891
-		$fields = array_keys( $properties );
891
+		$fields = array_keys($properties);
892 892
 
893
-		if ( ! isset( $request['_fields'] ) ) {
893
+		if (!isset($request['_fields'])) {
894 894
 			return $fields;
895 895
 		}
896
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
897
-		if ( 0 === count( $requested_fields ) ) {
896
+		$requested_fields = wpinv_parse_list($request['_fields']);
897
+		if (0 === count($requested_fields)) {
898 898
 			return $fields;
899 899
 		}
900 900
 		// Trim off outside whitespace from the comma delimited list.
901
-		$requested_fields = array_map( 'trim', $requested_fields );
901
+		$requested_fields = array_map('trim', $requested_fields);
902 902
 		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
903
-		if ( in_array( 'id', $fields, true ) ) {
903
+		if (in_array('id', $fields, true)) {
904 904
 			$requested_fields[] = 'id';
905 905
 		}
906 906
 		// Return the list of all requested fields which appear in the schema.
907 907
 		return array_reduce(
908 908
 			$requested_fields,
909
-			function( $response_fields, $field ) use ( $fields ) {
910
-				if ( in_array( $field, $fields, true ) ) {
909
+			function($response_fields, $field) use ($fields) {
910
+				if (in_array($field, $fields, true)) {
911 911
 					$response_fields[] = $field;
912 912
 					return $response_fields;
913 913
 				}
914 914
 				// Check for nested fields if $field is not a direct match.
915
-				$nested_fields = explode( '.', $field );
915
+				$nested_fields = explode('.', $field);
916 916
 				// A nested field is included so long as its top-level property is
917 917
 				// present in the schema.
918
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
918
+				if (in_array($nested_fields[0], $fields, true)) {
919 919
 					$response_fields[] = $field;
920 920
 				}
921 921
 				return $response_fields;
@@ -934,8 +934,8 @@  discard block
 block discarded – undo
934 934
 	public function get_item_schema() {
935 935
 
936 936
 		// Maybe retrieve the schema from cache.
937
-		if ( $this->schema ) {
938
-			return $this->add_additional_fields_schema( $this->schema );
937
+		if ($this->schema) {
938
+			return $this->add_additional_fields_schema($this->schema);
939 939
 		}
940 940
 
941 941
 		$schema = array(
@@ -947,266 +947,266 @@  discard block
 block discarded – undo
947 947
 			'properties' 		  => array(
948 948
 
949 949
 				'title'			  => array(
950
-					'description' => __( 'The title for the invoice.', 'invoicing' ),
950
+					'description' => __('The title for the invoice.', 'invoicing'),
951 951
 					'type'        => 'string',
952
-					'context'     => array( 'view', 'edit', 'embed' ),
952
+					'context'     => array('view', 'edit', 'embed'),
953 953
 					'readonly'    => true,
954 954
 				),
955 955
 
956 956
 				'user_id'		  => array(
957
-					'description' => __( 'The ID of the owner of the invoice.', 'invoicing' ),
957
+					'description' => __('The ID of the owner of the invoice.', 'invoicing'),
958 958
 					'type'        => 'integer',
959
-					'context'     => array( 'view', 'edit', 'embed' ),
959
+					'context'     => array('view', 'edit', 'embed'),
960 960
 				),
961 961
 
962 962
 				'email'		  	  => array(
963
-					'description' => __( 'The email of the owner of the invoice.', 'invoicing' ),
963
+					'description' => __('The email of the owner of the invoice.', 'invoicing'),
964 964
 					'type'        => 'string',
965
-					'context'     => array( 'view', 'edit', 'embed' ),
965
+					'context'     => array('view', 'edit', 'embed'),
966 966
 					'readonly'    => true,
967 967
 				),
968 968
 
969 969
 				'ip'			  => array(
970
-					'description' => __( 'The IP of the owner of the invoice.', 'invoicing' ),
970
+					'description' => __('The IP of the owner of the invoice.', 'invoicing'),
971 971
 					'type'        => 'string',
972
-					'context'     => array( 'view', 'edit', 'embed' ),
972
+					'context'     => array('view', 'edit', 'embed'),
973 973
 				),
974 974
 
975 975
 				'user_info'       => array(
976
-					'description' => __( 'Information about the owner of the invoice.', 'invoicing' ),
976
+					'description' => __('Information about the owner of the invoice.', 'invoicing'),
977 977
 					'type'        => 'object',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
978
+					'context'     => array('view', 'edit', 'embed'),
979 979
 					'properties'  => array(
980 980
 
981 981
 						'first_name'      => array(
982
-							'description' => __( 'The first name of the owner of the invoice.', 'invoicing' ),
982
+							'description' => __('The first name of the owner of the invoice.', 'invoicing'),
983 983
 							'type'        => 'string',
984
-							'context'     => array( 'view', 'edit', 'embed' ),
984
+							'context'     => array('view', 'edit', 'embed'),
985 985
 						),
986 986
 
987 987
 						'last_name'       => array(
988
-							'description' => __( 'The last name of the owner of the invoice.', 'invoicing' ),
988
+							'description' => __('The last name of the owner of the invoice.', 'invoicing'),
989 989
 							'type'        => 'string',
990
-							'context'     => array( 'view', 'edit', 'embed' ),
990
+							'context'     => array('view', 'edit', 'embed'),
991 991
 						),
992 992
 
993 993
 						'company'         => array(
994
-							'description' => __( 'The company of the owner of the invoice.', 'invoicing' ),
994
+							'description' => __('The company of the owner of the invoice.', 'invoicing'),
995 995
 							'type'        => 'string',
996
-							'context'     => array( 'view', 'edit', 'embed' ),
996
+							'context'     => array('view', 'edit', 'embed'),
997 997
 						),
998 998
 
999 999
 						'vat_number'      => array(
1000
-							'description' => __( 'The VAT number of the owner of the invoice.', 'invoicing' ),
1000
+							'description' => __('The VAT number of the owner of the invoice.', 'invoicing'),
1001 1001
 							'type'        => 'string',
1002
-							'context'     => array( 'view', 'edit', 'embed' ),
1002
+							'context'     => array('view', 'edit', 'embed'),
1003 1003
 						),
1004 1004
 
1005 1005
 						'vat_rate'        => array(
1006
-							'description' => __( 'The VAT rate applied on the invoice.', 'invoicing' ),
1006
+							'description' => __('The VAT rate applied on the invoice.', 'invoicing'),
1007 1007
 							'type'        => 'string',
1008
-							'context'     => array( 'view', 'edit', 'embed' ),
1008
+							'context'     => array('view', 'edit', 'embed'),
1009 1009
 						),
1010 1010
 
1011 1011
 						'address'        => array(
1012
-							'description' => __( 'The address of the invoice owner.', 'invoicing' ),
1012
+							'description' => __('The address of the invoice owner.', 'invoicing'),
1013 1013
 							'type'        => 'string',
1014
-							'context'     => array( 'view', 'edit', 'embed' ),
1014
+							'context'     => array('view', 'edit', 'embed'),
1015 1015
 						),
1016 1016
 
1017 1017
 						'city'            => array(
1018
-							'description' => __( 'The city of the invoice owner.', 'invoicing' ),
1018
+							'description' => __('The city of the invoice owner.', 'invoicing'),
1019 1019
 							'type'        => 'string',
1020
-							'context'     => array( 'view', 'edit', 'embed' ),
1020
+							'context'     => array('view', 'edit', 'embed'),
1021 1021
 						),
1022 1022
 
1023 1023
 						'country'         => array(
1024
-							'description' => __( 'The country of the invoice owner.', 'invoicing' ),
1024
+							'description' => __('The country of the invoice owner.', 'invoicing'),
1025 1025
 							'type'        => 'string',
1026
-							'context'     => array( 'view', 'edit', 'embed' ),
1026
+							'context'     => array('view', 'edit', 'embed'),
1027 1027
 						),
1028 1028
 
1029 1029
 						'state'           => array(
1030
-							'description' => __( 'The state of the invoice owner.', 'invoicing' ),
1030
+							'description' => __('The state of the invoice owner.', 'invoicing'),
1031 1031
 							'type'        => 'string',
1032
-							'context'     => array( 'view', 'edit', 'embed' ),
1032
+							'context'     => array('view', 'edit', 'embed'),
1033 1033
 						),
1034 1034
 
1035 1035
 						'zip'             => array(
1036
-							'description' => __( 'The zip code of the invoice owner.', 'invoicing' ),
1036
+							'description' => __('The zip code of the invoice owner.', 'invoicing'),
1037 1037
 							'type'        => 'string',
1038
-							'context'     => array( 'view', 'edit', 'embed' ),
1038
+							'context'     => array('view', 'edit', 'embed'),
1039 1039
 						),
1040 1040
 
1041 1041
 						'phone'             => array(
1042
-							'description' => __( 'The phone number of the invoice owner.', 'invoicing' ),
1042
+							'description' => __('The phone number of the invoice owner.', 'invoicing'),
1043 1043
 							'type'        => 'string',
1044
-							'context'     => array( 'view', 'edit', 'embed' ),
1044
+							'context'     => array('view', 'edit', 'embed'),
1045 1045
 						),
1046 1046
 					),
1047 1047
 				),
1048 1048
 
1049 1049
 				'id'           => array(
1050
-					'description' => __( 'Unique identifier for the invoice.', 'invoicing' ),
1050
+					'description' => __('Unique identifier for the invoice.', 'invoicing'),
1051 1051
 					'type'        => 'integer',
1052
-					'context'     => array( 'view', 'edit', 'embed' ),
1052
+					'context'     => array('view', 'edit', 'embed'),
1053 1053
 					'readonly'    => true,
1054 1054
 				),
1055 1055
 
1056 1056
 				'key'			  => array(
1057
-					'description' => __( 'A unique key for the invoice.', 'invoicing' ),
1057
+					'description' => __('A unique key for the invoice.', 'invoicing'),
1058 1058
 					'type'        => 'string',
1059
-					'context'     => array( 'view', 'edit', 'embed' ),
1059
+					'context'     => array('view', 'edit', 'embed'),
1060 1060
 					'readonly'    => true,
1061 1061
 				),
1062 1062
 
1063 1063
 				'number'		  => array(
1064
-					'description' => __( 'The invoice number.', 'invoicing' ),
1064
+					'description' => __('The invoice number.', 'invoicing'),
1065 1065
 					'type'        => 'string',
1066
-					'context'     => array( 'view', 'edit', 'embed' ),
1066
+					'context'     => array('view', 'edit', 'embed'),
1067 1067
 					'readonly'    => true,
1068 1068
 				),
1069 1069
 
1070 1070
 				'transaction_id'  => array(
1071
-					'description' => __( 'The transaction id of the invoice.', 'invoicing' ),
1071
+					'description' => __('The transaction id of the invoice.', 'invoicing'),
1072 1072
 					'type'        => 'string',
1073
-					'context'     => array( 'view', 'edit', 'embed' ),
1073
+					'context'     => array('view', 'edit', 'embed'),
1074 1074
 				),
1075 1075
 
1076 1076
 				'gateway'		  => array(
1077
-					'description' => __( 'The gateway used to process the invoice.', 'invoicing' ),
1077
+					'description' => __('The gateway used to process the invoice.', 'invoicing'),
1078 1078
 					'type'        => 'string',
1079
-					'context'     => array( 'view', 'edit', 'embed' ),
1079
+					'context'     => array('view', 'edit', 'embed'),
1080 1080
 				),
1081 1081
 
1082 1082
 				'gateway_title'	  => array(
1083
-					'description' => __( 'The title of the gateway used to process the invoice.', 'invoicing' ),
1083
+					'description' => __('The title of the gateway used to process the invoice.', 'invoicing'),
1084 1084
 					'type'        => 'string',
1085
-					'context'     => array( 'view', 'edit', 'embed' ),
1085
+					'context'     => array('view', 'edit', 'embed'),
1086 1086
 				),
1087 1087
 
1088 1088
 				'total'	  		  => array(
1089
-					'description' => __( 'The total amount of the invoice.', 'invoicing' ),
1089
+					'description' => __('The total amount of the invoice.', 'invoicing'),
1090 1090
 					'type'        => 'number',
1091
-					'context'     => array( 'view', 'edit', 'embed' ),
1091
+					'context'     => array('view', 'edit', 'embed'),
1092 1092
 					'readonly'    => true,
1093 1093
 				),
1094 1094
 
1095 1095
 				'discount'		  => array(
1096
-					'description' => __( 'The discount applied to the invoice.', 'invoicing' ),
1096
+					'description' => __('The discount applied to the invoice.', 'invoicing'),
1097 1097
 					'type'        => 'number',
1098
-					'context'     => array( 'view', 'edit', 'embed' ),
1098
+					'context'     => array('view', 'edit', 'embed'),
1099 1099
 					'readonly'    => true,
1100 1100
 				),
1101 1101
 
1102 1102
 				'discount_code'	  => array(
1103
-					'description' => __( 'The discount code applied to the invoice.', 'invoicing' ),
1103
+					'description' => __('The discount code applied to the invoice.', 'invoicing'),
1104 1104
 					'type'        => 'string',
1105
-					'context'     => array( 'view', 'edit', 'embed' ),
1105
+					'context'     => array('view', 'edit', 'embed'),
1106 1106
 					'readonly'    => true,
1107 1107
 				),
1108 1108
 
1109 1109
 				'tax'	  		  => array(
1110
-					'description' => __( 'The tax applied to the invoice.', 'invoicing' ),
1110
+					'description' => __('The tax applied to the invoice.', 'invoicing'),
1111 1111
 					'type'        => 'number',
1112
-					'context'     => array( 'view', 'edit', 'embed' ),
1112
+					'context'     => array('view', 'edit', 'embed'),
1113 1113
 					'readonly'    => true,
1114 1114
 				),
1115 1115
 
1116 1116
 				'fees_total'	  => array(
1117
-					'description' => __( 'The total fees applied to the invoice.', 'invoicing' ),
1117
+					'description' => __('The total fees applied to the invoice.', 'invoicing'),
1118 1118
 					'type'        => 'number',
1119
-					'context'     => array( 'view', 'edit', 'embed' ),
1119
+					'context'     => array('view', 'edit', 'embed'),
1120 1120
 					'readonly'    => true,
1121 1121
 				),
1122 1122
 
1123 1123
 				'subtotal'	  	  => array(
1124
-					'description' => __( 'The sub-total for the invoice.', 'invoicing' ),
1124
+					'description' => __('The sub-total for the invoice.', 'invoicing'),
1125 1125
 					'type'        => 'number',
1126
-					'context'     => array( 'view', 'edit', 'embed' ),
1126
+					'context'     => array('view', 'edit', 'embed'),
1127 1127
 					'readonly'    => true,
1128 1128
 				),
1129 1129
 
1130 1130
 				'currency'	  	  => array(
1131
-					'description' => __( 'The currency used to process the invoice.', 'invoicing' ),
1131
+					'description' => __('The currency used to process the invoice.', 'invoicing'),
1132 1132
 					'type'        => 'string',
1133
-					'context'     => array( 'view', 'edit', 'embed' ),
1133
+					'context'     => array('view', 'edit', 'embed'),
1134 1134
 				),
1135 1135
 
1136 1136
 				'cart_details'	  => array(
1137
-					'description' => __( 'The cart details for invoice.', 'invoicing' ),
1137
+					'description' => __('The cart details for invoice.', 'invoicing'),
1138 1138
 					'type'        => 'array',
1139
-					'context'     => array( 'view', 'edit', 'embed' ),
1139
+					'context'     => array('view', 'edit', 'embed'),
1140 1140
 					'required'	  => true,
1141 1141
 				),
1142 1142
 
1143 1143
 				'date'         => array(
1144
-					'description' => __( "The date the invoice was published, in the site's timezone.", 'invoicing' ),
1145
-					'type'        => array( 'string', 'null' ),
1144
+					'description' => __("The date the invoice was published, in the site's timezone.", 'invoicing'),
1145
+					'type'        => array('string', 'null'),
1146 1146
 					'format'      => 'date-time',
1147
-					'context'     => array( 'view', 'edit', 'embed' ),
1147
+					'context'     => array('view', 'edit', 'embed'),
1148 1148
 				),
1149 1149
 
1150 1150
 				'due_date'     => array(
1151
-					'description' => __( 'The due date for the invoice.', 'invoicing' ),
1152
-					'type'        => array( 'string', 'null' ),
1151
+					'description' => __('The due date for the invoice.', 'invoicing'),
1152
+					'type'        => array('string', 'null'),
1153 1153
 					'format'      => 'date-time',
1154
-					'context'     => array( 'view', 'edit', 'embed' ),
1154
+					'context'     => array('view', 'edit', 'embed'),
1155 1155
 				),
1156 1156
 
1157 1157
 				'completed_date'  => array(
1158
-					'description' => __( 'The completed date for the invoice.', 'invoicing' ),
1159
-					'type'        => array( 'string', 'null' ),
1158
+					'description' => __('The completed date for the invoice.', 'invoicing'),
1159
+					'type'        => array('string', 'null'),
1160 1160
 					'format'      => 'date-time',
1161
-					'context'     => array( 'view', 'edit', 'embed' ),
1161
+					'context'     => array('view', 'edit', 'embed'),
1162 1162
 					'readonly'    => true,
1163 1163
 				),
1164 1164
 				
1165 1165
 				'link'         => array(
1166
-					'description' => __( 'URL to the invoice.', 'invoicing' ),
1166
+					'description' => __('URL to the invoice.', 'invoicing'),
1167 1167
 					'type'        => 'string',
1168 1168
 					'format'      => 'uri',
1169
-					'context'     => array( 'view', 'edit', 'embed' ),
1169
+					'context'     => array('view', 'edit', 'embed'),
1170 1170
 					'readonly'    => true,
1171 1171
 				),
1172 1172
 
1173 1173
 				'mode'       	  => array(
1174
-					'description' => __( 'The mode used to process the invoice.', 'invoicing' ),
1174
+					'description' => __('The mode used to process the invoice.', 'invoicing'),
1175 1175
 					'type'        => 'string',
1176
-					'enum'        => array( 'live', 'test' ),
1177
-					'context'     => array( 'view', 'edit', 'embed' ),
1176
+					'enum'        => array('live', 'test'),
1177
+					'context'     => array('view', 'edit', 'embed'),
1178 1178
 					'readonly'    => true,
1179 1179
 				),
1180 1180
 
1181 1181
 				'slug'       	  => array(
1182
-					'description' => __( 'An alphanumeric identifier for the invoice.', 'invoicing' ),
1182
+					'description' => __('An alphanumeric identifier for the invoice.', 'invoicing'),
1183 1183
 					'type'        => 'string',
1184
-					'context'     => array( 'view', 'edit', 'embed' ),
1184
+					'context'     => array('view', 'edit', 'embed'),
1185 1185
 					'arg_options' => array(
1186
-						'sanitize_callback' => array( $this, 'sanitize_slug' ),
1186
+						'sanitize_callback' => array($this, 'sanitize_slug'),
1187 1187
 					),
1188 1188
 					'readonly'    => true,
1189 1189
 				),
1190 1190
 
1191 1191
 				'status'       	  => array(
1192
-					'description' => __( 'A named status for the invoice.', 'invoicing' ),
1192
+					'description' => __('A named status for the invoice.', 'invoicing'),
1193 1193
 					'type'        => 'string',
1194
-					'enum'        => array_keys( wpinv_get_invoice_statuses( true, true ) ),
1195
-					'context'     => array( 'view', 'edit' ),
1194
+					'enum'        => array_keys(wpinv_get_invoice_statuses(true, true)),
1195
+					'context'     => array('view', 'edit'),
1196 1196
 					'default'	  => 'wpi-pending',
1197 1197
 				),
1198 1198
 
1199 1199
 				'status_nicename' => array(
1200
-					'description' => __( 'A human-readable status name for the invoice.', 'invoicing' ),
1200
+					'description' => __('A human-readable status name for the invoice.', 'invoicing'),
1201 1201
 					'type'        => 'string',
1202
-					'context'     => array( 'view', 'embed' ),
1202
+					'context'     => array('view', 'embed'),
1203 1203
 					'readonly'    => true,
1204 1204
 				),
1205 1205
 
1206 1206
 				'post_type'       => array(
1207
-					'description' => __( 'The post type for the invoice.', 'invoicing' ),
1207
+					'description' => __('The post type for the invoice.', 'invoicing'),
1208 1208
 					'type'        => 'string',
1209
-					'context'     => array( 'view' ),
1209
+					'context'     => array('view'),
1210 1210
 					'readonly'    => true,
1211 1211
 				),
1212 1212
 			),
@@ -1224,12 +1224,12 @@  discard block
 block discarded – undo
1224 1224
 		 *
1225 1225
 		 * @param array   $schema    The invoice schema.
1226 1226
 		 */
1227
-        $schema = apply_filters( "wpinv_rest_invoice_schema", $schema );
1227
+        $schema = apply_filters("wpinv_rest_invoice_schema", $schema);
1228 1228
 
1229 1229
 		// Cache the invoice schema.
1230 1230
 		$this->schema = $schema;
1231 1231
 		
1232
-		return $this->add_additional_fields_schema( $this->schema );
1232
+		return $this->add_additional_fields_schema($this->schema);
1233 1233
 	}
1234 1234
 
1235 1235
 	/**
@@ -1241,20 +1241,20 @@  discard block
 block discarded – undo
1241 1241
 	 */
1242 1242
 	protected function get_schema_links() {
1243 1243
 
1244
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1244
+		$href = rest_url("{$this->namespace}/{$this->rest_base}/{id}");
1245 1245
 
1246 1246
 		$links = array();
1247 1247
 
1248 1248
 		$links[] = array(
1249 1249
 			'rel'          => 'https://api.w.org/action-publish',
1250
-			'title'        => __( 'The current user can mark this invoice as completed.', 'invoicing' ),
1250
+			'title'        => __('The current user can mark this invoice as completed.', 'invoicing'),
1251 1251
 			'href'         => $href,
1252 1252
 			'targetSchema' => array(
1253 1253
 				'type'       => 'object',
1254 1254
 				'properties' => array(
1255 1255
 					'status' => array(
1256 1256
 						'type' => 'string',
1257
-						'enum' => array( 'publish', 'wpi-renewal' ),
1257
+						'enum' => array('publish', 'wpi-renewal'),
1258 1258
 					),
1259 1259
 				),
1260 1260
 			),
@@ -1262,7 +1262,7 @@  discard block
 block discarded – undo
1262 1262
 
1263 1263
 		$links[] = array(
1264 1264
 			'rel'          => 'https://api.w.org/action-assign-author',
1265
-			'title'        => __( 'The current user can change the owner of this invoice.', 'invoicing' ),
1265
+			'title'        => __('The current user can change the owner of this invoice.', 'invoicing'),
1266 1266
 			'href'         => $href,
1267 1267
 			'targetSchema' => array(
1268 1268
 				'type'       => 'object',
@@ -1285,24 +1285,24 @@  discard block
 block discarded – undo
1285 1285
 	 * @param WPInv_Invoice $invoice Invoice Object.
1286 1286
 	 * @return array Links for the given invoice.
1287 1287
 	 */
1288
-	protected function prepare_links( $invoice ) {
1288
+	protected function prepare_links($invoice) {
1289 1289
 
1290 1290
 		// Prepare the base REST API endpoint for invoices.
1291
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1291
+		$base = sprintf('%s/%s', $this->namespace, $this->rest_base);
1292 1292
 
1293 1293
 		// Entity meta.
1294 1294
 		$links = array(
1295 1295
 			'self'       => array(
1296
-				'href' => rest_url( trailingslashit( $base ) . $invoice->ID ),
1296
+				'href' => rest_url(trailingslashit($base) . $invoice->ID),
1297 1297
 			),
1298 1298
 			'collection' => array(
1299
-				'href' => rest_url( $base ),
1299
+				'href' => rest_url($base),
1300 1300
 			),
1301 1301
 		);
1302 1302
 
1303
-		if ( ! empty( $invoice->user_id ) ) {
1303
+		if (!empty($invoice->user_id)) {
1304 1304
 			$links['user'] = array(
1305
-				'href'       => rest_url( 'wp/v2/users/' . $invoice->user_id ),
1305
+				'href'       => rest_url('wp/v2/users/' . $invoice->user_id),
1306 1306
 				'embeddable' => true,
1307 1307
 			);
1308 1308
 		}
@@ -1316,7 +1316,7 @@  discard block
 block discarded – undo
1316 1316
 		 *
1317 1317
 		 * @param array   $links    Rest links.
1318 1318
 		 */
1319
-		return apply_filters( "wpinv_rest_invoice_links", $links );
1319
+		return apply_filters("wpinv_rest_invoice_links", $links);
1320 1320
 
1321 1321
 	}
1322 1322
 
@@ -1329,24 +1329,24 @@  discard block
 block discarded – undo
1329 1329
 	 * @param WP_REST_Request $request Request object.
1330 1330
 	 * @return array List of link relations.
1331 1331
 	 */
1332
-	protected function get_available_actions( $invoice, $request ) {
1332
+	protected function get_available_actions($invoice, $request) {
1333 1333
 
1334
-		if ( 'edit' !== $request['context'] ) {
1334
+		if ('edit' !== $request['context']) {
1335 1335
 			return array();
1336 1336
 		}
1337 1337
 
1338 1338
 		$rels = array();
1339 1339
 
1340 1340
 		// Retrieve the post type object.
1341
-		$post_type = get_post_type_object( $invoice->post_type );
1341
+		$post_type = get_post_type_object($invoice->post_type);
1342 1342
 
1343 1343
 		// Mark invoice as completed.
1344
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1344
+		if (current_user_can($post_type->cap->publish_posts)) {
1345 1345
 			$rels[] = 'https://api.w.org/action-publish';
1346 1346
 		}
1347 1347
 
1348 1348
 		// Change the owner of the invoice.
1349
-		if ( current_user_can( $post_type->cap->edit_others_posts ) ) {
1349
+		if (current_user_can($post_type->cap->edit_others_posts)) {
1350 1350
 			$rels[] = 'https://api.w.org/action-assign-author';
1351 1351
 		}
1352 1352
 
@@ -1359,7 +1359,7 @@  discard block
 block discarded – undo
1359 1359
 		 *
1360 1360
 		 * @param array   $rels    Available link relations.
1361 1361
 		 */
1362
-		return apply_filters( "wpinv_rest_invoice_link_relations", $rels );
1362
+		return apply_filters("wpinv_rest_invoice_link_relations", $rels);
1363 1363
 	}
1364 1364
 
1365 1365
 	/**
@@ -1372,11 +1372,11 @@  discard block
 block discarded – undo
1372 1372
 	 * @param string          $parameter Additional parameter to pass to validation.
1373 1373
 	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
1374 1374
 	 */
1375
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
1375
+	public function sanitize_post_statuses($statuses, $request, $parameter) {
1376 1376
 
1377
-		$statuses 	  = wp_parse_slug_list( $statuses );
1378
-		$valid_statuses = array_keys( wpinv_get_invoice_statuses( true, true ) );
1379
-		return array_intersect( $statuses, $valid_statuses );
1377
+		$statuses = wp_parse_slug_list($statuses);
1378
+		$valid_statuses = array_keys(wpinv_get_invoice_statuses(true, true));
1379
+		return array_intersect($statuses, $valid_statuses);
1380 1380
 		
1381 1381
 	}
1382 1382
     
Please login to merge, or discard this patch.
vendor/composer/ClassLoader.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -342,7 +342,7 @@  discard block
 block discarded – undo
342 342
             return false;
343 343
         }
344 344
         if (null !== $this->apcuPrefix) {
345
-            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
345
+            $file = apcu_fetch($this->apcuPrefix . $class, $hit);
346 346
             if ($hit) {
347 347
                 return $file;
348 348
             }
@@ -356,7 +356,7 @@  discard block
 block discarded – undo
356 356
         }
357 357
 
358 358
         if (null !== $this->apcuPrefix) {
359
-            apcu_add($this->apcuPrefix.$class, $file);
359
+            apcu_add($this->apcuPrefix . $class, $file);
360 360
         }
361 361
 
362 362
         if (false === $file) {
Please login to merge, or discard this patch.
includes/gateways/authorizenet/anet_php_sdk/lib/AuthorizeNetTD.php 1 patch
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -64,8 +64,8 @@  discard block
 block discarded – undo
64 64
     {
65 65
         $month = ($month ? $month : date('m'));
66 66
         $year = ($year ? $year : date('Y'));
67
-        $firstSettlementDate = substr(date('c',mktime(0, 0, 0, $month, 1, $year)),0,-6);
68
-        $lastSettlementDate  = substr(date('c',mktime(0, 0, 0, $month+1, 0, $year)),0,-6);
67
+        $firstSettlementDate = substr(date('c', mktime(0, 0, 0, $month, 1, $year)), 0, -6);
68
+        $lastSettlementDate  = substr(date('c', mktime(0, 0, 0, $month + 1, 0, $year)), 0, -6);
69 69
         return $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
70 70
     }
71 71
 
@@ -98,12 +98,12 @@  discard block
 block discarded – undo
98 98
         $month = ($month ? $month : date('m'));
99 99
         $day = ($day ? $day : date('d'));
100 100
         $year = ($year ? $year : date('Y'));
101
-        $firstSettlementDate = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
102
-        $lastSettlementDate  = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
101
+        $firstSettlementDate = substr(date('c', mktime(0, 0, 0, (int) $month, (int) $day, (int) $year)), 0, -6);
102
+        $lastSettlementDate  = substr(date('c', mktime(0, 0, 0, (int) $month, (int) $day, (int) $year)), 0, -6);
103 103
         $response = $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
104 104
         $batches = $response->xpath("batchList/batch");
105 105
         foreach ($batches as $batch) {
106
-            $batch_id = (string)$batch->batchId;
106
+            $batch_id = (string) $batch->batchId;
107 107
             $request = new AuthorizeNetTD;
108 108
             $tran_list = $request->getTransactionList($batch_id);
109 109
             $transactions = array_merge($transactions, $tran_list->xpath("transactions/transaction"));
@@ -187,11 +187,11 @@  discard block
 block discarded – undo
187 187
      */
188 188
     private function _constructXml($request_type)
189 189
     {
190
-        $string = '<?xml version="1.0" encoding="utf-8"?><'.$request_type.' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></'.$request_type.'>';
190
+        $string = '<?xml version="1.0" encoding="utf-8"?><' . $request_type . ' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></' . $request_type . '>';
191 191
         $this->_xml = @new SimpleXMLElement($string);
192 192
         $merchant = $this->_xml->addChild('merchantAuthentication');
193
-        $merchant->addChild('name',$this->_api_login);
194
-        $merchant->addChild('transactionKey',$this->_transaction_key);
193
+        $merchant->addChild('name', $this->_api_login);
194
+        $merchant->addChild('transactionKey', $this->_transaction_key);
195 195
     }
196 196
     
197 197
 }
Please login to merge, or discard this patch.