diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/compat.php --- a/wp/wp-includes/compat.php Wed Sep 21 18:19:35 2022 +0200 +++ b/wp/wp-includes/compat.php Tue Sep 27 16:37:53 2022 +0200 @@ -79,6 +79,10 @@ * @return string Extracted substring. */ function _mb_substr( $str, $start, $length = null, $encoding = null ) { + if ( null === $str ) { + return ''; + } + if ( null === $encoding ) { $encoding = get_option( 'blog_charset' ); } @@ -371,6 +375,109 @@ } } +if ( ! function_exists( 'array_key_first' ) ) { + /** + * Polyfill for array_key_first() function added in PHP 7.3. + * + * Get the first key of the given array without affecting + * the internal array pointer. + * + * @since 5.9.0 + * + * @param array $arr An array. + * @return string|int|null The first key of array if the array + * is not empty; `null` otherwise. + */ + function array_key_first( array $arr ) { + foreach ( $arr as $key => $value ) { + return $key; + } + } +} + +if ( ! function_exists( 'array_key_last' ) ) { + /** + * Polyfill for `array_key_last()` function added in PHP 7.3. + * + * Get the last key of the given array without affecting the + * internal array pointer. + * + * @since 5.9.0 + * + * @param array $arr An array. + * @return string|int|null The last key of array if the array + *. is not empty; `null` otherwise. + */ + function array_key_last( array $arr ) { + if ( empty( $arr ) ) { + return null; + } + end( $arr ); + return key( $arr ); + } +} + +if ( ! function_exists( 'str_contains' ) ) { + /** + * Polyfill for `str_contains()` function added in PHP 8.0. + * + * Performs a case-sensitive check indicating if needle is + * contained in haystack. + * + * @since 5.9.0 + * + * @param string $haystack The string to search in. + * @param string $needle The substring to search for in the haystack. + * @return bool True if `$needle` is in `$haystack`, otherwise false. + */ + function str_contains( $haystack, $needle ) { + return ( '' === $needle || false !== strpos( $haystack, $needle ) ); + } +} + +if ( ! function_exists( 'str_starts_with' ) ) { + /** + * Polyfill for `str_starts_with()` function added in PHP 8.0. + * + * Performs a case-sensitive check indicating if + * the haystack begins with needle. + * + * @since 5.9.0 + * + * @param string $haystack The string to search in. + * @param string $needle The substring to search for in the `$haystack`. + * @return bool True if `$haystack` starts with `$needle`, otherwise false. + */ + function str_starts_with( $haystack, $needle ) { + if ( '' === $needle ) { + return true; + } + return 0 === strpos( $haystack, $needle ); + } +} + +if ( ! function_exists( 'str_ends_with' ) ) { + /** + * Polyfill for `str_ends_with()` function added in PHP 8.0. + * + * Performs a case-sensitive check indicating if + * the haystack ends with needle. + * + * @since 5.9.0 + * + * @param string $haystack The string to search in. + * @param string $needle The substring to search for in the `$haystack`. + * @return bool True if `$haystack` ends with `$needle`, otherwise false. + */ + function str_ends_with( $haystack, $needle ) { + if ( '' === $haystack && '' !== $needle ) { + return false; + } + $len = strlen( $needle ); + return 0 === substr_compare( $haystack, $needle, -$len, $len ); + } +} + // IMAGETYPE_WEBP constant is only defined in PHP 7.1 or later. if ( ! defined( 'IMAGETYPE_WEBP' ) ) { define( 'IMAGETYPE_WEBP', 18 ); @@ -378,5 +485,5 @@ // IMG_WEBP constant is only defined in PHP 7.0.10 or later. if ( ! defined( 'IMG_WEBP' ) ) { - define( 'IMG_WEBP', IMAGETYPE_WEBP ); // phpcs:ignore PHPCompatibility.Constants.NewConstants.imagetype_webpFound + define( 'IMG_WEBP', IMAGETYPE_WEBP ); }