. */ namespace OrangeHRM\Installer\Util; use Doctrine\DBAL\Connection as DBALConnection; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Types\Types; use OrangeHRM\Core\Traits\ServiceContainerTrait; use OrangeHRM\Framework\Logger\Logger; use OrangeHRM\Framework\Services; use Throwable; class Connection { use ServiceContainerTrait; /** * @var DBALConnection|null */ private static ?DBALConnection $connection = null; private function __construct() { $dbInfo = StateContainer::getInstance()->getDbInfo(); $connectionParams = [ 'dbname' => $dbInfo[StateContainer::DB_NAME], 'user' => $dbInfo[StateContainer::DB_USER], 'password' => $dbInfo[StateContainer::DB_PASSWORD], 'host' => $dbInfo[StateContainer::DB_HOST], 'port' => $dbInfo[StateContainer::DB_PORT], 'driver' => 'pdo_mysql', 'charset' => 'utf8mb4' ]; self::$connection = DriverManager::getConnection($connectionParams); self::$connection->getDatabasePlatform()->registerDoctrineTypeMapping('enum', Types::STRING); try { /** @var Logger $logger */ $logger = $this->getContainer()->get(Services::LOGGER); $systemCheck = new SystemCheck(); $logger->info('Instance details: ' . json_encode($systemCheck->getSystemDetails())); } catch (Throwable $e) { } } /** * @return DBALConnection */ public static function getConnection(): DBALConnection { if (is_null(self::$connection)) { new self(); } return self::$connection; } public static function reset(): void { self::$connection = null; } }