103 lines
2.4 KiB
PHP
103 lines
2.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Compat Functions
|
||
|
*
|
||
|
* @package EDD
|
||
|
* @subpackage Functions
|
||
|
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||
|
* @since 1.0
|
||
|
*/
|
||
|
|
||
|
// Exit if accessed directly
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
if ( ! function_exists( 'cal_days_in_month' ) ) :
|
||
|
/**
|
||
|
* Fallback in case the calendar extension is not loaded in PHP
|
||
|
*
|
||
|
* Only supports Gregorian calendar
|
||
|
*/
|
||
|
function cal_days_in_month( $calendar, $month, $year ) {
|
||
|
return date( 't', mktime( 0, 0, 0, $month, 1, $year ) );
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'hash_equals' ) ) :
|
||
|
/**
|
||
|
* Compare two strings in constant time.
|
||
|
*
|
||
|
* This function was added in PHP 5.6.
|
||
|
* It can leak the length of a string.
|
||
|
*
|
||
|
* @since 2.2.1
|
||
|
*
|
||
|
* @param string $a Expected string.
|
||
|
* @param string $b Actual string.
|
||
|
* @return bool Whether strings are equal.
|
||
|
*/
|
||
|
function hash_equals( $a, $b ) {
|
||
|
$a_length = strlen( $a );
|
||
|
if ( $a_length !== strlen( $b ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
$result = 0;
|
||
|
|
||
|
// Do not attempt to "optimize" this.
|
||
|
for ( $i = 0; $i < $a_length; $i++ ) {
|
||
|
$result |= ord( $a[ $i ] ) ^ ord( $b[ $i ] );
|
||
|
}
|
||
|
|
||
|
return $result === 0;
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'getallheaders' ) ) :
|
||
|
/**
|
||
|
* Retrieve all headers
|
||
|
*
|
||
|
* Ensure getallheaders function exists in the case we're using nginx
|
||
|
*
|
||
|
* @since 2.4
|
||
|
* @return array
|
||
|
*/
|
||
|
function getallheaders() {
|
||
|
$headers = array();
|
||
|
foreach ( $_SERVER as $name => $value ) {
|
||
|
if ( substr( $name, 0, 5 ) == 'HTTP_' ) {
|
||
|
$headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
|
||
|
}
|
||
|
}
|
||
|
return $headers;
|
||
|
}
|
||
|
endif;
|
||
|
|
||
|
if ( ! function_exists( 'wp_timezone_string' ) ) :
|
||
|
/**
|
||
|
* Polyfill for wp_timezone_string() function added in WP 5.3.0
|
||
|
*
|
||
|
* Retrieves the timezone of the site as a string.
|
||
|
*
|
||
|
* @since 3.1.0.3
|
||
|
* @return string PHP timezone name or a ±HH:MM offset.
|
||
|
*/
|
||
|
function wp_timezone_string() {
|
||
|
$timezone_string = get_option( 'timezone_string' );
|
||
|
|
||
|
if ( $timezone_string ) {
|
||
|
return $timezone_string;
|
||
|
}
|
||
|
|
||
|
$offset = (float) get_option( 'gmt_offset' );
|
||
|
$hours = (int) $offset;
|
||
|
$minutes = ( $offset - $hours );
|
||
|
|
||
|
$sign = ( $offset < 0 ) ? '-' : '+';
|
||
|
$abs_hour = abs( $hours );
|
||
|
$abs_mins = abs( $minutes * 60 );
|
||
|
$tz_offset = sprintf( '%s%02d:%02d', $sign, $abs_hour, $abs_mins );
|
||
|
|
||
|
return $tz_offset;
|
||
|
}
|
||
|
endif;
|