getUser()->isInRole('admin')) { $this->error('Sekce Admin je dostupná pouze administrátorovi systému.', 403); } } public function actionDefault(): void { $this->redirect('databaze'); } public function renderDatabaze(): void { $loginy = $this->databazeFacade->getAll(); $aktivniCount = 0; foreach ($loginy as $login) { if ($login->AKTIVNI) { $aktivniCount++; } } $this->template->loginy = $loginy; $this->template->celkemCount = count($loginy); $this->template->aktivniCount = $aktivniCount; } public function renderStatistika(): void { } protected function createComponentSdfImportForm(): Form { $form = new Form(); $form->addHidden('loginId') ->addRule($form::Integer, 'Vyberte databázi.') ->setRequired('Vyberte databázi.'); $iniLimits = array_filter([ Helpers::iniGetSize('upload_max_filesize'), Helpers::iniGetSize('post_max_size'), ]); $maxBytes = min(self::SDF_MAX_BYTES, ...($iniLimits ?: [self::SDF_MAX_BYTES])); $maxMb = max(1, (int) floor($maxBytes / (1024 * 1024))); $form->addUpload('sdf', 'Soubor SDF:') ->setRequired('Vyberte soubor s příponou .sdf.') ->addRule($form::MaxFileSize, "Soubor může mít nejvýše {$maxMb} MB.", $maxBytes) ->addRule( function (UploadControl $control): bool { $file = $control->getValue(); if (!$file instanceof FileUpload || !$file->hasFile()) { return false; } return strtolower(pathinfo($file->getUntrustedName(), PATHINFO_EXTENSION)) === 'sdf'; }, 'Soubor musí mít příponu .sdf.' ); $form->addSubmit('send', 'Import'); $form->onSuccess[] = [$this, 'sdfImportFormSucceeded']; return $form; } public function sdfImportFormSucceeded(Form $form, \stdClass $data): void { set_time_limit(180); $loginId = (int) $data->loginId; try { $this->databazeFacade->saveSdf($loginId, $data->sdf); $stats = $this->sdfImporter->import($loginId); $this->flashMessage( sprintf( 'Import ze SDF do databáze %s dokončen. Původní data byla smazána. Zákazníci: %d. Faktury: %d. Položky: %d. Platby: %d. Nastavení: %s.', $stats['database'], $stats['zakazniciInserted'], $stats['fakturyInserted'], $stats['polozkyInserted'], $stats['platbyInserted'], !empty($stats['nastaveniImported']) ? 'přeneseno' : 'bez změn' ), 'success' ); } catch (AbortException $e) { throw $e; } catch (\Throwable $e) { $this->flashMessage('Import ze SDF selhal: ' . $e->getMessage(), 'danger'); } $this->redirect('this'); } }