{{ key|trans }} | -{% if cache %} {{ cache }}{% else %} {% trans %}no.cache.available{% endtrans %}{% endif %} | -
---|
diff --git a/src/Controllers/CacheController.php b/src/Controllers/CacheController.php index e71f35a2..0020827d 100644 --- a/src/Controllers/CacheController.php +++ b/src/Controllers/CacheController.php @@ -47,7 +47,7 @@ public function deleteDoctrineCache(Request $request): Response */ return $this->redirectToRoute('adminHomePage'); } - + $this->prepareBaseAssignation(); $this->assignation['form'] = $form->createView(); return $this->render('@RoadizRozier/cache/deleteDoctrine.html.twig', $this->assignation); @@ -77,6 +77,7 @@ public function deleteAssetsCache(Request $request): Response return $this->redirectToRoute('adminHomePage'); } + $this->prepareBaseAssignation(); $this->assignation['form'] = $form->createView(); return $this->render('@RoadizRozier/cache/deleteAssets.html.twig', $this->assignation); diff --git a/src/Controllers/CustomForms/CustomFormsUtilsController.php b/src/Controllers/CustomForms/CustomFormsUtilsController.php index 5c293ccb..535da55d 100644 --- a/src/Controllers/CustomForms/CustomFormsUtilsController.php +++ b/src/Controllers/CustomForms/CustomFormsUtilsController.php @@ -4,24 +4,30 @@ namespace Themes\Rozier\Controllers\CustomForms; +use Doctrine\Persistence\ManagerRegistry; use PhpOffice\PhpSpreadsheet\Exception; -use RZ\Roadiz\CoreBundle\Entity\CustomForm; -use RZ\Roadiz\CoreBundle\Entity\CustomFormAnswer; use RZ\Roadiz\CoreBundle\CustomForm\CustomFormAnswerSerializer; -use RZ\Roadiz\CoreBundle\Xlsx\XlsxExporter; +use RZ\Roadiz\CoreBundle\Entity\CustomForm; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; +use Symfony\Component\HttpFoundation\StreamedResponse; +use Symfony\Component\Serializer\SerializerInterface; +use Symfony\Contracts\Translation\TranslatorInterface; use Themes\Rozier\RozierApp; class CustomFormsUtilsController extends RozierApp { - public function __construct(private readonly CustomFormAnswerSerializer $customFormAnswerSerializer) - { + public function __construct( + private readonly ManagerRegistry $managerRegistry, + private readonly TranslatorInterface $translator, + private readonly CustomFormAnswerSerializer $customFormAnswerSerializer, + private readonly SerializerInterface $serializer + ) { } /** - * Export all custom form's answer in a Xlsx file (.rzt). + * Export all custom form's answers in a CSV file. * * @param Request $request * @param int $id @@ -32,45 +38,35 @@ public function __construct(private readonly CustomFormAnswerSerializer $customF */ public function exportAction(Request $request, int $id): Response { - /** @var CustomForm|null $customForm */ - $customForm = $this->em()->find(CustomForm::class, $id); + $customForm = $this->managerRegistry->getRepository(CustomForm::class)->find($id); if (null === $customForm) { throw $this->createNotFoundException(); } $answers = $customForm->getCustomFormAnswers(); - - /** - * @var int $key - * @var CustomFormAnswer $answer - */ + $answersArray = []; foreach ($answers as $key => $answer) { - $array = array_merge( - [$answer->getIp(), $answer->getSubmittedAt()], - $this->customFormAnswerSerializer->toSimpleArray($answer) - ); - $answers[$key] = $array; + $answersArray[$key] = $this->customFormAnswerSerializer->toSimpleArray($answer); } - $keys = ["ip", "submitted.date"]; - $fields = $customForm->getFieldsLabels(); - $keys = array_merge($keys, $fields); - - $exporter = new XlsxExporter($this->getTranslator()); - $xlsx = $exporter->exportXlsx($answers, $keys); - - $response = new Response( - $xlsx, - Response::HTTP_OK, - [] - ); - + $keys = [ + 'ip', + 'submitted.date', + ...$fields + ]; + + $response = new StreamedResponse(function () use ($answersArray, $keys) { + echo $this->serializer->serialize($answersArray, 'csv', [ + 'csv_headers' => $keys + ]); + }); + $response->headers->set('Content-Type', 'text/csv'); $response->headers->set( 'Content-Disposition', $response->headers->makeDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, - $customForm->getName() . '.xlsx' + $customForm->getName() . '.csv' ) ); @@ -84,15 +80,12 @@ public function exportAction(Request $request, int $id): Response * * @param Request $request * @param int $id - * * @return Response */ public function duplicateAction(Request $request, int $id): Response { $this->denyAccessUnlessGranted('ROLE_ACCESS_CUSTOMFORMS'); - /** @var CustomForm|null $existingCustomForm */ - $existingCustomForm = $this->em()->find(CustomForm::class, $id); - + $existingCustomForm = $this->managerRegistry->getRepository(CustomForm::class)->find($id); if (null === $existingCustomForm) { throw $this->createNotFoundException(); } @@ -101,7 +94,7 @@ public function duplicateAction(Request $request, int $id): Response $newCustomForm = clone $existingCustomForm; $newCustomForm->setCreatedAt(new \DateTime()); $newCustomForm->setUpdatedAt(new \DateTime()); - $em = $this->em(); + $em = $this->managerRegistry->getManager(); foreach ($newCustomForm->getFields() as $field) { $em->persist($field); @@ -110,7 +103,7 @@ public function duplicateAction(Request $request, int $id): Response $em->persist($newCustomForm); $em->flush(); - $msg = $this->getTranslator()->trans("duplicated.custom.form.%name%", [ + $msg = $this->translator->trans("duplicated.custom.form.%name%", [ '%name%' => $existingCustomForm->getDisplayName(), ]); @@ -123,7 +116,7 @@ public function duplicateAction(Request $request, int $id): Response } catch (\Exception $e) { $this->publishErrorMessage( $request, - $this->getTranslator()->trans("impossible.duplicate.custom.form.%name%", [ + $this->translator->trans("impossible.duplicate.custom.form.%name%", [ '%name%' => $existingCustomForm->getDisplayName(), ]), $newCustomForm diff --git a/src/Controllers/Nodes/ExportController.php b/src/Controllers/Nodes/ExportController.php index 4ba71fd0..abc4d1f1 100644 --- a/src/Controllers/Nodes/ExportController.php +++ b/src/Controllers/Nodes/ExportController.php @@ -34,9 +34,6 @@ public function __construct(private readonly NodeSourceXlsxSerializer $xlsxSeria */ public function exportAllXlsxAction(Request $request, int $translationId, ?int $parentNodeId = null): Response { - /* - * Get translation - */ $translation = $this->em() ->find(Translation::class, $translationId); @@ -69,7 +66,7 @@ public function exportAllXlsxAction(Request $request, int $translationId, ?int $ ->findBy($criteria, $order); $this->xlsxSerializer->setOnlyTexts(true); - $this->xlsxSerializer->addUrls($request, $this->getSettingsBag()->get('force_locale')); + $this->xlsxSerializer->addUrls(); $xlsx = $this->xlsxSerializer->serialize($sources); $response = new Response( diff --git a/src/Controllers/SearchController.php b/src/Controllers/SearchController.php index 1cff1ec9..e615d884 100644 --- a/src/Controllers/SearchController.php +++ b/src/Controllers/SearchController.php @@ -5,7 +5,6 @@ namespace Themes\Rozier\Controllers; use DateTime; -use IteratorAggregate; use PhpOffice\PhpSpreadsheet\Exception; use RZ\Roadiz\Core\AbstractEntities\AbstractField; use RZ\Roadiz\CoreBundle\Entity\Node; @@ -18,7 +17,7 @@ use RZ\Roadiz\CoreBundle\Form\NodeStatesType; use RZ\Roadiz\CoreBundle\Form\NodeTypesType; use RZ\Roadiz\CoreBundle\Form\SeparatorType; -use RZ\Roadiz\CoreBundle\Xlsx\XlsxExporter; +use RZ\Roadiz\CoreBundle\Xlsx\NodeSourceXlsxSerializer; use Symfony\Component\Form\ClickableInterface; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; @@ -44,6 +43,10 @@ class SearchController extends RozierApp protected bool $pagination = true; protected ?int $itemPerPage = null; + public function __construct(protected readonly NodeSourceXlsxSerializer $xlsxSerializer) + { + } + /** * @param mixed $var * @return bool @@ -265,7 +268,6 @@ public function searchNodeSourceAction(Request $request, int $nodetypeId): Respo $this->extendForm($builder, $nodetype); $this->addButtons($builder, true); - /** @var Form $form */ $form = $builder->getForm(); $form->handleRequest($request); @@ -277,7 +279,7 @@ public function searchNodeSourceAction(Request $request, int $nodetypeId): Respo return $response; } - if (null !== $response = $this->handleNodeForm($form, $nodetype)) { + if (null !== $response = $this->handleNodeForm($request, $form, $nodetype)) { return $response; } @@ -314,11 +316,11 @@ protected function buildNodeTypeForm(?int $nodetypeId = null): FormBuilderInterf /** * @param FormBuilderInterface $builder - * @param bool $exportXlsx + * @param bool $export * * @return FormBuilderInterface */ - protected function addButtons(FormBuilderInterface $builder, bool $exportXlsx = false): FormBuilderInterface + protected function addButtons(FormBuilderInterface $builder, bool $export = false): FormBuilderInterface { $builder->add('search', SubmitType::class, [ 'label' => 'search.a.node', @@ -327,7 +329,7 @@ protected function addButtons(FormBuilderInterface $builder, bool $exportXlsx = ], ]); - if ($exportXlsx) { + if ($export) { $builder->add('export', SubmitType::class, [ 'label' => 'export.all.nodesSource', 'attr' => [ @@ -363,6 +365,7 @@ protected function handleNodeTypeForm(FormInterface $nodeTypeForm): ?RedirectRes } /** + * @param Request $request * @param FormInterface $form * @param NodeType $nodetype * @@ -370,7 +373,7 @@ protected function handleNodeTypeForm(FormInterface $nodeTypeForm): ?RedirectRes * @throws Exception * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception */ - protected function handleNodeForm(FormInterface $form, NodeType $nodetype): ?Response + protected function handleNodeForm(Request $request, FormInterface $form, NodeType $nodetype): ?Response { if ($form->isSubmitted() && $form->isValid()) { $data = []; @@ -416,8 +419,13 @@ protected function handleNodeForm(FormInterface $form, NodeType $nodetype): ?Res */ $button = $form->get('export'); if ($button instanceof ClickableInterface && $button->isClicked()) { + $filename = 'search-' . $nodetype->getName() . '-' . date("YmdHis") . '.xlsx'; + $this->xlsxSerializer->setOnlyTexts(true); + $this->xlsxSerializer->addUrls(); + $xlsx = $this->xlsxSerializer->serialize($entities); + $response = new Response( - $this->getXlsxResults($nodetype, $entities), + $xlsx, Response::HTTP_OK, [] ); @@ -426,10 +434,11 @@ protected function handleNodeForm(FormInterface $form, NodeType $nodetype): ?Res 'Content-Disposition', $response->headers->makeDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, - 'search.xlsx' + $filename ) ); + $response->prepare($request); return $response; } @@ -441,43 +450,6 @@ protected function handleNodeForm(FormInterface $form, NodeType $nodetype): ?Res return null; } - /** - * @param NodeType $nodetype - * @param array|IteratorAggregate $entities - * - * @return string - * @throws Exception - * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception - */ - protected function getXlsxResults(NodeType $nodetype, iterable $entities): string - { - $fields = $nodetype->getFields(); - $keys = []; - $answers = []; - $keys[] = "title"; - /** @var NodeTypeField $field */ - foreach ($fields as $field) { - if (!$field->isVirtual() && !$field->isCollection()) { - $keys[] = $field->getName(); - } - } - foreach ($entities as $idx => $nodesSource) { - $array = []; - foreach ($keys as $key) { - $getter = 'get' . str_replace('_', '', ucwords($key)); - $tmp = $nodesSource->$getter(); - if (is_array($tmp)) { - $tmp = implode(',', $tmp); - } - $array[] = $tmp; - } - $answers[$idx] = $array; - } - - $exporter = new XlsxExporter($this->getTranslator()); - return $exporter->exportXlsx($answers, $keys); - } - /** * @param string $prefix * @return FormBuilderInterface diff --git a/src/Explorer/ConfigurableExplorerItem.php b/src/Explorer/ConfigurableExplorerItem.php index bc86157e..c4ee98d4 100644 --- a/src/Explorer/ConfigurableExplorerItem.php +++ b/src/Explorer/ConfigurableExplorerItem.php @@ -17,27 +17,14 @@ final class ConfigurableExplorerItem extends AbstractExplorerItem { - private PersistableInterface $entity; - private array $configuration; - private RendererInterface $renderer; - private DocumentUrlGeneratorInterface $documentUrlGenerator; - private UrlGeneratorInterface $urlGenerator; - private ?EmbedFinderFactory $embedFinderFactory; - public function __construct( - PersistableInterface $entity, - array &$configuration, - RendererInterface $renderer, - DocumentUrlGeneratorInterface $documentUrlGenerator, - UrlGeneratorInterface $urlGenerator, - ?EmbedFinderFactory $embedFinderFactory = null + private readonly PersistableInterface $entity, + private readonly array &$configuration, + private readonly RendererInterface $renderer, + private readonly DocumentUrlGeneratorInterface $documentUrlGenerator, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly ?EmbedFinderFactory $embedFinderFactory = null ) { - $this->entity = $entity; - $this->configuration = $configuration; - $this->renderer = $renderer; - $this->documentUrlGenerator = $documentUrlGenerator; - $this->urlGenerator = $urlGenerator; - $this->embedFinderFactory = $embedFinderFactory; } /** diff --git a/src/Explorer/FolderExplorerItem.php b/src/Explorer/FolderExplorerItem.php index 9a85e7ae..f2ffe508 100644 --- a/src/Explorer/FolderExplorerItem.php +++ b/src/Explorer/FolderExplorerItem.php @@ -10,13 +10,10 @@ final class FolderExplorerItem extends AbstractExplorerItem { - private Folder $folder; - private UrlGeneratorInterface $urlGenerator; - - public function __construct(Folder $folder, UrlGeneratorInterface $urlGenerator) - { - $this->folder = $folder; - $this->urlGenerator = $urlGenerator; + public function __construct( + private readonly Folder $folder, + private readonly UrlGeneratorInterface $urlGenerator + ) { } /** diff --git a/src/Explorer/SettingExplorerItem.php b/src/Explorer/SettingExplorerItem.php index 5c0fd190..9145f861 100644 --- a/src/Explorer/SettingExplorerItem.php +++ b/src/Explorer/SettingExplorerItem.php @@ -10,13 +10,10 @@ final class SettingExplorerItem extends AbstractExplorerItem { - private Setting $setting; - private UrlGeneratorInterface $urlGenerator; - - public function __construct(Setting $setting, UrlGeneratorInterface $urlGenerator) - { - $this->setting = $setting; - $this->urlGenerator = $urlGenerator; + public function __construct( + private readonly Setting $setting, + private readonly UrlGeneratorInterface $urlGenerator + ) { } /** diff --git a/src/Explorer/UserExplorerItem.php b/src/Explorer/UserExplorerItem.php index b7012f16..60b1a32a 100644 --- a/src/Explorer/UserExplorerItem.php +++ b/src/Explorer/UserExplorerItem.php @@ -10,13 +10,10 @@ final class UserExplorerItem extends AbstractExplorerItem { - private User $user; - private UrlGeneratorInterface $urlGenerator; - - public function __construct(User $user, UrlGeneratorInterface $urlGenerator) - { - $this->user = $user; - $this->urlGenerator = $urlGenerator; + public function __construct( + private readonly User $user, + private readonly UrlGeneratorInterface $urlGenerator + ) { } /** diff --git a/src/Forms/FolderCollectionType.php b/src/Forms/FolderCollectionType.php index aa1db351..c580bf84 100644 --- a/src/Forms/FolderCollectionType.php +++ b/src/Forms/FolderCollectionType.php @@ -17,14 +17,8 @@ final class FolderCollectionType extends AbstractType { - protected ManagerRegistry $managerRegistry; - - /** - * @param ManagerRegistry $managerRegistry - */ - public function __construct(ManagerRegistry $managerRegistry) + public function __construct(private readonly ManagerRegistry $managerRegistry) { - $this->managerRegistry = $managerRegistry; } /** diff --git a/src/Forms/NodeSource/NodeSourceCustomFormType.php b/src/Forms/NodeSource/NodeSourceCustomFormType.php index 3b6fa151..be552197 100644 --- a/src/Forms/NodeSource/NodeSourceCustomFormType.php +++ b/src/Forms/NodeSource/NodeSourceCustomFormType.php @@ -19,16 +19,11 @@ */ final class NodeSourceCustomFormType extends AbstractNodeSourceFieldType { - protected NodeHandler $nodeHandler; - - /** - * @param ManagerRegistry $managerRegistry - * @param NodeHandler $nodeHandler - */ - public function __construct(ManagerRegistry $managerRegistry, NodeHandler $nodeHandler) - { + public function __construct( + ManagerRegistry $managerRegistry, + private readonly NodeHandler $nodeHandler + ) { parent::__construct($managerRegistry); - $this->nodeHandler = $nodeHandler; } /** diff --git a/src/Forms/NodeSource/NodeSourceDocumentType.php b/src/Forms/NodeSource/NodeSourceDocumentType.php index 1e1aeba2..efcce674 100644 --- a/src/Forms/NodeSource/NodeSourceDocumentType.php +++ b/src/Forms/NodeSource/NodeSourceDocumentType.php @@ -19,16 +19,11 @@ */ final class NodeSourceDocumentType extends AbstractNodeSourceFieldType { - protected NodesSourcesHandler $nodesSourcesHandler; - - /** - * @param ManagerRegistry $managerRegistry - * @param NodesSourcesHandler $nodesSourcesHandler - */ - public function __construct(ManagerRegistry $managerRegistry, NodesSourcesHandler $nodesSourcesHandler) - { + public function __construct( + ManagerRegistry $managerRegistry, + private readonly NodesSourcesHandler $nodesSourcesHandler + ) { parent::__construct($managerRegistry); - $this->nodesSourcesHandler = $nodesSourcesHandler; } /** diff --git a/src/Forms/NodeSource/NodeSourceNodeType.php b/src/Forms/NodeSource/NodeSourceNodeType.php index 472f3dd2..779badd0 100644 --- a/src/Forms/NodeSource/NodeSourceNodeType.php +++ b/src/Forms/NodeSource/NodeSourceNodeType.php @@ -20,16 +20,9 @@ */ final class NodeSourceNodeType extends AbstractNodeSourceFieldType { - protected NodeHandler $nodeHandler; - - /** - * @param ManagerRegistry $managerRegistry - * @param NodeHandler $nodeHandler - */ - public function __construct(ManagerRegistry $managerRegistry, NodeHandler $nodeHandler) + public function __construct(ManagerRegistry $managerRegistry, private readonly NodeHandler $nodeHandler) { parent::__construct($managerRegistry); - $this->nodeHandler = $nodeHandler; } /** diff --git a/src/Forms/NodeSource/NodeSourceProviderType.php b/src/Forms/NodeSource/NodeSourceProviderType.php index 9132793c..852728bd 100644 --- a/src/Forms/NodeSource/NodeSourceProviderType.php +++ b/src/Forms/NodeSource/NodeSourceProviderType.php @@ -19,16 +19,9 @@ final class NodeSourceProviderType extends AbstractConfigurableNodeSourceFieldType { - protected ContainerInterface $container; - - /** - * @param ManagerRegistry $managerRegistry - * @param ContainerInterface $container - */ - public function __construct(ManagerRegistry $managerRegistry, ContainerInterface $container) + public function __construct(ManagerRegistry $managerRegistry, private readonly ContainerInterface $container) { parent::__construct($managerRegistry); - $this->container = $container; } /** diff --git a/src/Forms/NodeSource/NodeSourceType.php b/src/Forms/NodeSource/NodeSourceType.php index 59d4fbf5..22aab62a 100644 --- a/src/Forms/NodeSource/NodeSourceType.php +++ b/src/Forms/NodeSource/NodeSourceType.php @@ -41,13 +41,10 @@ final class NodeSourceType extends AbstractType { - protected ManagerRegistry $managerRegistry; - private Security $security; - - public function __construct(ManagerRegistry $managerRegistry, Security $security) - { - $this->managerRegistry = $managerRegistry; - $this->security = $security; + public function __construct( + private readonly ManagerRegistry $managerRegistry, + private readonly Security $security + ) { } /** diff --git a/src/Models/CustomFormModel.php b/src/Models/CustomFormModel.php index 7724af37..c5f63d45 100644 --- a/src/Models/CustomFormModel.php +++ b/src/Models/CustomFormModel.php @@ -10,23 +10,14 @@ final class CustomFormModel implements ModelInterface { - private CustomForm $customForm; - private UrlGeneratorInterface $urlGenerator; - private TranslatorInterface $translator; - - /** - * @param CustomForm $customForm - * @param UrlGeneratorInterface $urlGenerator - * @param TranslatorInterface $translator - */ - public function __construct(CustomForm $customForm, UrlGeneratorInterface $urlGenerator, TranslatorInterface $translator) - { - $this->customForm = $customForm; - $this->urlGenerator = $urlGenerator; - $this->translator = $translator; + public function __construct( + private readonly CustomForm $customForm, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly TranslatorInterface $translator + ) { } - public function toArray() + public function toArray(): array { $countFields = strip_tags($this->translator->trans( '{0} no.customFormField|{1} 1.customFormField|]1,Inf] %count%.customFormFields', diff --git a/src/Models/DocumentModel.php b/src/Models/DocumentModel.php index ad4e6f98..83ae0b92 100644 --- a/src/Models/DocumentModel.php +++ b/src/Models/DocumentModel.php @@ -37,31 +37,13 @@ final class DocumentModel implements ModelInterface "noProcess" => true, ]; - private DocumentInterface $document; - private RendererInterface $renderer; - private DocumentUrlGeneratorInterface $documentUrlGenerator; - private UrlGeneratorInterface $urlGenerator; - private ?EmbedFinderFactory $embedFinderFactory; - - /** - * @param DocumentInterface $document - * @param RendererInterface $renderer - * @param DocumentUrlGeneratorInterface $documentUrlGenerator - * @param UrlGeneratorInterface $urlGenerator - * @param EmbedFinderFactory|null $embedFinderFactory - */ public function __construct( - DocumentInterface $document, - RendererInterface $renderer, - DocumentUrlGeneratorInterface $documentUrlGenerator, - UrlGeneratorInterface $urlGenerator, - ?EmbedFinderFactory $embedFinderFactory = null + private readonly DocumentInterface $document, + private readonly RendererInterface $renderer, + private readonly DocumentUrlGeneratorInterface $documentUrlGenerator, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly ?EmbedFinderFactory $embedFinderFactory = null ) { - $this->document = $document; - $this->renderer = $renderer; - $this->documentUrlGenerator = $documentUrlGenerator; - $this->urlGenerator = $urlGenerator; - $this->embedFinderFactory = $embedFinderFactory; } public function toArray(): array diff --git a/src/Models/NodeModel.php b/src/Models/NodeModel.php index 1ff17d4d..50a1bc0c 100644 --- a/src/Models/NodeModel.php +++ b/src/Models/NodeModel.php @@ -19,9 +19,9 @@ final class NodeModel implements ModelInterface { public function __construct( - private Node $node, - private UrlGeneratorInterface $urlGenerator, - private Security $security + private readonly Node $node, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly Security $security ) { } diff --git a/src/Models/NodeSourceModel.php b/src/Models/NodeSourceModel.php index c8208a4c..831105e4 100644 --- a/src/Models/NodeSourceModel.php +++ b/src/Models/NodeSourceModel.php @@ -18,9 +18,9 @@ final class NodeSourceModel implements ModelInterface { public function __construct( - private NodesSources $nodeSource, - private UrlGeneratorInterface $urlGenerator, - private Security $security + private readonly NodesSources $nodeSource, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly Security $security ) { } diff --git a/src/Models/NodeTypeModel.php b/src/Models/NodeTypeModel.php index 6c26967f..240eb02b 100644 --- a/src/Models/NodeTypeModel.php +++ b/src/Models/NodeTypeModel.php @@ -8,14 +8,8 @@ final class NodeTypeModel implements ModelInterface { - private NodeType $nodeType; - - /** - * @param NodeType $nodeType - */ - public function __construct(NodeType $nodeType) + public function __construct(private readonly NodeType $nodeType) { - $this->nodeType = $nodeType; } public function toArray(): array diff --git a/src/Models/TagModel.php b/src/Models/TagModel.php index d22864d9..fd561900 100644 --- a/src/Models/TagModel.php +++ b/src/Models/TagModel.php @@ -9,13 +9,10 @@ final class TagModel implements ModelInterface { - private Tag $tag; - private UrlGeneratorInterface $urlGenerator; - - public function __construct(Tag $tag, UrlGeneratorInterface $urlGenerator) - { - $this->tag = $tag; - $this->urlGenerator = $urlGenerator; + public function __construct( + private readonly Tag $tag, + private readonly UrlGeneratorInterface $urlGenerator + ) { } public function toArray(): array diff --git a/src/Resources/app/less/actions_menu/actions_menu.less b/src/Resources/app/less/actions_menu/actions_menu.less index a6ce1ef6..9367a332 100644 --- a/src/Resources/app/less/actions_menu/actions_menu.less +++ b/src/Resources/app/less/actions_menu/actions_menu.less @@ -120,7 +120,7 @@ z-index: 99999; } &.uk-button-primary:before { - background-color: var(--accent-color-darker); + background-color: var(--rz-accent-color-darker); } &.uk-button-success:before { background-color: @success-color; @@ -168,7 +168,7 @@ &.uk-button-primary { .label-text { - background-color: var(--accent-color-darker); + background-color: var(--rz-accent-color-darker); } } &.uk-button-success { diff --git a/src/Resources/app/less/buttons/buttons.less b/src/Resources/app/less/buttons/buttons.less index 0468f1a5..27e5d175 100644 --- a/src/Resources/app/less/buttons/buttons.less +++ b/src/Resources/app/less/buttons/buttons.less @@ -124,18 +124,18 @@ &.uk-button-primary { background: var(--main-contrast-color-30); - border-color: var(--accent-color-darker); + border-color: var(--rz-accent-color-darker); [class*=uk-icon-]{ - color: var(--accent-color-darkest); + color: var(--rz-accent-color-darkest); } &:hover, &:focus{ background: var(--main-contrast-color-30); - border-color: var(--accent-color-darkest); + border-color: var(--rz-accent-color-darkest); [class*=uk-icon-]{ - color: var(--accent-color-darkest); + color: var(--rz-accent-color-darkest); } } } @@ -311,7 +311,7 @@ .uk-button-primary { &:not(:disabled) { - background: var(--accent-color-darker); + background: var(--rz-accent-color-darker); border-color: transparent; color: white; text-shadow: none; @@ -321,7 +321,7 @@ } &:hover, &:active, &:focus { - background: var(--accent-color); + background: var(--rz-accent-color); border-color: transparent; color: white; } @@ -351,9 +351,12 @@ &:hover { opacity: 0.8; - border-color: var(--accent-color); + border-color: var(--rz-accent-color); background: #333333; } + &:focus { + border-color: var(--rz-accent-color); + } } .uk-button-dropdown{ diff --git a/src/Resources/app/less/common.less b/src/Resources/app/less/common.less index 06a70cdb..787e4ba8 100644 --- a/src/Resources/app/less/common.less +++ b/src/Resources/app/less/common.less @@ -105,3 +105,7 @@ background: #CCC; display: none; } } + +.uk-datepicker-table a.uk-active { + background: var(--rz-accent-color); +} diff --git a/src/Resources/app/less/documents/documents.less b/src/Resources/app/less/documents/documents.less index ae1e02dc..1d91f6b6 100644 --- a/src/Resources/app/less/documents/documents.less +++ b/src/Resources/app/less/documents/documents.less @@ -95,9 +95,6 @@ table.documents { margin: 0 auto; &:hover { - .document-border{ - background: #C8C8C8; - } .document-links{ bottom:0px; } @@ -122,18 +119,18 @@ table.documents { overflow: hidden; } - .document-border{ + .document-border { position: absolute; top:0; right:0; left:0; height:4px; - background-color:#eaeaea; + background: var(--rz-accent-color); transition: 0.5s background-color @easeOutExpo; z-index:3; } - .document-image{ + .document-image { width:128px; height:128px; background: #E2E2E2; // not white to see white PNG logotypes diff --git a/src/Resources/app/less/dropdown/dropdown.less b/src/Resources/app/less/dropdown/dropdown.less index aa2095ed..49ebb608 100644 --- a/src/Resources/app/less/dropdown/dropdown.less +++ b/src/Resources/app/less/dropdown/dropdown.less @@ -161,7 +161,7 @@ } .vertical-nodetype { position: absolute; - background-color: var(--accent-color); + background-color: var(--rz-accent-color); width: 26px; top: 0; bottom: 0; diff --git a/src/Resources/app/less/dropzone/dropzone.less b/src/Resources/app/less/dropzone/dropzone.less index a4acc70e..45be9961 100644 --- a/src/Resources/app/less/dropzone/dropzone.less +++ b/src/Resources/app/less/dropzone/dropzone.less @@ -111,7 +111,7 @@ left:0; right:0; height:4px; .dz-upload{ - background-color: var(--accent-color); + background-color: var(--rz-accent-color); } } .dz-details{ diff --git a/src/Resources/app/less/forms/custom_switch.less b/src/Resources/app/less/forms/custom_switch.less index ee38b8a7..f233ec68 100644 --- a/src/Resources/app/less/forms/custom_switch.less +++ b/src/Resources/app/less/forms/custom_switch.less @@ -37,7 +37,7 @@ } .bootstrap-switch-handle-on.bootstrap-switch-primary { - background-color: var(--accent-color-darker); + background-color: var(--rz-accent-color-lighter); .border-radius(0, 0, @switch-round, @switch-round); color: rgba(255, 255, 255, 0.9); } @@ -51,6 +51,6 @@ &:focus { outline: none; box-shadow: 1px 1px 5px 1px rgba(0, 0, 0, 0.2); - border-color: var(--accent-color-darker); + border-color: var(--rz-accent-color-darker); } } diff --git a/src/Resources/app/less/forms/forms.less b/src/Resources/app/less/forms/forms.less index e37435d8..926fdf9d 100644 --- a/src/Resources/app/less/forms/forms.less +++ b/src/Resources/app/less/forms/forms.less @@ -94,7 +94,7 @@ background-color: @grey-form-submit; margin:3px; &:checked:before { - background: var(--accent-color-darker); + background: var(--rz-accent-color-darker); } } @@ -110,7 +110,7 @@ } &:checked:before{ - color: var(--accent-color-darker); + color: var(--rz-accent-color-darker); } } diff --git a/src/Resources/app/less/login/login.less b/src/Resources/app/less/login/login.less index 8802152c..7cb4d47d 100644 --- a/src/Resources/app/less/login/login.less +++ b/src/Resources/app/less/login/login.less @@ -114,7 +114,7 @@ #login-logo { width: @login-BarW; height: 70px; - background-color: var(--accent-color); + background-color: var(--rz-accent-color); top: 0; left: 0; text-align: center; diff --git a/src/Resources/app/less/node-types/node-types.less b/src/Resources/app/less/node-types/node-types.less index 13058cef..203b2e5a 100644 --- a/src/Resources/app/less/node-types/node-types.less +++ b/src/Resources/app/less/node-types/node-types.less @@ -11,13 +11,14 @@ /* -------- STYLES -------- */ .uk-table.attributes, +.uk-table.custom-forms, .uk-table.node-types { .name { position: relative; padding-left: 15px; .color { - background-color: var(--data-color); + background-color: var(--rz-accent-color); display: block; position: absolute; top: 0; diff --git a/src/Resources/app/less/nodes/edit.less b/src/Resources/app/less/nodes/edit.less index ce99d600..1a63598e 100644 --- a/src/Resources/app/less/nodes/edit.less +++ b/src/Resources/app/less/nodes/edit.less @@ -113,8 +113,8 @@ } &.uk-active { & > a { - background-color: var(--accent-color-darker); - border-color: var(--accent-color-darker); + background-color: var(--rz-accent-color-darker); + border-color: var(--rz-accent-color-darker); box-shadow: none; } } diff --git a/src/Resources/app/less/nodes/global.less b/src/Resources/app/less/nodes/global.less index c84008ae..497f6b14 100644 --- a/src/Resources/app/less/nodes/global.less +++ b/src/Resources/app/less/nodes/global.less @@ -200,7 +200,7 @@ -webkit-font-smoothing: antialiased; text-align: center; line-height: 12px; - color: var(--accent-color-darker); + color: var(--rz-accent-color-darker); } } } @@ -216,8 +216,11 @@ .node-item-color{ position: absolute; - top:0; bottom:0; left:0; + top:0; + bottom:0; + left:0; width:4px; + background-color: var(--rz-accent-color); } .uk-form .form-col-choice { diff --git a/src/Resources/app/less/panels/user_panel/user_panel.less b/src/Resources/app/less/panels/user_panel/user_panel.less index 9b46f958..98d038ad 100644 --- a/src/Resources/app/less/panels/user_panel/user_panel.less +++ b/src/Resources/app/less/panels/user_panel/user_panel.less @@ -56,7 +56,7 @@ &.uk-icon-rz-turn-off, &.uk-icon-rz-user { - border-color: var(--accent-color); + border-color: var(--rz-accent-color-lighter); opacity: 0.5; &:hover { @@ -145,7 +145,7 @@ } #company { - background-color: var(--accent-color); + background-color: var(--rz-accent-color); height: @global-header-height; text-align: center; .box-sizing(); diff --git a/src/Resources/app/less/tables/tables.less b/src/Resources/app/less/tables/tables.less index 0ab5a3ef..6ba6a704 100644 --- a/src/Resources/app/less/tables/tables.less +++ b/src/Resources/app/less/tables/tables.less @@ -50,7 +50,7 @@ margin-left:5px; &.active { - color: var(--accent-color-darker); + color: var(--rz-accent-color-darker); } } } diff --git a/src/Resources/app/less/vars.less b/src/Resources/app/less/vars.less index 2e690562..86eaefd5 100644 --- a/src/Resources/app/less/vars.less +++ b/src/Resources/app/less/vars.less @@ -157,9 +157,14 @@ --maincontent-bar-bg: #efefef; --maincontent-header-bg: @maincontent-header-bg; - --accent-color: #00deab; - --accent-color-darker: #00c497; - --accent-color-darkest: #00ab83; + --color-light-mix: 70%; + --color-darker-mix: 95%; + --color-darkest-mix: 85%; + + --rz-accent-color: #00deab; + --rz-accent-color-lighter: color-mix(in srgb, var(--rz-accent-color) var(--color-light-mix), white); + --rz-accent-color-darker: color-mix(in srgb, var(--rz-accent-color) var(--color-darker-mix), black); + --rz-accent-color-darkest: color-mix(in srgb, var(--rz-accent-color) var(--color-darkest-mix), black); } /** diff --git a/src/Resources/app/less/widgets/children_nodes_widget.less b/src/Resources/app/less/widgets/children_nodes_widget.less index c6309b75..c25a6b0a 100644 --- a/src/Resources/app/less/widgets/children_nodes_widget.less +++ b/src/Resources/app/less/widgets/children_nodes_widget.less @@ -248,6 +248,7 @@ bottom: 0; left: 0; width: 4px; + background-color: var(--rz-accent-color); } .uk-nestable-panel { @@ -296,7 +297,7 @@ height: @children-node-height - 15px; top: 6px; background-color: #CCCCCC; - border: 1px solid #C2C2C2; + border: 1px solid var(--rz-accent-color); z-index: 1; } @@ -337,7 +338,7 @@ font-size: @default-font-size; border-radius: 100%; background-color: var(--contrasted-bg); - border: 1px solid #a0a0a0; + border: 1px solid var(--rz-accent-color); width: @children-node-height / 2; height: @children-node-height / 2; display: inline-block; @@ -370,7 +371,7 @@ color: @item-color; font-size: @default-font-size; border-radius: 100%; - background-color: #a0a0a0; + background-color: var(--rz-accent-color); width: 8px; height: 8px; top: 50%; diff --git a/src/Resources/app/less/widgets/customform_widget.less b/src/Resources/app/less/widgets/customform_widget.less index 1d6f14a1..5b3a8ff2 100644 --- a/src/Resources/app/less/widgets/customform_widget.less +++ b/src/Resources/app/less/widgets/customform_widget.less @@ -117,7 +117,7 @@ position: absolute; top:0; bottom:0; left:0; width:4px; - background: var(--accent-color); + background: var(--rz-accent-color); } .custom-form-links{ diff --git a/src/Resources/app/less/widgets/documents_widget.less b/src/Resources/app/less/widgets/documents_widget.less index 14c087c5..09bf3241 100644 --- a/src/Resources/app/less/widgets/documents_widget.less +++ b/src/Resources/app/less/widgets/documents_widget.less @@ -140,12 +140,12 @@ } } - .document-border{ + .document-border { position: absolute; top:0; right:0; left:0; z-index: 15; height:4px; - background: var(--accent-color); + background: var(--rz-accent-color); } .document-image{ diff --git a/src/Resources/app/less/widgets/drawer_document_item.less b/src/Resources/app/less/widgets/drawer_document_item.less index ad3cbdec..b546bcad 100644 --- a/src/Resources/app/less/widgets/drawer_document_item.less +++ b/src/Resources/app/less/widgets/drawer_document_item.less @@ -37,7 +37,7 @@ right: 0; width: 20px; text-align: center; - background: var(--accent-color); + background: var(--rz-accent-color); font-size: 11px; padding: 2px 0; height: 15px; @@ -53,12 +53,12 @@ } } - .document-border{ + .document-border { position: absolute; top:0; right:0; left:0; z-index: 15; height:4px; - background: var(--accent-color); + background: var(--rz-accent-color); } .document-image{ diff --git a/src/Resources/app/less/widgets/drawer_item.less b/src/Resources/app/less/widgets/drawer_item.less index e2f3da0e..ee7de0ae 100644 --- a/src/Resources/app/less/widgets/drawer_item.less +++ b/src/Resources/app/less/widgets/drawer_item.less @@ -77,7 +77,7 @@ bottom: 0; left: 0; width: 4px; - background: var(--accent-color); + background: var(--rz-accent-color); z-index: 2; } diff --git a/src/Resources/app/less/widgets/folder_tree.less b/src/Resources/app/less/widgets/folder_tree.less index fd8723b9..7f6f7827 100644 --- a/src/Resources/app/less/widgets/folder_tree.less +++ b/src/Resources/app/less/widgets/folder_tree.less @@ -1,18 +1,16 @@ .foldertree { - &-element { - &-name { + &-element-name { + vertical-align: middle; + position: relative; + max-width: 80%; + + a { + white-space: nowrap; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + display: block; vertical-align: middle; - position: relative; - max-width: 80%; - - a { - white-space: nowrap; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - display: block; - vertical-align: middle; - } } } @@ -123,3 +121,8 @@ } } } + +.folder-item i, +.foldertree-element > .uk-nestable-panel .uk-nestable-handle i { + color: var(--rz-accent-color); +} diff --git a/src/Resources/app/less/widgets/nestable.less b/src/Resources/app/less/widgets/nestable.less index 192d82a2..3aa590ee 100644 --- a/src/Resources/app/less/widgets/nestable.less +++ b/src/Resources/app/less/widgets/nestable.less @@ -146,7 +146,7 @@ .uk-icon-rz-home-unpublished { position: relative; font-size: 16px; - color: darken(@item-color, 10%); + color: var(--rz-accent-color); vertical-align: middle; top: -1px; left: -2px; @@ -167,12 +167,12 @@ z-index:4; } &:hover { - .nodetree-element-name a{ + .nodetree-element-name a { color: @item-color-name-color-hover; } .uk-icon-rz-home, .uk-icon-rz-home-unpublished { - color: @nestable-handle-border-color-hover; + color: var(--rz-accent-color-darker); } } } @@ -207,7 +207,7 @@ font-size: @default-font-size; border-radius: 100%; background-color: var(--contrasted-bg); - border: 1px solid @item-color; + border: 1px solid var(--rz-accent-color); width: 10px; display: inline-block; height: 10px; @@ -229,7 +229,7 @@ color: @item-color; font-size: @default-font-size; border-radius: 100%; - background-color: @item-color; + background-color: var(--rz-accent-color); width: 4px; height: 4px; top: 3px; @@ -473,7 +473,7 @@ font-size: @default-font-size; border-radius: 100%; background-color: var(--contrasted-bg); - border: 1px solid @item-color; + border: 1px solid var(--rz-accent-color); width: 10px; display: inline-block; height: 10px; diff --git a/src/Resources/app/less/widgets/tag_tree.less b/src/Resources/app/less/widgets/tag_tree.less index 5356d955..273717b8 100644 --- a/src/Resources/app/less/widgets/tag_tree.less +++ b/src/Resources/app/less/widgets/tag_tree.less @@ -122,3 +122,8 @@ } } } + +.tag-item i, +.tagtree-element > .uk-nestable-panel .uk-nestable-handle i { + color: var(--rz-accent-color); +} diff --git a/src/Resources/routes.yml b/src/Resources/routes.yml index 0bda10db..1bdf1967 100644 --- a/src/Resources/routes.yml +++ b/src/Resources/routes.yml @@ -233,11 +233,6 @@ webhooksRoutes: # CSS to style with main color # NOT SECURED ROUTES # -cssMainColor: - path : /css/main-color.css - defaults: - _controller: Themes\Rozier\RozierApp::cssAction - loginImagePage: path: /css/login/image defaults: diff --git a/src/Resources/views/attributes/attribute_row.html.twig b/src/Resources/views/attributes/attribute_row.html.twig index cc960445..2c96ff67 100644 --- a/src/Resources/views/attributes/attribute_row.html.twig +++ b/src/Resources/views/attributes/attribute_row.html.twig @@ -1,4 +1,4 @@ -
{{ key|trans }} | -{% if cache %} {{ cache }}{% else %} {% trans %}no.cache.available{% endtrans %}{% endif %} | -
---|
{{ key|trans }} | +{% if cache %} {{ cache }}{% else %} {% trans %}no.cache.available{% endtrans %}{% endif %} | +
---|