HEX
Server: Apache
System: Linux eisbus 6.8.12-9-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-9 (2025-03-16T19:18Z) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/wordpress/wp-content/plugins/wp-smushit/core/class-shim.php
<?php

namespace Smush\Core;

class Shim implements \Countable {
	private static function is_string_item( $name ) {
		return self::starts_with_get( $name ) && self::ends_with_string_type( $name );
	}

	private static function is_array_type( $name ) {
		return $name === 'to_array';
	}

	private static function starts_with_get( $name ) {
		return str_starts_with( $name, 'get' );
	}

	private static function ends_with_string_type( $name ) {
		return (bool) preg_match( '/(?:_name|_key|_option_id)$/', $name );
	}

	public function __call( $name, $arguments ) {
		if ( self::log_all() ) {
			error_log( sprintf( 'Smush Shim: Missing method %s called with args: %s', $name, json_encode( $arguments ) ) );
		}

		if ( self::is_boolean_item( $name ) ) {
			return false;
		}

		if ( self::is_string_item( $name ) ) {
			return '';
		}

		if ( self::is_array_type( $name ) ) {
			return [];
		}

		if ( self::log_risky() ) {
			error_log( sprintf( 'Smush Shim: Returning Shim object for method %s. This could be risky.', $name ) );
		}

		return new self();
	}

	public function __get( $name ) {
		if ( self::is_boolean_item( $name ) ) {
			return false;
		}

		return new self();
	}

	public static function __callStatic( $name, $arguments ) {
		if ( self::log_all() ) {
			error_log( sprintf( 'Smush Shim: Missing static method %s called with args: %s', $name, json_encode( $arguments ) ) );
		}

		if ( self::is_boolean_item( $name ) ) {
			return false;
		}

		if ( self::is_string_item( $name ) ) {
			return '';
		}

		if ( self::log_risky() ) {
			error_log( sprintf( 'Smush Shim: Returning Shim object for static method %s. This could be risky.', $name ) );
		}

		return new self();
	}

	#[\ReturnTypeWillChange]
	public function count() {
		return 0;
	}

	public function __toString() {
		return '';
	}

	/**
	 * @param string $name
	 *
	 * @return bool
	 */
	private static function is_boolean_item( $name ) {
		return str_starts_with( $name, 'is_' );
	}

	private static function log_all() {
		return self::get_log_type() === 'all';
	}

	private static function log_risky() {
		return self::get_log_type() === 'risky';
	}

	private static function get_log_type() {
		return defined( 'WP_SMUSH_LOG_SHIM_CALLS' )
			? constant( 'WP_SMUSH_LOG_SHIM_CALLS' )
			: '';
	}
}