grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 'include/Imap/ImapHandlerFake.php', 'class' => 'ImapHandlerFake', 'calls' => 'include/Imap/ImapHandlerFakeCalls.php', ]; /** * * @param ImapHandlerInterface $interfaceObject */ protected function setInterfaceObject(ImapHandlerInterface $interfaceObject) { $class = get_class($interfaceObject); LoggerManager::getLogger()->debug('ImapHandlerFactory will using a ' . $class); $this->interfaceObject = $interfaceObject; } /** * */ protected function includeFakeInterface() { if (!class_exists($this->imapHandlerTestInterface['class'])) { require_once $this->imapHandlerTestInterface['file']; } } /** * * @global array $sugar_config * @param string $testSettings * @throws ImapHandlerException */ protected function loadTestSettings($testSettings = null) { if (!$testSettings) { $testSettings = $this->getTestSettings(); } $this->includeFakeInterface(); $interfaceClass = $this->imapHandlerTestInterface['class']; $interfaceCallsSettings = include $this->imapHandlerTestInterface['calls']; if (!isset($interfaceCallsSettings[$testSettings])) { $info = "[debug testSettings] " . var_dump($testSettings, true); $info .= "\n[debug info this] " . var_dump($this, true); $info .= "\n[debug info callset] " . var_dump($interfaceCallsSettings, true); LoggerManager::getLogger()->debug('Imap test setting failure: ' . $info); throw new ImapHandlerException( "Test settings does not exists: $testSettings", ImapHandlerException::ERR_TEST_SET_NOT_EXISTS ); } $interfaceCalls = $interfaceCallsSettings[$testSettings]; $interfaceFakeData = new ImapHandlerFakeData(); $interfaceFakeData->retrieve($interfaceCalls); $this->setInterfaceObject(new $interfaceClass($interfaceFakeData)); } /** * * @return string */ protected function getTestSettings() { $testSettings = null; if (file_exists(__DIR__ . self::SETTINGS_KEY_FILE)) { $testSettings = file_get_contents(__DIR__ . self::SETTINGS_KEY_FILE); } if (!$testSettings) { LoggerManager::getLogger()->warn("Test settings not set, create one with default key"); $testSettings = self::DEFAULT_SETTINGS_KEY; $this->saveTestSettingsKey($testSettings); } return $testSettings; } /** * Delete's test settings file. * @return void */ public function deleteTestSettings() { if (file_exists(__DIR__ . self::SETTINGS_KEY_FILE)) { unlink(__DIR__ . self::SETTINGS_KEY_FILE); } } /** * * @param string $key * @return boolean * @throws ImapHandlerException */ public function saveTestSettingsKey($key) { if (!is_string($key) || !$key) { $type = gettype($key); throw new InvalidArgumentException('Key should be a non-empty string, ' . ($type == 'string' ? 'empty string' : $type) . ' given.'); } $calls = include $this->imapHandlerTestInterface['calls']; if (!isset($calls[$key])) { throw new ImapHandlerException( 'Key not found: ' . $key, ImapHandlerException::ERR_KEY_NOT_FOUND ); } else { if (!file_put_contents(__DIR__ . self::SETTINGS_KEY_FILE, $key)) { throw new ImapHandlerException('Key saving error', ImapHandlerException::ERR_KEY_SAVE_ERROR); } else { return true; } } return false; } /** * * @global array $sugar_config * @param string $testSettings * @return ImapHandlerInterface * @throws ImapHandlerException */ public function getImapHandler($testSettings = null) { if (null === $this->interfaceObject) { global $sugar_config; $test = (isset($sugar_config['imap_test']) && $sugar_config['imap_test']) || $testSettings; $charset = (isset($sugar_config['default_email_charset'])) ? $sugar_config['default_email_charset'] : null; if (inDeveloperMode()) { $logErrors = true; $logCalls = true; } else { $logErrors = true; $logCalls = false; } $interfaceClass = ImapHandler::class; if ($test) { $this->loadTestSettings($testSettings); } else { $this->setInterfaceObject(new $interfaceClass($logErrors, $logCalls, $charset)); } } return $this->interfaceObject; } }