Passed
Branch master (3a0618)
by Stiofan
05:00
created
includes/reports/class-getpaid-reports-abstract-report.php 1 patch
Indentation   +179 added lines, -179 removed lines patch added patch discarded remove patch
@@ -12,72 +12,72 @@  discard block
 block discarded – undo
12 12
  */
13 13
 abstract class GetPaid_Reports_Abstract_Report {
14 14
 
15
-	/**
16
-	 * @var array
17
-	 */
18
-	public $stats;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 */
24
-	public function __construct() {
25
-		$this->prepare_stats();
26
-	}
27
-
28
-	/**
29
-	 * Retrieves the current range.
30
-	 *
31
-	 */
32
-	public function get_range() {
33
-		$valid_ranges = $this->get_periods();
34
-
35
-		if ( isset( $_GET['date_range'] ) && array_key_exists( $_GET['date_range'], $valid_ranges ) ) {
36
-			return sanitize_key( $_GET['date_range'] );
37
-		}
38
-
39
-		return '7_days';
40
-	}
41
-
42
-	/**
43
-	 * Returns an array of date ranges.
44
-	 *
45
-	 * @return array
46
-	 */
47
-	public function get_periods() {
48
-
49
-		$periods = array(
15
+    /**
16
+     * @var array
17
+     */
18
+    public $stats;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     */
24
+    public function __construct() {
25
+        $this->prepare_stats();
26
+    }
27
+
28
+    /**
29
+     * Retrieves the current range.
30
+     *
31
+     */
32
+    public function get_range() {
33
+        $valid_ranges = $this->get_periods();
34
+
35
+        if ( isset( $_GET['date_range'] ) && array_key_exists( $_GET['date_range'], $valid_ranges ) ) {
36
+            return sanitize_key( $_GET['date_range'] );
37
+        }
38
+
39
+        return '7_days';
40
+    }
41
+
42
+    /**
43
+     * Returns an array of date ranges.
44
+     *
45
+     * @return array
46
+     */
47
+    public function get_periods() {
48
+
49
+        $periods = array(
50 50
             'today'     => __( 'Today', 'invoicing' ),
51 51
             'yesterday' => __( 'Yesterday', 'invoicing' ),
52 52
             '7_days'    => __( 'Last 7 days', 'invoicing' ),
53
-			'30_days'   => __( 'Last 30 days', 'invoicing' ),
54
-			'60_days'   => __( 'Last 60 days', 'invoicing' ),
55
-			'90_days'   => __( 'Last 90 days', 'invoicing' ),
56
-			'180_days'  => __( 'Last 180 days', 'invoicing' ),
57
-			'360_days'  => __( 'Last 360 days', 'invoicing' ),
58
-		);
59
-
60
-		return apply_filters( 'getpaid_earning_periods', $periods );
61
-	}
62
-
63
-	/**
64
-	 * Retrieves the current range's sql.
65
-	 *
66
-	 */
67
-	public function get_range_sql( $range ) {
68
-
69
-		$date     = 'CAST(meta.completed_date AS DATE)';
53
+            '30_days'   => __( 'Last 30 days', 'invoicing' ),
54
+            '60_days'   => __( 'Last 60 days', 'invoicing' ),
55
+            '90_days'   => __( 'Last 90 days', 'invoicing' ),
56
+            '180_days'  => __( 'Last 180 days', 'invoicing' ),
57
+            '360_days'  => __( 'Last 360 days', 'invoicing' ),
58
+        );
59
+
60
+        return apply_filters( 'getpaid_earning_periods', $periods );
61
+    }
62
+
63
+    /**
64
+     * Retrieves the current range's sql.
65
+     *
66
+     */
67
+    public function get_range_sql( $range ) {
68
+
69
+        $date     = 'CAST(meta.completed_date AS DATE)';
70 70
         $datetime = 'meta.completed_date';
71 71
 
72 72
         // Prepare durations.
73 73
         $today                = current_time( 'Y-m-d' );
74
-		$yesterday            = date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) );
75
-		$seven_days_ago       = date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) );
76
-		$thirty_days_ago      = date( 'Y-m-d', strtotime( '-30 days', current_time( 'timestamp' ) ) );
77
-		$ninety_days_ago      = date( 'Y-m-d', strtotime( '-90 days', current_time( 'timestamp' ) ) );
78
-		$sixty_days_ago       = date( 'Y-m-d', strtotime( '-60 days', current_time( 'timestamp' ) ) );
79
-		$one_eighty_days_ago  = date( 'Y-m-d', strtotime( '-180 days', current_time( 'timestamp' ) ) );
80
-		$three_sixty_days_ago = date( 'Y-m-d', strtotime( '-360 days', current_time( 'timestamp' ) ) );
74
+        $yesterday            = date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) );
75
+        $seven_days_ago       = date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) );
76
+        $thirty_days_ago      = date( 'Y-m-d', strtotime( '-30 days', current_time( 'timestamp' ) ) );
77
+        $ninety_days_ago      = date( 'Y-m-d', strtotime( '-90 days', current_time( 'timestamp' ) ) );
78
+        $sixty_days_ago       = date( 'Y-m-d', strtotime( '-60 days', current_time( 'timestamp' ) ) );
79
+        $one_eighty_days_ago  = date( 'Y-m-d', strtotime( '-180 days', current_time( 'timestamp' ) ) );
80
+        $three_sixty_days_ago = date( 'Y-m-d', strtotime( '-360 days', current_time( 'timestamp' ) ) );
81 81
 
82 82
         $ranges = array(
83 83
 
@@ -94,130 +94,130 @@  discard block
 block discarded – undo
94 94
             '7_days'       => array(
95 95
                 "DATE($datetime)",
96 96
                 "$date BETWEEN '$seven_days_ago' AND '$today'"
97
-			),
97
+            ),
98 98
 
99
-			'30_days'       => array(
99
+            '30_days'       => array(
100 100
                 "DATE($datetime)",
101 101
                 "$date BETWEEN '$thirty_days_ago' AND '$today'"
102
-			),
102
+            ),
103 103
 
104
-			'60_days'       => array(
104
+            '60_days'       => array(
105 105
                 "DATE($datetime)",
106 106
                 "$date BETWEEN '$sixty_days_ago' AND '$today'"
107
-			),
107
+            ),
108 108
 
109
-			'90_days'       => array(
109
+            '90_days'       => array(
110 110
                 "WEEK($datetime)",
111 111
                 "$date BETWEEN '$ninety_days_ago' AND '$today'"
112
-			),
112
+            ),
113 113
 
114
-			'180_days'       => array(
114
+            '180_days'       => array(
115 115
                 "WEEK($datetime)",
116 116
                 "$date BETWEEN '$one_eighty_days_ago' AND '$today'"
117
-			),
117
+            ),
118 118
 
119
-			'360_days'       => array(
119
+            '360_days'       => array(
120 120
                 "WEEK($datetime)",
121 121
                 "$date BETWEEN '$three_sixty_days_ago' AND '$today'"
122 122
             ),
123 123
 
124 124
         );
125 125
 
126
-		$sql = isset( $ranges[ $range ] ) ? $ranges[ $range ] : $ranges[ '7_days' ];
127
-		return apply_filters( 'getpaid_earning_graphs_get_range_sql', $sql, $range );
128
-
129
-	}
130
-
131
-	/**
132
-	 * Retrieves the hours in a day
133
-	 *
134
-	 */
135
-	public function get_hours_in_a_day() {
136
-
137
-		return array(
138
-			'12AM' => __( '12 AM', 'invoicing'),
139
-			'1AM'  => __( '1 AM', 'invoicing'),
140
-			'2AM'  => __( '2 AM', 'invoicing'),
141
-			'3AM'  => __( '3 AM', 'invoicing'),
142
-			'4AM'  => __( '4 AM', 'invoicing'),
143
-			'5AM'  => __( '5 AM', 'invoicing'),
144
-			'6AM'  => __( '6 AM', 'invoicing'),
145
-			'7AM'  => __( '7 AM', 'invoicing'),
146
-			'8AM'  => __( '8 AM', 'invoicing'),
147
-			'9AM'  => __( '9 AM', 'invoicing'),
148
-			'10AM' => __( '10 AM', 'invoicing'),
149
-			'11AM' => __( '11 AM', 'invoicing'),
150
-			'12pm' => __( '12 PM', 'invoicing'),
151
-			'1PM'  => __( '1 PM', 'invoicing'),
152
-			'2PM'  => __( '2 PM', 'invoicing'),
153
-			'3PM'  => __( '3 PM', 'invoicing'),
154
-			'4PM'  => __( '4 PM', 'invoicing'),
155
-			'5PM'  => __( '5 PM', 'invoicing'),
156
-			'6PM'  => __( '6 PM', 'invoicing'),
157
-			'7PM'  => __( '7 PM', 'invoicing'),
158
-			'8PM'  => __( '8 PM', 'invoicing'),
159
-			'9PM'  => __( '9 PM', 'invoicing'),
160
-			'10PM' => __( '10 PM', 'invoicing'),
161
-			'11PM' => __( '11 PM', 'invoicing'),
162
-		);
163
-
164
-	}
165
-
166
-	/**
167
-	 * Retrieves the days in a period
168
-	 *
169
-	 */
170
-	public function get_days_in_period( $days ) {
171
-
172
-		$return = array();
173
-		$format = 'Y-m-d';
174
-
175
-		if ( $days < 8 ) {
176
-			$format = 'D';
177
-		}
178
-
179
-		if ( $days < 32 ) {
180
-			$format = 'M j';
181
-		}
182
-
183
-		while ( $days > 0 ) {
184
-
185
-			$key            = date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) );
186
-			$label          = date_i18n( $format, strtotime( "-$days days", current_time( 'timestamp' ) ) );
187
-			$return[ $key ] = $label;
188
-			$days--;
189
-
190
-		}
191
-
192
-		return $return;
193
-	}
194
-
195
-	/**
196
-	 * Retrieves the weeks in a period
197
-	 *
198
-	 */
199
-	public function get_weeks_in_period( $days ) {
200
-
201
-		$return = array();
202
-
203
-		while ( $days > 0 ) {
204
-
205
-			$key            = date( 'W', strtotime( "-$days days", current_time( 'timestamp' ) ) );
206
-			$label          = date_i18n( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) );
207
-			$return[ $key ] = $label;
208
-			$days--;
209
-
210
-		}
211
-
212
-		return $return;
213
-	}
214
-
215
-	/**
216
-	 * Displays the report card.
217
-	 *
218
-	 */
219
-	public function display() {
220
-		?>
126
+        $sql = isset( $ranges[ $range ] ) ? $ranges[ $range ] : $ranges[ '7_days' ];
127
+        return apply_filters( 'getpaid_earning_graphs_get_range_sql', $sql, $range );
128
+
129
+    }
130
+
131
+    /**
132
+     * Retrieves the hours in a day
133
+     *
134
+     */
135
+    public function get_hours_in_a_day() {
136
+
137
+        return array(
138
+            '12AM' => __( '12 AM', 'invoicing'),
139
+            '1AM'  => __( '1 AM', 'invoicing'),
140
+            '2AM'  => __( '2 AM', 'invoicing'),
141
+            '3AM'  => __( '3 AM', 'invoicing'),
142
+            '4AM'  => __( '4 AM', 'invoicing'),
143
+            '5AM'  => __( '5 AM', 'invoicing'),
144
+            '6AM'  => __( '6 AM', 'invoicing'),
145
+            '7AM'  => __( '7 AM', 'invoicing'),
146
+            '8AM'  => __( '8 AM', 'invoicing'),
147
+            '9AM'  => __( '9 AM', 'invoicing'),
148
+            '10AM' => __( '10 AM', 'invoicing'),
149
+            '11AM' => __( '11 AM', 'invoicing'),
150
+            '12pm' => __( '12 PM', 'invoicing'),
151
+            '1PM'  => __( '1 PM', 'invoicing'),
152
+            '2PM'  => __( '2 PM', 'invoicing'),
153
+            '3PM'  => __( '3 PM', 'invoicing'),
154
+            '4PM'  => __( '4 PM', 'invoicing'),
155
+            '5PM'  => __( '5 PM', 'invoicing'),
156
+            '6PM'  => __( '6 PM', 'invoicing'),
157
+            '7PM'  => __( '7 PM', 'invoicing'),
158
+            '8PM'  => __( '8 PM', 'invoicing'),
159
+            '9PM'  => __( '9 PM', 'invoicing'),
160
+            '10PM' => __( '10 PM', 'invoicing'),
161
+            '11PM' => __( '11 PM', 'invoicing'),
162
+        );
163
+
164
+    }
165
+
166
+    /**
167
+     * Retrieves the days in a period
168
+     *
169
+     */
170
+    public function get_days_in_period( $days ) {
171
+
172
+        $return = array();
173
+        $format = 'Y-m-d';
174
+
175
+        if ( $days < 8 ) {
176
+            $format = 'D';
177
+        }
178
+
179
+        if ( $days < 32 ) {
180
+            $format = 'M j';
181
+        }
182
+
183
+        while ( $days > 0 ) {
184
+
185
+            $key            = date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) );
186
+            $label          = date_i18n( $format, strtotime( "-$days days", current_time( 'timestamp' ) ) );
187
+            $return[ $key ] = $label;
188
+            $days--;
189
+
190
+        }
191
+
192
+        return $return;
193
+    }
194
+
195
+    /**
196
+     * Retrieves the weeks in a period
197
+     *
198
+     */
199
+    public function get_weeks_in_period( $days ) {
200
+
201
+        $return = array();
202
+
203
+        while ( $days > 0 ) {
204
+
205
+            $key            = date( 'W', strtotime( "-$days days", current_time( 'timestamp' ) ) );
206
+            $label          = date_i18n( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) );
207
+            $return[ $key ] = $label;
208
+            $days--;
209
+
210
+        }
211
+
212
+        return $return;
213
+    }
214
+
215
+    /**
216
+     * Displays the report card.
217
+     *
218
+     */
219
+    public function display() {
220
+        ?>
221 221
 
222 222
 			<div class="row">
223 223
 				<div class="col-12">
@@ -231,20 +231,20 @@  discard block
 block discarded – undo
231 231
 
232 232
 		<?php
233 233
 
234
-	}
235
-
236
-	/**
237
-	 * Prepares the report stats.
238
-	 *
239
-	 * Extend this in child classes.
240
-	 */
241
-	abstract public function prepare_stats();
242
-
243
-	/**
244
-	 * Displays the actual report.
245
-	 *
246
-	 * Extend this in child classes.
247
-	 */
248
-	abstract public function display_stats();
234
+    }
235
+
236
+    /**
237
+     * Prepares the report stats.
238
+     *
239
+     * Extend this in child classes.
240
+     */
241
+    abstract public function prepare_stats();
242
+
243
+    /**
244
+     * Displays the actual report.
245
+     *
246
+     * Extend this in child classes.
247
+     */
248
+    abstract public function display_stats();
249 249
 
250 250
 }
Please login to merge, or discard this patch.
includes/geolocation/class-getpaid-maxmind-database-service.php 1 patch
Indentation   +149 added lines, -149 removed lines patch added patch discarded remove patch
@@ -13,154 +13,154 @@
 block discarded – undo
13 13
  */
14 14
 class GetPaid_MaxMind_Database_Service {
15 15
 
16
-	/**
17
-	 * The name of the MaxMind database to utilize.
18
-	 */
19
-	const DATABASE = 'GeoLite2-Country';
20
-
21
-	/**
22
-	 * The extension for the MaxMind database.
23
-	 */
24
-	const DATABASE_EXTENSION = '.mmdb';
25
-
26
-	/**
27
-	 * A prefix for the MaxMind database filename.
28
-	 *
29
-	 * @var string
30
-	 */
31
-	private $database_prefix;
32
-
33
-	/**
34
-	 * Class constructor.
35
-	 *
36
-	 * @param string|null $database_prefix A prefix for the MaxMind database filename.
37
-	 */
38
-	public function __construct( $database_prefix ) {
39
-		$this->database_prefix = $database_prefix;
40
-	}
41
-
42
-	/**
43
-	 * Fetches the path that the database should be stored.
44
-	 *
45
-	 * @return string The local database path.
46
-	 */
47
-	public function get_database_path() {
48
-		$uploads_dir = wp_upload_dir();
49
-
50
-		$database_path = trailingslashit( $uploads_dir['basedir'] ) . 'invoicing/';
51
-		if ( ! empty( $this->database_prefix ) ) {
52
-			$database_path .= $this->database_prefix . '-';
53
-		}
54
-		$database_path .= self::DATABASE . self::DATABASE_EXTENSION;
55
-
56
-		// Filter the geolocation database storage path.
57
-		return apply_filters( 'getpaid_maxmind_geolocation_database_path', $database_path );
58
-	}
59
-
60
-	/**
61
-	 * Fetches the database from the MaxMind service.
62
-	 *
63
-	 * @param string $license_key The license key to be used when downloading the database.
64
-	 * @return string|WP_Error The path to the database file or an error if invalid.
65
-	 */
66
-	public function download_database( $license_key ) {
67
-
68
-		$download_uri = add_query_arg(
69
-			array(
70
-				'edition_id'  => self::DATABASE,
71
-				'license_key' => urlencode( wpinv_clean( $license_key ) ),
72
-				'suffix'      => 'tar.gz',
73
-			),
74
-			'https://download.maxmind.com/app/geoip_download'
75
-		);
76
-
77
-		// Needed for the download_url call right below.
78
-		require_once ABSPATH . 'wp-admin/includes/file.php';
79
-
80
-		$tmp_archive_path = download_url( esc_url_raw( $download_uri ) );
81
-
82
-		if ( is_wp_error( $tmp_archive_path ) ) {
83
-			// Transform the error into something more informative.
84
-			$error_data = $tmp_archive_path->get_error_data();
85
-			if ( isset( $error_data['code'] ) && $error_data['code'] == 401 ) {
86
-				return new WP_Error(
87
-					'getpaid_maxmind_geolocation_database_license_key',
88
-					__( 'The MaxMind license key is invalid. If you have recently created this key, you may need to wait for it to become active.', 'invoicing' )
89
-				);
90
-			}
91
-
92
-			return new WP_Error( 'getpaid_maxmind_geolocation_database_download', __( 'Failed to download the MaxMind database.', 'invoicing' ) );
93
-		}
94
-
95
-		// Extract the database from the archive.
96
-		return $this->extract_downloaded_database( $tmp_archive_path );
97
-
98
-	}
99
-
100
-	/**
101
-	 * Extracts the downloaded database.
102
-	 *
103
-	 * @param string $tmp_archive_path The database archive path.
104
-	 * @return string|WP_Error The path to the database file or an error if invalid.
105
-	 */
106
-	protected function extract_downloaded_database( $tmp_archive_path ) {
107
-
108
-		// Extract the database from the archive.
109
-		$tmp_database_path = '';
110
-
111
-		try {
112
-
113
-			$file              = new PharData( $tmp_archive_path );
114
-			$tmp_database_path = trailingslashit( dirname( $tmp_archive_path ) ) . trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION;
115
-
116
-			$file->extractTo(
117
-				dirname( $tmp_archive_path ),
118
-				trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION,
119
-				true
120
-			);
121
-
122
-		} catch ( Exception $exception ) {
123
-			return new WP_Error( 'invoicing_maxmind_geolocation_database_archive', $exception->getMessage() );
124
-		} finally {
125
-			// Remove the archive since we only care about a single file in it.
126
-			unlink( $tmp_archive_path );
127
-		}
128
-
129
-		return $tmp_database_path;
130
-	}
131
-
132
-	/**
133
-	 * Fetches the ISO country code associated with an IP address.
134
-	 *
135
-	 * @param string $ip_address The IP address to find the country code for.
136
-	 * @return string The country code for the IP address, or empty if not found.
137
-	 */
138
-	public function get_iso_country_code_for_ip( $ip_address ) {
139
-		$country_code = '';
140
-
141
-		if ( ! class_exists( 'MaxMind\Db\Reader' ) ) {
142
-			return $country_code;
143
-		}
144
-
145
-		$database_path = $this->get_database_path();
146
-		if ( ! file_exists( $database_path ) ) {
147
-			return $country_code;
148
-		}
149
-
150
-		try {
151
-			$reader = new MaxMind\Db\Reader( $database_path );
152
-			$data   = $reader->get( $ip_address );
153
-
154
-			if ( isset( $data['country']['iso_code'] ) ) {
155
-				$country_code = $data['country']['iso_code'];
156
-			}
157
-
158
-			$reader->close();
159
-		} catch ( Exception $e ) {
160
-			wpinv_error_log( $e->getMessage(), 'SOURCE: MaxMind GeoLocation' );
161
-		}
162
-
163
-		return $country_code;
164
-	}
16
+    /**
17
+     * The name of the MaxMind database to utilize.
18
+     */
19
+    const DATABASE = 'GeoLite2-Country';
20
+
21
+    /**
22
+     * The extension for the MaxMind database.
23
+     */
24
+    const DATABASE_EXTENSION = '.mmdb';
25
+
26
+    /**
27
+     * A prefix for the MaxMind database filename.
28
+     *
29
+     * @var string
30
+     */
31
+    private $database_prefix;
32
+
33
+    /**
34
+     * Class constructor.
35
+     *
36
+     * @param string|null $database_prefix A prefix for the MaxMind database filename.
37
+     */
38
+    public function __construct( $database_prefix ) {
39
+        $this->database_prefix = $database_prefix;
40
+    }
41
+
42
+    /**
43
+     * Fetches the path that the database should be stored.
44
+     *
45
+     * @return string The local database path.
46
+     */
47
+    public function get_database_path() {
48
+        $uploads_dir = wp_upload_dir();
49
+
50
+        $database_path = trailingslashit( $uploads_dir['basedir'] ) . 'invoicing/';
51
+        if ( ! empty( $this->database_prefix ) ) {
52
+            $database_path .= $this->database_prefix . '-';
53
+        }
54
+        $database_path .= self::DATABASE . self::DATABASE_EXTENSION;
55
+
56
+        // Filter the geolocation database storage path.
57
+        return apply_filters( 'getpaid_maxmind_geolocation_database_path', $database_path );
58
+    }
59
+
60
+    /**
61
+     * Fetches the database from the MaxMind service.
62
+     *
63
+     * @param string $license_key The license key to be used when downloading the database.
64
+     * @return string|WP_Error The path to the database file or an error if invalid.
65
+     */
66
+    public function download_database( $license_key ) {
67
+
68
+        $download_uri = add_query_arg(
69
+            array(
70
+                'edition_id'  => self::DATABASE,
71
+                'license_key' => urlencode( wpinv_clean( $license_key ) ),
72
+                'suffix'      => 'tar.gz',
73
+            ),
74
+            'https://download.maxmind.com/app/geoip_download'
75
+        );
76
+
77
+        // Needed for the download_url call right below.
78
+        require_once ABSPATH . 'wp-admin/includes/file.php';
79
+
80
+        $tmp_archive_path = download_url( esc_url_raw( $download_uri ) );
81
+
82
+        if ( is_wp_error( $tmp_archive_path ) ) {
83
+            // Transform the error into something more informative.
84
+            $error_data = $tmp_archive_path->get_error_data();
85
+            if ( isset( $error_data['code'] ) && $error_data['code'] == 401 ) {
86
+                return new WP_Error(
87
+                    'getpaid_maxmind_geolocation_database_license_key',
88
+                    __( 'The MaxMind license key is invalid. If you have recently created this key, you may need to wait for it to become active.', 'invoicing' )
89
+                );
90
+            }
91
+
92
+            return new WP_Error( 'getpaid_maxmind_geolocation_database_download', __( 'Failed to download the MaxMind database.', 'invoicing' ) );
93
+        }
94
+
95
+        // Extract the database from the archive.
96
+        return $this->extract_downloaded_database( $tmp_archive_path );
97
+
98
+    }
99
+
100
+    /**
101
+     * Extracts the downloaded database.
102
+     *
103
+     * @param string $tmp_archive_path The database archive path.
104
+     * @return string|WP_Error The path to the database file or an error if invalid.
105
+     */
106
+    protected function extract_downloaded_database( $tmp_archive_path ) {
107
+
108
+        // Extract the database from the archive.
109
+        $tmp_database_path = '';
110
+
111
+        try {
112
+
113
+            $file              = new PharData( $tmp_archive_path );
114
+            $tmp_database_path = trailingslashit( dirname( $tmp_archive_path ) ) . trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION;
115
+
116
+            $file->extractTo(
117
+                dirname( $tmp_archive_path ),
118
+                trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION,
119
+                true
120
+            );
121
+
122
+        } catch ( Exception $exception ) {
123
+            return new WP_Error( 'invoicing_maxmind_geolocation_database_archive', $exception->getMessage() );
124
+        } finally {
125
+            // Remove the archive since we only care about a single file in it.
126
+            unlink( $tmp_archive_path );
127
+        }
128
+
129
+        return $tmp_database_path;
130
+    }
131
+
132
+    /**
133
+     * Fetches the ISO country code associated with an IP address.
134
+     *
135
+     * @param string $ip_address The IP address to find the country code for.
136
+     * @return string The country code for the IP address, or empty if not found.
137
+     */
138
+    public function get_iso_country_code_for_ip( $ip_address ) {
139
+        $country_code = '';
140
+
141
+        if ( ! class_exists( 'MaxMind\Db\Reader' ) ) {
142
+            return $country_code;
143
+        }
144
+
145
+        $database_path = $this->get_database_path();
146
+        if ( ! file_exists( $database_path ) ) {
147
+            return $country_code;
148
+        }
149
+
150
+        try {
151
+            $reader = new MaxMind\Db\Reader( $database_path );
152
+            $data   = $reader->get( $ip_address );
153
+
154
+            if ( isset( $data['country']['iso_code'] ) ) {
155
+                $country_code = $data['country']['iso_code'];
156
+            }
157
+
158
+            $reader->close();
159
+        } catch ( Exception $e ) {
160
+            wpinv_error_log( $e->getMessage(), 'SOURCE: MaxMind GeoLocation' );
161
+        }
162
+
163
+        return $country_code;
164
+    }
165 165
 
166 166
 }
Please login to merge, or discard this patch.
includes/geolocation/class-getpaid-maxmind-geolocation.php 1 patch
Indentation   +159 added lines, -159 removed lines patch added patch discarded remove patch
@@ -16,164 +16,164 @@
 block discarded – undo
16 16
  */
17 17
 class GetPaid_MaxMind_Geolocation {
18 18
 
19
-	/**
20
-	 * The service responsible for interacting with the MaxMind database.
21
-	 *
22
-	 * @var GetPaid_MaxMind_Database_Service
23
-	 */
24
-	private $database_service;
25
-
26
-	/**
27
-	 * Initialize the integration.
28
-	 */
29
-	public function __construct() {
30
-
31
-		/**
32
-		 * Supports overriding the database service to be used.
33
-		 *
34
-		 * @since 1.0.19
35
-		 * @return mixed|null The geolocation database service.
36
-		 */
37
-		$this->database_service = apply_filters( 'getpaid_maxmind_geolocation_database_service', null );
38
-		if ( null === $this->database_service ) {
39
-			$this->database_service = new GetPaid_MaxMind_Database_Service( $this->get_database_prefix() );
40
-		}
41
-
42
-		// Bind to the scheduled updater action.
43
-		add_action( 'getpaid_update_geoip_databases', array( $this, 'update_database' ) );
44
-
45
-		// Bind to the geolocation filter for MaxMind database lookups.
46
-		add_filter( 'getpaid_get_geolocation', array( $this, 'get_geolocation' ), 10, 2 );
47
-
48
-		// Handle maxmind key updates.
49
-		add_filter( 'wpinv_settings_sanitize_maxmind_license_key', array( $this, 'handle_key_updates' ) );
50
-
51
-	}
52
-
53
-	/**
54
-	 * Get database service.
55
-	 *
56
-	 * @return GetPaid_MaxMind_Database_Service|null
57
-	 */
58
-	public function get_database_service() {
59
-		return $this->database_service;
60
-	}
61
-
62
-	/**
63
-	 * Checks to make sure that the license key is valid.
64
-	 *
65
-	 * @param string $license_key The new license key.
66
-	 * @return string
67
-	 */
68
-	public function handle_key_updates( $license_key ) {
69
-
70
-		// Trim whitespaces and strip slashes.
71
-		$license_key = trim( $license_key );
72
-
73
-		// Abort if the license key is empty or unchanged.
74
-		if ( empty( $license_key ) ) {
75
-			return $license_key;
76
-		}
77
-
78
-		// Abort if a database exists and the license key is unchaged.
79
-		if ( file_exists( $this->database_service->get_database_path() && $license_key == wpinv_get_option( 'maxmind_license_key' ) ) ) {
80
-			return $license_key;
81
-		}
82
-
83
-		// Check the license key by attempting to download the Geolocation database.
84
-		$tmp_database_path = $this->database_service->download_database( $license_key );
85
-		if ( is_wp_error( $tmp_database_path ) ) {
86
-			getpaid_admin()->show_error( $tmp_database_path->get_error_message() );
87
-			return $license_key;
88
-		}
89
-
90
-		$this->update_database( /** @scrutinizer ignore-type */ $tmp_database_path );
91
-
92
-	}
93
-
94
-	/**
95
-	 * Updates the database used for geolocation queries.
96
-	 *
97
-	 * @param string $tmp_database_path Temporary database path.
98
-	 */
99
-	public function update_database( $tmp_database_path = null ) {
100
-
101
-		// Allow us to easily interact with the filesystem.
102
-		require_once ABSPATH . 'wp-admin/includes/file.php';
103
-		WP_Filesystem();
104
-		global $wp_filesystem;
105
-
106
-		// Remove any existing archives to comply with the MaxMind TOS.
107
-		$target_database_path = $this->database_service->get_database_path();
108
-
109
-		// If there's no database path, we can't store the database.
110
-		if ( empty( $target_database_path ) ) {
111
-			return;
112
-		}
113
-
114
-		if ( $wp_filesystem->exists( $target_database_path ) ) {
115
-			$wp_filesystem->delete( $target_database_path );
116
-		}
117
-
118
-		// We can't download a database if there's no license key configured.
119
-		$license_key = wpinv_get_option( 'maxmind_license_key' );
120
-		if ( empty( $license_key ) ) {
121
-			return;
122
-		}
123
-
124
-		if ( empty( $tmp_database_path ) ) {
125
-			$tmp_database_path = $this->database_service->download_database( $license_key );
126
-		}
127
-
128
-		if ( is_wp_error( $tmp_database_path ) ) {
129
-			wpinv_error_log( $tmp_database_path->get_error_message() );
130
-			return;
131
-		}
132
-
133
-		// Move the new database into position.
134
-		$wp_filesystem->move( $tmp_database_path, $target_database_path, true );
135
-		$wp_filesystem->delete( dirname( $tmp_database_path ) );
136
-	}
137
-
138
-	/**
139
-	 * Performs a geolocation lookup against the MaxMind database for the given IP address.
140
-	 *
141
-	 * @param array  $data       Geolocation data.
142
-	 * @param string $ip_address The IP address to geolocate.
143
-	 * @return array Geolocation including country code, state, city and postcode based on an IP address.
144
-	 */
145
-	public function get_geolocation( $data, $ip_address ) {
146
-
147
-		if ( ! empty( $data['country'] ) || empty( $ip_address ) ) {
148
-			return $data;
149
-		}
150
-
151
-		$country_code = $this->database_service->get_iso_country_code_for_ip( $ip_address );
152
-
153
-		return array(
154
-			'country'  => $country_code,
155
-			'state'    => '',
156
-			'city'     => '',
157
-			'postcode' => '',
158
-		);
159
-
160
-	}
161
-
162
-	/**
163
-	 * Fetches the prefix for the MaxMind database file.
164
-	 *
165
-	 * @return string
166
-	 */
167
-	private function get_database_prefix() {
168
-
169
-		$prefix = get_option( 'wpinv_maxmind_database_prefix' );
170
-
171
-		if ( empty( $prefix ) ) {
172
-			$prefix = md5( uniqid( 'wpinv' ) );
173
-			update_option( 'wpinv_maxmind_database_prefix', $prefix );
174
-		}
175
-
176
-		return $prefix;
177
-	}
19
+    /**
20
+     * The service responsible for interacting with the MaxMind database.
21
+     *
22
+     * @var GetPaid_MaxMind_Database_Service
23
+     */
24
+    private $database_service;
25
+
26
+    /**
27
+     * Initialize the integration.
28
+     */
29
+    public function __construct() {
30
+
31
+        /**
32
+         * Supports overriding the database service to be used.
33
+         *
34
+         * @since 1.0.19
35
+         * @return mixed|null The geolocation database service.
36
+         */
37
+        $this->database_service = apply_filters( 'getpaid_maxmind_geolocation_database_service', null );
38
+        if ( null === $this->database_service ) {
39
+            $this->database_service = new GetPaid_MaxMind_Database_Service( $this->get_database_prefix() );
40
+        }
41
+
42
+        // Bind to the scheduled updater action.
43
+        add_action( 'getpaid_update_geoip_databases', array( $this, 'update_database' ) );
44
+
45
+        // Bind to the geolocation filter for MaxMind database lookups.
46
+        add_filter( 'getpaid_get_geolocation', array( $this, 'get_geolocation' ), 10, 2 );
47
+
48
+        // Handle maxmind key updates.
49
+        add_filter( 'wpinv_settings_sanitize_maxmind_license_key', array( $this, 'handle_key_updates' ) );
50
+
51
+    }
52
+
53
+    /**
54
+     * Get database service.
55
+     *
56
+     * @return GetPaid_MaxMind_Database_Service|null
57
+     */
58
+    public function get_database_service() {
59
+        return $this->database_service;
60
+    }
61
+
62
+    /**
63
+     * Checks to make sure that the license key is valid.
64
+     *
65
+     * @param string $license_key The new license key.
66
+     * @return string
67
+     */
68
+    public function handle_key_updates( $license_key ) {
69
+
70
+        // Trim whitespaces and strip slashes.
71
+        $license_key = trim( $license_key );
72
+
73
+        // Abort if the license key is empty or unchanged.
74
+        if ( empty( $license_key ) ) {
75
+            return $license_key;
76
+        }
77
+
78
+        // Abort if a database exists and the license key is unchaged.
79
+        if ( file_exists( $this->database_service->get_database_path() && $license_key == wpinv_get_option( 'maxmind_license_key' ) ) ) {
80
+            return $license_key;
81
+        }
82
+
83
+        // Check the license key by attempting to download the Geolocation database.
84
+        $tmp_database_path = $this->database_service->download_database( $license_key );
85
+        if ( is_wp_error( $tmp_database_path ) ) {
86
+            getpaid_admin()->show_error( $tmp_database_path->get_error_message() );
87
+            return $license_key;
88
+        }
89
+
90
+        $this->update_database( /** @scrutinizer ignore-type */ $tmp_database_path );
91
+
92
+    }
93
+
94
+    /**
95
+     * Updates the database used for geolocation queries.
96
+     *
97
+     * @param string $tmp_database_path Temporary database path.
98
+     */
99
+    public function update_database( $tmp_database_path = null ) {
100
+
101
+        // Allow us to easily interact with the filesystem.
102
+        require_once ABSPATH . 'wp-admin/includes/file.php';
103
+        WP_Filesystem();
104
+        global $wp_filesystem;
105
+
106
+        // Remove any existing archives to comply with the MaxMind TOS.
107
+        $target_database_path = $this->database_service->get_database_path();
108
+
109
+        // If there's no database path, we can't store the database.
110
+        if ( empty( $target_database_path ) ) {
111
+            return;
112
+        }
113
+
114
+        if ( $wp_filesystem->exists( $target_database_path ) ) {
115
+            $wp_filesystem->delete( $target_database_path );
116
+        }
117
+
118
+        // We can't download a database if there's no license key configured.
119
+        $license_key = wpinv_get_option( 'maxmind_license_key' );
120
+        if ( empty( $license_key ) ) {
121
+            return;
122
+        }
123
+
124
+        if ( empty( $tmp_database_path ) ) {
125
+            $tmp_database_path = $this->database_service->download_database( $license_key );
126
+        }
127
+
128
+        if ( is_wp_error( $tmp_database_path ) ) {
129
+            wpinv_error_log( $tmp_database_path->get_error_message() );
130
+            return;
131
+        }
132
+
133
+        // Move the new database into position.
134
+        $wp_filesystem->move( $tmp_database_path, $target_database_path, true );
135
+        $wp_filesystem->delete( dirname( $tmp_database_path ) );
136
+    }
137
+
138
+    /**
139
+     * Performs a geolocation lookup against the MaxMind database for the given IP address.
140
+     *
141
+     * @param array  $data       Geolocation data.
142
+     * @param string $ip_address The IP address to geolocate.
143
+     * @return array Geolocation including country code, state, city and postcode based on an IP address.
144
+     */
145
+    public function get_geolocation( $data, $ip_address ) {
146
+
147
+        if ( ! empty( $data['country'] ) || empty( $ip_address ) ) {
148
+            return $data;
149
+        }
150
+
151
+        $country_code = $this->database_service->get_iso_country_code_for_ip( $ip_address );
152
+
153
+        return array(
154
+            'country'  => $country_code,
155
+            'state'    => '',
156
+            'city'     => '',
157
+            'postcode' => '',
158
+        );
159
+
160
+    }
161
+
162
+    /**
163
+     * Fetches the prefix for the MaxMind database file.
164
+     *
165
+     * @return string
166
+     */
167
+    private function get_database_prefix() {
168
+
169
+        $prefix = get_option( 'wpinv_maxmind_database_prefix' );
170
+
171
+        if ( empty( $prefix ) ) {
172
+            $prefix = md5( uniqid( 'wpinv' ) );
173
+            update_option( 'wpinv_maxmind_database_prefix', $prefix );
174
+        }
175
+
176
+        return $prefix;
177
+    }
178 178
 
179 179
 }
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-items.php 1 patch
Indentation   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -12,23 +12,23 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Report_Items extends GetPaid_Reports_Abstract_Report {
14 14
 
15
-	/**
16
-	 * @var string
17
-	 */
18
-	public $field = 'item_name';
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
-		$table2     = $wpdb->prefix . 'getpaid_invoice_items';
29
-		$clauses    = $this->get_range_sql( $range );
30
-
31
-		$sql        = "SELECT
15
+    /**
16
+     * @var string
17
+     */
18
+    public $field = 'item_name';
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
+        $table2     = $wpdb->prefix . 'getpaid_invoice_items';
29
+        $clauses    = $this->get_range_sql( $range );
30
+
31
+        $sql        = "SELECT
32 32
 				item.item_name AS item_name,
33 33
 				item.item_id AS item_id,
34 34
 				SUM(price) as total
@@ -43,91 +43,91 @@  discard block
 block discarded – undo
43 43
 			ORDER BY total DESC
44 44
         ";
45 45
 
46
-		return apply_filters( 'getpaid_items_graphs_get_sql', $sql, $range );
46
+        return apply_filters( 'getpaid_items_graphs_get_sql', $sql, $range );
47 47
 
48
-	}
48
+    }
49 49
 
50
-	/**
51
-	 * Prepares the report stats.
52
-	 *
53
-	 */
54
-	public function prepare_stats() {
55
-		global $wpdb;
56
-		$this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
57
-		$this->stats = $this->normalize_stats( $this->stats );
58
-	}
50
+    /**
51
+     * Prepares the report stats.
52
+     *
53
+     */
54
+    public function prepare_stats() {
55
+        global $wpdb;
56
+        $this->stats = $wpdb->get_results( $this->get_sql( $this->get_range() ) );
57
+        $this->stats = $this->normalize_stats( $this->stats );
58
+    }
59 59
 
60
-	/**
61
-	 * Normalizes the report stats.
62
-	 *
63
-	 */
64
-	public function normalize_stats( $stats ) {
65
-		$normalized = array();
66
-		$others     = 0;
67
-		$did        = 0;
60
+    /**
61
+     * Normalizes the report stats.
62
+     *
63
+     */
64
+    public function normalize_stats( $stats ) {
65
+        $normalized = array();
66
+        $others     = 0;
67
+        $did        = 0;
68 68
 
69
-		foreach ( $stats as $stat ) {
69
+        foreach ( $stats as $stat ) {
70 70
 
71
-			if ( $did > 4 ) {
71
+            if ( $did > 4 ) {
72 72
 
73
-				$others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
73
+                $others += wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) );
74 74
 
75
-			} else {
75
+            } else {
76 76
 
77
-				$normalized[] = array(
78
-					'total'     => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
79
-					'item_name' => strip_tags( $stat->item_name ),
80
-				);
77
+                $normalized[] = array(
78
+                    'total'     => wpinv_round_amount( wpinv_sanitize_amount( $stat->total ) ),
79
+                    'item_name' => strip_tags( $stat->item_name ),
80
+                );
81 81
 
82
-			}
82
+            }
83 83
 
84
-			$did++;
85
-		}
84
+            $did++;
85
+        }
86 86
 
87
-		if ( $others > 0 ) {
87
+        if ( $others > 0 ) {
88 88
 
89
-			$normalized[] = array(
90
-				'total'     => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
91
-				'item_name' => esc_html__( 'Others', 'invoicing' ),
92
-			);
89
+            $normalized[] = array(
90
+                'total'     => wpinv_round_amount( wpinv_sanitize_amount( $others ) ),
91
+                'item_name' => esc_html__( 'Others', 'invoicing' ),
92
+            );
93 93
 
94
-		}
94
+        }
95 95
 
96
-		return $normalized;
97
-	}
96
+        return $normalized;
97
+    }
98 98
 
99
-	/**
100
-	 * Retrieves report data.
101
-	 *
102
-	 */
103
-	public function get_data() {
99
+    /**
100
+     * Retrieves report data.
101
+     *
102
+     */
103
+    public function get_data() {
104 104
 
105
-		$data     = wp_list_pluck( $this->stats, 'total' );
106
-		$colors   = array( '#009688','#4caf50','#8bc34a','#00bcd4','#03a9f4','#2196f3' );
105
+        $data     = wp_list_pluck( $this->stats, 'total' );
106
+        $colors   = array( '#009688','#4caf50','#8bc34a','#00bcd4','#03a9f4','#2196f3' );
107 107
 
108
-		shuffle( $colors );
108
+        shuffle( $colors );
109 109
 
110
-		return array(
111
-			'data'            => $data,
112
-			'backgroundColor' => $colors,
113
-		);
110
+        return array(
111
+            'data'            => $data,
112
+            'backgroundColor' => $colors,
113
+        );
114 114
 
115
-	}
115
+    }
116 116
 
117
-	/**
118
-	 * Retrieves report labels.
119
-	 *
120
-	 */
121
-	public function get_labels() {
122
-		return wp_list_pluck( $this->stats, 'item_name' );
123
-	}
117
+    /**
118
+     * Retrieves report labels.
119
+     *
120
+     */
121
+    public function get_labels() {
122
+        return wp_list_pluck( $this->stats, 'item_name' );
123
+    }
124 124
 
125
-	/**
126
-	 * Displays the actual report.
127
-	 *
128
-	 */
129
-	public function display_stats() {
130
-		?>
125
+    /**
126
+     * Displays the actual report.
127
+     *
128
+     */
129
+    public function display_stats() {
130
+        ?>
131 131
 
132 132
 			<canvas id="getpaid-chartjs-earnings-items"></canvas>
133 133
 
@@ -156,6 +156,6 @@  discard block
 block discarded – undo
156 156
 			</script>
157 157
 
158 158
 		<?php
159
-	}
159
+    }
160 160
 
161 161
 }
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/reports/class-getpaid-graph-downloader.php 1 patch
Indentation   +205 added lines, -205 removed lines patch added patch discarded remove patch
@@ -12,219 +12,219 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * @var GetPaid_Reports_Report
17
-	 */
18
-	public $handler;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 */
24
-	public function __construct() {
25
-		$this->handler = new GetPaid_Reports_Report();
26
-	}
27
-
28
-	/**
29
-	 * Prepares the datastore handler.
30
-	 *
31
-	 * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
-	 */
33
-	public function prepare_handler( $graph ) {
34
-
35
-		if ( empty( $this->handler->views[ $graph ] ) ) {
36
-			wp_die( __( 'Invalid Graph', 'invoicing' ), 400 );
37
-		}
38
-
39
-		return new $this->handler->views[ $graph ]['class']();
40
-
41
-	}
42
-
43
-	/**
44
-	 * Prepares the output stream.
45
-	 *
46
-	 * @return resource
47
-	 */
48
-	public function prepare_output() {
49
-
50
-		$output  = fopen( 'php://output', 'w' );
51
-
52
-		if ( false === $output ) {
53
-			wp_die( __( 'Unsupported server', 'invoicing' ), 500 );
54
-		}
55
-
56
-		return $output;
57
-	}
58
-
59
-	/**
60
-	 * Prepares the file type.
61
-	 *
62
-	 * @return string
63
-	 */
64
-	public function prepare_file_type( $graph ) {
65
-
66
-		$file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
-		$file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
-
69
-		header( "Content-Type:application/$file_type" );
70
-		header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
-
72
-		return $file_type;
73
-	}
74
-
75
-	/**
76
-	 * Handles the actual download.
77
-	 *
78
-	 */
79
-	public function download( $graph ) {
80
-		global $wpdb;
81
-
82
-		$handler   = $this->prepare_handler( $graph );
83
-		$stream    = $this->prepare_output();
84
-		$stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
-		$headers   = array( $handler->field, 'total', 'total_raw' );
86
-		$file_type = $this->prepare_file_type( $graph );
87
-
88
-		if ( 'csv' == $file_type ) {
89
-			$this->download_csv( $stats, $stream, $headers );
90
-		} else if( 'xml' == $file_type ) {
91
-			$this->download_xml( $stats, $stream, $headers );
92
-		} else {
93
-			$this->download_json( $stats, $stream, $headers );
94
-		}
95
-
96
-		fclose( $stream );
97
-		exit;
98
-	}
99
-
100
-	/**
101
-	 * Downloads graph as csv
102
-	 *
103
-	 * @param array $stats The stats being downloaded.
104
-	 * @param resource $stream The stream to output to.
105
-	 * @param array $headers The fields to stream.
106
-	 * @since       1.0.19
107
-	 */
108
-	public function download_csv( $stats, $stream, $headers ) {
109
-
110
-		// Output the csv column headers.
111
-		fputcsv( $stream, $headers );
112
-
113
-		// Loop through 
114
-		foreach ( $stats as $stat ) {
115
-			$row  = array_values( $this->prepare_row( $stat, $headers ) );
116
-			$row  = array_map( 'maybe_serialize', $row );
117
-			fputcsv( $stream, $row );
118
-		}
119
-
120
-	}
121
-
122
-	/**
123
-	 * Downloads graph as json
124
-	 *
125
-	 * @param array $stats The stats being downloaded.
126
-	 * @param resource $stream The stream to output to.
127
-	 * @param array $headers The fields to stream.
128
-	 * @since       1.0.19
129
-	 */
130
-	public function download_json( $stats, $stream, $headers ) {
131
-
132
-		$prepared = array();
133
-
134
-		// Loop through 
135
-		foreach ( $stats as $stat ) {
136
-			$prepared[] = $this->prepare_row( $stat, $headers );
137
-		}
138
-
139
-		fwrite( $stream, wp_json_encode( $prepared ) );
140
-
141
-	}
142
-
143
-	/**
144
-	 * Downloads graph as xml
145
-	 *
146
-	 * @param array $stats The stats being downloaded.
147
-	 * @param resource $stream The stream to output to.
148
-	 * @param array $headers The fields to stream.
149
-	 * @since       1.0.19
150
-	 */
151
-	public function download_xml( $stats, $stream, $headers ) {
152
-
153
-		$prepared = array();
154
-
155
-		// Loop through 
156
-		foreach ( $stats as $stat ) {
157
-			$prepared[] = $this->prepare_row( $stat, $headers );
158
-		}
159
-
160
-		$xml = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
161
-		$this->convert_array_xml( $prepared, $xml );
162
-
163
-		fwrite( $stream, $xml->asXML() );
164
-
165
-	}
166
-
167
-	/**
168
-	 * Converts stats array to xml
169
-	 *
170
-	 * @access      public
171
-	 * @since      1.0.19
172
-	 */
173
-	public function convert_array_xml( $data, $xml ) {
174
-
175
-		// Loop through 
176
-		foreach ( $data as $key => $value ) {
177
-
178
-			$key = preg_replace( "/[^A-Za-z0-9_\-]/", '', $key );
179
-
180
-			if ( is_array( $value ) ) {
181
-
182
-				if ( is_numeric( $key ) ){
183
-					$key = 'item'.$key; //dealing with <0/>..<n/> issues
184
-				}
185
-
186
-				$subnode = $xml->addChild( $key );
187
-				$this->convert_array_xml( $value, $subnode );
188
-
189
-			} else {
190
-				$xml->addChild( $key, htmlspecialchars( $value ) );
191
-			}
192
-
193
-		}
15
+    /**
16
+     * @var GetPaid_Reports_Report
17
+     */
18
+    public $handler;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     */
24
+    public function __construct() {
25
+        $this->handler = new GetPaid_Reports_Report();
26
+    }
27
+
28
+    /**
29
+     * Prepares the datastore handler.
30
+     *
31
+     * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
+     */
33
+    public function prepare_handler( $graph ) {
34
+
35
+        if ( empty( $this->handler->views[ $graph ] ) ) {
36
+            wp_die( __( 'Invalid Graph', 'invoicing' ), 400 );
37
+        }
38
+
39
+        return new $this->handler->views[ $graph ]['class']();
40
+
41
+    }
42
+
43
+    /**
44
+     * Prepares the output stream.
45
+     *
46
+     * @return resource
47
+     */
48
+    public function prepare_output() {
49
+
50
+        $output  = fopen( 'php://output', 'w' );
51
+
52
+        if ( false === $output ) {
53
+            wp_die( __( 'Unsupported server', 'invoicing' ), 500 );
54
+        }
55
+
56
+        return $output;
57
+    }
58
+
59
+    /**
60
+     * Prepares the file type.
61
+     *
62
+     * @return string
63
+     */
64
+    public function prepare_file_type( $graph ) {
65
+
66
+        $file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
+        $file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
+
69
+        header( "Content-Type:application/$file_type" );
70
+        header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
+
72
+        return $file_type;
73
+    }
74
+
75
+    /**
76
+     * Handles the actual download.
77
+     *
78
+     */
79
+    public function download( $graph ) {
80
+        global $wpdb;
81
+
82
+        $handler   = $this->prepare_handler( $graph );
83
+        $stream    = $this->prepare_output();
84
+        $stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
+        $headers   = array( $handler->field, 'total', 'total_raw' );
86
+        $file_type = $this->prepare_file_type( $graph );
87
+
88
+        if ( 'csv' == $file_type ) {
89
+            $this->download_csv( $stats, $stream, $headers );
90
+        } else if( 'xml' == $file_type ) {
91
+            $this->download_xml( $stats, $stream, $headers );
92
+        } else {
93
+            $this->download_json( $stats, $stream, $headers );
94
+        }
95
+
96
+        fclose( $stream );
97
+        exit;
98
+    }
99
+
100
+    /**
101
+     * Downloads graph as csv
102
+     *
103
+     * @param array $stats The stats being downloaded.
104
+     * @param resource $stream The stream to output to.
105
+     * @param array $headers The fields to stream.
106
+     * @since       1.0.19
107
+     */
108
+    public function download_csv( $stats, $stream, $headers ) {
109
+
110
+        // Output the csv column headers.
111
+        fputcsv( $stream, $headers );
112
+
113
+        // Loop through 
114
+        foreach ( $stats as $stat ) {
115
+            $row  = array_values( $this->prepare_row( $stat, $headers ) );
116
+            $row  = array_map( 'maybe_serialize', $row );
117
+            fputcsv( $stream, $row );
118
+        }
119
+
120
+    }
121
+
122
+    /**
123
+     * Downloads graph as json
124
+     *
125
+     * @param array $stats The stats being downloaded.
126
+     * @param resource $stream The stream to output to.
127
+     * @param array $headers The fields to stream.
128
+     * @since       1.0.19
129
+     */
130
+    public function download_json( $stats, $stream, $headers ) {
131
+
132
+        $prepared = array();
133
+
134
+        // Loop through 
135
+        foreach ( $stats as $stat ) {
136
+            $prepared[] = $this->prepare_row( $stat, $headers );
137
+        }
138
+
139
+        fwrite( $stream, wp_json_encode( $prepared ) );
140
+
141
+    }
142
+
143
+    /**
144
+     * Downloads graph as xml
145
+     *
146
+     * @param array $stats The stats being downloaded.
147
+     * @param resource $stream The stream to output to.
148
+     * @param array $headers The fields to stream.
149
+     * @since       1.0.19
150
+     */
151
+    public function download_xml( $stats, $stream, $headers ) {
152
+
153
+        $prepared = array();
154
+
155
+        // Loop through 
156
+        foreach ( $stats as $stat ) {
157
+            $prepared[] = $this->prepare_row( $stat, $headers );
158
+        }
159
+
160
+        $xml = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
161
+        $this->convert_array_xml( $prepared, $xml );
162
+
163
+        fwrite( $stream, $xml->asXML() );
164
+
165
+    }
166
+
167
+    /**
168
+     * Converts stats array to xml
169
+     *
170
+     * @access      public
171
+     * @since      1.0.19
172
+     */
173
+    public function convert_array_xml( $data, $xml ) {
174
+
175
+        // Loop through 
176
+        foreach ( $data as $key => $value ) {
177
+
178
+            $key = preg_replace( "/[^A-Za-z0-9_\-]/", '', $key );
179
+
180
+            if ( is_array( $value ) ) {
181
+
182
+                if ( is_numeric( $key ) ){
183
+                    $key = 'item'.$key; //dealing with <0/>..<n/> issues
184
+                }
185
+
186
+                $subnode = $xml->addChild( $key );
187
+                $this->convert_array_xml( $value, $subnode );
188
+
189
+            } else {
190
+                $xml->addChild( $key, htmlspecialchars( $value ) );
191
+            }
192
+
193
+        }
194 194
 
195
-	}
196
-
197
-	/**
198
-	 * Prepares a single row for download.
199
-	 *
200
-	 * @param stdClass|array $row The row to prepare..
201
-	 * @param array $fields The fields to stream.
202
-	 * @since       1.0.19
203
-	 * @return array
204
-	 */
205
-	public function prepare_row( $row, $fields ) {
195
+    }
196
+
197
+    /**
198
+     * Prepares a single row for download.
199
+     *
200
+     * @param stdClass|array $row The row to prepare..
201
+     * @param array $fields The fields to stream.
202
+     * @since       1.0.19
203
+     * @return array
204
+     */
205
+    public function prepare_row( $row, $fields ) {
206 206
 
207
-		$prepared = array();
208
-		$row      = (array) $row;
207
+        $prepared = array();
208
+        $row      = (array) $row;
209 209
 
210
-		foreach ( $fields as $field ) {
210
+        foreach ( $fields as $field ) {
211 211
 
212
-			if ( $field === 'total' ) {
213
-				$prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
214
-				continue;
215
-			}
212
+            if ( $field === 'total' ) {
213
+                $prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
214
+                continue;
215
+            }
216 216
 
217
-			if ( $field === 'total_raw' ) {
218
-				$prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
219
-				continue;
220
-			}
217
+            if ( $field === 'total_raw' ) {
218
+                $prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
219
+                continue;
220
+            }
221 221
 
222
-			$prepared[ $field ] = strip_tags( $row[ $field ] );
222
+            $prepared[ $field ] = strip_tags( $row[ $field ] );
223 223
 
224
-		}
224
+        }
225 225
 
226
-		return $prepared;
227
-	}
226
+        return $prepared;
227
+    }
228 228
 
229 229
 
230 230
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-export.php 1 patch
Indentation   +153 added lines, -153 removed lines patch added patch discarded remove patch
@@ -12,46 +12,46 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Export {
14 14
 
15
-	/**
16
-	 * Displays the reports tab.
17
-	 *
18
-	 */
19
-	public function display() {
20
-
21
-		echo "<div class='row mt-4' style='max-width: 920px;' >";
22
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
23
-			$this->display_post_type_export( $post_type );
24
-		}
25
-		echo "</div>";
26
-
27
-	}
28
-
29
-	/**
30
-	 * Retrieves the download url.
31
-	 *
32
-	 */
33
-	public function get_download_url( $post_type ) {
34
-
35
-		return wp_nonce_url(
36
-			add_query_arg(
37
-				array(
38
-					'getpaid-admin-action' => 'export_invoices',
39
-					'post_type'            => urlencode( $post_type ),
40
-				)
41
-			),
42
-			'getpaid-nonce',
43
-			'getpaid-nonce'
44
-		);
45
-
46
-	}
47
-
48
-	/**
49
-	 * Displays a single post type export card.
50
-	 *
51
-	 */
52
-	public function display_post_type_export( $post_type ) {
53
-
54
-		?>
15
+    /**
16
+     * Displays the reports tab.
17
+     *
18
+     */
19
+    public function display() {
20
+
21
+        echo "<div class='row mt-4' style='max-width: 920px;' >";
22
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
23
+            $this->display_post_type_export( $post_type );
24
+        }
25
+        echo "</div>";
26
+
27
+    }
28
+
29
+    /**
30
+     * Retrieves the download url.
31
+     *
32
+     */
33
+    public function get_download_url( $post_type ) {
34
+
35
+        return wp_nonce_url(
36
+            add_query_arg(
37
+                array(
38
+                    'getpaid-admin-action' => 'export_invoices',
39
+                    'post_type'            => urlencode( $post_type ),
40
+                )
41
+            ),
42
+            'getpaid-nonce',
43
+            'getpaid-nonce'
44
+        );
45
+
46
+    }
47
+
48
+    /**
49
+     * Displays a single post type export card.
50
+     *
51
+     */
52
+    public function display_post_type_export( $post_type ) {
53
+
54
+        ?>
55 55
 
56 56
 		<div class="col-12 col-md-6">
57 57
 			<div class="card m-0 p-0" style="max-width:100%">
@@ -59,11 +59,11 @@  discard block
 block discarded – undo
59 59
 				<div class="card-header">
60 60
 					<strong>
61 61
 						<?php
62
-							printf(
63
-								__( 'Export %s', 'invoicing' ),
64
-								sanitize_text_field( getpaid_get_post_type_label( $post_type ) )
65
-							);
66
-						?>
62
+                            printf(
63
+                                __( 'Export %s', 'invoicing' ),
64
+                                sanitize_text_field( getpaid_get_post_type_label( $post_type ) )
65
+                            );
66
+                        ?>
67 67
 					</strong>
68 68
 				</div>
69 69
 
@@ -72,12 +72,12 @@  discard block
 block discarded – undo
72 72
 					<form method="post" action="<?php echo esc_url( $this->get_download_url( $post_type ) ); ?>">
73 73
 
74 74
 						<?php
75
-							$this->display_markup( $this->generate_from_date( $post_type ) );
76
-							$this->display_markup( $this->generate_to_date( $post_type ) );
77
-							$this->display_markup( $this->generate_post_status_select( $post_type ) );
78
-							$this->display_markup( $this->generate_file_type_select( $post_type ) );
79
-							submit_button( __( 'Download', 'invoicing' ) );
80
-						?>
75
+                            $this->display_markup( $this->generate_from_date( $post_type ) );
76
+                            $this->display_markup( $this->generate_to_date( $post_type ) );
77
+                            $this->display_markup( $this->generate_post_status_select( $post_type ) );
78
+                            $this->display_markup( $this->generate_file_type_select( $post_type ) );
79
+                            submit_button( __( 'Download', 'invoicing' ) );
80
+                        ?>
81 81
 
82 82
 					</form>
83 83
 
@@ -88,107 +88,107 @@  discard block
 block discarded – undo
88 88
 
89 89
 		<?php
90 90
 
91
-	}
92
-
93
-	/**
94
-	 * Generates the from date input field.
95
-	 *
96
-	 */
97
-	public function generate_from_date( $post_type ) {
98
-
99
-		return aui()->input(
100
-			array(
101
-				'name'       => 'from_date',
102
-				'id'         => esc_attr( "$post_type-from_date" ),
103
-				'placeholder'=> 'yy-mm-dd',
104
-				'label'      => __( 'From Date', 'invoicing' ),
105
-				'label_type' => 'vertical',
106
-				'label_class' => 'd-block',
107
-				'type'       => 'datepicker',
108
-			)
109
-		);
110
-
111
-	}
112
-
113
-	/**
114
-	 * Generates the to date input field.
115
-	 *
116
-	 */
117
-	public function generate_to_date( $post_type ) {
118
-
119
-		return aui()->input(
120
-			array(
121
-				'name'       => 'to_date',
122
-				'id'         => esc_attr( "$post_type-to_date" ),
123
-				'placeholder'=> 'yy-mm-dd',
124
-				'label'      => __( 'To Date', 'invoicing' ),
125
-				'label_type' => 'vertical',
126
-				'label_class' => 'd-block',
127
-				'type'       => 'datepicker',
128
-			)
129
-		);
130
-
131
-	}
132
-
133
-	/**
134
-	 * Generates the to post status select field.
135
-	 *
136
-	 */
137
-	public function generate_post_status_select( $post_type ) {
138
-
139
-		return aui()->select(
140
-			array(
141
-				'name'        => 'status',
142
-				'id'          => esc_attr( "$post_type-status" ),
143
-				'placeholder' => __( 'All Statuses', 'invoicing' ),
144
-				'label'       => __( 'Status', 'invoicing' ),
145
-				'label_type'  => 'vertical',
146
-				'label_class' => 'd-block',
147
-				'options'     => wpinv_get_invoice_statuses( true, false, $post_type ),
148
-			)
149
-		);
150
-
151
-	}
152
-
153
-	/**
154
-	 * Generates the to file type select field.
155
-	 *
156
-	 */
157
-	public function generate_file_type_select( $post_type ) {
158
-
159
-		return aui()->select(
160
-			array(
161
-				'name'        => 'file_type',
162
-				'id'          => esc_attr( "$post_type-file_type" ),
163
-				'placeholder' => __( 'Select File Type', 'invoicing' ),
164
-				'label'       => __( 'Export File', 'invoicing' ),
165
-				'label_type'  => 'vertical',
166
-				'label_class' => 'd-block',
167
-				'options'     => array(
168
-					'csv'  => __( 'CSV', 'invoicing' ),
169
-					'xml'  => __( 'XML', 'invoicing' ),
170
-					'json' => __( 'JSON', 'invoicing' ),
171
-				),
172
-			)
173
-		);
174
-
175
-	}
176
-
177
-	/**
178
-	 * Displays a field's markup.
179
-	 *
180
-	 */
181
-	public function display_markup( $markup ) {
182
-
183
-		echo str_replace(
184
-			array(
185
-				'form-control',
186
-				'custom-select'
187
-			),
188
-			'regular-text',
189
-			$markup
190
-		);
191
-
192
-	}
91
+    }
92
+
93
+    /**
94
+     * Generates the from date input field.
95
+     *
96
+     */
97
+    public function generate_from_date( $post_type ) {
98
+
99
+        return aui()->input(
100
+            array(
101
+                'name'       => 'from_date',
102
+                'id'         => esc_attr( "$post_type-from_date" ),
103
+                'placeholder'=> 'yy-mm-dd',
104
+                'label'      => __( 'From Date', 'invoicing' ),
105
+                'label_type' => 'vertical',
106
+                'label_class' => 'd-block',
107
+                'type'       => 'datepicker',
108
+            )
109
+        );
110
+
111
+    }
112
+
113
+    /**
114
+     * Generates the to date input field.
115
+     *
116
+     */
117
+    public function generate_to_date( $post_type ) {
118
+
119
+        return aui()->input(
120
+            array(
121
+                'name'       => 'to_date',
122
+                'id'         => esc_attr( "$post_type-to_date" ),
123
+                'placeholder'=> 'yy-mm-dd',
124
+                'label'      => __( 'To Date', 'invoicing' ),
125
+                'label_type' => 'vertical',
126
+                'label_class' => 'd-block',
127
+                'type'       => 'datepicker',
128
+            )
129
+        );
130
+
131
+    }
132
+
133
+    /**
134
+     * Generates the to post status select field.
135
+     *
136
+     */
137
+    public function generate_post_status_select( $post_type ) {
138
+
139
+        return aui()->select(
140
+            array(
141
+                'name'        => 'status',
142
+                'id'          => esc_attr( "$post_type-status" ),
143
+                'placeholder' => __( 'All Statuses', 'invoicing' ),
144
+                'label'       => __( 'Status', 'invoicing' ),
145
+                'label_type'  => 'vertical',
146
+                'label_class' => 'd-block',
147
+                'options'     => wpinv_get_invoice_statuses( true, false, $post_type ),
148
+            )
149
+        );
150
+
151
+    }
152
+
153
+    /**
154
+     * Generates the to file type select field.
155
+     *
156
+     */
157
+    public function generate_file_type_select( $post_type ) {
158
+
159
+        return aui()->select(
160
+            array(
161
+                'name'        => 'file_type',
162
+                'id'          => esc_attr( "$post_type-file_type" ),
163
+                'placeholder' => __( 'Select File Type', 'invoicing' ),
164
+                'label'       => __( 'Export File', 'invoicing' ),
165
+                'label_type'  => 'vertical',
166
+                'label_class' => 'd-block',
167
+                'options'     => array(
168
+                    'csv'  => __( 'CSV', 'invoicing' ),
169
+                    'xml'  => __( 'XML', 'invoicing' ),
170
+                    'json' => __( 'JSON', 'invoicing' ),
171
+                ),
172
+            )
173
+        );
174
+
175
+    }
176
+
177
+    /**
178
+     * Displays a field's markup.
179
+     *
180
+     */
181
+    public function display_markup( $markup ) {
182
+
183
+        echo str_replace(
184
+            array(
185
+                'form-control',
186
+                'custom-select'
187
+            ),
188
+            'regular-text',
189
+            $markup
190
+        );
191
+
192
+    }
193 193
 
194 194
 }
Please login to merge, or discard this patch.
includes/wpinv-helper-functions.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -97,13 +97,13 @@  discard block
 block discarded – undo
97 97
  */
98 98
 function wpinv_get_invoice_statuses( $draft = false, $trashed = false, $invoice = false ) {
99 99
 
100
-	$invoice_statuses = array(
101
-		'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
100
+    $invoice_statuses = array(
101
+        'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
102 102
         'publish'        => _x( 'Paid', 'Invoice status', 'invoicing' ),
103 103
         'wpi-processing' => _x( 'Processing', 'Invoice status', 'invoicing' ),
104
-		'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
105
-		'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
106
-		'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
104
+        'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
105
+        'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
106
+        'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
107 107
         'wpi-failed'     => _x( 'Failed', 'Invoice status', 'invoicing' ),
108 108
         'wpi-renewal'    => _x( 'Renewal Payment', 'Invoice status', 'invoicing' ),
109 109
     );
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
         $invoice = $invoice->get_post_type();
121 121
     }
122 122
 
123
-	return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
123
+    return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
124 124
 }
125 125
 
126 126
 /**
@@ -238,25 +238,25 @@  discard block
 block discarded – undo
238 238
  * @return string
239 239
  */
240 240
 function getpaid_get_price_format() {
241
-	$currency_pos = wpinv_currency_position();
242
-	$format       = '%1$s%2$s';
243
-
244
-	switch ( $currency_pos ) {
245
-		case 'left':
246
-			$format = '%1$s%2$s';
247
-			break;
248
-		case 'right':
249
-			$format = '%2$s%1$s';
250
-			break;
251
-		case 'left_space':
252
-			$format = '%1$s&nbsp;%2$s';
253
-			break;
254
-		case 'right_space':
255
-			$format = '%2$s&nbsp;%1$s';
256
-			break;
257
-	}
258
-
259
-	return apply_filters( 'getpaid_price_format', $format, $currency_pos );
241
+    $currency_pos = wpinv_currency_position();
242
+    $format       = '%1$s%2$s';
243
+
244
+    switch ( $currency_pos ) {
245
+        case 'left':
246
+            $format = '%1$s%2$s';
247
+            break;
248
+        case 'right':
249
+            $format = '%2$s%1$s';
250
+            break;
251
+        case 'left_space':
252
+            $format = '%1$s&nbsp;%2$s';
253
+            break;
254
+        case 'right_space':
255
+            $format = '%2$s&nbsp;%1$s';
256
+            break;
257
+    }
258
+
259
+    return apply_filters( 'getpaid_price_format', $format, $currency_pos );
260 260
 }
261 261
 
262 262
 /**
@@ -359,13 +359,13 @@  discard block
 block discarded – undo
359 359
  * @param mixed  $value Value.
360 360
  */
361 361
 function getpaid_maybe_define_constant( $name, $value ) {
362
-	if ( ! defined( $name ) ) {
363
-		define( $name, $value );
364
-	}
362
+    if ( ! defined( $name ) ) {
363
+        define( $name, $value );
364
+    }
365 365
 }
366 366
 
367 367
 function wpinv_get_php_arg_separator_output() {
368
-	return ini_get( 'arg_separator.output' );
368
+    return ini_get( 'arg_separator.output' );
369 369
 }
370 370
 
371 371
 function wpinv_rgb_from_hex( $color ) {
@@ -716,11 +716,11 @@  discard block
 block discarded – undo
716 716
         $list = array();
717 717
     }
718 718
 
719
-	if ( ! is_array( $list ) ) {
720
-		return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
721
-	}
719
+    if ( ! is_array( $list ) ) {
720
+        return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
721
+    }
722 722
 
723
-	return $list;
723
+    return $list;
724 724
 }
725 725
 
726 726
 /**
@@ -740,9 +740,9 @@  discard block
 block discarded – undo
740 740
     }
741 741
 
742 742
     $data = apply_filters( "wpinv_get_$key", include WPINV_PLUGIN_DIR . "includes/data/$key.php" );
743
-	wp_cache_set( "wpinv-data-$key", $data, 'wpinv' );
743
+    wp_cache_set( "wpinv-data-$key", $data, 'wpinv' );
744 744
 
745
-	return $data;
745
+    return $data;
746 746
 }
747 747
 
748 748
 /**
@@ -771,17 +771,17 @@  discard block
 block discarded – undo
771 771
  */
772 772
 function wpinv_clean( $var ) {
773 773
 
774
-	if ( is_array( $var ) ) {
775
-		return array_map( 'wpinv_clean', $var );
774
+    if ( is_array( $var ) ) {
775
+        return array_map( 'wpinv_clean', $var );
776 776
     }
777 777
 
778 778
     if ( is_object( $var ) ) {
779
-		$object_vars = get_object_vars( $var );
780
-		foreach ( $object_vars as $property_name => $property_value ) {
781
-			$var->$property_name = wpinv_clean( $property_value );
779
+        $object_vars = get_object_vars( $var );
780
+        foreach ( $object_vars as $property_name => $property_value ) {
781
+            $var->$property_name = wpinv_clean( $property_value );
782 782
         }
783 783
         return $var;
784
-	}
784
+    }
785 785
     
786 786
     return is_string( $var ) ? sanitize_text_field( $var ) : $var;
787 787
 }
@@ -794,7 +794,7 @@  discard block
 block discarded – undo
794 794
  */
795 795
 function getpaid_convert_price_string_to_options( $str ) {
796 796
 
797
-	$raw_options = array_map( 'trim', explode( ',', $str ) );
797
+    $raw_options = array_map( 'trim', explode( ',', $str ) );
798 798
     $options     = array();
799 799
 
800 800
     foreach ( $raw_options as $option ) {
@@ -872,7 +872,7 @@  discard block
 block discarded – undo
872 872
  * @return string
873 873
  */
874 874
 function getpaid_date_format() {
875
-	return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
875
+    return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
876 876
 }
877 877
 
878 878
 /**
@@ -881,7 +881,7 @@  discard block
 block discarded – undo
881 881
  * @return string
882 882
  */
883 883
 function getpaid_time_format() {
884
-	return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
884
+    return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
885 885
 }
886 886
 
887 887
 /**
@@ -894,15 +894,15 @@  discard block
 block discarded – undo
894 894
 function getpaid_limit_length( $string, $limit ) {
895 895
     $str_limit = $limit - 3;
896 896
 
897
-	if ( function_exists( 'mb_strimwidth' ) ) {
898
-		if ( mb_strlen( $string ) > $limit ) {
899
-			$string = mb_strimwidth( $string, 0, $str_limit ) . '...';
900
-		}
901
-	} else {
902
-		if ( strlen( $string ) > $limit ) {
903
-			$string = substr( $string, 0, $str_limit ) . '...';
904
-		}
905
-	}
897
+    if ( function_exists( 'mb_strimwidth' ) ) {
898
+        if ( mb_strlen( $string ) > $limit ) {
899
+            $string = mb_strimwidth( $string, 0, $str_limit ) . '...';
900
+        }
901
+    } else {
902
+        if ( strlen( $string ) > $limit ) {
903
+            $string = substr( $string, 0, $str_limit ) . '...';
904
+        }
905
+    }
906 906
     return $string;
907 907
 
908 908
 }
Please login to merge, or discard this patch.