X7ROOT File Manager
Current Path:
/home/oakwood/public_html/wp-content/plugins/optimole-wp/inc/traits
home
/
oakwood
/
public_html
/
wp-content
/
plugins
/
optimole-wp
/
inc
/
traits
/
ðŸ“
..
📄
dam_offload_utils.php
(7.88 KB)
📄
normalizer.php
(10.1 KB)
📄
validator.php
(1.1 KB)
Editing: normalizer.php
<?php use Optimole\Sdk\Resource\ImageProperty\ResizeTypeProperty; use Optimole\Sdk\ValueObject\Position; /** * Normalization traits. * * @package \Optml\Inc\Traits * @author Optimole <friends@optimole.com> */ trait Optml_Normalizer { /** * Static cache for dimension calculations * * @var array */ private static $dimension_cache = []; /** * Normalize value to boolean. * * @param mixed $value Value to process. * * @return bool */ public function to_boolean( $value ) { if ( in_array( $value, [ 'yes', 'enabled', 'true', '1' ], true ) ) { return true; } if ( in_array( $value, [ 'no', 'disabled', 'false', '0' ], true ) ) { return false; } return boolval( $value ); } /** * Get the unoptimized url from an Optimole url. * Works only on non-offloaded images. * * @param string $url The url to get the unoptimized url for. * * @return string The unoptimized url. */ public function get_unoptimized_url( $url ) { // If the url is not an optimole url, return the url if ( strpos( $url, Optml_Config::$service_url ) === false ) { return $url; } // If the url is an uploaded image, return the url if ( Optml_Media_Offload::is_uploaded_image( $url ) ) { return $url; } $url_parts = explode( 'http', $url ); if ( ! isset( $url_parts[2] ) ) { return $url; } return 'http' . $url_parts[2]; } /** * Return domain hash. * * @param string $domain Full url. * * @return string Domain hash. */ public function to_domain_hash( $domain ) { $domain_parts = parse_url( $domain ); $domain = isset( $domain_parts['host'] ) ? $domain_parts['host'] : ''; $prefix = substr( $domain, 0, 4 ); if ( $prefix === 'www.' ) { $domain = substr( $domain, 4 ); } return base64_encode( $domain ); } /** * Strip slashes on unicode encoded strings. * * @param string $content Input string. * * @return string Decoded string. */ public function strip_slashes( $content ) { return html_entity_decode( stripslashes( preg_replace( '/\\\u([\da-fA-F]{4})/', '&#x\1;', $content ) ) ); } /** * Normalize value to positive integer. * * @param mixed $value Value to process. * * @return integer */ public function to_positive_integer( $value ) { $integer = (int) $value; return ( $integer > 0 ) ? $integer : 0; } /** * Normalize value to map. * * @param mixed $value Value to process. * @param array $map Associative list from witch to return. * @param mixed $initial Default. * * @return mixed */ public function to_map_values( $value, $map, $initial ) { if ( in_array( $value, $map, true ) ) { return $value; } return $initial; } /** * Normalize value to an accepted quality. * * @param mixed $value Value to process. * * @return mixed */ public function to_accepted_quality( $value ) { if ( is_numeric( $value ) ) { return intval( $value ); } $value = trim( $value ); $accepted_qualities = [ 'eco' => 'eco', 'auto' => 'auto', 'mauto' => 'mauto', 'high_c' => 55, 'medium_c' => 75, 'low_c' => 90, ]; if ( array_key_exists( $value, $accepted_qualities ) ) { return $accepted_qualities[ $value ]; } // Legacy values. return 60; } /** * Normalize value to an accepted minify. * * @param mixed $value Value to process. * * @return mixed */ public function to_accepted_minify( $value ) { if ( is_numeric( $value ) ) { return $this->to_bound_integer( $value, 0, 1 ); } return 'auto'; } /** * Normalize value to an integer within bounds. * * @param mixed $value Value to process. * @param integer $min Lower bound. * @param integer $max Upper bound. * * @return integer */ public function to_bound_integer( $value, $min, $max ) { $integer = absint( $value ); if ( $integer < $min ) { $integer = $min; } if ( $integer > $max ) { $integer = $max; } return $integer; } /** * Convert image size to dimensions. * * This function takes an image size and its metadata, and returns the dimensions * of the image based on the specified size. It handles different cases such as * custom sizes, predefined sizes, and full size. * * @param mixed $size The size of the image. Can be an array of width and height, a predefined size, or 'full'. * @param array $image_meta Metadata of the image, including width and height. * @param int $attachment_id The ID of the attachment. * * @return array The dimensions of the image, including width, height, and optional resize parameters. */ public function size_to_dimension( $size, $image_meta, $attachment_id = null ) { // default size $sizes = [ 'width' => isset( $image_meta['width'] ) ? intval( $image_meta['width'] ) : false, 'height' => isset( $image_meta['height'] ) ? intval( $image_meta['height'] ) : false, ]; $image_args = Optml_App_Replacer::image_sizes(); $sizes2crop = Optml_App_Replacer::size_to_crop(); switch ( $size ) { case is_array( $size ): $width = isset( $size[0] ) ? (int) $size[0] : false; $height = isset( $size[1] ) ? (int) $size[1] : false; if ( ! $width || ! $height ) { break; } $cache_key = 'a' . $width . '_' . $height . '_' . $sizes['width'] . '_' . $sizes['height']; if ( isset( self::$dimension_cache[ $cache_key ] ) ) { return self::$dimension_cache[ $cache_key ]; } if ( $attachment_id ) { $intermediate = image_get_intermediate_size( $attachment_id, $size ); if ( $intermediate ) { $sizes['width'] = $intermediate['width']; $sizes['height'] = $intermediate['height']; } } list( $sizes['width'], $sizes['height'] ) = image_constrain_size_for_editor( $sizes['width'], $sizes['height'], $size ); $resize = apply_filters( 'optml_default_crop', [] ); if ( isset( $sizes2crop[ $sizes['width'] . $sizes['height'] ] ) ) { $resize = $this->to_optml_crop( $sizes2crop[ $sizes['width'] . $sizes['height'] ] ); } $sizes['resize'] = $resize; self::$dimension_cache[ $cache_key ] = $sizes; break; case 'full' !== $size && isset( $image_args[ $size ] ): $cache_key = 'b' . $size . '_' . $sizes['width'] . '_' . $sizes['height']; if ( isset( self::$dimension_cache[ $cache_key ] ) ) { return self::$dimension_cache[ $cache_key ]; } $image_resized = image_resize_dimensions( $sizes['width'], $sizes['height'], $image_args[ $size ]['width'], $image_args[ $size ]['height'], $image_args[ $size ]['crop'] ); if ( $image_resized ) { // This could be false when the requested image size is larger than the full-size image. $sizes['width'] = $image_resized[6]; $sizes['height'] = $image_resized[7]; } // There are cases when the image meta is missing and image size is non existent, see SVG image handling. if ( ! $sizes['width'] || ! $sizes['height'] ) { break; } list( $sizes['width'], $sizes['height'] ) = image_constrain_size_for_editor( $sizes['width'], $sizes['height'], $size, 'display' ); $sizes['resize'] = $this->to_optml_crop( $image_args[ $size ]['crop'] ); self::$dimension_cache[ $cache_key ] = $sizes; break; } return $sizes; } /** * Normalize arguments for crop. * * @param array|bool $crop_args Crop arguments. * * @return array */ public function to_optml_crop( $crop_args = [] ) { $enlarge = false; if ( isset( $crop_args['enlarge'] ) ) { $enlarge = $crop_args['enlarge']; $crop_args = $crop_args['crop']; } if ( $crop_args === true ) { return [ 'type' => ResizeTypeProperty::FILL, 'enlarge' => $enlarge, 'gravity' => Position::CENTER, ]; } if ( $crop_args === false || ! is_array( $crop_args ) || count( $crop_args ) !== 2 ) { return []; } $allowed_x = [ 'left' => true, 'center' => true, 'right' => true, ]; $allowed_y = [ 'top' => true, 'center' => true, 'bottom' => true, ]; $allowed_gravities = [ 'left' => Position::WEST, 'right' => Position::EAST, 'top' => Position::NORTH, 'bottom' => Position::SOUTH, 'lefttop' => Position::NORTH_WEST, 'leftbottom' => Position::SOUTH_WEST, 'righttop' => Position::NORTH_EAST, 'rightbottom' => Position::SOUTH_EAST, 'centertop' => [ 0.5, 0 ], 'centerbottom' => [ 0.5, 1 ], 'leftcenter' => [ 0, 0.5 ], 'rightcenter' => [ 1, 0.5 ], ]; $gravity = Position::CENTER; $key_search = ( $crop_args[0] === true ? '' : ( isset( $allowed_x[ $crop_args[0] ] ) ? $crop_args[0] : '' ) ) . ( $crop_args[1] === true ? '' : ( isset( $allowed_y[ $crop_args[1] ] ) ? $crop_args[1] : '' ) ); if ( array_key_exists( $key_search, $allowed_gravities ) ) { $gravity = $allowed_gravities[ $key_search ]; } return [ 'type' => ResizeTypeProperty::FILL, 'enlarge' => $enlarge, 'gravity' => $gravity, ]; } /** * Normalize arguments for watermark. * * @param array $watermark_args Watermark arguments. * * @return array */ public function to_optml_watermark( $watermark_args = [] ) { $allowed_gravities = [ 'left' => Position::WEST, 'right' => Position::EAST, 'top' => Position::NORTH, 'bottom' => Position::SOUTH, 'left_top' => Position::NORTH_WEST, 'left_bottom' => Position::SOUTH_WEST, 'right_top' => Position::NORTH_EAST, 'right_bottom' => Position::SOUTH_EAST, ]; $gravity = Position::CENTER; if ( isset( $watermark_args['position'] ) && array_key_exists( $watermark_args['position'], $allowed_gravities ) ) { $gravity = $allowed_gravities[ $watermark_args['position'] ]; } return [ 'opacity' => 1, 'position' => $gravity, ]; } /** * If missing, add schema to urls. * * @param string $url Url to check. * * @return string */ public function add_schema( $url ) { $schema_url = $url; $should_add_schema = false; if ( function_exists( 'str_starts_with' ) ) { $should_add_schema = str_starts_with( $schema_url, '//' ); } else { $should_add_schema = substr( $schema_url, 0, strlen( '//' ) ) === '//'; } if ( $should_add_schema ) { $schema_url = is_ssl() ? 'https:' : 'http:' . $schema_url; } return $schema_url; } }
Upload File
Create Folder