Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/Admin/API/Reports
File: TimeInterval.php
* @param int $expected_interval_count Expected number of intervals in total.
[500] Fix | Delete
* @param int $db_records Total number of records for given period in the database.
[501] Fix | Delete
* @param int $items_per_page Number of items per page.
[502] Fix | Delete
* @param int $page_no Page number.
[503] Fix | Delete
* @param string $order asc or desc.
[504] Fix | Delete
* @param string $order_by Column by which the result will be sorted.
[505] Fix | Delete
* @param int $intervals_count Number of records for given (possibly shortened) time interval.
[506] Fix | Delete
*
[507] Fix | Delete
* @return bool
[508] Fix | Delete
*/
[509] Fix | Delete
public static function intervals_missing( $expected_interval_count, $db_records, $items_per_page, $page_no, $order, $order_by, $intervals_count ) {
[510] Fix | Delete
if ( $expected_interval_count <= $db_records ) {
[511] Fix | Delete
return false;
[512] Fix | Delete
}
[513] Fix | Delete
if ( 'date' === $order_by ) {
[514] Fix | Delete
$expected_intervals_on_page = self::expected_intervals_on_page( $expected_interval_count, $items_per_page, $page_no );
[515] Fix | Delete
return $intervals_count < $expected_intervals_on_page;
[516] Fix | Delete
}
[517] Fix | Delete
if ( 'desc' === $order ) {
[518] Fix | Delete
return $page_no > floor( $db_records / $items_per_page );
[519] Fix | Delete
}
[520] Fix | Delete
if ( 'asc' === $order ) {
[521] Fix | Delete
return $page_no <= ceil( ( $expected_interval_count - $db_records ) / $items_per_page );
[522] Fix | Delete
}
[523] Fix | Delete
// Invalid ordering.
[524] Fix | Delete
return false;
[525] Fix | Delete
}
[526] Fix | Delete
[527] Fix | Delete
/**
[528] Fix | Delete
* Normalize "*_between" parameters to "*_min" and "*_max" for numeric values
[529] Fix | Delete
* and "*_after" and "*_before" for date values.
[530] Fix | Delete
*
[531] Fix | Delete
* @param array $request Query params from REST API request.
[532] Fix | Delete
* @param string|array $param_names One or more param names to handle. Should not include "_between" suffix.
[533] Fix | Delete
* @param bool $is_date Boolean if the param is date is related.
[534] Fix | Delete
* @return array Normalized query values.
[535] Fix | Delete
*/
[536] Fix | Delete
public static function normalize_between_params( $request, $param_names, $is_date ) {
[537] Fix | Delete
if ( ! is_array( $param_names ) ) {
[538] Fix | Delete
$param_names = array( $param_names );
[539] Fix | Delete
}
[540] Fix | Delete
[541] Fix | Delete
$normalized = array();
[542] Fix | Delete
[543] Fix | Delete
foreach ( $param_names as $param_name ) {
[544] Fix | Delete
if ( ! is_array( $request[ $param_name . '_between' ] ) ) {
[545] Fix | Delete
continue;
[546] Fix | Delete
}
[547] Fix | Delete
[548] Fix | Delete
$range = $request[ $param_name . '_between' ];
[549] Fix | Delete
[550] Fix | Delete
if ( 2 !== count( $range ) ) {
[551] Fix | Delete
continue;
[552] Fix | Delete
}
[553] Fix | Delete
[554] Fix | Delete
$min = $is_date ? '_after' : '_min';
[555] Fix | Delete
$max = $is_date ? '_before' : '_max';
[556] Fix | Delete
[557] Fix | Delete
if ( $range[0] < $range[1] ) {
[558] Fix | Delete
$normalized[ $param_name . $min ] = $range[0];
[559] Fix | Delete
$normalized[ $param_name . $max ] = $range[1];
[560] Fix | Delete
} else {
[561] Fix | Delete
$normalized[ $param_name . $min ] = $range[1];
[562] Fix | Delete
$normalized[ $param_name . $max ] = $range[0];
[563] Fix | Delete
}
[564] Fix | Delete
}
[565] Fix | Delete
[566] Fix | Delete
return $normalized;
[567] Fix | Delete
}
[568] Fix | Delete
[569] Fix | Delete
/**
[570] Fix | Delete
* Validate a "*_between" range argument (an array with 2 numeric items).
[571] Fix | Delete
*
[572] Fix | Delete
* @param mixed $value Parameter value.
[573] Fix | Delete
* @param WP_REST_Request $request REST Request.
[574] Fix | Delete
* @param string $param Parameter name.
[575] Fix | Delete
* @return WP_Error|boolean
[576] Fix | Delete
*/
[577] Fix | Delete
public static function rest_validate_between_numeric_arg( $value, $request, $param ) {
[578] Fix | Delete
if ( ! wp_is_numeric_array( $value ) ) {
[579] Fix | Delete
return new \WP_Error(
[580] Fix | Delete
'rest_invalid_param',
[581] Fix | Delete
/* translators: 1: parameter name */
[582] Fix | Delete
sprintf( __( '%1$s is not a numerically indexed array.', 'woocommerce' ), $param )
[583] Fix | Delete
);
[584] Fix | Delete
}
[585] Fix | Delete
[586] Fix | Delete
if (
[587] Fix | Delete
! is_array( $value ) ||
[588] Fix | Delete
2 !== count( $value ) ||
[589] Fix | Delete
! is_numeric( $value[0] ) ||
[590] Fix | Delete
! is_numeric( $value[1] )
[591] Fix | Delete
) {
[592] Fix | Delete
return new \WP_Error(
[593] Fix | Delete
'rest_invalid_param',
[594] Fix | Delete
/* translators: %s: parameter name */
[595] Fix | Delete
sprintf( __( '%s must contain 2 numbers.', 'woocommerce' ), $param )
[596] Fix | Delete
);
[597] Fix | Delete
}
[598] Fix | Delete
[599] Fix | Delete
return true;
[600] Fix | Delete
}
[601] Fix | Delete
[602] Fix | Delete
/**
[603] Fix | Delete
* Validate a "*_between" range argument (an array with 2 date items).
[604] Fix | Delete
*
[605] Fix | Delete
* @param mixed $value Parameter value.
[606] Fix | Delete
* @param WP_REST_Request $request REST Request.
[607] Fix | Delete
* @param string $param Parameter name.
[608] Fix | Delete
* @return WP_Error|boolean
[609] Fix | Delete
*/
[610] Fix | Delete
public static function rest_validate_between_date_arg( $value, $request, $param ) {
[611] Fix | Delete
if ( ! wp_is_numeric_array( $value ) ) {
[612] Fix | Delete
return new \WP_Error(
[613] Fix | Delete
'rest_invalid_param',
[614] Fix | Delete
/* translators: 1: parameter name */
[615] Fix | Delete
sprintf( __( '%1$s is not a numerically indexed array.', 'woocommerce' ), $param )
[616] Fix | Delete
);
[617] Fix | Delete
}
[618] Fix | Delete
[619] Fix | Delete
if (
[620] Fix | Delete
! is_array( $value ) ||
[621] Fix | Delete
2 !== count( $value ) ||
[622] Fix | Delete
! rest_parse_date( $value[0] ) ||
[623] Fix | Delete
! rest_parse_date( $value[1] )
[624] Fix | Delete
) {
[625] Fix | Delete
return new \WP_Error(
[626] Fix | Delete
'rest_invalid_param',
[627] Fix | Delete
/* translators: %s: parameter name */
[628] Fix | Delete
sprintf( __( '%s must contain 2 valid dates.', 'woocommerce' ), $param )
[629] Fix | Delete
);
[630] Fix | Delete
}
[631] Fix | Delete
[632] Fix | Delete
return true;
[633] Fix | Delete
}
[634] Fix | Delete
[635] Fix | Delete
/**
[636] Fix | Delete
* Get dates from a timeframe string.
[637] Fix | Delete
*
[638] Fix | Delete
* @param int $timeframe Timeframe to use. One of: last_week|last_month|last_quarter|last_6_months|last_year.
[639] Fix | Delete
* @param DateTime|null $current_date DateTime of current date to compare.
[640] Fix | Delete
* @return array
[641] Fix | Delete
*/
[642] Fix | Delete
public static function get_timeframe_dates( $timeframe, $current_date = null ) {
[643] Fix | Delete
if ( ! $current_date ) {
[644] Fix | Delete
$current_date = new \DateTime();
[645] Fix | Delete
}
[646] Fix | Delete
$current_year = $current_date->format( 'Y' );
[647] Fix | Delete
$current_month = $current_date->format( 'm' );
[648] Fix | Delete
[649] Fix | Delete
if ( 'last_week' === $timeframe ) {
[650] Fix | Delete
return array(
[651] Fix | Delete
'start' => $current_date->modify( 'last week monday' )->format( 'Y-m-d 00:00:00' ),
[652] Fix | Delete
'end' => $current_date->modify( 'this sunday' )->format( 'Y-m-d 23:59:59' ),
[653] Fix | Delete
);
[654] Fix | Delete
}
[655] Fix | Delete
[656] Fix | Delete
if ( 'last_month' === $timeframe ) {
[657] Fix | Delete
return array(
[658] Fix | Delete
'start' => $current_date->modify( 'first day of previous month' )->format( 'Y-m-d 00:00:00' ),
[659] Fix | Delete
'end' => $current_date->modify( 'last day of this month' )->format( 'Y-m-d 23:59:59' ),
[660] Fix | Delete
);
[661] Fix | Delete
}
[662] Fix | Delete
[663] Fix | Delete
if ( 'last_quarter' === $timeframe ) {
[664] Fix | Delete
switch ( $current_month ) {
[665] Fix | Delete
case $current_month >= 1 && $current_month <= 3:
[666] Fix | Delete
return array(
[667] Fix | Delete
'start' => ( $current_year - 1 ) . '-10-01 00:00:00',
[668] Fix | Delete
'end' => ( $current_year - 1 ) . '-12-31 23:59:59',
[669] Fix | Delete
);
[670] Fix | Delete
case $current_month >= 4 && $current_month <= 6:
[671] Fix | Delete
return array(
[672] Fix | Delete
'start' => $current_year . '-01-01 00:00:00',
[673] Fix | Delete
'end' => $current_year . '-03-31 23:59:59',
[674] Fix | Delete
);
[675] Fix | Delete
case $current_month >= 7 && $current_month <= 9:
[676] Fix | Delete
return array(
[677] Fix | Delete
'start' => $current_year . '-04-01 00:00:00',
[678] Fix | Delete
'end' => $current_year . '-06-30 23:59:59',
[679] Fix | Delete
);
[680] Fix | Delete
case $current_month >= 10 && $current_month <= 12:
[681] Fix | Delete
return array(
[682] Fix | Delete
'start' => $current_year . '-07-01 00:00:00',
[683] Fix | Delete
'end' => $current_year . '-09-31 23:59:59',
[684] Fix | Delete
);
[685] Fix | Delete
}
[686] Fix | Delete
}
[687] Fix | Delete
[688] Fix | Delete
if ( 'last_6_months' === $timeframe ) {
[689] Fix | Delete
if ( $current_month >= 1 && $current_month <= 6 ) {
[690] Fix | Delete
return array(
[691] Fix | Delete
'start' => ( $current_year - 1 ) . '-07-01 00:00:00',
[692] Fix | Delete
'end' => ( $current_year - 1 ) . '-12-31 23:59:59',
[693] Fix | Delete
);
[694] Fix | Delete
}
[695] Fix | Delete
return array(
[696] Fix | Delete
'start' => $current_year . '-01-01 00:00:00',
[697] Fix | Delete
'end' => $current_year . '-06-30 23:59:59',
[698] Fix | Delete
);
[699] Fix | Delete
}
[700] Fix | Delete
[701] Fix | Delete
if ( 'last_year' === $timeframe ) {
[702] Fix | Delete
return array(
[703] Fix | Delete
'start' => ( $current_year - 1 ) . '-01-01 00:00:00',
[704] Fix | Delete
'end' => ( $current_year - 1 ) . '-12-31 23:59:59',
[705] Fix | Delete
);
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
return false;
[709] Fix | Delete
}
[710] Fix | Delete
}
[711] Fix | Delete
[712] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function