Skip to content

Commit 8012480

Browse files
refactor: simplify breadcrumbs
1 parent 9cd657f commit 8012480

65 files changed

Lines changed: 1686 additions & 1153 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

config/reference.php

Lines changed: 996 additions & 996 deletions
Large diffs are not rendered by default.

lib/RoadizCoreBundle/src/Entity/Redirection.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
ORM\Index(columns: ['use_count'], name: 'redirection_use_count'),
2626
ORM\Index(columns: ['created_at'], name: 'redirection_created_at'),
2727
ORM\Index(columns: ['updated_at'], name: 'redirection_updated_at'),]
28-
class Redirection implements DateTimedInterface, PersistableInterface
28+
class Redirection implements DateTimedInterface, PersistableInterface, \Stringable
2929
{
3030
use SequentialIdTrait;
3131
use DateTimedTrait;
@@ -125,4 +125,27 @@ public function incrementUseCount(): self
125125

126126
return $this;
127127
}
128+
129+
public function __toString(): string
130+
{
131+
$path = trim($this->query, '/');
132+
if ('' === $path) {
133+
return '';
134+
}
135+
136+
$segments = explode('/', $path);
137+
$language = null;
138+
139+
if (isset($segments[0]) && 1 === preg_match('/^[a-z]{2}$/i', $segments[0])) {
140+
$language = strtolower(array_shift($segments));
141+
}
142+
143+
$result = implode(' | ', $segments);
144+
145+
if (null !== $language) {
146+
$result .= ' ('.$language.')';
147+
}
148+
149+
return $result;
150+
}
128151
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RZ\Roadiz\RozierBundle\Breadcrumbs;
6+
7+
use RZ\Roadiz\CoreBundle\Entity\Document;
8+
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
9+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10+
11+
/**
12+
* @implements BreadcrumbsItemFactoryInterface<Document>
13+
*/
14+
#[AutoconfigureTag('roadiz_rozier.breadcrumbs_item_factory', ['priority' => 0])]
15+
final readonly class DocumentBreadcrumbsItemFactory implements BreadcrumbsItemFactoryInterface
16+
{
17+
public function __construct(
18+
private UrlGeneratorInterface $urlGenerator,
19+
) {
20+
}
21+
22+
#[\Override]
23+
public function createBreadcrumbsItem(?object $item): ?BreadcrumbsItem
24+
{
25+
if (null === $item) {
26+
return null;
27+
}
28+
29+
return new BreadcrumbsItem(
30+
(string) $item,
31+
$this->urlGenerator->generate(
32+
'documentsEditPage',
33+
[
34+
'documentId' => $item->getId(),
35+
]
36+
),
37+
false,
38+
);
39+
}
40+
41+
#[\Override]
42+
public function support(?object $item): bool
43+
{
44+
return $item instanceof Document;
45+
}
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RZ\Roadiz\RozierBundle\Breadcrumbs;
6+
7+
use RZ\Roadiz\CoreBundle\Entity\Folder;
8+
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
9+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10+
11+
/**
12+
* @implements BreadcrumbsItemFactoryInterface<Folder>
13+
*/
14+
#[AutoconfigureTag('roadiz_rozier.breadcrumbs_item_factory', ['priority' => 0])]
15+
final readonly class FolderBreadcrumbsItemFactory implements BreadcrumbsItemFactoryInterface
16+
{
17+
public function __construct(
18+
private UrlGeneratorInterface $urlGenerator,
19+
) {
20+
}
21+
22+
#[\Override]
23+
public function createBreadcrumbsItem(?object $item): ?BreadcrumbsItem
24+
{
25+
if (null === $item) {
26+
return null;
27+
}
28+
29+
return new BreadcrumbsItem(
30+
$item->getName() ?? $item->getFolderName(),
31+
$this->urlGenerator->generate(
32+
'foldersEditPage',
33+
[
34+
'folderId' => $item->getId(),
35+
]
36+
),
37+
false,
38+
);
39+
}
40+
41+
#[\Override]
42+
public function support(?object $item): bool
43+
{
44+
return $item instanceof Folder;
45+
}
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RZ\Roadiz\RozierBundle\Breadcrumbs;
6+
7+
use RZ\Roadiz\CoreBundle\Entity\Tag;
8+
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
9+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10+
11+
/**
12+
* @implements BreadcrumbsItemFactoryInterface<Tag>
13+
*/
14+
#[AutoconfigureTag('roadiz_rozier.breadcrumbs_item_factory', ['priority' => 0])]
15+
final readonly class TagBreadcrumbsItemFactory implements BreadcrumbsItemFactoryInterface
16+
{
17+
public function __construct(
18+
private UrlGeneratorInterface $urlGenerator,
19+
) {
20+
}
21+
22+
#[\Override]
23+
public function createBreadcrumbsItem(?object $item): ?BreadcrumbsItem
24+
{
25+
if (null === $item) {
26+
return null;
27+
}
28+
29+
return new BreadcrumbsItem(
30+
$item->getTagName(),
31+
$this->urlGenerator->generate(
32+
'tagsEditPage',
33+
[
34+
'tagId' => $item->getId(),
35+
]
36+
),
37+
false,
38+
);
39+
}
40+
41+
#[\Override]
42+
public function support(?object $item): bool
43+
{
44+
return $item instanceof Tag;
45+
}
46+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RZ\Roadiz\RozierBundle\Breadcrumbs;
6+
7+
use RZ\Roadiz\CoreBundle\Entity\Translation;
8+
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
9+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10+
11+
/**
12+
* @implements BreadcrumbsItemFactoryInterface<Translation>
13+
*/
14+
#[AutoconfigureTag('roadiz_rozier.breadcrumbs_item_factory', ['priority' => 0])]
15+
final readonly class TranslationBreadcrumbsItemFactory implements BreadcrumbsItemFactoryInterface
16+
{
17+
public function __construct(
18+
private UrlGeneratorInterface $urlGenerator,
19+
) {
20+
}
21+
22+
#[\Override]
23+
public function createBreadcrumbsItem(?object $item): ?BreadcrumbsItem
24+
{
25+
if (null === $item) {
26+
return null;
27+
}
28+
29+
return new BreadcrumbsItem(
30+
$item->getName(),
31+
$this->urlGenerator->generate(
32+
'translationsEditPage',
33+
['translationId' => $item->getId()]
34+
),
35+
false,
36+
);
37+
}
38+
39+
#[\Override]
40+
public function support(?object $item): bool
41+
{
42+
return $item instanceof Translation;
43+
}
44+
}

lib/RoadizRozierBundle/src/Controller/Document/DocumentController.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,18 @@ public function deleteAction(Request $request, int $documentId): Response
9999
return $this->render('@RoadizRozier/admin/confirm_action.html.twig', [
100100
'title' => $title,
101101
'headPath' => '@RoadizRozier/documents/head.html.twig',
102+
'parentBreadcrumb' => [
103+
[
104+
'label' => $this->translator->trans('documents'),
105+
'type' => 'listing',
106+
'url' => $this->generateUrl('documentsHomePage'),
107+
],
108+
$document,
109+
],
102110
'cancelPath' => $this->generateUrl('documentsHomePage'),
103111
'alertMessage' => 'are_you_sure.delete.document',
104112
'form' => $form->createView(),
113+
'items' => [$document],
105114
]);
106115
}
107116

@@ -149,18 +158,13 @@ public function bulkDeleteAction(Request $request): Response
149158

150159
$title = $this->translator->trans('delete.documents');
151160

152-
$items = [];
153-
foreach ($documents as $document) {
154-
$items[] = $this->explorerItemFactory->createForEntity($document)->toArray();
155-
}
156-
157161
return $this->render('@RoadizRozier/admin/confirm_action.html.twig', [
158162
'title' => $title,
159163
'headPath' => '@RoadizRozier/documents/head.html.twig',
160164
'cancelPath' => $this->generateUrl('documentsHomePage'),
161165
'alertMessage' => 'are_you_sure.delete.these.documents',
162166
'form' => $form->createView(),
163-
'items' => $items,
167+
'items' => $documents,
164168
]);
165169
}
166170

lib/RoadizRozierBundle/src/Controller/FolderController.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,18 @@ public function deleteAction(Request $request, int $folderId): Response
163163
return $this->render('@RoadizRozier/admin/confirm_action.html.twig', [
164164
'title' => $title,
165165
'headPath' => '@RoadizRozier/folders/head.html.twig',
166+
'parentBreadcrumb' => [
167+
[
168+
'label' => $this->translator->trans('folders'),
169+
'type' => 'listing',
170+
'url' => $this->generateUrl('foldersHomePage'),
171+
],
172+
...$folder->getParents(),
173+
],
166174
'cancelPath' => $this->generateUrl('foldersHomePage'),
167175
'alertMessage' => 'are_you_sure.delete.folder',
168176
'form' => $form->createView(),
177+
'items' => [$folder],
169178
]);
170179
}
171180

lib/RoadizRozierBundle/src/Controller/Node/NodeBulkActionTrait.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,8 @@ public function bulkDeleteAction(Request $request): Response
7575
throw new ResourceNotFoundException();
7676
}
7777

78-
$items = [];
7978
foreach ($nodes as $node) {
8079
$this->denyAccessUnlessGranted(NodeVoter::DELETE, $node);
81-
$items[] = $this->explorerItemFactory->createForEntity($node)->toArray();
8280
}
8381

8482
$form = $this->buildBulkDeleteForm(
@@ -111,7 +109,7 @@ public function bulkDeleteAction(Request $request): Response
111109
'cancelPath' => $cancelPath,
112110
'alertMessage' => 'are_you_sure.delete.these.nodes',
113111
'form' => $form->createView(),
114-
'items' => $items,
112+
'items' => $nodes,
115113
]);
116114
}
117115

@@ -449,10 +447,8 @@ public function bulkUndeleteAction(Request $request): Response
449447
throw new ResourceNotFoundException();
450448
}
451449

452-
$items = [];
453450
foreach ($nodes as $node) {
454451
$this->denyAccessUnlessGranted(NodeVoter::DELETE, $node);
455-
$items[] = $this->explorerItemFactory->createForEntity($node)->toArray();
456452
}
457453

458454
$form = $this->buildBulkUndeleteForm(
@@ -474,7 +470,7 @@ public function bulkUndeleteAction(Request $request): Response
474470
'action_label' => 'undelete.nodes.all',
475471
'action_icon' => 'rz-icon-ri--device-recover-line',
476472
'form' => $form->createView(),
477-
'items' => $items,
473+
'items' => $nodes,
478474
]);
479475
}
480476

lib/RoadizRozierBundle/src/Controller/Node/NodeController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,7 @@ public function deleteAction(
606606
'cancelPath' => $this->generateUrl('nodesEditPage', ['nodeId' => $node->getId()]),
607607
'alertMessage' => 'are_you_sure.delete.node.and.data',
608608
'form' => $form->createView(),
609+
'items' => [$node],
609610
]);
610611
}
611612

0 commit comments

Comments
 (0)