. */ namespace SP\Modules\Web\Controllers\AccountFile; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Domain\Common\Attributes\Action; use SP\Domain\Common\Dtos\ActionResponse; use SP\Domain\Common\Enums\ResponseType; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Infrastructure\File\FileSystem; use function SP\__u; /** * Class ViewController * * @package SP\Modules\Web\Controllers */ final class ViewController extends AccountFileBase { private const MIME_VIEW = ['text/plain']; /** * View action * * @param int $id * * @return ActionResponse * @throws ConstraintException * @throws QueryException */ #[Action(ResponseType::JSON)] public function viewAction(int $id): ActionResponse { $fileDto = $this->accountFileService->getById($id); $this->view->addTemplate('file', 'itemshow'); if (FileSystem::isImage($fileDto->type)) { $this->view->assign('data', chunk_split(base64_encode($fileDto->content))); $this->view->assign('fileData', $fileDto); $this->view->assign('isImage', 1); $this->eventDispatcher->notify( 'show.accountFile', new Event( $this, EventMessage::build() ->addDescription(__u('File viewed')) ->addDetail(__u('File'), $fileDto->name) ) ); return ActionResponse::ok('', ['html' => $this->render()]); } $type = strtolower($fileDto->type); if (in_array($type, self::MIME_VIEW)) { $this->view->assign('mime', $type); $this->view->assign('data', htmlentities($fileDto->content)); $this->eventDispatcher->notify( 'show.accountFile', new Event( $this, EventMessage::build() ->addDescription(__u('File viewed')) ->addDetail(__u('File'), $fileDto->name) ) ); return ActionResponse::ok('', ['html' => $this->render()]); } return ActionResponse::warning(__u('File not supported for preview')); } }