Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/main/lib/access/filter/factory/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/main/lib/access/filter/factory/filtercontrollerfactory.php

<?php

namespace Bitrix\Main\Access\Filter\Factory;

use Bitrix\Main\Access\AccessibleController;
use Bitrix\Main\Access\Filter\AccessFilter;
use Bitrix\Main\Access\Filter\FilterFactory;
use ReflectionClass;

class FilterControllerFactory implements FilterFactory
{
	protected const SUFFIX = 'Filter';

	public function createFromAction(string $action, AccessibleController $controller): ?AccessFilter
	{
		$className = $this->getClassName($action, $controller);
		if (!$className  || !class_exists($className ))
		{
			return null;
		}

		$ref = new ReflectionClass($className);
		if ($ref->implementsInterface(AccessFilter::class))
		{
			return $ref->newInstance($controller);
		}

		return null;
	}

	protected function getClassName(string $action, AccessibleController $controller): ?string
	{
		$action = explode('_', $action);
		$action = array_map(fn($el) => ucfirst(mb_strtolower($el)), $action);

		return $this->getNamespace($controller) . implode($action) . static::SUFFIX;
	}

	protected function getNamespace(AccessibleController $controller): string
	{
		$class = new \ReflectionClass($controller);
		$namespace = $class->getNamespaceName();

		return $namespace.'\\'.static::SUFFIX.'\\';
	}
}