HEX
Server: Apache
System: Linux sxb1plmcpnl510113.prod.sxb1.secureserver.net 4.18.0-553.58.1.lve.el8.x86_64 #1 SMP Fri Jul 4 12:07:06 UTC 2025 x86_64
User: acnbijigo78q (10488831)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/acnbijigo78q/public_html/wp-content/plugins/acfml/classes/Helper/HashCalculator.php
<?php

namespace ACFML\Helper;

use WPML\FP\Obj;

class HashCalculator {

	/**
	 * @param mixed $value
	 *
	 * @return string
	 */
	public static function calculate( $value ) {
		$value = self::normalize( $value );

		if ( is_string( $value ) ) {
			return self::hash( $value );
		} elseif ( is_numeric( $value ) ) {
			return self::hash( (string) $value );
		} elseif ( is_array( $value ) && self::getID( $value ) ) {
			return self::hash( (string) self::getID( $value ) );
		} elseif ( ! $value ) { // Empty field(image, repeater, etc.).
			return '';
		}

		return self::hashArray( $value );
	}

	/**
	 * @param string $value
	 *
	 * @return string
	 */
	private static function hash( $value ) {
		return md5( $value );
	}

	/**
	 * @param array $value
	 *
	 * @return int|null
	 */
	private static function getID( array $value ) {
		return Obj::prop( 'ID', $value );
	}

	/**
	 * @param array $array
	 *
	 * @return string
	 */
	private static function hashArray( $array ) {
		return self::isArrayOfArrays( $array ) ? self::hashArrayOfArrays( $array ) : self::hashAssociativeArray( $array );
	}

	/**
	 * @param array $array
	 *
	 * @return bool
	 */
	private static function isArrayOfArrays( $array ) {
		$intIndexArrayValue = function( $val, $index ) {
			return is_int( $index ) && is_array( $val );
		};

		return count( $array ) === wpml_collect( $array )->filter( $intIndexArrayValue )->count();
	}

	/**
	 * @param array $array
	 *
	 * @return string
	 */
	private static function hashArrayOfArrays( $array ) {
		$hashes = wpml_collect( $array )->map( [ self::class, 'calculate' ] )->toArray();
		sort( $hashes ); // even if rows are reordered, we'll get the correct hash.
		return self::hash( implode( $hashes ) );
	}

	/**
	 * @param array $array
	 *
	 * @return string
	 */
	private static function hashAssociativeArray( $array ) {
		ksort( $array );
		$hashes = wpml_collect( $array )->map( [ self::class, 'calculate' ] )->toArray();
		return self::hash( implode( $hashes ) );
	}

	/**
	 * @param mixed $value
	 *
	 * @return array|int|mixed
	 */
	public static function normalize( $value ) {
		if ( is_bool( $value ) ) {
			$value = (int) $value;
		} elseif ( is_object( $value ) ) {
			$value = (array) $value;
		}

		return $value;
	}
}