. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Container; use Espo\Core\Utils\Log; use Espo\Core\Utils\Metadata; use ReflectionClass; use Exception; class ContainerConfiguration implements Configuration { /** * Log must be loaded before anything. * @noinspection PhpPropertyOnlyWrittenInspection * @phpstan-ignore-next-line */ private Log $log; /** * Must be protected. */ protected Metadata $metadata; public function __construct(Log $log, Metadata $metadata) { $this->log = $log; $this->metadata = $metadata; } /** * @return ?class-string */ public function getLoaderClassName(string $name): ?string { $className = null; try { $className = $this->metadata->get(['app', 'containerServices', $name, 'loaderClassName']); } catch (Exception) {} if ($className && class_exists($className)) { return $className; } $className = 'Espo\Custom\Core\Loaders\\' . ucfirst($name); if (!class_exists($className)) { $className = 'Espo\Core\Loaders\\' . ucfirst($name); } if (class_exists($className)) { $class = new ReflectionClass($className); if ($class->isInstantiable()) { return $className; } } return null; } /** * @return ?class-string */ public function getServiceClassName(string $name): ?string { return $this->metadata->get(['app', 'containerServices', $name, 'className']) ?? null; } /** * @return ?string[] */ public function getServiceDependencyList(string $name): ?array { return $this->metadata->get(['app', 'containerServices', $name, 'dependencyList']) ?? null; } public function isSettable(string $name): bool { return $this->metadata->get(['app', 'containerServices', $name, 'settable']) ?? false; } }