diff --git a/migrations/Version20240128125138.php b/migrations/Version20240128125138.php new file mode 100644 index 0000000..d6de359 --- /dev/null +++ b/migrations/Version20240128125138.php @@ -0,0 +1,36 @@ +addSql('ALTER TABLE upload ADD global TINYINT(1) NOT NULL'); + } + + public function postUp(Schema $schema): void + { + $this->connection->executeQuery('UPDATE upload SET global=0'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE upload DROP global'); + } +} diff --git a/src/Controller/Admin/System/Document/RenameController.php b/src/Controller/Admin/System/Document/EditController.php similarity index 78% rename from src/Controller/Admin/System/Document/RenameController.php rename to src/Controller/Admin/System/Document/EditController.php index ae3b383..17e3a70 100644 --- a/src/Controller/Admin/System/Document/RenameController.php +++ b/src/Controller/Admin/System/Document/EditController.php @@ -7,13 +7,14 @@ use App\Model\AjaxModalResponseDto; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; -class RenameController extends AbstractController +class EditController extends AbstractController { public function __construct( private readonly EntityManagerInterface $entityManager, @@ -21,12 +22,12 @@ class RenameController extends AbstractController ) { } - #[Route('/admin/system/document/rename/{uuid}', name: 'app_admin_system_document_rename')] + #[Route('/admin/system/document/edit/{uuid}', name: 'app_admin_system_document_edit')] #[IsGranted('ROLE_ADMINISTRATIVE')] public function index(Upload $upload, Request $request): JsonResponse { $response = new AjaxModalResponseDto(); - $formAction = $this->generateUrl('app_admin_system_document_rename', ['uuid' => $upload->getUuid()]); + $formAction = $this->generateUrl('app_admin_system_document_edit', ['uuid' => $upload->getUuid()]); $nameBefore = $upload->getDisplayName(); @@ -34,6 +35,13 @@ class RenameController extends AbstractController ->createFormBuilder($upload, ['action' => $formAction, 'ajax_submit' => true]) ->add('displayName', TextType::class, [ 'label' => 'angezeigter Name', + 'attr' => [ + 'placeholder' => $upload->getOriginalFilename(), + ], + ]) + ->add('global', CheckboxType::class, [ + 'label' => 'globales Dokument', + 'required' => false, ]) ->getForm() ; @@ -52,7 +60,7 @@ class RenameController extends AbstractController $response->setCloseAndRedirect($this->generateUrl('app_admin_system_document_index')); } else { - $response->setContent($this->renderView('admin/system/document/rename.html.twig', [ + $response->setContent($this->renderView('admin/system/document/edit.html.twig', [ 'form' => $form, ])); } diff --git a/src/Controller/Admin/System/Document/UploadController.php b/src/Controller/Admin/System/Document/UploadController.php index 1b7c7f6..57f09d5 100644 --- a/src/Controller/Admin/System/Document/UploadController.php +++ b/src/Controller/Admin/System/Document/UploadController.php @@ -9,6 +9,7 @@ use App\Service\Upload\UploadHandler; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Attribute\Route; @@ -27,6 +28,19 @@ class UploadController extends AbstractController #[IsGranted('ROLE_ADMINISTRATIVE')] public function index(Request $request): JsonResponse { + $response = new AjaxModalResponseDto(); + $formAction = $this->generateUrl('app_admin_system_document_upload'); + + $form = $this + ->createFormBuilder(null, ['action' => $formAction, 'ajax_submit' => true]) + ->add('global', CheckboxType::class, [ + 'label' => 'globale(s) Dokument(e)', + 'required' => false, + ]) + ->getForm() + ; + $form->handleRequest($request); + // Handle upload independently from form submission to avoid issues with failing validation $uploadSession = $this->uploadHandler->getUploadSession(); $uploadedDocuments = []; @@ -35,6 +49,7 @@ class UploadController extends AbstractController $user = $this->getUser(); foreach ($uploadSession->getUploads() as $upload) { $document = Upload::fromUploadDto($upload, $user, Upload::TYPE_DOCUMENT); + $document->setGlobal($form->get('global')->getData()); $uploadedDocuments[] = $document; $this->entityManager->persist($document); } @@ -43,15 +58,6 @@ class UploadController extends AbstractController $this->uploadHandler->destroyUploadSession(); } - $response = new AjaxModalResponseDto(); - $formAction = $this->generateUrl('app_admin_system_document_upload'); - - $form = $this - ->createFormBuilder(null, ['action' => $formAction, 'ajax_submit' => true]) - ->getForm() - ; - $form->handleRequest($request); - if ($form->isSubmitted() && $form->isValid()) { $this->addFlash('success', 'Das/die Dokument/e wurden hochgeladen'); $loggerContext = []; diff --git a/src/Entity/Upload.php b/src/Entity/Upload.php index 9987b41..fd690d6 100644 --- a/src/Entity/Upload.php +++ b/src/Entity/Upload.php @@ -63,6 +63,9 @@ class Upload implements BlameableEntityInterface, TimestampableEntityInterface #[ORM\ManyToOne(inversedBy: 'documents')] private ?Disposition $disposition = null; + #[ORM\Column] + private bool $global = false; + #[ORM\Column(type: Types::TEXT, nullable: true)] private ?string $comment = null; @@ -219,6 +222,18 @@ class Upload implements BlameableEntityInterface, TimestampableEntityInterface return $this; } + public function isGlobal(): bool + { + return $this->global; + } + + public function setGlobal(bool $global): static + { + $this->global = $global; + + return $this; + } + public function getComment(): ?string { return $this->comment; diff --git a/src/Repository/UploadRepository.php b/src/Repository/UploadRepository.php index 07a08a3..b6c3773 100644 --- a/src/Repository/UploadRepository.php +++ b/src/Repository/UploadRepository.php @@ -6,7 +6,6 @@ use App\Entity\Upload; use App\Repository\Traits\QueryHelperTrait; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\ORM\Query; -use Doctrine\ORM\Query\Expr\Join; use Doctrine\Persistence\ManagerRegistry; /** @@ -124,4 +123,17 @@ class UploadRepository extends ServiceEntityRepository ->getSingleScalarResult() ; } + + public function getGlobal(): array + { + $qb = $this->createQueryBuilder('upload'); + + return $qb + ->where($qb->expr()->eq('upload.global', ':global')) + ->setParameter('global', true) + ->orderBy('upload.createdAt', 'DESC') + ->getQuery() + ->getResult() + ; + } } diff --git a/templates/admin/system/document/rename.html.twig b/templates/admin/system/document/edit.html.twig similarity index 76% rename from templates/admin/system/document/rename.html.twig rename to templates/admin/system/document/edit.html.twig index f12e21b..6daa980 100644 --- a/templates/admin/system/document/rename.html.twig +++ b/templates/admin/system/document/edit.html.twig @@ -2,6 +2,9 @@