. */ namespace SP\Modules\Web\Controllers\ConfigImport; use Exception; use Klein\Klein; use SP\Core\Acl\Acl; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Application; use SP\Core\Context\SessionContext; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Core\PhpExtensionChecker; use SP\Core\UI\ThemeInterface; use SP\Domain\Import\ImportServiceInterface; use SP\Domain\Import\Services\FileImport; use SP\Domain\Import\Services\ImportParams; use SP\Http\JsonResponse; use SP\Http\RequestInterface; use SP\Modules\Web\Controllers\SimpleControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; /** * Class ImportController * * @package SP\Modules\Web\Controllers */ final class ImportController extends SimpleControllerBase { use JsonTrait; private ImportServiceInterface $importService; public function __construct( Application $application, ThemeInterface $theme, Klein $router, Acl $acl, RequestInterface $request, PhpExtensionChecker $extensionChecker, ImportServiceInterface $importService ) { parent::__construct($application, $theme, $router, $acl, $request, $extensionChecker); $this->importService = $importService; } /** * @throws \JsonException */ public function importAction(): bool { if ($this->config->getConfigData()->isDemoEnabled()) { return $this->returnJsonResponse(JsonResponse::JSON_WARNING, __u('Ey, this is a DEMO!!')); } try { $this->eventDispatcher->notifyEvent('run.import.start', new Event($this)); SessionContext::close(); $counter = $this->importService->doImport( $this->getImportParams(), FileImport::fromRequest('inFile', $this->request) ); $this->eventDispatcher->notifyEvent( 'run.import.end', new Event( $this, EventMessage::factory()->addDetail(__u('Accounts imported'), $counter) ) ); if ($counter > 0) { return $this->returnJsonResponse( JsonResponse::JSON_SUCCESS, __u('Import finished'), [__u('Please check out the event log for more details')] ); } return $this->returnJsonResponse( JsonResponse::JSON_WARNING, __u('No accounts were imported'), [__u('Please check out the event log for more details')] ); } catch (Exception $e) { processException($e); $this->eventDispatcher->notifyEvent('exception', new Event($e)); return $this->returnJsonResponseException($e); } } /** * @return \SP\Domain\Import\Services\ImportParams */ private function getImportParams(): ImportParams { $importParams = new ImportParams(); $importParams->setDefaultUser( $this->request->analyzeInt('import_defaultuser', $this->session->getUserData()->getId()) ); $importParams->setDefaultGroup( $this->request->analyzeInt('import_defaultgroup', $this->session->getUserData()->getUserGroupId()) ); $importParams->setImportPwd($this->request->analyzeEncrypted('importPwd')); $importParams->setImportMasterPwd($this->request->analyzeEncrypted('importMasterPwd')); $importParams->setCsvDelimiter($this->request->analyzeString('csvDelimiter')); return $importParams; } /** * @return void * @throws \JsonException * @throws \SP\Core\Exceptions\SessionTimeout */ protected function initialize(): void { try { $this->checks(); $this->checkAccess(ActionsInterface::CONFIG_IMPORT); } catch (UnauthorizedPageException $e) { $this->eventDispatcher->notifyEvent('exception', new Event($e)); $this->returnJsonResponseException($e); } } }