HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/intranet.kauko.lt/wp-content/plugins/wise-chat/src/WiseChatContainer.php
<?php

/**
 * WiseChat DI container.
 *
 * @author Kainex <contact@kainex.pl>
 */
class WiseChatContainer {
	/**
	* @var array Array of created instances
	*/
	private static $instances = array();

	/**
	 * @var array Array of proxy classes
	 */
	private static $proxies = array();

	/**
	* @var array Array of dependencies for classes
	*/
	private static $dependencies = array();

	/**
	* Returns singleton instance of the specified class.
	*
	* @param string $classPathAndName Plugin-relative path and name to the class
	*
	* @return object
	*/
	public static function get($classPathAndName) {
		if (array_key_exists($classPathAndName, self::$instances)) {
			return self::$instances[$classPathAndName];
		}

		self::load($classPathAndName);

		$className = basename($classPathAndName);
		$instance = self::getObjectOfClass($className);

		if ($instance !== null) {
			self::$instances[$classPathAndName] = $instance;
		}

		return $instance;
	}

	/**
	 * Returns a proxy-class object of the specified class. The real instance is created on first use.
	 *
	 * @param string $classPathAndName Plugin-relative path and name to the class
	 *
	 * @return object
	 */
	public static function getLazy($classPathAndName) {
		if (array_key_exists($classPathAndName, self::$instances)) {
			return self::$instances[$classPathAndName];
		}

		if (array_key_exists($classPathAndName, self::$proxies)) {
			return self::$proxies[$classPathAndName];
		}

		self::$proxies[$classPathAndName] = new WiseChatContainerProxyClass($classPathAndName);

		return self::$proxies[$classPathAndName];
	}

    /**
     * Links the given class name with the given object and stores it in container.
     * All the following self::get() and self::getLazy() invocations will return the object.
     *
     * @param string $classPathAndName
     * @param object $instance
     */
    public static function replace($classPathAndName, $instance) {
        if ($instance !== null) {
            self::$instances[$classPathAndName] = $instance;
        }
    }

	/**
	* Loads file containing the class.
	*
	* @param string $classPathAndName Plugin-relative path and name to the class
	*
	* @return null
	* @throws Exception If the file or class was not found
	*/
	public static function load($classPathAndName) {
		$className = basename($classPathAndName);
		if (!class_exists($className, false)) {
			$currentDirectory = dirname(__FILE__);
			$classPath = $currentDirectory.'/'.$classPathAndName.'.php';

			if (!file_exists($classPath)) {
				throw new Exception('File '.$classPath.' was not found');
			}

			require_once($classPath);

			if (!class_exists($className, false)) {
				throw new Exception('Class '.$className.' was not found');
			}
		}
	}

	private static function getObjectOfClass($className) {
		if (!array_key_exists($className, self::$dependencies)) {
			return new $className();
		}

		return null;
	}
}

/**
 * Wise Chat DI proxy class.
 */
class WiseChatContainerProxyClass {
	/**
	 * @var string
	 */
	private $targetClassPathAndName;

	/**
	 * @var object
	 */
	private $targetClassObject;

	/**
	 * WiseChatContainerProxyClass constructor.
	 *
	 * @param string $classPathAndName
	 */
	public function __construct($classPathAndName) {
		$this->targetClassPathAndName = $classPathAndName;
	}

	/**
	 * Proxy method.
	 *
	 * @param string $name
	 * @param mixed $arguments
	 * @return mixed
	 */
	public function __call($name, $arguments) {
		if ($this->targetClassObject === null) {
			$this->targetClassObject = WiseChatContainer::get($this->targetClassPathAndName);
		}

		return call_user_func_array(array($this->targetClassObject, $name), $arguments);
	}
}