. */ namespace SP\Modules\Web\Controllers\AccountFile; use Exception; use JsonException; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Domain\Core\Exceptions\SPException; use SP\Domain\Http\Dtos\JsonMessage; use SP\Infrastructure\File\FileSystem; use SP\Modules\Web\Controllers\Traits\JsonTrait; /** * Class ViewController * * @package SP\Modules\Web\Controllers */ final class ViewController extends AccountFileBase { private const MIME_VIEW = ['text/plain']; use JsonTrait; /** * View action * * @param int $id * * @return bool * @throws JsonException */ public function viewAction(int $id): bool { try { if (null === ($fileData = $this->accountFileService->getById($id))) { throw new SPException(__u('File does not exist'), SPException::INFO); } $this->view->addTemplate('file', 'itemshow'); if (FileSystem::isImage($fileData)) { $this->view->assign('data', chunk_split(base64_encode($fileData->getContent()))); $this->view->assign('fileData', $fileData); $this->view->assign('isImage', 1); $this->eventDispatcher->notify( 'show.accountFile', new Event( $this, EventMessage::factory() ->addDescription(__u('File viewed')) ->addDetail(__u('File'), $fileData->getName()) ) ); return $this->returnJsonResponseData(['html' => $this->render()]); } $type = strtolower($fileData->getType()); if (in_array($type, self::MIME_VIEW)) { $this->view->assign('mime', $type); $this->view->assign('data', htmlentities($fileData->getContent())); $this->eventDispatcher->notify( 'show.accountFile', new Event( $this, EventMessage::factory() ->addDescription(__u('File viewed')) ->addDetail(__u('File'), $fileData->getName()) ) ); return $this->returnJsonResponseData(['html' => $this->render()]); } } catch (Exception $e) { processException($e); $this->eventDispatcher->notify('exception', new Event($e)); return $this->returnJsonResponseException($e); } return $this->returnJsonResponse(JsonMessage::JSON_WARNING, __u('File not supported for preview')); } }