MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/help.cafsindia.com/vendor/uvdesk/mailbox-component/Utils/Imap/Configuration.php
<?php

namespace Webkul\UVDesk\MailboxBundle\Utils\Imap;

final class Configuration
{
    private static $reflectedDefinitions = [];

    private function __construct()
    {
        // Force prevent instantiation
    }

    private static function getAvailableDefinitions(bool $ignoreCache = false) : array
    {
        if (empty(self::$reflectedDefinitions) || true === $ignoreCache) {
            if (true === $ignoreCache) {
                // Since we are ignoring the cached results we'll reset this to an empty collection.
                self::$reflectedDefinitions = [];
            }

            // Scan all php files within the target namespace directory
            $scannedFiles = array_filter(scandir(__DIR__ . "/Transport"), function($path) {
                return ('.' != $path && '..' != $path) ? (bool) ('php' === substr($path, strpos($path, '.') + 1)) : false;
            });
    
            // Filter invalid\unsupported classes
            foreach ($scannedFiles as $fileName) {
                $classPath = sprintf("%s\Transport\%s", __NAMESPACE__, substr($fileName, 0, strpos($fileName, '.')));
    
                try {
                    $reflectionClass = new \ReflectionClass($classPath);
    
                    if ($reflectionClass->isInstantiable() && ($reflectionClass->implementsInterface(ResolvedConfigurationInterface::class) || $reflectionClass->implementsInterface(CustomConfigurationInterface::class))) {
                        self::$reflectedDefinitions[] = $reflectionClass;
                    }
                } catch (\ReflectionException $exception) {
                    continue;
                } catch (\RuntimeException $exception) {
                    continue;
                }
            }
        }

        return self::$reflectedDefinitions;
    }

    public static function getSupportedTransportTypes() : array
    {
        return array_map(function ($imapDefinition) {
            return $imapDefinition->getName()::getCode();
        }, self::getAvailableDefinitions());
    }

    public static function guessTransportDefinition($host) : ConfigurationInterface
    {
        foreach (self::getAvailableDefinitions() as $reflectedImapDefinition) {
            if (true === $reflectedImapDefinition->implementsInterface(CustomConfigurationInterface::class)) {
                $customConfigurationReflection = $reflectedImapDefinition;
                continue;
            }

            if ($reflectedImapDefinition->getName()::getHost() == $host) {
                return $reflectedImapDefinition->newInstance();
            }
        }

        if (!empty($customConfigurationReflection)) {
            return $customConfigurationReflection->newInstance($host);
        }

        throw new \Exception('No matching imap definition found for host address "' . $host . '".');
    }

    public static function createTransportDefinition($transportCode, $host = null) : ConfigurationInterface
    {
        if (false == in_array($transportCode, self::getSupportedTransportTypes(), true)) {
            throw new \Exception('No imap definition found for transport type "' . $transportCode . '".');
        }

        foreach (self::getAvailableDefinitions() as $reflectedImapDefinition) {
            if ($reflectedImapDefinition->getName()::getCode() !== $transportCode) {
                continue;
            }

            if (true === $reflectedImapDefinition->implementsInterface(CustomConfigurationInterface::class)) {
                return $reflectedImapDefinition->newInstance($host);
            }

            return $reflectedImapDefinition->newInstance();
        }
    }
}