Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/lib/internal/Customweb/DependencyInjection/Bean/Provider/Annotation/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/lib/internal/Customweb/DependencyInjection/Bean/Provider/Annotation/Util.php
<?php 
/**
  * You are allowed to use this API in your web application.
 *
 * Copyright (C) 2018 by customweb GmbH
 *
 * This program is licenced under the customweb software licence. With the
 * purchase or the installation of the software in your application you
 * accept the licence agreement. The allowed usage is outlined in the
 * customweb software licence which can be found under
 * http://www.sellxed.com/en/software-license-agreement
 *
 * Any modification or distribution is strictly forbidden. The license
 * grants you the installation in one application. For multiuse you will need
 * to purchase further licences at http://www.sellxed.com/shop.
 *
 * See the customweb software licence agreement for more details.
 *
 */




final class Customweb_DependencyInjection_Bean_Provider_Annotation_Util {
	
	private function __construct() {
		
	}
	
	/**
	 * Creates a bean object. This object can be used to create an instance of the 
	 * class defined with this bean. 
	 * 
	 * @param string $beanId
	 * @param string $className
	 * @throws Exception
	 * @return Customweb_DependencyInjection_Bean_Generic
	 */
	public static function createBeanInstance($beanId, $className) {
		
		if (empty($beanId)) {
			$beanId = $className;
		}
		
		Customweb_Core_Util_Class::loadLibraryClassByName('Customweb_DependencyInjection_Bean_Provider_Annotation_Inject');
	
		$dependencies = array();
	
		Customweb_Core_Util_Class::loadLibraryClassByName($className);
		$reflector = new Customweb_Annotation_ReflectionAnnotatedClass($className);
	
		foreach ($reflector->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
			$annotations = $method->getAllAnnotations();
			if ($method->isConstructor() || $method->hasAnnotation('Customweb_DependencyInjection_Bean_Provider_Annotation_Inject')) {
	
				if ($method->isConstructor() && !$method->hasAnnotation('Customweb_DependencyInjection_Bean_Provider_Annotation_Inject')) {
					$injects = self::getInjectsFromMethod($method);
				}
				else {
					$annotation = $method->getAnnotation('Customweb_DependencyInjection_Bean_Provider_Annotation_Inject');
					/* @var $annotation Customweb_DependencyInjection_Bean_Provider_Annotation_Inject */
					$injects = $annotation->getInjects();
					if (!is_array($injects) || count($injects) <= 0) {
						$injects = self::getInjectsFromMethod($method);
					}
					elseif (count($injects) !== $method->getNumberOfParameters()) {
						throw new Exception("Invalid annotation 'Inject' on method '" . $method->getName() . "' on class '" . $className . "'. The number of inject arguments do not match the number of arguments.");
					}
				}
					
				$dependencies[] = new Customweb_DependencyInjection_Bean_Generic_DefaultDependency($method->getName(), $injects);
			}
				
		}
	
		return new Customweb_DependencyInjection_Bean_Generic($beanId, $className, $dependencies);
	}
	
	private static function getInjectsFromMethod(ReflectionMethod $method) {
		$injects = array();
		foreach ($method->getParameters() as $parameter) {
			/* @var $parameter ReflectionParameter */
			$parameterType = self::getClassName($parameter);
			if ($parameterType === null) {
				throw new Exception("You need to define the type of parameter '" . $parameter->getName() . "' on method '" . $method->getName() . "'.");
			}
			$injects[] = $parameterType;
		}
	
		return $injects;
	}
	
	private static function getClassName(ReflectionParameter $param) {
		preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches);
		return isset($matches[1]) ? $matches[1] : null;
	}
	
}

Spamworldpro Mini