Passed
Push — master ( 039fc1...a932b5 )
by Brian
05:54
created
includes/reports/class-getpaid-reports-report-earnings.php 1 patch
Indentation   +133 added lines, -133 removed lines patch added patch discarded remove patch
@@ -12,43 +12,43 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Report_Earnings extends GetPaid_Reports_Abstract_Report {
14 14
 
15
-	/**
16
-	 * Retrieves the earning graphs.
17
-	 *
18
-	 */
19
-	public function get_graphs() {
15
+    /**
16
+     * Retrieves the earning graphs.
17
+     *
18
+     */
19
+    public function get_graphs() {
20 20
 
21
-		$graphs = array(
21
+        $graphs = array(
22 22
 
23 23
             'total'      => __( 'Earnings', 'invoicing' ),
24 24
             'discount'   => __( 'Discount', 'invoicing' ),
25
-			'fees_total' => __( 'Fees', 'invoicing' ),
26
-			'tax'        => __( 'Tax', 'invoicing' ),
25
+            'fees_total' => __( 'Fees', 'invoicing' ),
26
+            'tax'        => __( 'Tax', 'invoicing' ),
27 27
 
28
-		);
28
+        );
29 29
 
30
-		return apply_filters( 'getpaid_earning_graphs', $graphs );
30
+        return apply_filters( 'getpaid_earning_graphs', $graphs );
31 31
 
32
-	}
32
+    }
33 33
 
34
-	/**
35
-	 * Retrieves the earning sql.
36
-	 *
37
-	 */
38
-	public function get_sql( $range ) {
39
-		global $wpdb;
34
+    /**
35
+     * Retrieves the earning sql.
36
+     *
37
+     */
38
+    public function get_sql( $range ) {
39
+        global $wpdb;
40 40
 
41
-		$table      = $wpdb->prefix . 'getpaid_invoices';
42
-		$clauses    = $this->get_range_sql( $range );
43
-		$graphs     = array_keys( $this->get_graphs() );
44
-		$graphs_sql = array();
41
+        $table      = $wpdb->prefix . 'getpaid_invoices';
42
+        $clauses    = $this->get_range_sql( $range );
43
+        $graphs     = array_keys( $this->get_graphs() );
44
+        $graphs_sql = array();
45 45
 
46
-		foreach ( $graphs as $graph ) {
47
-			$graphs_sql[] = "SUM( meta.$graph ) AS $graph";
48
-		}
46
+        foreach ( $graphs as $graph ) {
47
+            $graphs_sql[] = "SUM( meta.$graph ) AS $graph";
48
+        }
49 49
 
50
-		$graphs_sql = implode( ', ', $graphs_sql );
51
-		$sql        = "SELECT {$clauses[0]} AS completed_date, $graphs_sql
50
+        $graphs_sql = implode( ', ', $graphs_sql );
51
+        $sql        = "SELECT {$clauses[0]} AS completed_date, $graphs_sql
52 52
             FROM $wpdb->posts
53 53
             LEFT JOIN $table as meta ON meta.post_id = $wpdb->posts.ID
54 54
             WHERE meta.post_id IS NOT NULL
@@ -58,94 +58,94 @@  discard block
 block discarded – undo
58 58
             GROUP BY {$clauses[0]}
59 59
         ";
60 60
 
61
-		return apply_filters( 'getpaid_earning_graphs_get_sql', $sql, $range );
62
-
63
-	}
64
-
65
-	/**
66
-	 * Prepares the report stats.
67
-	 *
68
-	 */
69
-	public function prepare_stats() {
70
-		global $wpdb;
71
-		$this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
72
-	}
73
-
74
-	/**
75
-	 * Retrieves report labels.
76
-	 *
77
-	 */
78
-	public function get_labels( $range ) {
79
-
80
-		$labels = array(
81
-			'today'     => $this->get_hours_in_a_day(),
82
-			'yesterday' => $this->get_hours_in_a_day(),
83
-			'7_days'    => $this->get_days_in_period( 7 ),
84
-			'30_days'   => $this->get_days_in_period( 30 ),
85
-			'60_days'   => $this->get_days_in_period( 60 ),
86
-			'90_days'   => $this->get_weeks_in_period( 90 ),
87
-			'180_days'  => $this->get_weeks_in_period( 180 ),
88
-			'360_days'  => $this->get_weeks_in_period( 360 ),
89
-		);
90
-
91
-		$label = isset( $labels[ $range ] ) ? $labels[ $range ] : $labels['7_days'];
92
-		return apply_filters( 'getpaid_earning_graphs_get_labels', $label, $range );
93
-	}
94
-
95
-	/**
96
-	 * Retrieves report datasets.
97
-	 *
98
-	 */
99
-	public function get_datasets( $labels ) {
100
-
101
-		$datasets = array();
102
-
103
-		foreach ( $this->get_graphs() as $key => $label ) {
104
-			$datasets[ $key ] = array(
105
-				'label' => $label,
106
-				'data'  => $this->get_data( $key, $labels ),
107
-			);
108
-		}
109
-
110
-		return apply_filters( 'getpaid_earning_graphs_get_datasets', $datasets, $labels );
111
-	}
112
-
113
-	/**
114
-	 * Retrieves report data.
115
-	 *
116
-	 */
117
-	public function get_data( $key, $labels ) {
118
-
119
-		$data     = wp_list_pluck( $this->stats, $key, 'completed_date' );
120
-		$prepared = array();
121
-
122
-		foreach ( $labels as $label ) {
123
-
124
-			$value = 0;
125
-			if ( isset( $data[ $label ] ) ) {
126
-				$value = wpinv_round_amount( wpinv_sanitize_amount( $data[ $label ] ) );
127
-			}
128
-
129
-			$prepared[] = $value;
130
-		}
131
-
132
-		return apply_filters( 'getpaid_earning_graphs_get_data', $prepared, $key, $labels );
133
-
134
-	}
135
-
136
-	/**
137
-	 * Displays the report card.
138
-	 *
139
-	 */
140
-	public function display() {
141
-
142
-		$labels     = $this->get_labels( $this->get_range() );
143
-		$chart_data = array(
144
-			'labels'   => array_values( $labels ),
145
-			'datasets' => $this->get_datasets( array_keys( $labels ) ),
146
-		);
147
-
148
-		?>
61
+        return apply_filters( 'getpaid_earning_graphs_get_sql', $sql, $range );
62
+
63
+    }
64
+
65
+    /**
66
+     * Prepares the report stats.
67
+     *
68
+     */
69
+    public function prepare_stats() {
70
+        global $wpdb;
71
+        $this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
72
+    }
73
+
74
+    /**
75
+     * Retrieves report labels.
76
+     *
77
+     */
78
+    public function get_labels( $range ) {
79
+
80
+        $labels = array(
81
+            'today'     => $this->get_hours_in_a_day(),
82
+            'yesterday' => $this->get_hours_in_a_day(),
83
+            '7_days'    => $this->get_days_in_period( 7 ),
84
+            '30_days'   => $this->get_days_in_period( 30 ),
85
+            '60_days'   => $this->get_days_in_period( 60 ),
86
+            '90_days'   => $this->get_weeks_in_period( 90 ),
87
+            '180_days'  => $this->get_weeks_in_period( 180 ),
88
+            '360_days'  => $this->get_weeks_in_period( 360 ),
89
+        );
90
+
91
+        $label = isset( $labels[ $range ] ) ? $labels[ $range ] : $labels['7_days'];
92
+        return apply_filters( 'getpaid_earning_graphs_get_labels', $label, $range );
93
+    }
94
+
95
+    /**
96
+     * Retrieves report datasets.
97
+     *
98
+     */
99
+    public function get_datasets( $labels ) {
100
+
101
+        $datasets = array();
102
+
103
+        foreach ( $this->get_graphs() as $key => $label ) {
104
+            $datasets[ $key ] = array(
105
+                'label' => $label,
106
+                'data'  => $this->get_data( $key, $labels ),
107
+            );
108
+        }
109
+
110
+        return apply_filters( 'getpaid_earning_graphs_get_datasets', $datasets, $labels );
111
+    }
112
+
113
+    /**
114
+     * Retrieves report data.
115
+     *
116
+     */
117
+    public function get_data( $key, $labels ) {
118
+
119
+        $data     = wp_list_pluck( $this->stats, $key, 'completed_date' );
120
+        $prepared = array();
121
+
122
+        foreach ( $labels as $label ) {
123
+
124
+            $value = 0;
125
+            if ( isset( $data[ $label ] ) ) {
126
+                $value = wpinv_round_amount( wpinv_sanitize_amount( $data[ $label ] ) );
127
+            }
128
+
129
+            $prepared[] = $value;
130
+        }
131
+
132
+        return apply_filters( 'getpaid_earning_graphs_get_data', $prepared, $key, $labels );
133
+
134
+    }
135
+
136
+    /**
137
+     * Displays the report card.
138
+     *
139
+     */
140
+    public function display() {
141
+
142
+        $labels     = $this->get_labels( $this->get_range() );
143
+        $chart_data = array(
144
+            'labels'   => array_values( $labels ),
145
+            'datasets' => $this->get_datasets( array_keys( $labels ) ),
146
+        );
147
+
148
+        ?>
149 149
 
150 150
 			<?php foreach ( $chart_data['datasets'] as $key => $dataset ) : ?>
151 151
 				<div class="row mb-4">
@@ -165,15 +165,15 @@  discard block
 block discarded – undo
165 165
 
166 166
 		<?php
167 167
 
168
-	}
168
+    }
169 169
 
170
-	/**
171
-	 * Displays the actual report.
172
-	 *
173
-	 */
174
-	public function display_graph( $key, $dataset, $labels ) {
170
+    /**
171
+     * Displays the actual report.
172
+     *
173
+     */
174
+    public function display_graph( $key, $dataset, $labels ) {
175 175
 
176
-		?>
176
+        ?>
177 177
 
178 178
 		<canvas id="getpaid-chartjs-earnings-<?php echo esc_attr( $key ); ?>"></canvas>
179 179
 
@@ -223,20 +223,20 @@  discard block
 block discarded – undo
223 223
 		</script>
224 224
 
225 225
 		<?php
226
-	}
226
+    }
227 227
 
228
-	/**
229
-	 * Displays the actual report.
230
-	 *
231
-	 */
232
-	public function display_stats() {}
228
+    /**
229
+     * Displays the actual report.
230
+     *
231
+     */
232
+    public function display_stats() {}
233 233
 
234
-	/**
235
-	 * Displays the range selector.
236
-	 *
237
-	 */
238
-	public function display_range_selector() {
234
+    /**
235
+     * Displays the range selector.
236
+     *
237
+     */
238
+    public function display_range_selector() {
239 239
 
240
-	}
240
+    }
241 241
 
242 242
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-report-discounts.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -12,22 +12,22 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Report_Discounts extends GetPaid_Reports_Abstract_Report {
14 14
 
15
-	/**
16
-	 * @var string
17
-	 */
18
-	public $field = 'discount_code';
19
-
20
-	/**
21
-	 * Retrieves the discounts sql.
22
-	 *
23
-	 */
24
-	public function get_sql( $range ) {
25
-		global $wpdb;
26
-
27
-		$table      = $wpdb->prefix . 'getpaid_invoices';
28
-		$clauses    = $this->get_range_sql( $range );
29
-
30
-		$sql        = "SELECT
15
+    /**
16
+     * @var string
17
+     */
18
+    public $field = 'discount_code';
19
+
20
+    /**
21
+     * Retrieves the discounts sql.
22
+     *
23
+     */
24
+    public function get_sql( $range ) {
25
+        global $wpdb;
26
+
27
+        $table      = $wpdb->prefix . 'getpaid_invoices';
28
+        $clauses    = $this->get_range_sql( $range );
29
+
30
+        $sql        = "SELECT
31 31
 				meta.discount_code AS discount_code,
32 32
 				SUM(total) as total
33 33
             FROM $wpdb->posts
@@ -41,91 +41,91 @@  discard block
 block discarded – undo
41 41
 			ORDER BY total DESC
42 42
         ";
43 43
 
44
-		return apply_filters( 'getpaid_discounts_graphs_get_sql', $sql, $range );
44
+        return apply_filters( 'getpaid_discounts_graphs_get_sql', $sql, $range );
45 45
 
46
-	}
46
+    }
47 47
 
48
-	/**
49
-	 * Prepares the report stats.
50
-	 *
51
-	 */
52
-	public function prepare_stats() {
53
-		global $wpdb;
54
-		$this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
55
-		$this->stats = $this->normalize_stats( $this->stats );
56
-	}
48
+    /**
49
+     * Prepares the report stats.
50
+     *
51
+     */
52
+    public function prepare_stats() {
53
+        global $wpdb;
54
+        $this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
55
+        $this->stats = $this->normalize_stats( $this->stats );
56
+    }
57 57
 
58
-	/**
59
-	 * Normalizes the report stats.
60
-	 *
61
-	 */
62
-	public function normalize_stats( $stats ) {
63
-		$normalized = array();
64
-		$others     = 0;
65
-		$did        = 0;
58
+    /**
59
+     * Normalizes the report stats.
60
+     *
61
+     */
62
+    public function normalize_stats( $stats ) {
63
+        $normalized = array();
64
+        $others     = 0;
65
+        $did        = 0;
66 66
 
67
-		foreach ( $stats as $stat ) {
67
+        foreach ( $stats as $stat ) {
68 68
 
69
-			if ( $did > 4 ) {
69
+            if ( $did > 4 ) {
70 70
 
71
-				$others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
71
+                $others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
72 72
 
73
-			} else {
73
+            } else {
74 74
 
75
-				$normalized[] = array(
76
-					'total'         => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
77
-					'discount_code' => strip_tags( $stat->discount_code ),
78
-				);
75
+                $normalized[] = array(
76
+                    'total'         => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
77
+                    'discount_code' => strip_tags( $stat->discount_code ),
78
+                );
79 79
 
80
-			}
80
+            }
81 81
 
82
-			$did++;
83
-		}
82
+            $did++;
83
+        }
84 84
 
85
-		if ( $others > 0 ) {
85
+        if ( $others > 0 ) {
86 86
 
87
-			$normalized[] = array(
88
-				'total'         => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
89
-				'discount_code' => esc_html__( 'Others', 'invoicing' ),
90
-			);
87
+            $normalized[] = array(
88
+                'total'         => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
89
+                'discount_code' => esc_html__( 'Others', 'invoicing' ),
90
+            );
91 91
 
92
-		}
92
+        }
93 93
 
94
-		return $normalized;
95
-	}
94
+        return $normalized;
95
+    }
96 96
 
97
-	/**
98
-	 * Retrieves report data.
99
-	 *
100
-	 */
101
-	public function get_data() {
97
+    /**
98
+     * Retrieves report data.
99
+     *
100
+     */
101
+    public function get_data() {
102 102
 
103
-		$data     = wp_list_pluck( $this->stats, 'total' );
104
-		$colors   = array( '#009688', '#4caf50', '#8bc34a', '#00bcd4', '#03a9f4', '#2196f3' );
103
+        $data     = wp_list_pluck( $this->stats, 'total' );
104
+        $colors   = array( '#009688', '#4caf50', '#8bc34a', '#00bcd4', '#03a9f4', '#2196f3' );
105 105
 
106
-		shuffle( $colors );
106
+        shuffle( $colors );
107 107
 
108
-		return array(
109
-			'data'            => $data,
110
-			'backgroundColor' => $colors,
111
-		);
108
+        return array(
109
+            'data'            => $data,
110
+            'backgroundColor' => $colors,
111
+        );
112 112
 
113
-	}
113
+    }
114 114
 
115
-	/**
116
-	 * Retrieves report labels.
117
-	 *
118
-	 */
119
-	public function get_labels() {
120
-		return wp_list_pluck( $this->stats, 'discount_code' );
121
-	}
115
+    /**
116
+     * Retrieves report labels.
117
+     *
118
+     */
119
+    public function get_labels() {
120
+        return wp_list_pluck( $this->stats, 'discount_code' );
121
+    }
122 122
 
123
-	/**
124
-	 * Displays the actual report.
125
-	 *
126
-	 */
127
-	public function display_stats() {
128
-		?>
123
+    /**
124
+     * Displays the actual report.
125
+     *
126
+     */
127
+    public function display_stats() {
128
+        ?>
129 129
 
130 130
 			<canvas id="getpaid-chartjs-earnings-discount_code"></canvas>
131 131
 
@@ -154,6 +154,6 @@  discard block
 block discarded – undo
154 154
 			</script>
155 155
 
156 156
 		<?php
157
-	}
157
+    }
158 158
 
159 159
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-report.php 1 patch
Indentation   +180 added lines, -180 removed lines patch added patch discarded remove patch
@@ -12,88 +12,88 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Report {
14 14
 
15
-	/**
16
-	 * @var array
17
-	 */
18
-	public $views;
15
+    /**
16
+     * @var array
17
+     */
18
+    public $views;
19 19
 
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 */
24
-	public function __construct() {
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     */
24
+    public function __construct() {
25 25
 
26
-		$this->views        = array(
26
+        $this->views        = array(
27 27
 
28 28
             'items'     => array(
29
-				'label' => __( 'Items', 'invoicing' ),
30
-				'class' => 'GetPaid_Reports_Report_Items',
31
-			),
29
+                'label' => __( 'Items', 'invoicing' ),
30
+                'class' => 'GetPaid_Reports_Report_Items',
31
+            ),
32 32
 
33
-			'gateways'  => array(
34
-				'label' => __( 'Payment Methods', 'invoicing' ),
35
-				'class' => 'GetPaid_Reports_Report_Gateways',
36
-			),
33
+            'gateways'  => array(
34
+                'label' => __( 'Payment Methods', 'invoicing' ),
35
+                'class' => 'GetPaid_Reports_Report_Gateways',
36
+            ),
37 37
 
38
-			'discounts' => array(
39
-				'label' => __( 'Discount Codes', 'invoicing' ),
40
-				'class' => 'GetPaid_Reports_Report_Discounts',
41
-			),
38
+            'discounts' => array(
39
+                'label' => __( 'Discount Codes', 'invoicing' ),
40
+                'class' => 'GetPaid_Reports_Report_Discounts',
41
+            ),
42 42
 
43 43
         );
44 44
 
45
-		$this->views        = apply_filters( 'wpinv_report_views', $this->views );
46
-
47
-	}
48
-
49
-	/**
50
-	 * Retrieves the current range.
51
-	 *
52
-	 */
53
-	public function get_range() {
54
-		$valid_ranges = $this->get_periods();
55
-
56
-		if ( isset( $_GET['date_range'] ) && array_key_exists( $_GET['date_range'], $valid_ranges ) ) {
57
-			return sanitize_key( $_GET['date_range'] );
58
-		}
59
-
60
-		return '7_days';
61
-	}
62
-
63
-	/**
64
-	 * Returns an array of date ranges.
65
-	 *
66
-	 * @return array
67
-	 */
68
-	public function get_periods() {
69
-
70
-		$periods = array(
71
-			'today'        => __( 'Today', 'invoicing' ),
72
-			'yesterday'    => __( 'Yesterday', 'invoicing' ),
73
-			'week'         => __( 'This week', 'invoicing' ),
74
-			'last_week'    => __( 'Last week', 'invoicing' ),
75
-			'7_days'       => __( 'Last 7 days', 'invoicing' ),
76
-			'month'        => __( 'This month', 'invoicing' ),
77
-			'last_month'   => __( 'Last month', 'invoicing' ),
78
-			'30_days'      => __( 'Last 30 days', 'invoicing' ),
79
-			'quarter'      => __( 'This Quarter', 'invoicing' ),
80
-			'last_quarter' => __( 'Last Quarter', 'invoicing' ),
81
-			'year'         => __( 'This year', 'invoicing' ),
82
-			'last_year'    => __( 'Last Year', 'invoicing' ),
83
-			'custom'       => __( 'Custom Date Range', 'invoicing' ),
84
-		);
85
-
86
-		return apply_filters( 'getpaid_earning_periods', $periods );
87
-	}
88
-
89
-	/**
90
-	 * Displays the range selector.
91
-	 *
92
-	 */
93
-	public function display_range_selector() {
94
-
95
-		$range = $this->get_range();
96
-		?>
45
+        $this->views        = apply_filters( 'wpinv_report_views', $this->views );
46
+
47
+    }
48
+
49
+    /**
50
+     * Retrieves the current range.
51
+     *
52
+     */
53
+    public function get_range() {
54
+        $valid_ranges = $this->get_periods();
55
+
56
+        if ( isset( $_GET['date_range'] ) && array_key_exists( $_GET['date_range'], $valid_ranges ) ) {
57
+            return sanitize_key( $_GET['date_range'] );
58
+        }
59
+
60
+        return '7_days';
61
+    }
62
+
63
+    /**
64
+     * Returns an array of date ranges.
65
+     *
66
+     * @return array
67
+     */
68
+    public function get_periods() {
69
+
70
+        $periods = array(
71
+            'today'        => __( 'Today', 'invoicing' ),
72
+            'yesterday'    => __( 'Yesterday', 'invoicing' ),
73
+            'week'         => __( 'This week', 'invoicing' ),
74
+            'last_week'    => __( 'Last week', 'invoicing' ),
75
+            '7_days'       => __( 'Last 7 days', 'invoicing' ),
76
+            'month'        => __( 'This month', 'invoicing' ),
77
+            'last_month'   => __( 'Last month', 'invoicing' ),
78
+            '30_days'      => __( 'Last 30 days', 'invoicing' ),
79
+            'quarter'      => __( 'This Quarter', 'invoicing' ),
80
+            'last_quarter' => __( 'Last Quarter', 'invoicing' ),
81
+            'year'         => __( 'This year', 'invoicing' ),
82
+            'last_year'    => __( 'Last Year', 'invoicing' ),
83
+            'custom'       => __( 'Custom Date Range', 'invoicing' ),
84
+        );
85
+
86
+        return apply_filters( 'getpaid_earning_periods', $periods );
87
+    }
88
+
89
+    /**
90
+     * Displays the range selector.
91
+     *
92
+     */
93
+    public function display_range_selector() {
94
+
95
+        $range = $this->get_range();
96
+        ?>
97 97
 
98 98
 			<form method="get" class="getpaid-filter-earnings float-right">
99 99
 				<?php getpaid_hidden_field( 'page', isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : 'wpinv-reports' ); ?>
@@ -115,14 +115,14 @@  discard block
 block discarded – undo
115 115
 			</form>
116 116
 
117 117
 		<?php
118
-	}
118
+    }
119 119
 
120
-	/**
121
-	 * Displays the reports tab.
122
-	 *
123
-	 */
124
-	public function display() {
125
-		?>
120
+    /**
121
+     * Displays the reports tab.
122
+     *
123
+     */
124
+    public function display() {
125
+        ?>
126 126
 
127 127
 		<div class="mt-4">
128 128
 
@@ -202,16 +202,16 @@  discard block
 block discarded – undo
202 202
 
203 203
 		<?php
204 204
 
205
-	}
205
+    }
206 206
 
207
-	/**
208
-	 * Displays the left side.
209
-	 *
210
-	 */
211
-	public function display_left() {
212
-		$graphs = wpinv_get_report_graphs();
207
+    /**
208
+     * Displays the left side.
209
+     *
210
+     */
211
+    public function display_left() {
212
+        $graphs = wpinv_get_report_graphs();
213 213
 
214
-		?>
214
+        ?>
215 215
 
216 216
 			<?php foreach ( $graphs as $key => $graph ) : ?>
217 217
 				<div class="row mb-4">
@@ -230,35 +230,35 @@  discard block
 block discarded – undo
230 230
 
231 231
 		<?php
232 232
 
233
-	}
234
-
235
-	/**
236
-	 * Retrieves the download url.
237
-	 *
238
-	 */
239
-	public function get_download_url( $graph, $file_type ) {
240
-
241
-		return wp_nonce_url(
242
-			add_query_arg(
243
-				array(
244
-					'getpaid-admin-action' => 'download_graph',
245
-					'file_type'            => urlencode( $file_type ),
246
-					'graph'                => urlencode( $graph ),
247
-				)
248
-			),
249
-			'getpaid-nonce',
250
-			'getpaid-nonce'
251
-		);
233
+    }
234
+
235
+    /**
236
+     * Retrieves the download url.
237
+     *
238
+     */
239
+    public function get_download_url( $graph, $file_type ) {
240
+
241
+        return wp_nonce_url(
242
+            add_query_arg(
243
+                array(
244
+                    'getpaid-admin-action' => 'download_graph',
245
+                    'file_type'            => urlencode( $file_type ),
246
+                    'graph'                => urlencode( $graph ),
247
+                )
248
+            ),
249
+            'getpaid-nonce',
250
+            'getpaid-nonce'
251
+        );
252 252
 
253
-	}
253
+    }
254 254
 
255
-	/**
256
-	 * Displays the right side.
257
-	 *
258
-	 */
259
-	public function display_right() {
255
+    /**
256
+     * Displays the right side.
257
+     *
258
+     */
259
+    public function display_right() {
260 260
 
261
-		?>
261
+        ?>
262 262
 
263 263
 			<?php foreach ( $this->views as $key => $view ) : ?>
264 264
 				<div class="row mb-4">
@@ -287,10 +287,10 @@  discard block
 block discarded – undo
287 287
 							</div>
288 288
 							<div class="card-body">
289 289
 								<?php
290
-									$class = $view['class'];
291
-									$class = new $class();
292
-									$class->display_stats();
293
-								?>
290
+                                    $class = $view['class'];
291
+                                    $class = new $class();
292
+                                    $class->display_stats();
293
+                                ?>
294 294
 							</div>
295 295
 						</div>
296 296
 					</div>
@@ -299,68 +299,68 @@  discard block
 block discarded – undo
299 299
 
300 300
 		<?php
301 301
 
302
-		do_action( 'getpaid_reports_display_right', $this );
303
-	}
304
-
305
-	/**
306
-	 * Returns a list of report cards.
307
-	 *
308
-	 */
309
-	public function get_cards() {
310
-
311
-		$cards = array(
312
-			'total_sales'         => array(
313
-				'description' => __( 'Gross sales in the period.', 'invoicing' ),
314
-				'label'       => __( 'Gross Revenue', 'invoicing' ),
315
-			),
316
-			'net_sales'           => array(
317
-				'description' => __( 'Net sales in the period.', 'invoicing' ),
318
-				'label'       => __( 'Net Revenue', 'invoicing' ),
319
-			),
320
-			'average_sales'       => array(
321
-				'description' => __( 'Average net daily/monthly sales.', 'invoicing' ),
322
-				'label'       => __( 'Avg. Net Sales', 'invoicing' ),
323
-			),
324
-			'average_total_sales' => array(
325
-				'description' => __( 'Average gross daily/monthly sales.', 'invoicing' ),
326
-				'label'       => __( 'Avg. Gross Sales', 'invoicing' ),
327
-			),
328
-			'total_invoices'      => array(
329
-				'description' => __( 'Number of paid invoices.', 'invoicing' ),
330
-				'label'       => __( 'Paid Invoices', 'invoicing' ),
331
-			),
332
-			'total_items'         => array(
333
-				'description' => __( 'Number of items purchased.', 'invoicing' ),
334
-				'label'       => __( 'Purchased Items', 'invoicing' ),
335
-			),
336
-			'refunded_items'      => array(
337
-				'description' => __( 'Number of items refunded.', 'invoicing' ),
338
-				'label'       => __( 'Refunded Items', 'invoicing' ),
339
-			),
340
-			'total_tax'           => array(
341
-				'description' => __( 'Total charged for taxes.', 'invoicing' ),
342
-				'label'       => __( 'Tax', 'invoicing' ),
343
-			),
344
-			'total_refunded_tax'  => array(
345
-				'description' => __( 'Total refunded for taxes.', 'invoicing' ),
346
-				'label'       => __( 'Refunded Tax', 'invoicing' ),
347
-			),
348
-			'total_fees'          => array(
349
-				'description' => __( 'Total fees charged.', 'invoicing' ),
350
-				'label'       => __( 'Fees', 'invoicing' ),
351
-			),
352
-			'total_refunds'       => array(
353
-				'description' => __( 'Total of refunded invoices.', 'invoicing' ),
354
-				'label'       => __( 'Refunded', 'invoicing' ),
355
-			),
356
-			'total_discount'      => array(
357
-				'description' => __( 'Total of discounts used.', 'invoicing' ),
358
-				'label'       => __( 'Discounted', 'invoicing' ),
359
-			),
360
-		);
361
-
362
-		return apply_filters( 'wpinv_report_cards', $cards );
363
-	}
302
+        do_action( 'getpaid_reports_display_right', $this );
303
+    }
304
+
305
+    /**
306
+     * Returns a list of report cards.
307
+     *
308
+     */
309
+    public function get_cards() {
310
+
311
+        $cards = array(
312
+            'total_sales'         => array(
313
+                'description' => __( 'Gross sales in the period.', 'invoicing' ),
314
+                'label'       => __( 'Gross Revenue', 'invoicing' ),
315
+            ),
316
+            'net_sales'           => array(
317
+                'description' => __( 'Net sales in the period.', 'invoicing' ),
318
+                'label'       => __( 'Net Revenue', 'invoicing' ),
319
+            ),
320
+            'average_sales'       => array(
321
+                'description' => __( 'Average net daily/monthly sales.', 'invoicing' ),
322
+                'label'       => __( 'Avg. Net Sales', 'invoicing' ),
323
+            ),
324
+            'average_total_sales' => array(
325
+                'description' => __( 'Average gross daily/monthly sales.', 'invoicing' ),
326
+                'label'       => __( 'Avg. Gross Sales', 'invoicing' ),
327
+            ),
328
+            'total_invoices'      => array(
329
+                'description' => __( 'Number of paid invoices.', 'invoicing' ),
330
+                'label'       => __( 'Paid Invoices', 'invoicing' ),
331
+            ),
332
+            'total_items'         => array(
333
+                'description' => __( 'Number of items purchased.', 'invoicing' ),
334
+                'label'       => __( 'Purchased Items', 'invoicing' ),
335
+            ),
336
+            'refunded_items'      => array(
337
+                'description' => __( 'Number of items refunded.', 'invoicing' ),
338
+                'label'       => __( 'Refunded Items', 'invoicing' ),
339
+            ),
340
+            'total_tax'           => array(
341
+                'description' => __( 'Total charged for taxes.', 'invoicing' ),
342
+                'label'       => __( 'Tax', 'invoicing' ),
343
+            ),
344
+            'total_refunded_tax'  => array(
345
+                'description' => __( 'Total refunded for taxes.', 'invoicing' ),
346
+                'label'       => __( 'Refunded Tax', 'invoicing' ),
347
+            ),
348
+            'total_fees'          => array(
349
+                'description' => __( 'Total fees charged.', 'invoicing' ),
350
+                'label'       => __( 'Fees', 'invoicing' ),
351
+            ),
352
+            'total_refunds'       => array(
353
+                'description' => __( 'Total of refunded invoices.', 'invoicing' ),
354
+                'label'       => __( 'Refunded', 'invoicing' ),
355
+            ),
356
+            'total_discount'      => array(
357
+                'description' => __( 'Total of discounts used.', 'invoicing' ),
358
+                'label'       => __( 'Discounted', 'invoicing' ),
359
+            ),
360
+        );
361
+
362
+        return apply_filters( 'wpinv_report_cards', $cards );
363
+    }
364 364
 
365 365
 
366 366
 
Please login to merge, or discard this patch.
includes/reports/class-getpaid-invoice-exporter.php 1 patch
Indentation   +189 added lines, -189 removed lines patch added patch discarded remove patch
@@ -12,194 +12,194 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Exporter extends GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * Retrieves invoices query args.
17
-	 *
18
-	 * @param string $post_type post type to retrieve.
19
-	 * @param array $args Args to search for.
20
-	 * @return array
21
-	 */
22
-	public function get_invoice_query_args( $post_type, $args ) {
23
-
24
-		$query_args = array(
25
-			'post_type'              => $post_type,
26
-			'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
-			'posts_per_page'         => -1,
28
-			'no_found_rows'          => true,
29
-			'update_post_term_cache' => false,
30
-			'fields'                 => 'ids',
31
-		);
32
-
33
-		if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
-			$query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
-		}
36
-
37
-		$date_query = array();
38
-		if ( ! empty( $args['to_date'] ) ) {
39
-			$date_query['before'] = wpinv_clean( $args['to_date'] );
40
-		}
41
-
42
-		if ( ! empty( $args['from_date'] ) ) {
43
-			$date_query['after'] = wpinv_clean( $args['from_date'] );
44
-		}
45
-
46
-		if ( ! empty( $date_query ) ) {
47
-			$date_query['inclusive']  = true;
48
-			$query_args['date_query'] = array( $date_query );
49
-		}
50
-
51
-		return $query_args;
52
-	}
53
-
54
-	/**
55
-	 * Retrieves invoices.
56
-	 *
57
-	 * @param array $query_args WP_Query args.
58
-	 * @return WPInv_Invoice[]
59
-	 */
60
-	public function get_invoices( $query_args ) {
61
-
62
-		// Get invoices.
63
-		$invoices = new WP_Query( $query_args );
64
-
65
-		// Prepare the results.
66
-		return array_map( 'wpinv_get_invoice', $invoices->posts );
67
-
68
-	}
69
-
70
-	/**
71
-	 * Handles the actual download.
72
-	 *
73
-	 */
74
-	public function export( $post_type, $args ) {
75
-
76
-		$invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
-		$stream    = $this->prepare_output();
78
-		$headers   = $this->get_export_fields( $post_type );
79
-		$file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
-
81
-		if ( 'csv' == $file_type ) {
82
-			$this->download_csv( $invoices, $stream, $headers );
83
-		} elseif ( 'xml' == $file_type ) {
84
-			$this->download_xml( $invoices, $stream, $headers );
85
-		} else {
86
-			$this->download_json( $invoices, $stream, $headers );
87
-		}
88
-
89
-		fclose( $stream );
90
-		exit;
91
-	}
92
-
93
-	/**
94
-	 * Prepares a single invoice for download.
95
-	 *
96
-	 * @param WPInv_Invoice $invoice The invoice to prepare..
97
-	 * @param array $fields The fields to stream.
98
-	 * @since       1.0.19
99
-	 * @return array
100
-	 */
101
-	public function prepare_row( $invoice, $fields ) {
102
-
103
-		$prepared      = array();
104
-		$amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
-
106
-		foreach ( $fields as $field ) {
107
-
108
-			$value  = '';
109
-			$method = "get_$field";
110
-
111
-			if ( method_exists( $invoice, $method ) ) {
112
-				$value  = $invoice->$method();
113
-			}
114
-
115
-			if ( in_array( $field, $amount_fields ) ) {
116
-				$value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
117
-			}
118
-
119
-			$prepared[ $field ] = wpinv_clean( $value );
120
-
121
-		}
122
-
123
-		return $prepared;
124
-	}
125
-
126
-	/**
127
-	 * Retrieves export fields.
128
-	 *
129
-	 * @param string $post_type
130
-	 * @since       1.0.19
131
-	 * @return array
132
-	 */
133
-	public function get_export_fields( $post_type ) {
134
-
135
-		$fields = array(
136
-			'id',
137
-			'parent_id',
138
-			'status',
139
-			'date_created',
140
-			'date_modified',
141
-			'date_due',
142
-			'date_completed',
143
-			'number',
144
-			'key',
145
-			'description',
146
-			'post_type',
147
-			'mode',
148
-			'customer_id',
149
-			'customer_first_name',
150
-			'customer_last_name',
151
-			'customer_phone',
152
-			'customer_email',
153
-			'customer_country',
154
-			'customer_city',
155
-			'customer_state',
156
-			'customer_zip',
157
-			'customer_company',
158
-			'customer_vat_number',
159
-			'customer_address',
160
-			'subtotal',
161
-			'total_discount',
162
-			'total_tax',
163
-			'total_fees',
164
-			'fees',
165
-			'discounts',
166
-			'taxes',
167
-			'cart_details',
168
-			'item_ids',
169
-			'payment_form',
170
-			'discount_code',
171
-			'gateway',
172
-			'transaction_id',
173
-			'currency',
174
-			'disable_taxes',
175
-			'subscription_id',
176
-			'remote_subscription_id',
177
-			'is_viewed',
178
-			'email_cc',
179
-			'template',
180
-			'created_via',
181
-    	);
182
-
183
-		return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
184
-	}
185
-
186
-	/**
187
-	 * Retrieves amount fields.
188
-	 *
189
-	 * @param string $post_type
190
-	 * @since       1.0.19
191
-	 * @return array
192
-	 */
193
-	public function get_amount_fields( $post_type ) {
194
-
195
-		$fields = array(
196
-			'subtotal',
197
-			'total_discount',
198
-			'total_tax',
199
-			'total_fees',
200
-    	);
201
-
202
-		return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
203
-	}
15
+    /**
16
+     * Retrieves invoices query args.
17
+     *
18
+     * @param string $post_type post type to retrieve.
19
+     * @param array $args Args to search for.
20
+     * @return array
21
+     */
22
+    public function get_invoice_query_args( $post_type, $args ) {
23
+
24
+        $query_args = array(
25
+            'post_type'              => $post_type,
26
+            'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
+            'posts_per_page'         => -1,
28
+            'no_found_rows'          => true,
29
+            'update_post_term_cache' => false,
30
+            'fields'                 => 'ids',
31
+        );
32
+
33
+        if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
+            $query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
+        }
36
+
37
+        $date_query = array();
38
+        if ( ! empty( $args['to_date'] ) ) {
39
+            $date_query['before'] = wpinv_clean( $args['to_date'] );
40
+        }
41
+
42
+        if ( ! empty( $args['from_date'] ) ) {
43
+            $date_query['after'] = wpinv_clean( $args['from_date'] );
44
+        }
45
+
46
+        if ( ! empty( $date_query ) ) {
47
+            $date_query['inclusive']  = true;
48
+            $query_args['date_query'] = array( $date_query );
49
+        }
50
+
51
+        return $query_args;
52
+    }
53
+
54
+    /**
55
+     * Retrieves invoices.
56
+     *
57
+     * @param array $query_args WP_Query args.
58
+     * @return WPInv_Invoice[]
59
+     */
60
+    public function get_invoices( $query_args ) {
61
+
62
+        // Get invoices.
63
+        $invoices = new WP_Query( $query_args );
64
+
65
+        // Prepare the results.
66
+        return array_map( 'wpinv_get_invoice', $invoices->posts );
67
+
68
+    }
69
+
70
+    /**
71
+     * Handles the actual download.
72
+     *
73
+     */
74
+    public function export( $post_type, $args ) {
75
+
76
+        $invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
+        $stream    = $this->prepare_output();
78
+        $headers   = $this->get_export_fields( $post_type );
79
+        $file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
+
81
+        if ( 'csv' == $file_type ) {
82
+            $this->download_csv( $invoices, $stream, $headers );
83
+        } elseif ( 'xml' == $file_type ) {
84
+            $this->download_xml( $invoices, $stream, $headers );
85
+        } else {
86
+            $this->download_json( $invoices, $stream, $headers );
87
+        }
88
+
89
+        fclose( $stream );
90
+        exit;
91
+    }
92
+
93
+    /**
94
+     * Prepares a single invoice for download.
95
+     *
96
+     * @param WPInv_Invoice $invoice The invoice to prepare..
97
+     * @param array $fields The fields to stream.
98
+     * @since       1.0.19
99
+     * @return array
100
+     */
101
+    public function prepare_row( $invoice, $fields ) {
102
+
103
+        $prepared      = array();
104
+        $amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
+
106
+        foreach ( $fields as $field ) {
107
+
108
+            $value  = '';
109
+            $method = "get_$field";
110
+
111
+            if ( method_exists( $invoice, $method ) ) {
112
+                $value  = $invoice->$method();
113
+            }
114
+
115
+            if ( in_array( $field, $amount_fields ) ) {
116
+                $value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
117
+            }
118
+
119
+            $prepared[ $field ] = wpinv_clean( $value );
120
+
121
+        }
122
+
123
+        return $prepared;
124
+    }
125
+
126
+    /**
127
+     * Retrieves export fields.
128
+     *
129
+     * @param string $post_type
130
+     * @since       1.0.19
131
+     * @return array
132
+     */
133
+    public function get_export_fields( $post_type ) {
134
+
135
+        $fields = array(
136
+            'id',
137
+            'parent_id',
138
+            'status',
139
+            'date_created',
140
+            'date_modified',
141
+            'date_due',
142
+            'date_completed',
143
+            'number',
144
+            'key',
145
+            'description',
146
+            'post_type',
147
+            'mode',
148
+            'customer_id',
149
+            'customer_first_name',
150
+            'customer_last_name',
151
+            'customer_phone',
152
+            'customer_email',
153
+            'customer_country',
154
+            'customer_city',
155
+            'customer_state',
156
+            'customer_zip',
157
+            'customer_company',
158
+            'customer_vat_number',
159
+            'customer_address',
160
+            'subtotal',
161
+            'total_discount',
162
+            'total_tax',
163
+            'total_fees',
164
+            'fees',
165
+            'discounts',
166
+            'taxes',
167
+            'cart_details',
168
+            'item_ids',
169
+            'payment_form',
170
+            'discount_code',
171
+            'gateway',
172
+            'transaction_id',
173
+            'currency',
174
+            'disable_taxes',
175
+            'subscription_id',
176
+            'remote_subscription_id',
177
+            'is_viewed',
178
+            'email_cc',
179
+            'template',
180
+            'created_via',
181
+        );
182
+
183
+        return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
184
+    }
185
+
186
+    /**
187
+     * Retrieves amount fields.
188
+     *
189
+     * @param string $post_type
190
+     * @since       1.0.19
191
+     * @return array
192
+     */
193
+    public function get_amount_fields( $post_type ) {
194
+
195
+        $fields = array(
196
+            'subtotal',
197
+            'total_discount',
198
+            'total_tax',
199
+            'total_fees',
200
+        );
201
+
202
+        return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
203
+    }
204 204
 
205 205
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-subscription-exporter.php 1 patch
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -12,176 +12,176 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Subscription_Exporter extends GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * Retrieves subscription query args.
17
-	 *
18
-	 * @param array $args Args to search for.
19
-	 * @return array
20
-	 */
21
-	public function get_subscription_query_args( $args ) {
22
-
23
-		$query_args = array(
24
-			'status'      => 'all',
25
-			'number'      => -1,
26
-			'count_total' => false,
27
-			'fields'      => 'all',
28
-		);
29
-
30
-		if ( ! empty( $args['status'] ) && in_array( $args['status'], array_keys( getpaid_get_subscription_statuses() ), true ) ) {
31
-			$query_args['status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
32
-		}
33
-
34
-		$date_query = array();
35
-		if ( ! empty( $args['to_date'] ) ) {
36
-			$date_query['before'] = wpinv_clean( $args['to_date'] );
37
-		}
38
-
39
-		if ( ! empty( $args['from_date'] ) ) {
40
-			$date_query['after'] = wpinv_clean( $args['from_date'] );
41
-		}
42
-
43
-		if ( ! empty( $date_query ) ) {
44
-			$date_query['inclusive']          = true;
45
-			$query_args['date_created_query'] = array( $date_query );
46
-		}
47
-
48
-		return $query_args;
49
-	}
50
-
51
-	/**
52
-	 * Retrieves subscriptions.
53
-	 *
54
-	 * @param array $query_args GetPaid_Subscriptions_Query args.
55
-	 * @return WPInv_Subscription[]
56
-	 */
57
-	public function get_subscriptions( $query_args ) {
58
-
59
-		// Get subscriptions.
60
-		$subscriptions = new GetPaid_Subscriptions_Query( $query_args );
61
-
62
-		// Prepare the results.
63
-		return $subscriptions->get_results();
64
-
65
-	}
66
-
67
-	/**
68
-	 * Handles the actual download.
69
-	 *
70
-	 */
71
-	public function export( $post_type, $args ) {
72
-
73
-		$subscriptions = $this->get_subscriptions( $this->get_subscription_query_args( $args ) );
74
-		$stream        = $this->prepare_output();
75
-		$headers       = $this->get_export_fields();
76
-		$file_type     = $this->prepare_file_type( 'subscriptions' );
77
-
78
-		if ( 'csv' == $file_type ) {
79
-			$this->download_csv( $subscriptions, $stream, $headers );
80
-		} elseif ( 'xml' == $file_type ) {
81
-			$this->download_xml( $subscriptions, $stream, $headers );
82
-		} else {
83
-			$this->download_json( $subscriptions, $stream, $headers );
84
-		}
85
-
86
-		fclose( $stream );
87
-		exit;
88
-	}
89
-
90
-	/**
91
-	 * Prepares a single subscription for download.
92
-	 *
93
-	 * @param WPInv_Subscription $subscription The subscription to prepare..
94
-	 * @param array $fields The fields to stream.
95
-	 * @since       1.0.19
96
-	 * @return array
97
-	 */
98
-	public function prepare_row( $subscription, $fields ) {
99
-
100
-		$prepared      = array();
101
-		$amount_fields = $this->get_amount_fields();
102
-		$invoice       = $subscription->get_parent_payment();
103
-
104
-		foreach ( $fields as $field ) {
105
-
106
-			$value  = '';
107
-			$method = "get_$field";
108
-
109
-			if ( 0 === stripos( $field, 'customer' ) || 'currency' === $field ) {
110
-
111
-				if ( method_exists( $invoice, $method ) ) {
112
-					$value  = $invoice->$method();
113
-				}
15
+    /**
16
+     * Retrieves subscription query args.
17
+     *
18
+     * @param array $args Args to search for.
19
+     * @return array
20
+     */
21
+    public function get_subscription_query_args( $args ) {
22
+
23
+        $query_args = array(
24
+            'status'      => 'all',
25
+            'number'      => -1,
26
+            'count_total' => false,
27
+            'fields'      => 'all',
28
+        );
29
+
30
+        if ( ! empty( $args['status'] ) && in_array( $args['status'], array_keys( getpaid_get_subscription_statuses() ), true ) ) {
31
+            $query_args['status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
32
+        }
33
+
34
+        $date_query = array();
35
+        if ( ! empty( $args['to_date'] ) ) {
36
+            $date_query['before'] = wpinv_clean( $args['to_date'] );
37
+        }
38
+
39
+        if ( ! empty( $args['from_date'] ) ) {
40
+            $date_query['after'] = wpinv_clean( $args['from_date'] );
41
+        }
42
+
43
+        if ( ! empty( $date_query ) ) {
44
+            $date_query['inclusive']          = true;
45
+            $query_args['date_created_query'] = array( $date_query );
46
+        }
47
+
48
+        return $query_args;
49
+    }
50
+
51
+    /**
52
+     * Retrieves subscriptions.
53
+     *
54
+     * @param array $query_args GetPaid_Subscriptions_Query args.
55
+     * @return WPInv_Subscription[]
56
+     */
57
+    public function get_subscriptions( $query_args ) {
58
+
59
+        // Get subscriptions.
60
+        $subscriptions = new GetPaid_Subscriptions_Query( $query_args );
61
+
62
+        // Prepare the results.
63
+        return $subscriptions->get_results();
64
+
65
+    }
66
+
67
+    /**
68
+     * Handles the actual download.
69
+     *
70
+     */
71
+    public function export( $post_type, $args ) {
72
+
73
+        $subscriptions = $this->get_subscriptions( $this->get_subscription_query_args( $args ) );
74
+        $stream        = $this->prepare_output();
75
+        $headers       = $this->get_export_fields();
76
+        $file_type     = $this->prepare_file_type( 'subscriptions' );
77
+
78
+        if ( 'csv' == $file_type ) {
79
+            $this->download_csv( $subscriptions, $stream, $headers );
80
+        } elseif ( 'xml' == $file_type ) {
81
+            $this->download_xml( $subscriptions, $stream, $headers );
82
+        } else {
83
+            $this->download_json( $subscriptions, $stream, $headers );
84
+        }
85
+
86
+        fclose( $stream );
87
+        exit;
88
+    }
89
+
90
+    /**
91
+     * Prepares a single subscription for download.
92
+     *
93
+     * @param WPInv_Subscription $subscription The subscription to prepare..
94
+     * @param array $fields The fields to stream.
95
+     * @since       1.0.19
96
+     * @return array
97
+     */
98
+    public function prepare_row( $subscription, $fields ) {
99
+
100
+        $prepared      = array();
101
+        $amount_fields = $this->get_amount_fields();
102
+        $invoice       = $subscription->get_parent_payment();
103
+
104
+        foreach ( $fields as $field ) {
105
+
106
+            $value  = '';
107
+            $method = "get_$field";
108
+
109
+            if ( 0 === stripos( $field, 'customer' ) || 'currency' === $field ) {
110
+
111
+                if ( method_exists( $invoice, $method ) ) {
112
+                    $value  = $invoice->$method();
113
+                }
114 114
 } elseif ( method_exists( $subscription, $method ) ) {
115
-				$value  = $subscription->$method();
116
-			}
117
-
118
-			if ( in_array( $field, $amount_fields ) ) {
119
-				$value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
120
-			}
121
-
122
-			$prepared[ $field ] = wpinv_clean( $value );
123
-
124
-		}
125
-
126
-		return $prepared;
127
-	}
128
-
129
-	/**
130
-	 * Retrieves export fields.
131
-	 *
132
-	 * @since       1.0.19
133
-	 * @return array
134
-	 */
135
-	public function get_export_fields() {
136
-
137
-		$fields = array(
138
-			'id',
139
-			'currency',
140
-			'initial_amount',
141
-			'recurring_amount',
142
-			'trial_period',
143
-			'frequency',
144
-			'period',
145
-			'bill_times',
146
-			'parent_payment_id',
147
-			'profile_id',
148
-			'product_id',
149
-			'status',
150
-			'date_created',
151
-			'date_expires',
152
-
153
-			'customer_id',
154
-			'customer_first_name',
155
-			'customer_last_name',
156
-			'customer_phone',
157
-			'customer_email',
158
-			'customer_country',
159
-			'customer_city',
160
-			'customer_state',
161
-			'customer_zip',
162
-			'customer_company',
163
-			'customer_vat_number',
164
-			'customer_address',
165
-
166
-    	);
167
-
168
-		return apply_filters( 'getpaid_subscription_exporter_get_fields', $fields );
169
-	}
170
-
171
-	/**
172
-	 * Retrieves amount fields.
173
-	 *
174
-	 * @since       1.0.19
175
-	 * @return array
176
-	 */
177
-	public function get_amount_fields() {
178
-
179
-		$fields = array(
180
-			'initial_amount',
181
-			'recurring_amount',
182
-    	);
183
-
184
-		return apply_filters( 'getpaid_subscription_exporter_get_amount_fields', $fields );
185
-	}
115
+                $value  = $subscription->$method();
116
+            }
117
+
118
+            if ( in_array( $field, $amount_fields ) ) {
119
+                $value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
120
+            }
121
+
122
+            $prepared[ $field ] = wpinv_clean( $value );
123
+
124
+        }
125
+
126
+        return $prepared;
127
+    }
128
+
129
+    /**
130
+     * Retrieves export fields.
131
+     *
132
+     * @since       1.0.19
133
+     * @return array
134
+     */
135
+    public function get_export_fields() {
136
+
137
+        $fields = array(
138
+            'id',
139
+            'currency',
140
+            'initial_amount',
141
+            'recurring_amount',
142
+            'trial_period',
143
+            'frequency',
144
+            'period',
145
+            'bill_times',
146
+            'parent_payment_id',
147
+            'profile_id',
148
+            'product_id',
149
+            'status',
150
+            'date_created',
151
+            'date_expires',
152
+
153
+            'customer_id',
154
+            'customer_first_name',
155
+            'customer_last_name',
156
+            'customer_phone',
157
+            'customer_email',
158
+            'customer_country',
159
+            'customer_city',
160
+            'customer_state',
161
+            'customer_zip',
162
+            'customer_company',
163
+            'customer_vat_number',
164
+            'customer_address',
165
+
166
+        );
167
+
168
+        return apply_filters( 'getpaid_subscription_exporter_get_fields', $fields );
169
+    }
170
+
171
+    /**
172
+     * Retrieves amount fields.
173
+     *
174
+     * @since       1.0.19
175
+     * @return array
176
+     */
177
+    public function get_amount_fields() {
178
+
179
+        $fields = array(
180
+            'initial_amount',
181
+            'recurring_amount',
182
+        );
183
+
184
+        return apply_filters( 'getpaid_subscription_exporter_get_amount_fields', $fields );
185
+    }
186 186
 
187 187
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-report-gateways.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -12,22 +12,22 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Report_Gateways extends GetPaid_Reports_Abstract_Report {
14 14
 
15
-	/**
16
-	 * @var string
17
-	 */
18
-	public $field = 'gateway';
19
-
20
-	/**
21
-	 * Retrieves the earning sql.
22
-	 *
23
-	 */
24
-	public function get_sql( $range ) {
25
-		global $wpdb;
26
-
27
-		$table      = $wpdb->prefix . 'getpaid_invoices';
28
-		$clauses    = $this->get_range_sql( $range );
29
-
30
-		$sql        = "SELECT
15
+    /**
16
+     * @var string
17
+     */
18
+    public $field = 'gateway';
19
+
20
+    /**
21
+     * Retrieves the earning sql.
22
+     *
23
+     */
24
+    public function get_sql( $range ) {
25
+        global $wpdb;
26
+
27
+        $table      = $wpdb->prefix . 'getpaid_invoices';
28
+        $clauses    = $this->get_range_sql( $range );
29
+
30
+        $sql        = "SELECT
31 31
 				meta.gateway AS gateway,
32 32
 				SUM(total) as total
33 33
             FROM $wpdb->posts
@@ -40,91 +40,91 @@  discard block
 block discarded – undo
40 40
 			ORDER BY total DESC
41 41
         ";
42 42
 
43
-		return apply_filters( 'getpaid_gateways_graphs_get_sql', $sql, $range );
43
+        return apply_filters( 'getpaid_gateways_graphs_get_sql', $sql, $range );
44 44
 
45
-	}
45
+    }
46 46
 
47
-	/**
48
-	 * Prepares the report stats.
49
-	 *
50
-	 */
51
-	public function prepare_stats() {
52
-		global $wpdb;
53
-		$this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
54
-		$this->stats = $this->normalize_stats( $this->stats );
55
-	}
47
+    /**
48
+     * Prepares the report stats.
49
+     *
50
+     */
51
+    public function prepare_stats() {
52
+        global $wpdb;
53
+        $this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
54
+        $this->stats = $this->normalize_stats( $this->stats );
55
+    }
56 56
 
57
-	/**
58
-	 * Normalizes the report stats.
59
-	 *
60
-	 */
61
-	public function normalize_stats( $stats ) {
62
-		$normalized = array();
63
-		$others     = 0;
64
-		$did        = 0;
57
+    /**
58
+     * Normalizes the report stats.
59
+     *
60
+     */
61
+    public function normalize_stats( $stats ) {
62
+        $normalized = array();
63
+        $others     = 0;
64
+        $did        = 0;
65 65
 
66
-		foreach ( $stats as $stat ) {
66
+        foreach ( $stats as $stat ) {
67 67
 
68
-			if ( $did > 4 ) {
68
+            if ( $did > 4 ) {
69 69
 
70
-				$others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
70
+                $others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
71 71
 
72
-			} else {
72
+            } else {
73 73
 
74
-				$normalized[] = array(
75
-					'total'   => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
76
-					'gateway' => strip_tags( wpinv_get_gateway_admin_label( $stat->gateway ) ),
77
-				);
74
+                $normalized[] = array(
75
+                    'total'   => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
76
+                    'gateway' => strip_tags( wpinv_get_gateway_admin_label( $stat->gateway ) ),
77
+                );
78 78
 
79
-			}
79
+            }
80 80
 
81
-			$did++;
82
-		}
81
+            $did++;
82
+        }
83 83
 
84
-		if ( $others > 0 ) {
84
+        if ( $others > 0 ) {
85 85
 
86
-			$normalized[] = array(
87
-				'total'   => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
88
-				'gateway' => esc_html__( 'Others', 'invoicing' ),
89
-			);
86
+            $normalized[] = array(
87
+                'total'   => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
88
+                'gateway' => esc_html__( 'Others', 'invoicing' ),
89
+            );
90 90
 
91
-		}
91
+        }
92 92
 
93
-		return $normalized;
94
-	}
93
+        return $normalized;
94
+    }
95 95
 
96
-	/**
97
-	 * Retrieves report data.
98
-	 *
99
-	 */
100
-	public function get_data() {
96
+    /**
97
+     * Retrieves report data.
98
+     *
99
+     */
100
+    public function get_data() {
101 101
 
102
-		$data     = wp_list_pluck( $this->stats, 'total' );
103
-		$colors   = array( '#009688', '#4caf50', '#8bc34a', '#00bcd4', '#03a9f4', '#2196f3' );
102
+        $data     = wp_list_pluck( $this->stats, 'total' );
103
+        $colors   = array( '#009688', '#4caf50', '#8bc34a', '#00bcd4', '#03a9f4', '#2196f3' );
104 104
 
105
-		shuffle( $colors );
105
+        shuffle( $colors );
106 106
 
107
-		return array(
108
-			'data'            => $data,
109
-			'backgroundColor' => $colors,
110
-		);
107
+        return array(
108
+            'data'            => $data,
109
+            'backgroundColor' => $colors,
110
+        );
111 111
 
112
-	}
112
+    }
113 113
 
114
-	/**
115
-	 * Retrieves report labels.
116
-	 *
117
-	 */
118
-	public function get_labels() {
119
-		return wp_list_pluck( $this->stats, 'gateway' );
120
-	}
114
+    /**
115
+     * Retrieves report labels.
116
+     *
117
+     */
118
+    public function get_labels() {
119
+        return wp_list_pluck( $this->stats, 'gateway' );
120
+    }
121 121
 
122
-	/**
123
-	 * Displays the actual report.
124
-	 *
125
-	 */
126
-	public function display_stats() {
127
-		?>
122
+    /**
123
+     * Displays the actual report.
124
+     *
125
+     */
126
+    public function display_stats() {
127
+        ?>
128 128
 
129 129
 			<canvas id="getpaid-chartjs-earnings-gateways"></canvas>
130 130
 
@@ -153,6 +153,6 @@  discard block
 block discarded – undo
153 153
 			</script>
154 154
 
155 155
 		<?php
156
-	}
156
+    }
157 157
 
158 158
 }
Please login to merge, or discard this patch.
includes/geolocation/class-getpaid-geolocation.php 1 patch
Indentation   +243 added lines, -243 removed lines patch added patch discarded remove patch
@@ -13,261 +13,261 @@
 block discarded – undo
13 13
  */
14 14
 class GetPaid_Geolocation {
15 15
 
16
-	/**
17
-	 * Holds the current user's IP Address.
18
-	 *
19
-	 * @var string
20
-	 */
21
-	public static $current_user_ip;
22
-
23
-	/**
24
-	 * API endpoints for looking up a user IP address.
25
-	 *
26
-	 * For example, in case a user is on localhost.
27
-	 *
28
-	 * @var array
29
-	 */
30
-	protected static $ip_lookup_apis = array(
31
-		'ipify'             => 'http://api.ipify.org/',
32
-		'ipecho'            => 'http://ipecho.net/plain',
33
-		'ident'             => 'http://ident.me',
34
-		'whatismyipaddress' => 'http://bot.whatismyipaddress.com',
35
-	);
36
-
37
-	/**
38
-	 * API endpoints for geolocating an IP address
39
-	 *
40
-	 * @var array
41
-	 */
42
-	protected static $geoip_apis = array(
43
-		'ip-api.com' => 'http://ip-api.com/json/%s',
44
-		'ipinfo.io'  => 'https://ipinfo.io/%s/json',
45
-	);
46
-
47
-	/**
48
-	 * Get current user IP Address.
49
-	 *
50
-	 * @return string
51
-	 */
52
-	public static function get_ip_address() {
53
-		return wpinv_get_ip();
54
-	}
55
-
56
-	/**
57
-	 * Get user IP Address using an external service.
58
-	 * This can be used as a fallback for users on localhost where
59
-	 * get_ip_address() will be a local IP and non-geolocatable.
60
-	 *
61
-	 * @return string
62
-	 */
63
-	public static function get_external_ip_address() {
64
-
65
-		$transient_name = 'external_ip_address_0.0.0.0';
66
-
67
-		if ( '' !== self::get_ip_address() ) {
68
-			$transient_name      = 'external_ip_address_' . self::get_ip_address();
69
-		}
70
-
71
-		// Try retrieving from cache.
72
-		$external_ip_address = get_transient( $transient_name );
73
-
74
-		if ( false === $external_ip_address ) {
75
-			$external_ip_address     = '0.0.0.0';
76
-			$ip_lookup_services      = apply_filters( 'getpaid_geolocation_ip_lookup_apis', self::$ip_lookup_apis );
77
-			$ip_lookup_services_keys = array_keys( $ip_lookup_services );
78
-			shuffle( $ip_lookup_services_keys );
79
-
80
-			foreach ( $ip_lookup_services_keys as $service_name ) {
81
-				$service_endpoint = $ip_lookup_services[ $service_name ];
82
-				$response         = wp_safe_remote_get( $service_endpoint, array( 'timeout' => 2 ) );
83
-
84
-				if ( ! is_wp_error( $response ) && rest_is_ip_address( $response['body'] ) ) {
85
-					$external_ip_address = apply_filters( 'getpaid_geolocation_ip_lookup_api_response', wpinv_clean( $response['body'] ), $service_name );
86
-					break;
87
-				}
16
+    /**
17
+     * Holds the current user's IP Address.
18
+     *
19
+     * @var string
20
+     */
21
+    public static $current_user_ip;
22
+
23
+    /**
24
+     * API endpoints for looking up a user IP address.
25
+     *
26
+     * For example, in case a user is on localhost.
27
+     *
28
+     * @var array
29
+     */
30
+    protected static $ip_lookup_apis = array(
31
+        'ipify'             => 'http://api.ipify.org/',
32
+        'ipecho'            => 'http://ipecho.net/plain',
33
+        'ident'             => 'http://ident.me',
34
+        'whatismyipaddress' => 'http://bot.whatismyipaddress.com',
35
+    );
36
+
37
+    /**
38
+     * API endpoints for geolocating an IP address
39
+     *
40
+     * @var array
41
+     */
42
+    protected static $geoip_apis = array(
43
+        'ip-api.com' => 'http://ip-api.com/json/%s',
44
+        'ipinfo.io'  => 'https://ipinfo.io/%s/json',
45
+    );
46
+
47
+    /**
48
+     * Get current user IP Address.
49
+     *
50
+     * @return string
51
+     */
52
+    public static function get_ip_address() {
53
+        return wpinv_get_ip();
54
+    }
55
+
56
+    /**
57
+     * Get user IP Address using an external service.
58
+     * This can be used as a fallback for users on localhost where
59
+     * get_ip_address() will be a local IP and non-geolocatable.
60
+     *
61
+     * @return string
62
+     */
63
+    public static function get_external_ip_address() {
64
+
65
+        $transient_name = 'external_ip_address_0.0.0.0';
66
+
67
+        if ( '' !== self::get_ip_address() ) {
68
+            $transient_name      = 'external_ip_address_' . self::get_ip_address();
69
+        }
70
+
71
+        // Try retrieving from cache.
72
+        $external_ip_address = get_transient( $transient_name );
73
+
74
+        if ( false === $external_ip_address ) {
75
+            $external_ip_address     = '0.0.0.0';
76
+            $ip_lookup_services      = apply_filters( 'getpaid_geolocation_ip_lookup_apis', self::$ip_lookup_apis );
77
+            $ip_lookup_services_keys = array_keys( $ip_lookup_services );
78
+            shuffle( $ip_lookup_services_keys );
79
+
80
+            foreach ( $ip_lookup_services_keys as $service_name ) {
81
+                $service_endpoint = $ip_lookup_services[ $service_name ];
82
+                $response         = wp_safe_remote_get( $service_endpoint, array( 'timeout' => 2 ) );
83
+
84
+                if ( ! is_wp_error( $response ) && rest_is_ip_address( $response['body'] ) ) {
85
+                    $external_ip_address = apply_filters( 'getpaid_geolocation_ip_lookup_api_response', wpinv_clean( $response['body'] ), $service_name );
86
+                    break;
87
+                }
88 88
 }
89 89
 
90
-			set_transient( $transient_name, $external_ip_address, WEEK_IN_SECONDS );
91
-		}
92
-
93
-		return $external_ip_address;
94
-	}
95
-
96
-	/**
97
-	 * Geolocate an IP address.
98
-	 *
99
-	 * @param  string $ip_address   IP Address.
100
-	 * @param  bool   $fallback     If true, fallbacks to alternative IP detection (can be slower).
101
-	 * @param  bool   $api_fallback If true, uses geolocation APIs if the database file doesn't exist (can be slower).
102
-	 * @return array
103
-	 */
104
-	public static function geolocate_ip( $ip_address = '', $fallback = false, $api_fallback = true ) {
105
-
106
-		if ( empty( $ip_address ) ) {
107
-			$ip_address = self::get_ip_address();
108
-		}
109
-
110
-		// Update the current user's IP Address.
111
-		self::$current_user_ip = $ip_address;
112
-
113
-		// Filter to allow custom geolocation of the IP address.
114
-		$country_code = apply_filters( 'getpaid_geolocate_ip', false, $ip_address, $fallback, $api_fallback );
115
-
116
-		if ( false !== $country_code ) {
117
-
118
-			return array(
119
-				'country'  => $country_code,
120
-				'state'    => '',
121
-				'city'     => '',
122
-				'postcode' => '',
123
-			);
124
-
125
-		}
126
-
127
-		$country_code = self::get_country_code_from_headers();
128
-
129
-		/**
130
-		 * Get geolocation filter.
131
-		 *
132
-		 * @since 1.0.19
133
-		 * @param array  $geolocation Geolocation data, including country, state, city, and postcode.
134
-		 * @param string $ip_address  IP Address.
135
-		 */
136
-		$geolocation  = apply_filters(
137
-			'getpaid_get_geolocation',
138
-			array(
139
-				'country'  => $country_code,
140
-				'state'    => '',
141
-				'city'     => '',
142
-				'postcode' => '',
143
-			),
144
-			$ip_address
145
-		);
146
-
147
-		// If we still haven't found a country code, let's consider doing an API lookup.
148
-		if ( '' === $geolocation['country'] && $api_fallback ) {
149
-			$geolocation['country'] = self::geolocate_via_api( $ip_address );
150
-		}
151
-
152
-		// It's possible that we're in a local environment, in which case the geolocation needs to be done from the
153
-		// external address.
154
-		if ( '' === $geolocation['country'] && $fallback ) {
155
-			$external_ip_address = self::get_external_ip_address();
156
-
157
-			// Only bother with this if the external IP differs.
158
-			if ( '0.0.0.0' !== $external_ip_address && $external_ip_address !== $ip_address ) {
159
-				return self::geolocate_ip( $external_ip_address, false, $api_fallback );
160
-			}
90
+            set_transient( $transient_name, $external_ip_address, WEEK_IN_SECONDS );
91
+        }
92
+
93
+        return $external_ip_address;
94
+    }
95
+
96
+    /**
97
+     * Geolocate an IP address.
98
+     *
99
+     * @param  string $ip_address   IP Address.
100
+     * @param  bool   $fallback     If true, fallbacks to alternative IP detection (can be slower).
101
+     * @param  bool   $api_fallback If true, uses geolocation APIs if the database file doesn't exist (can be slower).
102
+     * @return array
103
+     */
104
+    public static function geolocate_ip( $ip_address = '', $fallback = false, $api_fallback = true ) {
105
+
106
+        if ( empty( $ip_address ) ) {
107
+            $ip_address = self::get_ip_address();
108
+        }
109
+
110
+        // Update the current user's IP Address.
111
+        self::$current_user_ip = $ip_address;
112
+
113
+        // Filter to allow custom geolocation of the IP address.
114
+        $country_code = apply_filters( 'getpaid_geolocate_ip', false, $ip_address, $fallback, $api_fallback );
115
+
116
+        if ( false !== $country_code ) {
117
+
118
+            return array(
119
+                'country'  => $country_code,
120
+                'state'    => '',
121
+                'city'     => '',
122
+                'postcode' => '',
123
+            );
124
+
125
+        }
126
+
127
+        $country_code = self::get_country_code_from_headers();
128
+
129
+        /**
130
+         * Get geolocation filter.
131
+         *
132
+         * @since 1.0.19
133
+         * @param array  $geolocation Geolocation data, including country, state, city, and postcode.
134
+         * @param string $ip_address  IP Address.
135
+         */
136
+        $geolocation  = apply_filters(
137
+            'getpaid_get_geolocation',
138
+            array(
139
+                'country'  => $country_code,
140
+                'state'    => '',
141
+                'city'     => '',
142
+                'postcode' => '',
143
+            ),
144
+            $ip_address
145
+        );
146
+
147
+        // If we still haven't found a country code, let's consider doing an API lookup.
148
+        if ( '' === $geolocation['country'] && $api_fallback ) {
149
+            $geolocation['country'] = self::geolocate_via_api( $ip_address );
150
+        }
151
+
152
+        // It's possible that we're in a local environment, in which case the geolocation needs to be done from the
153
+        // external address.
154
+        if ( '' === $geolocation['country'] && $fallback ) {
155
+            $external_ip_address = self::get_external_ip_address();
156
+
157
+            // Only bother with this if the external IP differs.
158
+            if ( '0.0.0.0' !== $external_ip_address && $external_ip_address !== $ip_address ) {
159
+                return self::geolocate_ip( $external_ip_address, false, $api_fallback );
160
+            }
161 161
 }
162 162
 
163
-		return array(
164
-			'country'  => $geolocation['country'],
165
-			'state'    => $geolocation['state'],
166
-			'city'     => $geolocation['city'],
167
-			'postcode' => $geolocation['postcode'],
168
-		);
169
-
170
-	}
171
-
172
-	/**
173
-	 * Fetches the country code from the request headers, if one is available.
174
-	 *
175
-	 * @since 1.0.19
176
-	 * @return string The country code pulled from the headers, or empty string if one was not found.
177
-	 */
178
-	protected static function get_country_code_from_headers() {
179
-		$country_code = '';
180
-
181
-		$headers = array(
182
-			'MM_COUNTRY_CODE',
183
-			'GEOIP_COUNTRY_CODE',
184
-			'HTTP_CF_IPCOUNTRY',
185
-			'HTTP_X_COUNTRY_CODE',
186
-		);
187
-
188
-		foreach ( $headers as $header ) {
189
-			if ( empty( $_SERVER[ $header ] ) ) {
190
-				continue;
191
-			}
192
-
193
-			$country_code = strtoupper( sanitize_text_field( wp_unslash( $_SERVER[ $header ] ) ) );
194
-			break;
195
-		}
196
-
197
-		return $country_code;
198
-	}
199
-
200
-	/**
201
-	 * Use APIs to Geolocate the user.
202
-	 *
203
-	 * Geolocation APIs can be added through the use of the getpaid_geolocation_geoip_apis filter.
204
-	 * Provide a name=>value pair for service-slug=>endpoint.
205
-	 *
206
-	 * If APIs are defined, one will be chosen at random to fulfil the request. After completing, the result
207
-	 * will be cached in a transient.
208
-	 *
209
-	 * @param  string $ip_address IP address.
210
-	 * @return string
211
-	 */
212
-	protected static function geolocate_via_api( $ip_address ) {
213
-
214
-		// Retrieve from cache...
215
-		$country_code = get_transient( 'geoip_' . $ip_address );
216
-
217
-		// If missing, retrieve from the API.
218
-		if ( false === $country_code ) {
219
-			$geoip_services = apply_filters( 'getpaid_geolocation_geoip_apis', self::$geoip_apis );
220
-
221
-			if ( empty( $geoip_services ) ) {
222
-				return '';
223
-			}
224
-
225
-			$geoip_services_keys = array_keys( $geoip_services );
226
-
227
-			shuffle( $geoip_services_keys );
228
-
229
-			foreach ( $geoip_services_keys as $service_name ) {
230
-
231
-				$service_endpoint = $geoip_services[ $service_name ];
232
-				$response         = wp_safe_remote_get( sprintf( $service_endpoint, $ip_address ), array( 'timeout' => 2 ) );
233
-				$country_code     = sanitize_text_field( strtoupper( self::handle_geolocation_response( $response, $service_name ) ) );
234
-
235
-				if ( ! empty( $country_code ) ) {
236
-					break;
237
-				}
163
+        return array(
164
+            'country'  => $geolocation['country'],
165
+            'state'    => $geolocation['state'],
166
+            'city'     => $geolocation['city'],
167
+            'postcode' => $geolocation['postcode'],
168
+        );
169
+
170
+    }
171
+
172
+    /**
173
+     * Fetches the country code from the request headers, if one is available.
174
+     *
175
+     * @since 1.0.19
176
+     * @return string The country code pulled from the headers, or empty string if one was not found.
177
+     */
178
+    protected static function get_country_code_from_headers() {
179
+        $country_code = '';
180
+
181
+        $headers = array(
182
+            'MM_COUNTRY_CODE',
183
+            'GEOIP_COUNTRY_CODE',
184
+            'HTTP_CF_IPCOUNTRY',
185
+            'HTTP_X_COUNTRY_CODE',
186
+        );
187
+
188
+        foreach ( $headers as $header ) {
189
+            if ( empty( $_SERVER[ $header ] ) ) {
190
+                continue;
191
+            }
192
+
193
+            $country_code = strtoupper( sanitize_text_field( wp_unslash( $_SERVER[ $header ] ) ) );
194
+            break;
195
+        }
196
+
197
+        return $country_code;
198
+    }
199
+
200
+    /**
201
+     * Use APIs to Geolocate the user.
202
+     *
203
+     * Geolocation APIs can be added through the use of the getpaid_geolocation_geoip_apis filter.
204
+     * Provide a name=>value pair for service-slug=>endpoint.
205
+     *
206
+     * If APIs are defined, one will be chosen at random to fulfil the request. After completing, the result
207
+     * will be cached in a transient.
208
+     *
209
+     * @param  string $ip_address IP address.
210
+     * @return string
211
+     */
212
+    protected static function geolocate_via_api( $ip_address ) {
213
+
214
+        // Retrieve from cache...
215
+        $country_code = get_transient( 'geoip_' . $ip_address );
216
+
217
+        // If missing, retrieve from the API.
218
+        if ( false === $country_code ) {
219
+            $geoip_services = apply_filters( 'getpaid_geolocation_geoip_apis', self::$geoip_apis );
220
+
221
+            if ( empty( $geoip_services ) ) {
222
+                return '';
223
+            }
224
+
225
+            $geoip_services_keys = array_keys( $geoip_services );
226
+
227
+            shuffle( $geoip_services_keys );
228
+
229
+            foreach ( $geoip_services_keys as $service_name ) {
230
+
231
+                $service_endpoint = $geoip_services[ $service_name ];
232
+                $response         = wp_safe_remote_get( sprintf( $service_endpoint, $ip_address ), array( 'timeout' => 2 ) );
233
+                $country_code     = sanitize_text_field( strtoupper( self::handle_geolocation_response( $response, $service_name ) ) );
234
+
235
+                if ( ! empty( $country_code ) ) {
236
+                    break;
237
+                }
238 238
 }
239 239
 
240
-			set_transient( 'geoip_' . $ip_address, $country_code, WEEK_IN_SECONDS );
241
-		}
240
+            set_transient( 'geoip_' . $ip_address, $country_code, WEEK_IN_SECONDS );
241
+        }
242 242
 
243
-		return $country_code;
244
-	}
243
+        return $country_code;
244
+    }
245 245
 
246
-	/**
247
-	 * Handles geolocation response
248
-	 *
249
-	 * @param  WP_Error|String $geolocation_response
250
-	 * @param  String $geolocation_service
251
-	 * @return string Country code
252
-	 */
253
-	protected static function handle_geolocation_response( $geolocation_response, $geolocation_service ) {
246
+    /**
247
+     * Handles geolocation response
248
+     *
249
+     * @param  WP_Error|String $geolocation_response
250
+     * @param  String $geolocation_service
251
+     * @return string Country code
252
+     */
253
+    protected static function handle_geolocation_response( $geolocation_response, $geolocation_service ) {
254 254
 
255
-		if ( is_wp_error( $geolocation_response ) || empty( $geolocation_response['body'] ) ) {
256
-			return '';
257
-		}
255
+        if ( is_wp_error( $geolocation_response ) || empty( $geolocation_response['body'] ) ) {
256
+            return '';
257
+        }
258 258
 
259
-		if ( $geolocation_service === 'ipinfo.io' ) {
260
-			$data = json_decode( $geolocation_response['body'] );
261
-			return empty( $data ) || empty( $data->country ) ? '' : $data->country;
262
-		}
259
+        if ( $geolocation_service === 'ipinfo.io' ) {
260
+            $data = json_decode( $geolocation_response['body'] );
261
+            return empty( $data ) || empty( $data->country ) ? '' : $data->country;
262
+        }
263 263
 
264
-		if ( $geolocation_service === 'ip-api.com' ) {
265
-			$data = json_decode( $geolocation_response['body'] );
266
-			return empty( $data ) || empty( $data->countryCode ) ? '' : $data->countryCode;
267
-		}
264
+        if ( $geolocation_service === 'ip-api.com' ) {
265
+            $data = json_decode( $geolocation_response['body'] );
266
+            return empty( $data ) || empty( $data->countryCode ) ? '' : $data->countryCode;
267
+        }
268 268
 
269
-		return apply_filters( 'getpaid_geolocation_geoip_response_' . $geolocation_service, '', $geolocation_response['body'] );
269
+        return apply_filters( 'getpaid_geolocation_geoip_response_' . $geolocation_service, '', $geolocation_response['body'] );
270 270
 
271
-	}
271
+    }
272 272
 
273 273
 }
Please login to merge, or discard this patch.
includes/class-wpinv-discount.php 1 patch
Indentation   +1340 added lines, -1340 removed lines patch added patch discarded remove patch
@@ -15,30 +15,30 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class WPInv_Discount extends GetPaid_Data {
17 17
 
18
-	/**
19
-	 * Which data store to load.
20
-	 *
21
-	 * @var string
22
-	 */
18
+    /**
19
+     * Which data store to load.
20
+     *
21
+     * @var string
22
+     */
23 23
     protected $data_store_name = 'discount';
24 24
 
25 25
     /**
26
-	 * This is the name of this object type.
27
-	 *
28
-	 * @var string
29
-	 */
30
-	protected $object_type = 'discount';
31
-
32
-	/**
33
-	 * Discount Data array. This is the core item data exposed in APIs.
34
-	 *
35
-	 * @since 1.0.19
36
-	 * @var array
37
-	 */
38
-	protected $data = array(
39
-		'status'         => 'draft',
40
-		'version'        => '',
41
-		'date_created'   => null,
26
+     * This is the name of this object type.
27
+     *
28
+     * @var string
29
+     */
30
+    protected $object_type = 'discount';
31
+
32
+    /**
33
+     * Discount Data array. This is the core item data exposed in APIs.
34
+     *
35
+     * @since 1.0.19
36
+     * @var array
37
+     */
38
+    protected $data = array(
39
+        'status'         => 'draft',
40
+        'version'        => '',
41
+        'date_created'   => null,
42 42
         'date_modified'  => null,
43 43
         'name'           => 'no-name',
44 44
         'description'    => '',
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
         'start'          => null,
50 50
         'items'          => array(),
51 51
         'excluded_items' => array(),
52
-		'required_items' => array(),
52
+        'required_items' => array(),
53 53
         'uses'           => 0,
54 54
         'max_uses'       => null,
55 55
         'is_recurring'   => null,
@@ -59,147 +59,147 @@  discard block
 block discarded – undo
59 59
         'amount'         => null,
60 60
     );
61 61
 
62
-	/**
63
-	 * Stores meta in cache for future reads.
64
-	 *
65
-	 * A group must be set to to enable caching.
66
-	 *
67
-	 * @var string
68
-	 */
69
-	protected $cache_group = 'getpaid_discounts';
62
+    /**
63
+     * Stores meta in cache for future reads.
64
+     *
65
+     * A group must be set to to enable caching.
66
+     *
67
+     * @var string
68
+     */
69
+    protected $cache_group = 'getpaid_discounts';
70 70
 
71 71
     /**
72 72
      * Stores a reference to the original WP_Post object
73 73
      *
74 74
      * @var WP_Post
75 75
      */
76
-	protected $post = null;
77
-
78
-	/**
79
-	 * Get the discount if ID is passed, otherwise the discount is new and empty.
80
-	 *
81
-	 * @param int|array|string|WPInv_Discount|WP_Post $discount discount data, object, ID or code.
82
-	 */
83
-	public function __construct( $discount = 0 ) {
84
-		parent::__construct( $discount );
85
-
86
-		if ( is_numeric( $discount ) && 'wpi_discount' === get_post_type( $discount ) ) {
87
-			$this->set_id( $discount );
88
-		} elseif ( $discount instanceof self ) {
89
-			$this->set_id( $discount->get_id() );
90
-		} elseif ( ! empty( $discount->ID ) ) {
91
-			$this->set_id( $discount->ID );
92
-		} elseif ( is_array( $discount ) ) {
93
-			$this->set_props( $discount );
94
-
95
-			if ( isset( $discount['ID'] ) ) {
96
-				$this->set_id( $discount['ID'] );
97
-			}
76
+    protected $post = null;
77
+
78
+    /**
79
+     * Get the discount if ID is passed, otherwise the discount is new and empty.
80
+     *
81
+     * @param int|array|string|WPInv_Discount|WP_Post $discount discount data, object, ID or code.
82
+     */
83
+    public function __construct( $discount = 0 ) {
84
+        parent::__construct( $discount );
85
+
86
+        if ( is_numeric( $discount ) && 'wpi_discount' === get_post_type( $discount ) ) {
87
+            $this->set_id( $discount );
88
+        } elseif ( $discount instanceof self ) {
89
+            $this->set_id( $discount->get_id() );
90
+        } elseif ( ! empty( $discount->ID ) ) {
91
+            $this->set_id( $discount->ID );
92
+        } elseif ( is_array( $discount ) ) {
93
+            $this->set_props( $discount );
94
+
95
+            if ( isset( $discount['ID'] ) ) {
96
+                $this->set_id( $discount['ID'] );
97
+            }
98 98
 } elseif ( is_scalar( $discount ) && $discount = self::get_discount_id_by_code( $discount ) ) {
99
-			$this->set_id( $discount );
100
-		} else {
101
-			$this->set_object_read( true );
102
-		}
99
+            $this->set_id( $discount );
100
+        } else {
101
+            $this->set_object_read( true );
102
+        }
103 103
 
104 104
         // Load the datastore.
105
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
105
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
106 106
 
107
-		if ( $this->get_id() > 0 ) {
107
+        if ( $this->get_id() > 0 ) {
108 108
             $this->post = get_post( $this->get_id() );
109 109
             $this->ID   = $this->get_id();
110
-			$this->data_store->read( $this );
110
+            $this->data_store->read( $this );
111 111
         }
112 112
 
113
-	}
114
-
115
-	/**
116
-	 * Fetch a discount from the db/cache
117
-	 *
118
-	 *
119
-	 * @static
120
-	 * @param string $field The field to query against: 'ID', 'discount_code'
121
-	 * @param string|int $value The field value
122
-	 * @deprecated
123
-	 * @since 1.0.15
124
-	 * @return array|bool array of discount details on success. False otherwise.
125
-	 */
126
-	public static function get_data_by( $field, $value ) {
127
-
128
-		if ( 'id' == strtolower( $field ) ) {
129
-			// Make sure the value is numeric to avoid casting objects, for example,
130
-			// to int 1.
131
-			if ( ! is_numeric( $value ) ) {
132
-				return false;
113
+    }
114
+
115
+    /**
116
+     * Fetch a discount from the db/cache
117
+     *
118
+     *
119
+     * @static
120
+     * @param string $field The field to query against: 'ID', 'discount_code'
121
+     * @param string|int $value The field value
122
+     * @deprecated
123
+     * @since 1.0.15
124
+     * @return array|bool array of discount details on success. False otherwise.
125
+     */
126
+    public static function get_data_by( $field, $value ) {
127
+
128
+        if ( 'id' == strtolower( $field ) ) {
129
+            // Make sure the value is numeric to avoid casting objects, for example,
130
+            // to int 1.
131
+            if ( ! is_numeric( $value ) ) {
132
+                return false;
133 133
             }
134
-			$value = intval( $value );
135
-			if ( $value < 1 ) {
136
-				return false;
134
+            $value = intval( $value );
135
+            if ( $value < 1 ) {
136
+                return false;
137 137
             }
138
-		}
139
-
140
-		if ( ! $value || ! is_string( $field ) ) {
141
-			return false;
142
-		}
143
-
144
-		$field = trim( $field );
145
-
146
-		// prepare query args
147
-		switch ( strtolower( $field ) ) {
148
-			case 'id':
149
-				$discount_id = $value;
150
-				$args        = array( 'include' => array( $value ) );
151
-				break;
152
-			case 'discount_code':
153
-			case 'code':
154
-				$value       = trim( $value );
155
-				$discount_id = wp_cache_get( $value, 'WPInv_Discount_Codes' );
156
-				$args        = array(
157
-					'meta_key'   => '_wpi_discount_code',
158
-					'meta_value' => $value,
159
-				);
160
-				break;
161
-			case 'name':
162
-				$discount_id = 0;
163
-				$args        = array( 'name' => trim( $value ) );
164
-				break;
165
-			default:
166
-				$args        = apply_filters( "wpinv_discount_get_data_by_{$field}_args", null, $value );
167
-				if ( ! is_array( $args ) ) {
168
-					return apply_filters( "wpinv_discount_get_data_by_$field", false, $value );
169
-				}
138
+        }
139
+
140
+        if ( ! $value || ! is_string( $field ) ) {
141
+            return false;
142
+        }
143
+
144
+        $field = trim( $field );
145
+
146
+        // prepare query args
147
+        switch ( strtolower( $field ) ) {
148
+            case 'id':
149
+                $discount_id = $value;
150
+                $args        = array( 'include' => array( $value ) );
151
+                break;
152
+            case 'discount_code':
153
+            case 'code':
154
+                $value       = trim( $value );
155
+                $discount_id = wp_cache_get( $value, 'WPInv_Discount_Codes' );
156
+                $args        = array(
157
+                    'meta_key'   => '_wpi_discount_code',
158
+                    'meta_value' => $value,
159
+                );
160
+                break;
161
+            case 'name':
162
+                $discount_id = 0;
163
+                $args        = array( 'name' => trim( $value ) );
164
+                break;
165
+            default:
166
+                $args        = apply_filters( "wpinv_discount_get_data_by_{$field}_args", null, $value );
167
+                if ( ! is_array( $args ) ) {
168
+                    return apply_filters( "wpinv_discount_get_data_by_$field", false, $value );
169
+                }
170 170
 }
171 171
 
172
-		// Check if there is a cached value.
173
-		if ( ! empty( $discount_id ) && $discount = wp_cache_get( (int) $discount_id, 'WPInv_Discounts' ) ) {
174
-			return $discount;
175
-		}
172
+        // Check if there is a cached value.
173
+        if ( ! empty( $discount_id ) && $discount = wp_cache_get( (int) $discount_id, 'WPInv_Discounts' ) ) {
174
+            return $discount;
175
+        }
176 176
 
177
-		$args = array_merge(
178
-			$args,
179
-			array(
180
-				'post_type'      => 'wpi_discount',
181
-				'posts_per_page' => 1,
182
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
183
-			)
184
-		);
177
+        $args = array_merge(
178
+            $args,
179
+            array(
180
+                'post_type'      => 'wpi_discount',
181
+                'posts_per_page' => 1,
182
+                'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
183
+            )
184
+        );
185 185
 
186
-		$discount = get_posts( $args );
186
+        $discount = get_posts( $args );
187 187
 
188
-		if ( empty( $discount ) ) {
189
-			return false;
190
-		}
188
+        if ( empty( $discount ) ) {
189
+            return false;
190
+        }
191 191
 
192
-		$discount = $discount[0];
192
+        $discount = $discount[0];
193 193
 
194
-		// Prepare the return data.
195
-		$return = array(
194
+        // Prepare the return data.
195
+        $return = array(
196 196
             'ID'             => $discount->ID,
197 197
             'code'           => get_post_meta( $discount->ID, '_wpi_discount_code', true ),
198 198
             'amount'         => get_post_meta( $discount->ID, '_wpi_discount_amount', true ),
199 199
             'date_created'   => $discount->post_date,
200
-			'date_modified'  => $discount->post_modified,
201
-			'status'         => $discount->post_status,
202
-			'start'          => get_post_meta( $discount->ID, '_wpi_discount_start', true ),
200
+            'date_modified'  => $discount->post_modified,
201
+            'status'         => $discount->post_status,
202
+            'start'          => get_post_meta( $discount->ID, '_wpi_discount_start', true ),
203 203
             'expiration'     => get_post_meta( $discount->ID, '_wpi_discount_expiration', true ),
204 204
             'type'           => get_post_meta( $discount->ID, '_wpi_discount_type', true ),
205 205
             'description'    => $discount->post_excerpt,
@@ -207,84 +207,84 @@  discard block
 block discarded – undo
207 207
             'is_single_use'  => get_post_meta( $discount->ID, '_wpi_discount_is_single_use', true ),
208 208
             'items'          => get_post_meta( $discount->ID, '_wpi_discount_items', true ),
209 209
             'excluded_items' => get_post_meta( $discount->ID, '_wpi_discount_excluded_items', true ),
210
-			'required_items' => get_post_meta( $discount->ID, '_wpi_discount_required_items', true ),
210
+            'required_items' => get_post_meta( $discount->ID, '_wpi_discount_required_items', true ),
211 211
             'max_uses'       => get_post_meta( $discount->ID, '_wpi_discount_max_uses', true ),
212 212
             'is_recurring'   => get_post_meta( $discount->ID, '_wpi_discount_is_recurring', true ),
213 213
             'min_total'      => get_post_meta( $discount->ID, '_wpi_discount_min_total', true ),
214 214
             'max_total'      => get_post_meta( $discount->ID, '_wpi_discount_max_total', true ),
215 215
         );
216 216
 
217
-		$return = apply_filters( 'wpinv_discount_properties', $return );
218
-
219
-		// Update the cache with our data
220
-		wp_cache_add( $discount->ID, $return, 'WPInv_Discounts' );
221
-		wp_cache_add( $return['code'], $discount->ID, 'WPInv_Discount_Codes' );
222
-
223
-		return $return;
224
-	}
225
-
226
-	/**
227
-	 * Given a discount code, it returns a discount id.
228
-	 *
229
-	 *
230
-	 * @static
231
-	 * @param string $discount_code
232
-	 * @since 1.0.15
233
-	 * @return int
234
-	 */
235
-	public static function get_discount_id_by_code( $discount_code ) {
236
-
237
-		// Trim the code.
238
-		$discount_code = trim( $discount_code );
239
-
240
-		// Ensure a value has been passed.
241
-		if ( empty( $discount_code ) ) {
242
-			return 0;
243
-		}
244
-
245
-		// Maybe retrieve from the cache.
246
-		$discount_id   = wp_cache_get( $discount_code, 'getpaid_discount_codes' );
247
-		if ( ! empty( $discount_id ) ) {
248
-			return $discount_id;
249
-		}
250
-
251
-		// Fetch the first discount codes.
252
-		$discounts = get_posts(
253
-			array(
254
-				'meta_key'       => '_wpi_discount_code',
255
-				'meta_value'     => $discount_code,
256
-				'post_type'      => 'wpi_discount',
257
-				'posts_per_page' => 1,
258
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
259
-				'fields'         => 'ids',
260
-			)
261
-		);
262
-
263
-		if ( empty( $discounts ) ) {
264
-			return 0;
265
-		}
266
-
267
-		$discount_id = $discounts[0];
268
-
269
-		// Update the cache with our data
270
-		wp_cache_add( get_post_meta( $discount_id, '_wpi_discount_code', true ), $discount_id, 'getpaid_discount_codes' );
271
-
272
-		return $discount_id;
273
-	}
274
-
275
-	/**
276
-	 * Magic method for checking the existence of a certain custom field.
277
-	 *
278
-	 * @since 1.0.15
279
-	 * @access public
280
-	 *
281
-	 * @return bool Whether the given discount field is set.
282
-	 */
283
-	public function __isset( $key ) {
284
-		return isset( $this->data[ $key ] ) || method_exists( $this, "get_$key" );
285
-	}
286
-
287
-	/*
217
+        $return = apply_filters( 'wpinv_discount_properties', $return );
218
+
219
+        // Update the cache with our data
220
+        wp_cache_add( $discount->ID, $return, 'WPInv_Discounts' );
221
+        wp_cache_add( $return['code'], $discount->ID, 'WPInv_Discount_Codes' );
222
+
223
+        return $return;
224
+    }
225
+
226
+    /**
227
+     * Given a discount code, it returns a discount id.
228
+     *
229
+     *
230
+     * @static
231
+     * @param string $discount_code
232
+     * @since 1.0.15
233
+     * @return int
234
+     */
235
+    public static function get_discount_id_by_code( $discount_code ) {
236
+
237
+        // Trim the code.
238
+        $discount_code = trim( $discount_code );
239
+
240
+        // Ensure a value has been passed.
241
+        if ( empty( $discount_code ) ) {
242
+            return 0;
243
+        }
244
+
245
+        // Maybe retrieve from the cache.
246
+        $discount_id   = wp_cache_get( $discount_code, 'getpaid_discount_codes' );
247
+        if ( ! empty( $discount_id ) ) {
248
+            return $discount_id;
249
+        }
250
+
251
+        // Fetch the first discount codes.
252
+        $discounts = get_posts(
253
+            array(
254
+                'meta_key'       => '_wpi_discount_code',
255
+                'meta_value'     => $discount_code,
256
+                'post_type'      => 'wpi_discount',
257
+                'posts_per_page' => 1,
258
+                'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
259
+                'fields'         => 'ids',
260
+            )
261
+        );
262
+
263
+        if ( empty( $discounts ) ) {
264
+            return 0;
265
+        }
266
+
267
+        $discount_id = $discounts[0];
268
+
269
+        // Update the cache with our data
270
+        wp_cache_add( get_post_meta( $discount_id, '_wpi_discount_code', true ), $discount_id, 'getpaid_discount_codes' );
271
+
272
+        return $discount_id;
273
+    }
274
+
275
+    /**
276
+     * Magic method for checking the existence of a certain custom field.
277
+     *
278
+     * @since 1.0.15
279
+     * @access public
280
+     *
281
+     * @return bool Whether the given discount field is set.
282
+     */
283
+    public function __isset( $key ) {
284
+        return isset( $this->data[ $key ] ) || method_exists( $this, "get_$key" );
285
+    }
286
+
287
+    /*
288 288
 	|--------------------------------------------------------------------------
289 289
 	| CRUD methods
290 290
 	|--------------------------------------------------------------------------
@@ -299,441 +299,441 @@  discard block
 block discarded – undo
299 299
 	|--------------------------------------------------------------------------
300 300
 	*/
301 301
 
302
-	/**
303
-	 * Get discount status.
304
-	 *
305
-	 * @since 1.0.19
306
-	 * @param  string $context View or edit context.
307
-	 * @return string
308
-	 */
309
-	public function get_status( $context = 'view' ) {
310
-		return $this->get_prop( 'status', $context );
302
+    /**
303
+     * Get discount status.
304
+     *
305
+     * @since 1.0.19
306
+     * @param  string $context View or edit context.
307
+     * @return string
308
+     */
309
+    public function get_status( $context = 'view' ) {
310
+        return $this->get_prop( 'status', $context );
311 311
     }
312 312
 
313 313
     /**
314
-	 * Get plugin version when the discount was created.
315
-	 *
316
-	 * @since 1.0.19
317
-	 * @param  string $context View or edit context.
318
-	 * @return string
319
-	 */
320
-	public function get_version( $context = 'view' ) {
321
-		return $this->get_prop( 'version', $context );
314
+     * Get plugin version when the discount was created.
315
+     *
316
+     * @since 1.0.19
317
+     * @param  string $context View or edit context.
318
+     * @return string
319
+     */
320
+    public function get_version( $context = 'view' ) {
321
+        return $this->get_prop( 'version', $context );
322 322
     }
323 323
 
324 324
     /**
325
-	 * Get date when the discount was created.
326
-	 *
327
-	 * @since 1.0.19
328
-	 * @param  string $context View or edit context.
329
-	 * @return string
330
-	 */
331
-	public function get_date_created( $context = 'view' ) {
332
-		return $this->get_prop( 'date_created', $context );
325
+     * Get date when the discount was created.
326
+     *
327
+     * @since 1.0.19
328
+     * @param  string $context View or edit context.
329
+     * @return string
330
+     */
331
+    public function get_date_created( $context = 'view' ) {
332
+        return $this->get_prop( 'date_created', $context );
333 333
     }
334 334
 
335 335
     /**
336
-	 * Get GMT date when the discount was created.
337
-	 *
338
-	 * @since 1.0.19
339
-	 * @param  string $context View or edit context.
340
-	 * @return string
341
-	 */
342
-	public function get_date_created_gmt( $context = 'view' ) {
336
+     * Get GMT date when the discount was created.
337
+     *
338
+     * @since 1.0.19
339
+     * @param  string $context View or edit context.
340
+     * @return string
341
+     */
342
+    public function get_date_created_gmt( $context = 'view' ) {
343 343
         $date = $this->get_date_created( $context );
344 344
 
345 345
         if ( $date ) {
346 346
             $date = get_gmt_from_date( $date );
347 347
         }
348
-		return $date;
348
+        return $date;
349 349
     }
350 350
 
351 351
     /**
352
-	 * Get date when the discount was last modified.
353
-	 *
354
-	 * @since 1.0.19
355
-	 * @param  string $context View or edit context.
356
-	 * @return string
357
-	 */
358
-	public function get_date_modified( $context = 'view' ) {
359
-		return $this->get_prop( 'date_modified', $context );
352
+     * Get date when the discount was last modified.
353
+     *
354
+     * @since 1.0.19
355
+     * @param  string $context View or edit context.
356
+     * @return string
357
+     */
358
+    public function get_date_modified( $context = 'view' ) {
359
+        return $this->get_prop( 'date_modified', $context );
360 360
     }
361 361
 
362 362
     /**
363
-	 * Get GMT date when the discount was last modified.
364
-	 *
365
-	 * @since 1.0.19
366
-	 * @param  string $context View or edit context.
367
-	 * @return string
368
-	 */
369
-	public function get_date_modified_gmt( $context = 'view' ) {
363
+     * Get GMT date when the discount was last modified.
364
+     *
365
+     * @since 1.0.19
366
+     * @param  string $context View or edit context.
367
+     * @return string
368
+     */
369
+    public function get_date_modified_gmt( $context = 'view' ) {
370 370
         $date = $this->get_date_modified( $context );
371 371
 
372 372
         if ( $date ) {
373 373
             $date = get_gmt_from_date( $date );
374 374
         }
375
-		return $date;
376
-    }
377
-
378
-    /**
379
-	 * Get the discount name.
380
-	 *
381
-	 * @since 1.0.19
382
-	 * @param  string $context View or edit context.
383
-	 * @return string
384
-	 */
385
-	public function get_name( $context = 'view' ) {
386
-		return $this->get_prop( 'name', $context );
387
-    }
388
-
389
-    /**
390
-	 * Alias of self::get_name().
391
-	 *
392
-	 * @since 1.0.19
393
-	 * @param  string $context View or edit context.
394
-	 * @return string
395
-	 */
396
-	public function get_title( $context = 'view' ) {
397
-		return $this->get_name( $context );
398
-    }
399
-
400
-    /**
401
-	 * Get the discount description.
402
-	 *
403
-	 * @since 1.0.19
404
-	 * @param  string $context View or edit context.
405
-	 * @return string
406
-	 */
407
-	public function get_description( $context = 'view' ) {
408
-		return $this->get_prop( 'description', $context );
409
-    }
410
-
411
-    /**
412
-	 * Alias of self::get_description().
413
-	 *
414
-	 * @since 1.0.19
415
-	 * @param  string $context View or edit context.
416
-	 * @return string
417
-	 */
418
-	public function get_excerpt( $context = 'view' ) {
419
-		return $this->get_description( $context );
420
-    }
421
-
422
-    /**
423
-	 * Alias of self::get_description().
424
-	 *
425
-	 * @since 1.0.19
426
-	 * @param  string $context View or edit context.
427
-	 * @return string
428
-	 */
429
-	public function get_summary( $context = 'view' ) {
430
-		return $this->get_description( $context );
431
-    }
432
-
433
-    /**
434
-	 * Get the owner of the discount.
435
-	 *
436
-	 * @since 1.0.19
437
-	 * @param  string $context View or edit context.
438
-	 * @return string
439
-	 */
440
-	public function get_author( $context = 'view' ) {
441
-		return (int) $this->get_prop( 'author', $context );
442
-	}
443
-
444
-	/**
445
-	 * Get the discount code.
446
-	 *
447
-	 * @since 1.0.19
448
-	 * @param  string $context View or edit context.
449
-	 * @return string
450
-	 */
451
-	public function get_code( $context = 'view' ) {
452
-		return $this->get_prop( 'code', $context );
453
-	}
454
-
455
-	/**
456
-	 * Alias for self::get_code().
457
-	 *
458
-	 * @since 1.0.19
459
-	 * @param  string $context View or edit context.
460
-	 * @return string
461
-	 */
462
-	public function get_coupon_code( $context = 'view' ) {
463
-		return $this->get_code( $context );
464
-	}
465
-
466
-	/**
467
-	 * Alias for self::get_code().
468
-	 *
469
-	 * @since 1.0.19
470
-	 * @param  string $context View or edit context.
471
-	 * @return string
472
-	 */
473
-	public function get_discount_code( $context = 'view' ) {
474
-		return $this->get_code( $context );
475
-	}
476
-
477
-	/**
478
-	 * Get the discount's amount.
479
-	 *
480
-	 * @since 1.0.19
481
-	 * @param  string $context View or edit context.
482
-	 * @return float
483
-	 */
484
-	public function get_amount( $context = 'view' ) {
485
-		return $context == 'view' ? floatval( $this->get_prop( 'amount', $context ) ) : $this->get_prop( 'amount', $context );
486
-	}
487
-
488
-	/**
489
-	 * Get the discount's formated amount/rate.
490
-	 *
491
-	 * @since 1.0.19
492
-	 * @return string
493
-	 */
494
-	public function get_formatted_amount() {
495
-
496
-		if ( $this->is_type( 'flat' ) ) {
497
-			$rate = wpinv_price( $this->get_amount() );
498
-		} else {
499
-			$rate = $this->get_amount() . '%';
500
-		}
501
-
502
-		return apply_filters( 'wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount() );
503
-	}
504
-
505
-	/**
506
-	 * Get the discount's start date.
507
-	 *
508
-	 * @since 1.0.19
509
-	 * @param  string $context View or edit context.
510
-	 * @return string
511
-	 */
512
-	public function get_start( $context = 'view' ) {
513
-		return $this->get_prop( 'start', $context );
514
-	}
515
-
516
-	/**
517
-	 * Alias for self::get_start().
518
-	 *
519
-	 * @since 1.0.19
520
-	 * @param  string $context View or edit context.
521
-	 * @return string
522
-	 */
523
-	public function get_start_date( $context = 'view' ) {
524
-		return $this->get_start( $context );
525
-	}
526
-
527
-	/**
528
-	 * Get the discount's expiration date.
529
-	 *
530
-	 * @since 1.0.19
531
-	 * @param  string $context View or edit context.
532
-	 * @return string
533
-	 */
534
-	public function get_expiration( $context = 'view' ) {
535
-		return $this->get_prop( 'expiration', $context );
536
-	}
537
-
538
-	/**
539
-	 * Alias for self::get_expiration().
540
-	 *
541
-	 * @since 1.0.19
542
-	 * @param  string $context View or edit context.
543
-	 * @return string
544
-	 */
545
-	public function get_expiration_date( $context = 'view' ) {
546
-		return $this->get_expiration( $context );
547
-	}
548
-
549
-	/**
550
-	 * Alias for self::get_expiration().
551
-	 *
552
-	 * @since 1.0.19
553
-	 * @param  string $context View or edit context.
554
-	 * @return string
555
-	 */
556
-	public function get_end_date( $context = 'view' ) {
557
-		return $this->get_expiration( $context );
558
-	}
559
-
560
-	/**
561
-	 * Get the discount's type.
562
-	 *
563
-	 * @since 1.0.19
564
-	 * @param  string $context View or edit context.
565
-	 * @return string
566
-	 */
567
-	public function get_type( $context = 'view' ) {
568
-		return $this->get_prop( 'type', $context );
569
-	}
570
-
571
-	/**
572
-	 * Get the number of times a discount has been used.
573
-	 *
574
-	 * @since 1.0.19
575
-	 * @param  string $context View or edit context.
576
-	 * @return int
577
-	 */
578
-	public function get_uses( $context = 'view' ) {
579
-		return (int) $this->get_prop( 'uses', $context );
580
-	}
581
-
582
-	/**
583
-	 * Get the discount's usage, i.e uses / max uses.
584
-	 *
585
-	 * @since 1.0.19
586
-	 * @return string
587
-	 */
588
-	public function get_usage() {
589
-
590
-		if ( ! $this->has_limit() ) {
591
-			return $this->get_uses() . ' / ' . ' &infin;';
592
-		}
593
-
594
-		return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
595
-
596
-	}
597
-
598
-	/**
599
-	 * Get the maximum number of time a discount can be used.
600
-	 *
601
-	 * @since 1.0.19
602
-	 * @param  string $context View or edit context.
603
-	 * @return int
604
-	 */
605
-	public function get_max_uses( $context = 'view' ) {
606
-		$max_uses = $this->get_prop( 'max_uses', $context );
607
-		return empty( $max_uses ) ? null : $max_uses;
608
-	}
609
-
610
-	/**
611
-	 * Checks if this is a single use discount or not.
612
-	 *
613
-	 * @since 1.0.19
614
-	 * @param  string $context View or edit context.
615
-	 * @return bool
616
-	 */
617
-	public function get_is_single_use( $context = 'view' ) {
618
-		return $this->get_prop( 'is_single_use', $context );
619
-	}
620
-
621
-	/**
622
-	 * Get the items that can be used with this discount.
623
-	 *
624
-	 * @since 1.0.19
625
-	 * @param  string $context View or edit context.
626
-	 * @return array
627
-	 */
628
-	public function get_items( $context = 'view' ) {
629
-		return array_filter( wp_parse_id_list( $this->get_prop( 'items', $context ) ) );
630
-	}
631
-
632
-	/**
633
-	 * Alias for self::get_items().
634
-	 *
635
-	 * @since 1.0.19
636
-	 * @param  string $context View or edit context.
637
-	 * @return array
638
-	 */
639
-	public function get_allowed_items( $context = 'view' ) {
640
-		return $this->get_items( $context );
641
-	}
642
-
643
-	/**
644
-	 * Get the items that are not allowed to use this discount.
645
-	 *
646
-	 * @since 1.0.19
647
-	 * @param  string $context View or edit context.
648
-	 * @return array
649
-	 */
650
-	public function get_excluded_items( $context = 'view' ) {
651
-		return array_filter( wp_parse_id_list( $this->get_prop( 'excluded_items', $context ) ) );
652
-	}
653
-
654
-	/**
655
-	 * Get the items that are required to be in the cart before using this discount.
656
-	 *
657
-	 * @since 1.0.19
658
-	 * @param  string $context View or edit context.
659
-	 * @return array
660
-	 */
661
-	public function get_required_items( $context = 'view' ) {
662
-		return array_filter( wp_parse_id_list( $this->get_prop( 'required_items', $context ) ) );
663
-	}
664
-
665
-	/**
666
-	 * Checks if this is a recurring discount or not.
667
-	 *
668
-	 * @since 1.0.19
669
-	 * @param  string $context View or edit context.
670
-	 * @return int|string|bool
671
-	 */
672
-	public function get_is_recurring( $context = 'view' ) {
673
-		return $this->get_prop( 'is_recurring', $context );
674
-	}
675
-
676
-	/**
677
-	 * Get's the minimum total amount allowed for this discount.
678
-	 *
679
-	 * @since 1.0.19
680
-	 * @param  string $context View or edit context.
681
-	 * @return float
682
-	 */
683
-	public function get_min_total( $context = 'view' ) {
684
-		$minimum = $this->get_prop( 'min_total', $context );
685
-		return empty( $minimum ) ? null : $minimum;
686
-	}
687
-
688
-	/**
689
-	 * Alias for self::get_min_total().
690
-	 *
691
-	 * @since 1.0.19
692
-	 * @param  string $context View or edit context.
693
-	 * @return float
694
-	 */
695
-	public function get_minimum_total( $context = 'view' ) {
696
-		return $this->get_min_total( $context );
697
-	}
698
-
699
-	/**
700
-	 * Get's the maximum total amount allowed for this discount.
701
-	 *
702
-	 * @since 1.0.19
703
-	 * @param  string $context View or edit context.
704
-	 * @return float
705
-	 */
706
-	public function get_max_total( $context = 'view' ) {
707
-		$maximum = $this->get_prop( 'max_total', $context );
708
-		return empty( $maximum ) ? null : $maximum;
709
-	}
710
-
711
-	/**
712
-	 * Alias for self::get_max_total().
713
-	 *
714
-	 * @since 1.0.19
715
-	 * @param  string $context View or edit context.
716
-	 * @return float
717
-	 */
718
-	public function get_maximum_total( $context = 'view' ) {
719
-		return $this->get_max_total( $context );
720
-	}
721
-
722
-	/**
723
-	 * Magic method for accessing discount properties.
724
-	 *
725
-	 * @since 1.0.15
726
-	 * @access public
727
-	 *
728
-	 * @param string $key Discount data to retrieve
729
-	 * @param  string $context View or edit context.
730
-	 * @return mixed Value of the given discount property (if set).
731
-	 */
732
-	public function get( $key, $context = 'view' ) {
375
+        return $date;
376
+    }
377
+
378
+    /**
379
+     * Get the discount name.
380
+     *
381
+     * @since 1.0.19
382
+     * @param  string $context View or edit context.
383
+     * @return string
384
+     */
385
+    public function get_name( $context = 'view' ) {
386
+        return $this->get_prop( 'name', $context );
387
+    }
388
+
389
+    /**
390
+     * Alias of self::get_name().
391
+     *
392
+     * @since 1.0.19
393
+     * @param  string $context View or edit context.
394
+     * @return string
395
+     */
396
+    public function get_title( $context = 'view' ) {
397
+        return $this->get_name( $context );
398
+    }
399
+
400
+    /**
401
+     * Get the discount description.
402
+     *
403
+     * @since 1.0.19
404
+     * @param  string $context View or edit context.
405
+     * @return string
406
+     */
407
+    public function get_description( $context = 'view' ) {
408
+        return $this->get_prop( 'description', $context );
409
+    }
410
+
411
+    /**
412
+     * Alias of self::get_description().
413
+     *
414
+     * @since 1.0.19
415
+     * @param  string $context View or edit context.
416
+     * @return string
417
+     */
418
+    public function get_excerpt( $context = 'view' ) {
419
+        return $this->get_description( $context );
420
+    }
421
+
422
+    /**
423
+     * Alias of self::get_description().
424
+     *
425
+     * @since 1.0.19
426
+     * @param  string $context View or edit context.
427
+     * @return string
428
+     */
429
+    public function get_summary( $context = 'view' ) {
430
+        return $this->get_description( $context );
431
+    }
432
+
433
+    /**
434
+     * Get the owner of the discount.
435
+     *
436
+     * @since 1.0.19
437
+     * @param  string $context View or edit context.
438
+     * @return string
439
+     */
440
+    public function get_author( $context = 'view' ) {
441
+        return (int) $this->get_prop( 'author', $context );
442
+    }
443
+
444
+    /**
445
+     * Get the discount code.
446
+     *
447
+     * @since 1.0.19
448
+     * @param  string $context View or edit context.
449
+     * @return string
450
+     */
451
+    public function get_code( $context = 'view' ) {
452
+        return $this->get_prop( 'code', $context );
453
+    }
454
+
455
+    /**
456
+     * Alias for self::get_code().
457
+     *
458
+     * @since 1.0.19
459
+     * @param  string $context View or edit context.
460
+     * @return string
461
+     */
462
+    public function get_coupon_code( $context = 'view' ) {
463
+        return $this->get_code( $context );
464
+    }
465
+
466
+    /**
467
+     * Alias for self::get_code().
468
+     *
469
+     * @since 1.0.19
470
+     * @param  string $context View or edit context.
471
+     * @return string
472
+     */
473
+    public function get_discount_code( $context = 'view' ) {
474
+        return $this->get_code( $context );
475
+    }
476
+
477
+    /**
478
+     * Get the discount's amount.
479
+     *
480
+     * @since 1.0.19
481
+     * @param  string $context View or edit context.
482
+     * @return float
483
+     */
484
+    public function get_amount( $context = 'view' ) {
485
+        return $context == 'view' ? floatval( $this->get_prop( 'amount', $context ) ) : $this->get_prop( 'amount', $context );
486
+    }
487
+
488
+    /**
489
+     * Get the discount's formated amount/rate.
490
+     *
491
+     * @since 1.0.19
492
+     * @return string
493
+     */
494
+    public function get_formatted_amount() {
495
+
496
+        if ( $this->is_type( 'flat' ) ) {
497
+            $rate = wpinv_price( $this->get_amount() );
498
+        } else {
499
+            $rate = $this->get_amount() . '%';
500
+        }
501
+
502
+        return apply_filters( 'wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount() );
503
+    }
504
+
505
+    /**
506
+     * Get the discount's start date.
507
+     *
508
+     * @since 1.0.19
509
+     * @param  string $context View or edit context.
510
+     * @return string
511
+     */
512
+    public function get_start( $context = 'view' ) {
513
+        return $this->get_prop( 'start', $context );
514
+    }
515
+
516
+    /**
517
+     * Alias for self::get_start().
518
+     *
519
+     * @since 1.0.19
520
+     * @param  string $context View or edit context.
521
+     * @return string
522
+     */
523
+    public function get_start_date( $context = 'view' ) {
524
+        return $this->get_start( $context );
525
+    }
526
+
527
+    /**
528
+     * Get the discount's expiration date.
529
+     *
530
+     * @since 1.0.19
531
+     * @param  string $context View or edit context.
532
+     * @return string
533
+     */
534
+    public function get_expiration( $context = 'view' ) {
535
+        return $this->get_prop( 'expiration', $context );
536
+    }
537
+
538
+    /**
539
+     * Alias for self::get_expiration().
540
+     *
541
+     * @since 1.0.19
542
+     * @param  string $context View or edit context.
543
+     * @return string
544
+     */
545
+    public function get_expiration_date( $context = 'view' ) {
546
+        return $this->get_expiration( $context );
547
+    }
548
+
549
+    /**
550
+     * Alias for self::get_expiration().
551
+     *
552
+     * @since 1.0.19
553
+     * @param  string $context View or edit context.
554
+     * @return string
555
+     */
556
+    public function get_end_date( $context = 'view' ) {
557
+        return $this->get_expiration( $context );
558
+    }
559
+
560
+    /**
561
+     * Get the discount's type.
562
+     *
563
+     * @since 1.0.19
564
+     * @param  string $context View or edit context.
565
+     * @return string
566
+     */
567
+    public function get_type( $context = 'view' ) {
568
+        return $this->get_prop( 'type', $context );
569
+    }
570
+
571
+    /**
572
+     * Get the number of times a discount has been used.
573
+     *
574
+     * @since 1.0.19
575
+     * @param  string $context View or edit context.
576
+     * @return int
577
+     */
578
+    public function get_uses( $context = 'view' ) {
579
+        return (int) $this->get_prop( 'uses', $context );
580
+    }
581
+
582
+    /**
583
+     * Get the discount's usage, i.e uses / max uses.
584
+     *
585
+     * @since 1.0.19
586
+     * @return string
587
+     */
588
+    public function get_usage() {
589
+
590
+        if ( ! $this->has_limit() ) {
591
+            return $this->get_uses() . ' / ' . ' &infin;';
592
+        }
593
+
594
+        return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
595
+
596
+    }
597
+
598
+    /**
599
+     * Get the maximum number of time a discount can be used.
600
+     *
601
+     * @since 1.0.19
602
+     * @param  string $context View or edit context.
603
+     * @return int
604
+     */
605
+    public function get_max_uses( $context = 'view' ) {
606
+        $max_uses = $this->get_prop( 'max_uses', $context );
607
+        return empty( $max_uses ) ? null : $max_uses;
608
+    }
609
+
610
+    /**
611
+     * Checks if this is a single use discount or not.
612
+     *
613
+     * @since 1.0.19
614
+     * @param  string $context View or edit context.
615
+     * @return bool
616
+     */
617
+    public function get_is_single_use( $context = 'view' ) {
618
+        return $this->get_prop( 'is_single_use', $context );
619
+    }
620
+
621
+    /**
622
+     * Get the items that can be used with this discount.
623
+     *
624
+     * @since 1.0.19
625
+     * @param  string $context View or edit context.
626
+     * @return array
627
+     */
628
+    public function get_items( $context = 'view' ) {
629
+        return array_filter( wp_parse_id_list( $this->get_prop( 'items', $context ) ) );
630
+    }
631
+
632
+    /**
633
+     * Alias for self::get_items().
634
+     *
635
+     * @since 1.0.19
636
+     * @param  string $context View or edit context.
637
+     * @return array
638
+     */
639
+    public function get_allowed_items( $context = 'view' ) {
640
+        return $this->get_items( $context );
641
+    }
642
+
643
+    /**
644
+     * Get the items that are not allowed to use this discount.
645
+     *
646
+     * @since 1.0.19
647
+     * @param  string $context View or edit context.
648
+     * @return array
649
+     */
650
+    public function get_excluded_items( $context = 'view' ) {
651
+        return array_filter( wp_parse_id_list( $this->get_prop( 'excluded_items', $context ) ) );
652
+    }
653
+
654
+    /**
655
+     * Get the items that are required to be in the cart before using this discount.
656
+     *
657
+     * @since 1.0.19
658
+     * @param  string $context View or edit context.
659
+     * @return array
660
+     */
661
+    public function get_required_items( $context = 'view' ) {
662
+        return array_filter( wp_parse_id_list( $this->get_prop( 'required_items', $context ) ) );
663
+    }
664
+
665
+    /**
666
+     * Checks if this is a recurring discount or not.
667
+     *
668
+     * @since 1.0.19
669
+     * @param  string $context View or edit context.
670
+     * @return int|string|bool
671
+     */
672
+    public function get_is_recurring( $context = 'view' ) {
673
+        return $this->get_prop( 'is_recurring', $context );
674
+    }
675
+
676
+    /**
677
+     * Get's the minimum total amount allowed for this discount.
678
+     *
679
+     * @since 1.0.19
680
+     * @param  string $context View or edit context.
681
+     * @return float
682
+     */
683
+    public function get_min_total( $context = 'view' ) {
684
+        $minimum = $this->get_prop( 'min_total', $context );
685
+        return empty( $minimum ) ? null : $minimum;
686
+    }
687
+
688
+    /**
689
+     * Alias for self::get_min_total().
690
+     *
691
+     * @since 1.0.19
692
+     * @param  string $context View or edit context.
693
+     * @return float
694
+     */
695
+    public function get_minimum_total( $context = 'view' ) {
696
+        return $this->get_min_total( $context );
697
+    }
698
+
699
+    /**
700
+     * Get's the maximum total amount allowed for this discount.
701
+     *
702
+     * @since 1.0.19
703
+     * @param  string $context View or edit context.
704
+     * @return float
705
+     */
706
+    public function get_max_total( $context = 'view' ) {
707
+        $maximum = $this->get_prop( 'max_total', $context );
708
+        return empty( $maximum ) ? null : $maximum;
709
+    }
710
+
711
+    /**
712
+     * Alias for self::get_max_total().
713
+     *
714
+     * @since 1.0.19
715
+     * @param  string $context View or edit context.
716
+     * @return float
717
+     */
718
+    public function get_maximum_total( $context = 'view' ) {
719
+        return $this->get_max_total( $context );
720
+    }
721
+
722
+    /**
723
+     * Magic method for accessing discount properties.
724
+     *
725
+     * @since 1.0.15
726
+     * @access public
727
+     *
728
+     * @param string $key Discount data to retrieve
729
+     * @param  string $context View or edit context.
730
+     * @return mixed Value of the given discount property (if set).
731
+     */
732
+    public function get( $key, $context = 'view' ) {
733 733
         return $this->get_prop( $key, $context );
734
-	}
734
+    }
735 735
 
736
-	/*
736
+    /*
737 737
 	|--------------------------------------------------------------------------
738 738
 	| Setters
739 739
 	|--------------------------------------------------------------------------
@@ -743,41 +743,41 @@  discard block
 block discarded – undo
743 743
 	| object.
744 744
 	*/
745 745
 
746
-	/**
747
-	 * Sets discount status.
748
-	 *
749
-	 * @since 1.0.19
750
-	 * @param  string $status New status.
751
-	 * @return array details of change.
752
-	 */
753
-	public function set_status( $status ) {
746
+    /**
747
+     * Sets discount status.
748
+     *
749
+     * @since 1.0.19
750
+     * @param  string $status New status.
751
+     * @return array details of change.
752
+     */
753
+    public function set_status( $status ) {
754 754
         $old_status = $this->get_status();
755 755
 
756 756
         $this->set_prop( 'status', $status );
757 757
 
758
-		return array(
759
-			'from' => $old_status,
760
-			'to'   => $status,
761
-		);
758
+        return array(
759
+            'from' => $old_status,
760
+            'to'   => $status,
761
+        );
762 762
     }
763 763
 
764 764
     /**
765
-	 * Set plugin version when the discount was created.
766
-	 *
767
-	 * @since 1.0.19
768
-	 */
769
-	public function set_version( $value ) {
770
-		$this->set_prop( 'version', $value );
765
+     * Set plugin version when the discount was created.
766
+     *
767
+     * @since 1.0.19
768
+     */
769
+    public function set_version( $value ) {
770
+        $this->set_prop( 'version', $value );
771 771
     }
772 772
 
773 773
     /**
774
-	 * Set date when the discount was created.
775
-	 *
776
-	 * @since 1.0.19
777
-	 * @param string $value Value to set.
774
+     * Set date when the discount was created.
775
+     *
776
+     * @since 1.0.19
777
+     * @param string $value Value to set.
778 778
      * @return bool Whether or not the date was set.
779
-	 */
780
-	public function set_date_created( $value ) {
779
+     */
780
+    public function set_date_created( $value ) {
781 781
         $date = strtotime( $value );
782 782
 
783 783
         if ( $date ) {
@@ -790,13 +790,13 @@  discard block
 block discarded – undo
790 790
     }
791 791
 
792 792
     /**
793
-	 * Set date when the discount was last modified.
794
-	 *
795
-	 * @since 1.0.19
796
-	 * @param string $value Value to set.
793
+     * Set date when the discount was last modified.
794
+     *
795
+     * @since 1.0.19
796
+     * @param string $value Value to set.
797 797
      * @return bool Whether or not the date was set.
798
-	 */
799
-	public function set_date_modified( $value ) {
798
+     */
799
+    public function set_date_modified( $value ) {
800 800
         $date = strtotime( $value );
801 801
 
802 802
         if ( $date ) {
@@ -809,334 +809,334 @@  discard block
 block discarded – undo
809 809
     }
810 810
 
811 811
     /**
812
-	 * Set the discount name.
813
-	 *
814
-	 * @since 1.0.19
815
-	 * @param  string $value New name.
816
-	 */
817
-	public function set_name( $value ) {
812
+     * Set the discount name.
813
+     *
814
+     * @since 1.0.19
815
+     * @param  string $value New name.
816
+     */
817
+    public function set_name( $value ) {
818 818
         $name = sanitize_text_field( $value );
819
-		$this->set_prop( 'name', $name );
819
+        $this->set_prop( 'name', $name );
820 820
     }
821 821
 
822 822
     /**
823
-	 * Alias of self::set_name().
824
-	 *
825
-	 * @since 1.0.19
826
-	 * @param  string $value New name.
827
-	 */
828
-	public function set_title( $value ) {
829
-		$this->set_name( $value );
823
+     * Alias of self::set_name().
824
+     *
825
+     * @since 1.0.19
826
+     * @param  string $value New name.
827
+     */
828
+    public function set_title( $value ) {
829
+        $this->set_name( $value );
830 830
     }
831 831
 
832 832
     /**
833
-	 * Set the discount description.
834
-	 *
835
-	 * @since 1.0.19
836
-	 * @param  string $value New description.
837
-	 */
838
-	public function set_description( $value ) {
833
+     * Set the discount description.
834
+     *
835
+     * @since 1.0.19
836
+     * @param  string $value New description.
837
+     */
838
+    public function set_description( $value ) {
839 839
         $description = wp_kses_post( $value );
840
-		return $this->set_prop( 'description', $description );
841
-    }
842
-
843
-    /**
844
-	 * Alias of self::set_description().
845
-	 *
846
-	 * @since 1.0.19
847
-	 * @param  string $value New description.
848
-	 */
849
-	public function set_excerpt( $value ) {
850
-		$this->set_description( $value );
851
-    }
852
-
853
-    /**
854
-	 * Alias of self::set_description().
855
-	 *
856
-	 * @since 1.0.19
857
-	 * @param  string $value New description.
858
-	 */
859
-	public function set_summary( $value ) {
860
-		$this->set_description( $value );
861
-    }
862
-
863
-    /**
864
-	 * Set the owner of the discount.
865
-	 *
866
-	 * @since 1.0.19
867
-	 * @param  int $value New author.
868
-	 */
869
-	public function set_author( $value ) {
870
-		$this->set_prop( 'author', (int) $value );
871
-	}
872
-
873
-	/**
874
-	 * Sets the discount code.
875
-	 *
876
-	 * @since 1.0.19
877
-	 * @param string $value New discount code.
878
-	 */
879
-	public function set_code( $value ) {
880
-		$code = sanitize_text_field( $value );
881
-		$this->set_prop( 'code', $code );
882
-	}
883
-
884
-	/**
885
-	 * Alias of self::set_code().
886
-	 *
887
-	 * @since 1.0.19
888
-	 * @param string $value New discount code.
889
-	 */
890
-	public function set_coupon_code( $value ) {
891
-		$this->set_code( $value );
892
-	}
893
-
894
-	/**
895
-	 * Alias of self::set_code().
896
-	 *
897
-	 * @since 1.0.19
898
-	 * @param string $value New discount code.
899
-	 */
900
-	public function set_discount_code( $value ) {
901
-		$this->set_code( $value );
902
-	}
903
-
904
-	/**
905
-	 * Sets the discount amount.
906
-	 *
907
-	 * @since 1.0.19
908
-	 * @param float $value New discount code.
909
-	 */
910
-	public function set_amount( $value ) {
911
-		$amount = floatval( wpinv_sanitize_amount( $value ) );
912
-		$this->set_prop( 'amount', $amount );
913
-	}
914
-
915
-	/**
916
-	 * Sets the discount's start date.
917
-	 *
918
-	 * @since 1.0.19
919
-	 * @param float $value New start date.
920
-	 */
921
-	public function set_start( $value ) {
922
-		$date = strtotime( $value );
840
+        return $this->set_prop( 'description', $description );
841
+    }
842
+
843
+    /**
844
+     * Alias of self::set_description().
845
+     *
846
+     * @since 1.0.19
847
+     * @param  string $value New description.
848
+     */
849
+    public function set_excerpt( $value ) {
850
+        $this->set_description( $value );
851
+    }
852
+
853
+    /**
854
+     * Alias of self::set_description().
855
+     *
856
+     * @since 1.0.19
857
+     * @param  string $value New description.
858
+     */
859
+    public function set_summary( $value ) {
860
+        $this->set_description( $value );
861
+    }
862
+
863
+    /**
864
+     * Set the owner of the discount.
865
+     *
866
+     * @since 1.0.19
867
+     * @param  int $value New author.
868
+     */
869
+    public function set_author( $value ) {
870
+        $this->set_prop( 'author', (int) $value );
871
+    }
872
+
873
+    /**
874
+     * Sets the discount code.
875
+     *
876
+     * @since 1.0.19
877
+     * @param string $value New discount code.
878
+     */
879
+    public function set_code( $value ) {
880
+        $code = sanitize_text_field( $value );
881
+        $this->set_prop( 'code', $code );
882
+    }
883
+
884
+    /**
885
+     * Alias of self::set_code().
886
+     *
887
+     * @since 1.0.19
888
+     * @param string $value New discount code.
889
+     */
890
+    public function set_coupon_code( $value ) {
891
+        $this->set_code( $value );
892
+    }
893
+
894
+    /**
895
+     * Alias of self::set_code().
896
+     *
897
+     * @since 1.0.19
898
+     * @param string $value New discount code.
899
+     */
900
+    public function set_discount_code( $value ) {
901
+        $this->set_code( $value );
902
+    }
903
+
904
+    /**
905
+     * Sets the discount amount.
906
+     *
907
+     * @since 1.0.19
908
+     * @param float $value New discount code.
909
+     */
910
+    public function set_amount( $value ) {
911
+        $amount = floatval( wpinv_sanitize_amount( $value ) );
912
+        $this->set_prop( 'amount', $amount );
913
+    }
914
+
915
+    /**
916
+     * Sets the discount's start date.
917
+     *
918
+     * @since 1.0.19
919
+     * @param float $value New start date.
920
+     */
921
+    public function set_start( $value ) {
922
+        $date = strtotime( $value );
923 923
 
924 924
         if ( $date ) {
925 925
             $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
926 926
             return true;
927
-		}
927
+        }
928 928
 
929
-		$this->set_prop( 'start', '' );
929
+        $this->set_prop( 'start', '' );
930 930
 
931 931
         return false;
932
-	}
933
-
934
-	/**
935
-	 * Alias of self::set_start().
936
-	 *
937
-	 * @since 1.0.19
938
-	 * @param string $value New start date.
939
-	 */
940
-	public function set_start_date( $value ) {
941
-		$this->set_start( $value );
942
-	}
943
-
944
-	/**
945
-	 * Sets the discount's expiration date.
946
-	 *
947
-	 * @since 1.0.19
948
-	 * @param float $value New expiration date.
949
-	 */
950
-	public function set_expiration( $value ) {
951
-		$date = strtotime( $value );
932
+    }
933
+
934
+    /**
935
+     * Alias of self::set_start().
936
+     *
937
+     * @since 1.0.19
938
+     * @param string $value New start date.
939
+     */
940
+    public function set_start_date( $value ) {
941
+        $this->set_start( $value );
942
+    }
943
+
944
+    /**
945
+     * Sets the discount's expiration date.
946
+     *
947
+     * @since 1.0.19
948
+     * @param float $value New expiration date.
949
+     */
950
+    public function set_expiration( $value ) {
951
+        $date = strtotime( $value );
952 952
 
953 953
         if ( $date ) {
954 954
             $this->set_prop( 'expiration', date( 'Y-m-d H:i', $date ) );
955 955
             return true;
956 956
         }
957 957
 
958
-		$this->set_prop( 'expiration', '' );
958
+        $this->set_prop( 'expiration', '' );
959 959
         return false;
960
-	}
961
-
962
-	/**
963
-	 * Alias of self::set_expiration().
964
-	 *
965
-	 * @since 1.0.19
966
-	 * @param string $value New expiration date.
967
-	 */
968
-	public function set_expiration_date( $value ) {
969
-		$this->set_expiration( $value );
970
-	}
971
-
972
-	/**
973
-	 * Alias of self::set_expiration().
974
-	 *
975
-	 * @since 1.0.19
976
-	 * @param string $value New expiration date.
977
-	 */
978
-	public function set_end_date( $value ) {
979
-		$this->set_expiration( $value );
980
-	}
981
-
982
-	/**
983
-	 * Sets the discount type.
984
-	 *
985
-	 * @since 1.0.19
986
-	 * @param string $value New discount type.
987
-	 */
988
-	public function set_type( $value ) {
989
-		if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
990
-			$this->set_prop( 'type', sanitize_text_field( $value ) );
991
-		}
992
-	}
993
-
994
-	/**
995
-	 * Sets the number of times a discount has been used.
996
-	 *
997
-	 * @since 1.0.19
998
-	 * @param int $value usage count.
999
-	 */
1000
-	public function set_uses( $value ) {
1001
-
1002
-		$value = (int) $value;
1003
-
1004
-		if ( $value < 0 ) {
1005
-			$value = 0;
1006
-		}
1007
-
1008
-		$this->set_prop( 'uses', (int) $value );
1009
-	}
1010
-
1011
-	/**
1012
-	 * Sets the maximum number of times a discount can be used.
1013
-	 *
1014
-	 * @since 1.0.19
1015
-	 * @param int $value maximum usage count.
1016
-	 */
1017
-	public function set_max_uses( $value ) {
1018
-		$this->set_prop( 'max_uses', absint( $value ) );
1019
-	}
1020
-
1021
-	/**
1022
-	 * Sets if this is a single use discount or not.
1023
-	 *
1024
-	 * @since 1.0.19
1025
-	 * @param int|bool $value is single use.
1026
-	 */
1027
-	public function set_is_single_use( $value ) {
1028
-		$this->set_prop( 'is_single_use', (bool) $value );
1029
-	}
1030
-
1031
-	/**
1032
-	 * Sets the items that can be used with this discount.
1033
-	 *
1034
-	 * @since 1.0.19
1035
-	 * @param array $value items.
1036
-	 */
1037
-	public function set_items( $value ) {
1038
-		$this->set_prop( 'items', array_filter( wp_parse_id_list( $value ) ) );
1039
-	}
1040
-
1041
-	/**
1042
-	 * Alias for self::set_items().
1043
-	 *
1044
-	 * @since 1.0.19
1045
-	 * @param array $value items.
1046
-	 */
1047
-	public function set_allowed_items( $value ) {
1048
-		$this->set_items( $value );
1049
-	}
1050
-
1051
-	/**
1052
-	 * Sets the items that can not be used with this discount.
1053
-	 *
1054
-	 * @since 1.0.19
1055
-	 * @param array $value items.
1056
-	 */
1057
-	public function set_excluded_items( $value ) {
1058
-		$this->set_prop( 'excluded_items', array_filter( wp_parse_id_list( $value ) ) );
1059
-	}
1060
-
1061
-	/**
1062
-	 * Sets the items that are required to be in the cart before using this discount.
1063
-	 *
1064
-	 * @since 1.0.19
1065
-	 * @param array $value items.
1066
-	 */
1067
-	public function set_required_items( $value ) {
1068
-		$this->set_prop( 'required_items', array_filter( wp_parse_id_list( $value ) ) );
1069
-	}
1070
-
1071
-	/**
1072
-	 * Sets if this is a recurring discounts or not.
1073
-	 *
1074
-	 * @since 1.0.19
1075
-	 * @param int|bool $value is recurring.
1076
-	 */
1077
-	public function set_is_recurring( $value ) {
1078
-		$this->set_prop( 'is_recurring', (bool) $value );
1079
-	}
1080
-
1081
-	/**
1082
-	 * Sets the minimum total that can not be used with this discount.
1083
-	 *
1084
-	 * @since 1.0.19
1085
-	 * @param float $value minimum total.
1086
-	 */
1087
-	public function set_min_total( $value ) {
1088
-		$this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1089
-	}
1090
-
1091
-	/**
1092
-	 * Alias for self::set_min_total().
1093
-	 *
1094
-	 * @since 1.0.19
1095
-	 * @param float $value minimum total.
1096
-	 */
1097
-	public function set_minimum_total( $value ) {
1098
-		$this->set_min_total( $value );
1099
-	}
1100
-
1101
-	/**
1102
-	 * Sets the maximum total that can not be used with this discount.
1103
-	 *
1104
-	 * @since 1.0.19
1105
-	 * @param float $value maximum total.
1106
-	 */
1107
-	public function set_max_total( $value ) {
1108
-		$this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1109
-	}
1110
-
1111
-	/**
1112
-	 * Alias for self::set_max_total().
1113
-	 *
1114
-	 * @since 1.0.19
1115
-	 * @param float $value maximum total.
1116
-	 */
1117
-	public function set_maximum_total( $value ) {
1118
-		$this->set_max_total( $value );
1119
-	}
1120
-
1121
-	/**
1122
-	 * @deprecated
1123
-	 */
1124
-	public function refresh(){}
1125
-
1126
-	/**
1127
-	 * @deprecated
1128
-	 *
1129
-	 */
1130
-	public function update_status( $status = 'publish' ) {
1131
-
1132
-		if ( $this->exists() && $this->get_status() != $status ) {
1133
-			$this->set_status( $status );
1134
-			$this->save();
1135
-		}
1136
-
1137
-	}
1138
-
1139
-	/*
960
+    }
961
+
962
+    /**
963
+     * Alias of self::set_expiration().
964
+     *
965
+     * @since 1.0.19
966
+     * @param string $value New expiration date.
967
+     */
968
+    public function set_expiration_date( $value ) {
969
+        $this->set_expiration( $value );
970
+    }
971
+
972
+    /**
973
+     * Alias of self::set_expiration().
974
+     *
975
+     * @since 1.0.19
976
+     * @param string $value New expiration date.
977
+     */
978
+    public function set_end_date( $value ) {
979
+        $this->set_expiration( $value );
980
+    }
981
+
982
+    /**
983
+     * Sets the discount type.
984
+     *
985
+     * @since 1.0.19
986
+     * @param string $value New discount type.
987
+     */
988
+    public function set_type( $value ) {
989
+        if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
990
+            $this->set_prop( 'type', sanitize_text_field( $value ) );
991
+        }
992
+    }
993
+
994
+    /**
995
+     * Sets the number of times a discount has been used.
996
+     *
997
+     * @since 1.0.19
998
+     * @param int $value usage count.
999
+     */
1000
+    public function set_uses( $value ) {
1001
+
1002
+        $value = (int) $value;
1003
+
1004
+        if ( $value < 0 ) {
1005
+            $value = 0;
1006
+        }
1007
+
1008
+        $this->set_prop( 'uses', (int) $value );
1009
+    }
1010
+
1011
+    /**
1012
+     * Sets the maximum number of times a discount can be used.
1013
+     *
1014
+     * @since 1.0.19
1015
+     * @param int $value maximum usage count.
1016
+     */
1017
+    public function set_max_uses( $value ) {
1018
+        $this->set_prop( 'max_uses', absint( $value ) );
1019
+    }
1020
+
1021
+    /**
1022
+     * Sets if this is a single use discount or not.
1023
+     *
1024
+     * @since 1.0.19
1025
+     * @param int|bool $value is single use.
1026
+     */
1027
+    public function set_is_single_use( $value ) {
1028
+        $this->set_prop( 'is_single_use', (bool) $value );
1029
+    }
1030
+
1031
+    /**
1032
+     * Sets the items that can be used with this discount.
1033
+     *
1034
+     * @since 1.0.19
1035
+     * @param array $value items.
1036
+     */
1037
+    public function set_items( $value ) {
1038
+        $this->set_prop( 'items', array_filter( wp_parse_id_list( $value ) ) );
1039
+    }
1040
+
1041
+    /**
1042
+     * Alias for self::set_items().
1043
+     *
1044
+     * @since 1.0.19
1045
+     * @param array $value items.
1046
+     */
1047
+    public function set_allowed_items( $value ) {
1048
+        $this->set_items( $value );
1049
+    }
1050
+
1051
+    /**
1052
+     * Sets the items that can not be used with this discount.
1053
+     *
1054
+     * @since 1.0.19
1055
+     * @param array $value items.
1056
+     */
1057
+    public function set_excluded_items( $value ) {
1058
+        $this->set_prop( 'excluded_items', array_filter( wp_parse_id_list( $value ) ) );
1059
+    }
1060
+
1061
+    /**
1062
+     * Sets the items that are required to be in the cart before using this discount.
1063
+     *
1064
+     * @since 1.0.19
1065
+     * @param array $value items.
1066
+     */
1067
+    public function set_required_items( $value ) {
1068
+        $this->set_prop( 'required_items', array_filter( wp_parse_id_list( $value ) ) );
1069
+    }
1070
+
1071
+    /**
1072
+     * Sets if this is a recurring discounts or not.
1073
+     *
1074
+     * @since 1.0.19
1075
+     * @param int|bool $value is recurring.
1076
+     */
1077
+    public function set_is_recurring( $value ) {
1078
+        $this->set_prop( 'is_recurring', (bool) $value );
1079
+    }
1080
+
1081
+    /**
1082
+     * Sets the minimum total that can not be used with this discount.
1083
+     *
1084
+     * @since 1.0.19
1085
+     * @param float $value minimum total.
1086
+     */
1087
+    public function set_min_total( $value ) {
1088
+        $this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1089
+    }
1090
+
1091
+    /**
1092
+     * Alias for self::set_min_total().
1093
+     *
1094
+     * @since 1.0.19
1095
+     * @param float $value minimum total.
1096
+     */
1097
+    public function set_minimum_total( $value ) {
1098
+        $this->set_min_total( $value );
1099
+    }
1100
+
1101
+    /**
1102
+     * Sets the maximum total that can not be used with this discount.
1103
+     *
1104
+     * @since 1.0.19
1105
+     * @param float $value maximum total.
1106
+     */
1107
+    public function set_max_total( $value ) {
1108
+        $this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1109
+    }
1110
+
1111
+    /**
1112
+     * Alias for self::set_max_total().
1113
+     *
1114
+     * @since 1.0.19
1115
+     * @param float $value maximum total.
1116
+     */
1117
+    public function set_maximum_total( $value ) {
1118
+        $this->set_max_total( $value );
1119
+    }
1120
+
1121
+    /**
1122
+     * @deprecated
1123
+     */
1124
+    public function refresh(){}
1125
+
1126
+    /**
1127
+     * @deprecated
1128
+     *
1129
+     */
1130
+    public function update_status( $status = 'publish' ) {
1131
+
1132
+        if ( $this->exists() && $this->get_status() != $status ) {
1133
+            $this->set_status( $status );
1134
+            $this->save();
1135
+        }
1136
+
1137
+    }
1138
+
1139
+    /*
1140 1140
 	|--------------------------------------------------------------------------
1141 1141
 	| Conditionals
1142 1142
 	|--------------------------------------------------------------------------
@@ -1145,290 +1145,290 @@  discard block
 block discarded – undo
1145 1145
 	|
1146 1146
 	*/
1147 1147
 
1148
-	/**
1149
-	 * Checks whether a discount exists in the database or not
1150
-	 *
1151
-	 * @since 1.0.15
1152
-	 */
1153
-	public function exists() {
1154
-		$id = $this->get_id();
1155
-		return ! empty( $id );
1156
-	}
1157
-
1158
-	/**
1159
-	 * Checks the discount type.
1160
-	 *
1161
-	 *
1162
-	 * @param  string $type the discount type to check against
1163
-	 * @since 1.0.15
1164
-	 * @return bool
1165
-	 */
1166
-	public function is_type( $type ) {
1167
-		return $this->get_type() == $type;
1168
-	}
1169
-
1170
-	/**
1171
-	 * Checks whether the discount is published or not
1172
-	 *
1173
-	 * @since 1.0.15
1174
-	 * @return bool
1175
-	 */
1176
-	public function is_active() {
1177
-		return $this->get_status() == 'publish';
1178
-	}
1179
-
1180
-	/**
1181
-	 * Checks whether the discount has max uses
1182
-	 *
1183
-	 * @since 1.0.15
1184
-	 * @return bool
1185
-	 */
1186
-	public function has_limit() {
1187
-		$limit = $this->get_max_uses();
1188
-		return ! empty( $limit );
1189
-	}
1190
-
1191
-	/**
1192
-	 * Checks whether the discount has ever been used.
1193
-	 *
1194
-	 * @since 1.0.15
1195
-	 * @return bool
1196
-	 */
1197
-	public function has_uses() {
1198
-		return $this->get_uses() > 0;
1199
-	}
1200
-
1201
-	/**
1202
-	 * Checks whether the discount is has exided the usage limit or not
1203
-	 *
1204
-	 * @since 1.0.15
1205
-	 * @return bool
1206
-	 */
1207
-	public function has_exceeded_limit() {
1208
-
1209
-		if ( ! $this->has_limit() || ! $this->has_uses() ) {
1210
-			$exceeded = false;
1211
-		} else {
1212
-			$exceeded = (int) $this->get_max_uses() <= $this->get_uses();
1213
-		}
1214
-
1215
-		return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->get_id(), $this, $this->get_code() );
1216
-	}
1217
-
1218
-	/**
1219
-	 * Checks whether the discount has an expiration date.
1220
-	 *
1221
-	 * @since 1.0.15
1222
-	 * @return bool
1223
-	 */
1224
-	public function has_expiration_date() {
1225
-		$date = $this->get_expiration_date();
1226
-		return ! empty( $date );
1227
-	}
1228
-
1229
-	/**
1230
-	 * Checks if the discount is expired
1231
-	 *
1232
-	 * @since 1.0.15
1233
-	 * @return bool
1234
-	 */
1235
-	public function is_expired() {
1236
-		$expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1237
-		return apply_filters( 'wpinv_is_discount_expired', $expired, $this->get_id(), $this, $this->get_code() );
1238
-	}
1239
-
1240
-	/**
1241
-	 * Checks whether the discount has a start date.
1242
-	 *
1243
-	 * @since 1.0.15
1244
-	 * @return bool
1245
-	 */
1246
-	public function has_start_date() {
1247
-		$date = $this->get_start_date();
1248
-		return ! empty( $date );
1249
-	}
1250
-
1251
-	/**
1252
-	 * Checks the discount start date.
1253
-	 *
1254
-	 * @since 1.0.15
1255
-	 * @return bool
1256
-	 */
1257
-	public function has_started() {
1258
-		$started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1259
-		return apply_filters( 'wpinv_is_discount_started', $started, $this->get_id(), $this, $this->get_code() );
1260
-	}
1261
-
1262
-	/**
1263
-	 * Checks the discount has allowed items or not.
1264
-	 *
1265
-	 * @since 1.0.15
1266
-	 * @return bool
1267
-	 */
1268
-	public function has_allowed_items() {
1269
-		$allowed_items = $this->get_allowed_items();
1270
-		return ! empty( $allowed_items );
1271
-	}
1272
-
1273
-	/**
1274
-	 * Checks the discount has excluded items or not.
1275
-	 *
1276
-	 * @since 1.0.15
1277
-	 * @return bool
1278
-	 */
1279
-	public function has_excluded_items() {
1280
-		$excluded_items = $this->get_excluded_items();
1281
-		return ! empty( $excluded_items );
1282
-	}
1283
-
1284
-	/**
1285
-	 * Check if a discount is valid for a given item id.
1286
-	 *
1287
-	 * @param  int|int[]  $item_ids
1288
-	 * @since 1.0.15
1289
-	 * @return boolean
1290
-	 */
1291
-	public function is_valid_for_items( $item_ids ) {
1292
-
1293
-		$item_ids = array_filter( wp_parse_id_list( $item_ids ) );
1294
-		$included = array_intersect( $item_ids, $this->get_allowed_items() );
1295
-		$excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1296
-
1297
-		if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1298
-			return false;
1299
-		}
1300
-
1301
-		if ( $this->has_allowed_items() && empty( $included ) ) {
1302
-			return false;
1303
-		}
1304
-
1305
-		return true;
1306
-	}
1307
-
1308
-	/**
1309
-	 * Checks the discount has required items or not.
1310
-	 *
1311
-	 * @since 1.0.15
1312
-	 * @return bool
1313
-	 */
1314
-	public function has_required_items() {
1315
-		$required_items = $this->get_required_items();
1316
-		return ! empty( $required_items );
1317
-	}
1318
-
1319
-	/**
1320
-	 * Checks if the required items are met
1321
-	 *
1322
-	 * @param  int|int[]  $item_ids
1323
-	 * @since 1.0.15
1324
-	 * @return boolean
1325
-	 */
1326
-	public function is_required_items_met( $item_ids ) {
1327
-
1328
-		if ( ! $this->has_required_items() ) {
1329
-			return true;
1330
-		}
1331
-
1332
-		return ! array_diff( $this->get_required_items(), array_filter( wp_parse_id_list( $item_ids ) ) );
1333
-	}
1334
-
1335
-	/**
1336
-	 * Check if a discount is valid for the given amount
1337
-	 *
1338
-	 * @param  float  $amount The amount to check against
1339
-	 * @since 1.0.15
1340
-	 * @return boolean
1341
-	 */
1342
-	public function is_valid_for_amount( $amount ) {
1343
-		return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1344
-	}
1345
-
1346
-	/**
1347
-	 * Checks if the minimum amount is set
1348
-	 *
1349
-	 * @since 1.0.15
1350
-	 * @return boolean
1351
-	 */
1352
-	public function has_minimum_amount() {
1353
-		$minimum = $this->get_minimum_total();
1354
-		return ! empty( $minimum );
1355
-	}
1356
-
1357
-	/**
1358
-	 * Checks if the minimum amount is met
1359
-	 *
1360
-	 * @param  float  $amount The amount to check against
1361
-	 * @since 1.0.15
1362
-	 * @return boolean
1363
-	 */
1364
-	public function is_minimum_amount_met( $amount ) {
1365
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1366
-		$min_met = ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1367
-		return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->get_id(), $this, $this->get_code(), $amount );
1368
-	}
1369
-
1370
-	/**
1371
-	 * Checks if the maximum amount is set
1372
-	 *
1373
-	 * @since 1.0.15
1374
-	 * @return boolean
1375
-	 */
1376
-	public function has_maximum_amount() {
1377
-		$maximum = $this->get_maximum_total();
1378
-		return ! empty( $maximum );
1379
-	}
1380
-
1381
-	/**
1382
-	 * Checks if the maximum amount is met
1383
-	 *
1384
-	 * @param  float  $amount The amount to check against
1385
-	 * @since 1.0.15
1386
-	 * @return boolean
1387
-	 */
1388
-	public function is_maximum_amount_met( $amount ) {
1389
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1390
-		$max_met = ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1391
-		return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->get_id(), $this, $this->get_code(), $amount );
1392
-	}
1393
-
1394
-	/**
1395
-	 * Checks if the discount is recurring.
1396
-	 *
1397
-	 * @since 1.0.15
1398
-	 * @return boolean
1399
-	 */
1400
-	public function is_recurring() {
1401
-		$recurring = $this->get_is_recurring();
1402
-		return ! empty( $recurring );
1403
-	}
1404
-
1405
-	/**
1406
-	 * Checks if the discount is single use.
1407
-	 *
1408
-	 * @since 1.0.15
1409
-	 * @return boolean
1410
-	 */
1411
-	public function is_single_use() {
1412
-		$usage = $this->get_is_single_use();
1413
-		return ! empty( $usage );
1414
-	}
1415
-
1416
-	/**
1417
-	 * Check if a discount is valid for the given user
1418
-	 *
1419
-	 * @param  int|string  $user
1420
-	 * @since 1.0.15
1421
-	 * @return boolean
1422
-	 */
1423
-	public function is_valid_for_user( $user ) {
1424
-
1425
-		// Ensure that the discount is single use.
1426
-		if ( empty( $user ) || ! $this->is_single_use() ) {
1427
-			return true;
1428
-		}
1429
-
1430
-		// Prepare the user id.
1431
-		$user_id = 0;
1148
+    /**
1149
+     * Checks whether a discount exists in the database or not
1150
+     *
1151
+     * @since 1.0.15
1152
+     */
1153
+    public function exists() {
1154
+        $id = $this->get_id();
1155
+        return ! empty( $id );
1156
+    }
1157
+
1158
+    /**
1159
+     * Checks the discount type.
1160
+     *
1161
+     *
1162
+     * @param  string $type the discount type to check against
1163
+     * @since 1.0.15
1164
+     * @return bool
1165
+     */
1166
+    public function is_type( $type ) {
1167
+        return $this->get_type() == $type;
1168
+    }
1169
+
1170
+    /**
1171
+     * Checks whether the discount is published or not
1172
+     *
1173
+     * @since 1.0.15
1174
+     * @return bool
1175
+     */
1176
+    public function is_active() {
1177
+        return $this->get_status() == 'publish';
1178
+    }
1179
+
1180
+    /**
1181
+     * Checks whether the discount has max uses
1182
+     *
1183
+     * @since 1.0.15
1184
+     * @return bool
1185
+     */
1186
+    public function has_limit() {
1187
+        $limit = $this->get_max_uses();
1188
+        return ! empty( $limit );
1189
+    }
1190
+
1191
+    /**
1192
+     * Checks whether the discount has ever been used.
1193
+     *
1194
+     * @since 1.0.15
1195
+     * @return bool
1196
+     */
1197
+    public function has_uses() {
1198
+        return $this->get_uses() > 0;
1199
+    }
1200
+
1201
+    /**
1202
+     * Checks whether the discount is has exided the usage limit or not
1203
+     *
1204
+     * @since 1.0.15
1205
+     * @return bool
1206
+     */
1207
+    public function has_exceeded_limit() {
1208
+
1209
+        if ( ! $this->has_limit() || ! $this->has_uses() ) {
1210
+            $exceeded = false;
1211
+        } else {
1212
+            $exceeded = (int) $this->get_max_uses() <= $this->get_uses();
1213
+        }
1214
+
1215
+        return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->get_id(), $this, $this->get_code() );
1216
+    }
1217
+
1218
+    /**
1219
+     * Checks whether the discount has an expiration date.
1220
+     *
1221
+     * @since 1.0.15
1222
+     * @return bool
1223
+     */
1224
+    public function has_expiration_date() {
1225
+        $date = $this->get_expiration_date();
1226
+        return ! empty( $date );
1227
+    }
1228
+
1229
+    /**
1230
+     * Checks if the discount is expired
1231
+     *
1232
+     * @since 1.0.15
1233
+     * @return bool
1234
+     */
1235
+    public function is_expired() {
1236
+        $expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1237
+        return apply_filters( 'wpinv_is_discount_expired', $expired, $this->get_id(), $this, $this->get_code() );
1238
+    }
1239
+
1240
+    /**
1241
+     * Checks whether the discount has a start date.
1242
+     *
1243
+     * @since 1.0.15
1244
+     * @return bool
1245
+     */
1246
+    public function has_start_date() {
1247
+        $date = $this->get_start_date();
1248
+        return ! empty( $date );
1249
+    }
1250
+
1251
+    /**
1252
+     * Checks the discount start date.
1253
+     *
1254
+     * @since 1.0.15
1255
+     * @return bool
1256
+     */
1257
+    public function has_started() {
1258
+        $started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1259
+        return apply_filters( 'wpinv_is_discount_started', $started, $this->get_id(), $this, $this->get_code() );
1260
+    }
1261
+
1262
+    /**
1263
+     * Checks the discount has allowed items or not.
1264
+     *
1265
+     * @since 1.0.15
1266
+     * @return bool
1267
+     */
1268
+    public function has_allowed_items() {
1269
+        $allowed_items = $this->get_allowed_items();
1270
+        return ! empty( $allowed_items );
1271
+    }
1272
+
1273
+    /**
1274
+     * Checks the discount has excluded items or not.
1275
+     *
1276
+     * @since 1.0.15
1277
+     * @return bool
1278
+     */
1279
+    public function has_excluded_items() {
1280
+        $excluded_items = $this->get_excluded_items();
1281
+        return ! empty( $excluded_items );
1282
+    }
1283
+
1284
+    /**
1285
+     * Check if a discount is valid for a given item id.
1286
+     *
1287
+     * @param  int|int[]  $item_ids
1288
+     * @since 1.0.15
1289
+     * @return boolean
1290
+     */
1291
+    public function is_valid_for_items( $item_ids ) {
1292
+
1293
+        $item_ids = array_filter( wp_parse_id_list( $item_ids ) );
1294
+        $included = array_intersect( $item_ids, $this->get_allowed_items() );
1295
+        $excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1296
+
1297
+        if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1298
+            return false;
1299
+        }
1300
+
1301
+        if ( $this->has_allowed_items() && empty( $included ) ) {
1302
+            return false;
1303
+        }
1304
+
1305
+        return true;
1306
+    }
1307
+
1308
+    /**
1309
+     * Checks the discount has required items or not.
1310
+     *
1311
+     * @since 1.0.15
1312
+     * @return bool
1313
+     */
1314
+    public function has_required_items() {
1315
+        $required_items = $this->get_required_items();
1316
+        return ! empty( $required_items );
1317
+    }
1318
+
1319
+    /**
1320
+     * Checks if the required items are met
1321
+     *
1322
+     * @param  int|int[]  $item_ids
1323
+     * @since 1.0.15
1324
+     * @return boolean
1325
+     */
1326
+    public function is_required_items_met( $item_ids ) {
1327
+
1328
+        if ( ! $this->has_required_items() ) {
1329
+            return true;
1330
+        }
1331
+
1332
+        return ! array_diff( $this->get_required_items(), array_filter( wp_parse_id_list( $item_ids ) ) );
1333
+    }
1334
+
1335
+    /**
1336
+     * Check if a discount is valid for the given amount
1337
+     *
1338
+     * @param  float  $amount The amount to check against
1339
+     * @since 1.0.15
1340
+     * @return boolean
1341
+     */
1342
+    public function is_valid_for_amount( $amount ) {
1343
+        return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1344
+    }
1345
+
1346
+    /**
1347
+     * Checks if the minimum amount is set
1348
+     *
1349
+     * @since 1.0.15
1350
+     * @return boolean
1351
+     */
1352
+    public function has_minimum_amount() {
1353
+        $minimum = $this->get_minimum_total();
1354
+        return ! empty( $minimum );
1355
+    }
1356
+
1357
+    /**
1358
+     * Checks if the minimum amount is met
1359
+     *
1360
+     * @param  float  $amount The amount to check against
1361
+     * @since 1.0.15
1362
+     * @return boolean
1363
+     */
1364
+    public function is_minimum_amount_met( $amount ) {
1365
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1366
+        $min_met = ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1367
+        return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->get_id(), $this, $this->get_code(), $amount );
1368
+    }
1369
+
1370
+    /**
1371
+     * Checks if the maximum amount is set
1372
+     *
1373
+     * @since 1.0.15
1374
+     * @return boolean
1375
+     */
1376
+    public function has_maximum_amount() {
1377
+        $maximum = $this->get_maximum_total();
1378
+        return ! empty( $maximum );
1379
+    }
1380
+
1381
+    /**
1382
+     * Checks if the maximum amount is met
1383
+     *
1384
+     * @param  float  $amount The amount to check against
1385
+     * @since 1.0.15
1386
+     * @return boolean
1387
+     */
1388
+    public function is_maximum_amount_met( $amount ) {
1389
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1390
+        $max_met = ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1391
+        return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->get_id(), $this, $this->get_code(), $amount );
1392
+    }
1393
+
1394
+    /**
1395
+     * Checks if the discount is recurring.
1396
+     *
1397
+     * @since 1.0.15
1398
+     * @return boolean
1399
+     */
1400
+    public function is_recurring() {
1401
+        $recurring = $this->get_is_recurring();
1402
+        return ! empty( $recurring );
1403
+    }
1404
+
1405
+    /**
1406
+     * Checks if the discount is single use.
1407
+     *
1408
+     * @since 1.0.15
1409
+     * @return boolean
1410
+     */
1411
+    public function is_single_use() {
1412
+        $usage = $this->get_is_single_use();
1413
+        return ! empty( $usage );
1414
+    }
1415
+
1416
+    /**
1417
+     * Check if a discount is valid for the given user
1418
+     *
1419
+     * @param  int|string  $user
1420
+     * @since 1.0.15
1421
+     * @return boolean
1422
+     */
1423
+    public function is_valid_for_user( $user ) {
1424
+
1425
+        // Ensure that the discount is single use.
1426
+        if ( empty( $user ) || ! $this->is_single_use() ) {
1427
+            return true;
1428
+        }
1429
+
1430
+        // Prepare the user id.
1431
+        $user_id = 0;
1432 1432
         if ( is_numeric( $user ) ) {
1433 1433
             $user_id = absint( $user );
1434 1434
         } elseif ( is_email( $user ) && $user_data = get_user_by( 'email', $user ) ) {
@@ -1437,122 +1437,122 @@  discard block
 block discarded – undo
1437 1437
             $user_id = $user_data->ID;
1438 1438
         }
1439 1439
 
1440
-		// Ensure that we have a user.
1441
-		if ( empty( $user_id ) ) {
1442
-			return true;
1443
-		}
1440
+        // Ensure that we have a user.
1441
+        if ( empty( $user_id ) ) {
1442
+            return true;
1443
+        }
1444 1444
 
1445
-		// Get all payments with matching user id.
1445
+        // Get all payments with matching user id.
1446 1446
         $payments = wpinv_get_invoices(
1447 1447
             array(
1448
-				'user'     => $user_id,
1449
-				'limit'    => false,
1450
-				'paginate' => false,
1448
+                'user'     => $user_id,
1449
+                'limit'    => false,
1450
+                'paginate' => false,
1451 1451
             )
1452 1452
         );
1453
-		$code     = strtolower( $this->get_code() );
1453
+        $code     = strtolower( $this->get_code() );
1454 1454
 
1455
-		// For each payment...
1456
-		foreach ( $payments as $payment ) {
1455
+        // For each payment...
1456
+        foreach ( $payments as $payment ) {
1457 1457
 
1458
-			// Only check for paid invoices.
1459
-			if ( $payment->is_paid() && strtolower( $payment->get_discount_code() ) == $code ) {
1460
-				return false;
1461
-			}
1458
+            // Only check for paid invoices.
1459
+            if ( $payment->is_paid() && strtolower( $payment->get_discount_code() ) == $code ) {
1460
+                return false;
1461
+            }
1462 1462
 }
1463 1463
 
1464
-		return true;
1465
-	}
1466
-
1467
-	/**
1468
-	 * Deletes the discount from the database
1469
-	 *
1470
-	 * @since 1.0.15
1471
-	 * @return boolean
1472
-	 */
1473
-	public function remove() {
1474
-		return $this->delete();
1475
-	}
1476
-
1477
-	/**
1478
-	 * Increases a discount's usage.
1479
-	 *
1480
-	 * @since 1.0.15
1481
-	 * @param int $by The number of usages to increas by.
1482
-	 * @return int
1483
-	 */
1484
-	public function increase_usage( $by = 1 ) {
1485
-
1486
-		// Abort if zero.
1487
-		if ( empty( $by ) ) {
1488
-			return;
1489
-		}
1490
-
1491
-		// Increase the usage.
1492
-		$this->set_uses( $this->get_uses() + (int) $by );
1493
-
1494
-		// Save the discount.
1495
-		$this->save();
1496
-
1497
-		// Fire relevant hooks.
1498
-		if ( (int) $by > 0 ) {
1499
-			do_action( 'wpinv_discount_increase_use_count', $this->get_uses(), $this->get_id(), $this->get_code(), absint( $by ) );
1500
-		} else {
1501
-			do_action( 'wpinv_discount_decrease_use_count', $this->get_uses(), $this->get_id(), $this->get_code(), absint( $by ) );
1502
-		}
1503
-
1504
-		// Return the number of times the discount has been used.
1505
-		return $this->get_uses();
1506
-	}
1507
-
1508
-	/**
1509
-	 * Alias of self::__toString()
1510
-	 *
1511
-	 * @since 1.0.15
1512
-	 * @return string|false
1513
-	 */
1514
-	public function get_data_as_json() {
1515
-		return $this->__toString();
1516
-	}
1517
-
1518
-	/**
1519
-	 * Returns a discount's discounted amount.
1520
-	 *
1521
-	 * @since 1.0.15
1522
-	 * @param float $amount
1523
-	 * @return float
1524
-	 */
1525
-	public function get_discounted_amount( $amount ) {
1526
-
1527
-		// Convert amount to float.
1528
-		$amount = (float) $amount;
1529
-
1530
-		// Get discount amount.
1531
-		$discount_amount = $this->get_amount();
1532
-
1533
-		if ( empty( $discount_amount ) ) {
1534
-			return 0;
1535
-		}
1536
-
1537
-		// Format the amount.
1538
-		$discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1539
-
1540
-		// If this is a percentage discount.
1541
-		if ( $this->is_type( 'percent' ) ) {
1464
+        return true;
1465
+    }
1466
+
1467
+    /**
1468
+     * Deletes the discount from the database
1469
+     *
1470
+     * @since 1.0.15
1471
+     * @return boolean
1472
+     */
1473
+    public function remove() {
1474
+        return $this->delete();
1475
+    }
1476
+
1477
+    /**
1478
+     * Increases a discount's usage.
1479
+     *
1480
+     * @since 1.0.15
1481
+     * @param int $by The number of usages to increas by.
1482
+     * @return int
1483
+     */
1484
+    public function increase_usage( $by = 1 ) {
1485
+
1486
+        // Abort if zero.
1487
+        if ( empty( $by ) ) {
1488
+            return;
1489
+        }
1490
+
1491
+        // Increase the usage.
1492
+        $this->set_uses( $this->get_uses() + (int) $by );
1493
+
1494
+        // Save the discount.
1495
+        $this->save();
1496
+
1497
+        // Fire relevant hooks.
1498
+        if ( (int) $by > 0 ) {
1499
+            do_action( 'wpinv_discount_increase_use_count', $this->get_uses(), $this->get_id(), $this->get_code(), absint( $by ) );
1500
+        } else {
1501
+            do_action( 'wpinv_discount_decrease_use_count', $this->get_uses(), $this->get_id(), $this->get_code(), absint( $by ) );
1502
+        }
1503
+
1504
+        // Return the number of times the discount has been used.
1505
+        return $this->get_uses();
1506
+    }
1507
+
1508
+    /**
1509
+     * Alias of self::__toString()
1510
+     *
1511
+     * @since 1.0.15
1512
+     * @return string|false
1513
+     */
1514
+    public function get_data_as_json() {
1515
+        return $this->__toString();
1516
+    }
1517
+
1518
+    /**
1519
+     * Returns a discount's discounted amount.
1520
+     *
1521
+     * @since 1.0.15
1522
+     * @param float $amount
1523
+     * @return float
1524
+     */
1525
+    public function get_discounted_amount( $amount ) {
1526
+
1527
+        // Convert amount to float.
1528
+        $amount = (float) $amount;
1529
+
1530
+        // Get discount amount.
1531
+        $discount_amount = $this->get_amount();
1532
+
1533
+        if ( empty( $discount_amount ) ) {
1534
+            return 0;
1535
+        }
1536
+
1537
+        // Format the amount.
1538
+        $discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1539
+
1540
+        // If this is a percentage discount.
1541
+        if ( $this->is_type( 'percent' ) ) {
1542 1542
             $discount_amount = $amount * ( $discount_amount / 100 );
1543
-		}
1543
+        }
1544 1544
 
1545
-		// Discount can not be less than zero...
1546
-		if ( $discount_amount < 0 ) {
1547
-			$discount_amount = 0;
1548
-		}
1545
+        // Discount can not be less than zero...
1546
+        if ( $discount_amount < 0 ) {
1547
+            $discount_amount = 0;
1548
+        }
1549 1549
 
1550
-		// ... or more than the amount.
1551
-		if ( $discount_amount > $amount ) {
1552
-			$discount_amount = $amount;
1553
-		}
1550
+        // ... or more than the amount.
1551
+        if ( $discount_amount > $amount ) {
1552
+            $discount_amount = $amount;
1553
+        }
1554 1554
 
1555
-		return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1556
-	}
1555
+        return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1556
+    }
1557 1557
 
1558 1558
 }
Please login to merge, or discard this patch.
includes/class-wpinv-legacy-invoice.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -775,10 +775,10 @@  discard block
 block discarded – undo
775 775
         $allowed_fee_keys = apply_filters(
776 776
             'wpinv_fee_keys',
777 777
             array(
778
-				'index',
779
-				'label',
780
-				'amount',
781
-				'type',
778
+                'index',
779
+                'label',
780
+                'amount',
781
+                'type',
782 782
             )
783 783
         );
784 784
 
@@ -850,19 +850,19 @@  discard block
 block discarded – undo
850 850
         $note_id = wp_insert_comment(
851 851
             wp_filter_comment(
852 852
                 array(
853
-					'comment_post_ID'      => $this->ID,
854
-					'comment_content'      => $note,
855
-					'comment_agent'        => 'WPInvoicing',
856
-					'user_id'              => is_admin() ? get_current_user_id() : 0,
857
-					'comment_date'         => current_time( 'mysql' ),
858
-					'comment_date_gmt'     => current_time( 'mysql', 1 ),
859
-					'comment_approved'     => 1,
860
-					'comment_parent'       => 0,
861
-					'comment_author'       => $comment_author,
862
-					'comment_author_IP'    => wpinv_get_ip(),
863
-					'comment_author_url'   => '',
864
-					'comment_author_email' => $comment_author_email,
865
-					'comment_type'         => 'wpinv_note',
853
+                    'comment_post_ID'      => $this->ID,
854
+                    'comment_content'      => $note,
855
+                    'comment_agent'        => 'WPInvoicing',
856
+                    'user_id'              => is_admin() ? get_current_user_id() : 0,
857
+                    'comment_date'         => current_time( 'mysql' ),
858
+                    'comment_date_gmt'     => current_time( 'mysql', 1 ),
859
+                    'comment_approved'     => 1,
860
+                    'comment_parent'       => 0,
861
+                    'comment_author'       => $comment_author,
862
+                    'comment_author_IP'    => wpinv_get_ip(),
863
+                    'comment_author_url'   => '',
864
+                    'comment_author_email' => $comment_author_email,
865
+                    'comment_type'         => 'wpinv_note',
866 866
                 )
867 867
             )
868 868
         );
@@ -875,8 +875,8 @@  discard block
 block discarded – undo
875 875
             do_action(
876 876
                 'wpinv_new_customer_note',
877 877
                 array(
878
-					'invoice_id' => $this->ID,
879
-					'user_note'  => $note,
878
+                    'invoice_id' => $this->ID,
879
+                    'user_note'  => $note,
880 880
                 )
881 881
             );
882 882
         }
Please login to merge, or discard this patch.