. */ namespace SP\Modules\Web\Controllers\ConfigBackup; use SP\Core\Application; use SP\Core\Bootstrap\Path; use SP\Core\Bootstrap\PathsContext; use SP\Core\Context\Session; 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\Acl\AclActionsInterface; use SP\Domain\Core\Exceptions\SessionTimeout; use SP\Domain\Core\Exceptions\SPException; use SP\Domain\Export\Ports\BackupFileService; use SP\Modules\Web\Controllers\SimpleControllerBase; use SP\Mvc\Controller\SimpleControllerHelper; use function SP\__u; /** * Class FileBackupController */ final class FileBackupController extends SimpleControllerBase { public function __construct( Application $application, SimpleControllerHelper $simpleControllerHelper, private readonly BackupFileService $fileBackupService, private readonly PathsContext $pathsContext ) { parent::__construct($application, $simpleControllerHelper); } /** * @return ActionResponse * @throws SPException */ #[Action(ResponseType::JSON)] public function fileBackupAction(): ActionResponse { if ($this->config->getConfigData()->isDemoEnabled()) { return ActionResponse::warning(__u('Ey, this is a DEMO!!')); } Session::close(); $this->fileBackupService->doBackup($this->pathsContext[Path::BACKUP], $this->pathsContext[Path::APP]); $this->eventDispatcher->notify( 'run.backup.end', new Event( $this, EventMessage::build(__u('Application and database backup completed successfully')) ) ); return ActionResponse::ok(__u('Backup process finished')); } /** * initialize * * @throws SPException * @throws SessionTimeout */ protected function initialize(): void { $this->checks(); $this->checkAccess(AclActionsInterface::CONFIG_BACKUP); } }