Skip to content

Commit 46db8c4

Browse files
author
Manuel Bertrams
committed
changed structure: Controller doesn`t store/delete routes anymore. This is done now by Model. Reason: have to explicitely call flush after routes are persisted.
1 parent 595716f commit 46db8c4

File tree

6 files changed

+51
-53
lines changed

6 files changed

+51
-53
lines changed

src/Content/EventDataItem.php

+2-12
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,15 @@
44

55
namespace Manuxi\SuluEventBundle\Content;
66

7-
use Doctrine\ORM\EntityManagerInterface;
87
use JMS\Serializer\Annotation as Serializer;
98
use Manuxi\SuluEventBundle\Entity\Event;
10-
use Sulu\Bundle\MediaBundle\Entity\Media;
119
use Sulu\Component\SmartContent\ItemInterface;
1210

1311
#[Serializer\ExclusionPolicy("all")]
1412
class EventDataItem implements ItemInterface
1513
{
1614
public function __construct(
17-
private Event $entity,
18-
private ?EntityManagerInterface $entityManager = null
15+
private Event $entity
1916
) {}
2017

2118
#[Serializer\VirtualProperty]
@@ -33,14 +30,7 @@ public function getTitle(): string
3330
#[Serializer\VirtualProperty]
3431
public function getImage(): ?int
3532
{
36-
$imageId = $this->entity->getImages()['ids'][0];
37-
$image = $this->entityManager->getRepository(Media::class)->findById($imageId);;
38-
39-
if (!\array_key_exists('sulu-50x50', $thumbnails = $image->getThumbnails())) {
40-
return null;
41-
}
42-
43-
return $thumbnails['sulu-50x50'];
33+
return null;
4434
}
4535

4636
public function getResource(): Event

src/Controller/Admin/EventController.php

+1-35
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@
1515
use FOS\RestBundle\Controller\Annotations\RouteResource;
1616
use FOS\RestBundle\Routing\ClassResourceInterface;
1717
use FOS\RestBundle\View\ViewHandlerInterface;
18-
//use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
19-
//use HandcraftedInTheAlps\RestRoutingBundle\Routing\ClassResourceInterface;
20-
use Sulu\Bundle\RouteBundle\Entity\RouteRepositoryInterface;
21-
use Sulu\Bundle\RouteBundle\Manager\RouteManagerInterface;
2218
use Sulu\Bundle\TrashBundle\Application\TrashManager\TrashManagerInterface;
2319
use Sulu\Component\Rest\AbstractRestController;
2420
use Sulu\Component\Rest\Exception\EntityNotFoundException;
@@ -44,8 +40,6 @@ public function __construct(
4440
private EventModel $eventModel,
4541
private EventSeoModel $eventSeoModel,
4642
private EventExcerptModel $eventExcerptModel,
47-
private RouteManagerInterface $routeManager,
48-
private RouteRepositoryInterface $routeRepository,
4943
private DoctrineListRepresentationFactory $doctrineListRepresentationFactory,
5044
private SecurityCheckerInterface $securityChecker,
5145
private TrashManagerInterface $trashManager,
@@ -85,8 +79,6 @@ public function getAction(int $id, Request $request): Response
8579
public function postAction(Request $request): Response
8680
{
8781
$event = $this->eventModel->createEvent($request);
88-
$this->updateRoutesForEntity($event);
89-
9082
return $this->handleView($this->view($event, 201));
9183
}
9284

@@ -143,7 +135,6 @@ public function postTriggerAction(int $id, Request $request): Response
143135
public function putAction(int $id, Request $request): Response
144136
{
145137
$event = $this->eventModel->updateEvent($id, $request);
146-
$this->updateRoutesForEntity($event);
147138

148139
$this->eventSeoModel->updateEventSeo($event->getEventSeo(), $request);
149140
$this->eventExcerptModel->updateEventExcerpt($event->getEventExcerpt(), $request);
@@ -160,13 +151,10 @@ public function putAction(int $id, Request $request): Response
160151
public function deleteAction(int $id, Request $request): Response
161152
{
162153
$entity = $this->eventModel->getEvent($id, $request);
163-
$title = $entity->getTitle() ?? 'n.a.';
164154

165155
$this->trashManager->store(Event::RESOURCE_KEY, $entity);
166156

167-
$this->removeRoutesForEntity($entity);
168-
169-
$this->eventModel->deleteEvent($id, $title);
157+
$this->eventModel->deleteEvent($entity);
170158
return $this->handleView($this->view(null, 204));
171159
}
172160

@@ -175,26 +163,4 @@ public function getSecurityContext(): string
175163
return Event::SECURITY_CONTEXT;
176164
}
177165

178-
protected function updateRoutesForEntity(Event $entity): void
179-
{
180-
$this->routeManager->createOrUpdateByAttributes(
181-
Event::class,
182-
(string) $entity->getId(),
183-
$entity->getLocale(),
184-
$entity->getRoutePath()
185-
);
186-
}
187-
188-
protected function removeRoutesForEntity(Event $entity): void
189-
{
190-
$routes = $this->routeRepository->findAllByEntity(
191-
Event::class,
192-
(string) $entity->getId(),
193-
$entity->getLocale()
194-
);
195-
196-
foreach ($routes as $route) {
197-
$this->routeRepository->remove($route);
198-
}
199-
}
200166
}

src/Entity/Interfaces/EventModelInterface.php

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
interface EventModelInterface
1111
{
12+
public function getEvent(int $id, Request $request = null): Event;
13+
public function deleteEvent(Event $entity): void;
1214
public function createEvent(Request $request): Event;
1315
public function updateEvent(int $id, Request $request): Event;
1416
public function enableEvent(int $id, Request $request): Event;

src/Entity/Models/EventModel.php

+43-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Manuxi\SuluEventBundle\Entity\Models;
66

7+
use Doctrine\ORM\EntityManagerInterface;
78
use Doctrine\ORM\OptimisticLockException;
89
use Doctrine\ORM\ORMException;
910
use Manuxi\SuluEventBundle\Domain\Event\Event\CopiedLanguageEvent;
@@ -20,6 +21,8 @@
2021
use Sulu\Bundle\ActivityBundle\Application\Collector\DomainEventCollectorInterface;
2122
use Sulu\Bundle\ContactBundle\Entity\ContactRepository;
2223
use Sulu\Bundle\MediaBundle\Entity\MediaRepositoryInterface;
24+
use Sulu\Bundle\RouteBundle\Entity\RouteRepositoryInterface;
25+
use Sulu\Bundle\RouteBundle\Manager\RouteManagerInterface;
2326
use Sulu\Component\Rest\Exception\EntityNotFoundException;
2427
use Symfony\Component\HttpFoundation\Request;
2528

@@ -32,6 +35,9 @@ public function __construct(
3235
private LocationRepository $locationRepository,
3336
private MediaRepositoryInterface $mediaRepository,
3437
private ContactRepository $contactRepository,
38+
private RouteManagerInterface $routeManager,
39+
private RouteRepositoryInterface $routeRepository,
40+
private EntityManagerInterface $entityManager,
3541
private DomainEventCollectorInterface $domainEventCollector
3642
) {}
3743

@@ -50,12 +56,13 @@ public function getEvent(int $id, Request $request = null): Event
5056
* @param int $id
5157
* @param string $title
5258
*/
53-
public function deleteEvent(int $id, string $title): void
59+
public function deleteEvent(Event $entity): void
5460
{
5561
$this->domainEventCollector->collect(
56-
new RemovedEvent($id, $title)
62+
new RemovedEvent($entity->getId(), $entity->getTitle() ?? '')
5763
);
58-
$this->eventRepository->remove($id);
64+
$this->removeRoutesForEntity($entity);
65+
$this->eventRepository->remove($entity->getId());
5966
}
6067

6168
/**
@@ -70,7 +77,15 @@ public function createEvent(Request $request): Event
7077
new CreatedEvent($entity, $request->request->all())
7178
);
7279

73-
return $this->eventRepository->save($entity);
80+
//need the id for updateRoutesForEntity(), so we have to persist and flush here
81+
$entity = $this->eventRepository->save($entity);
82+
83+
$this->updateRoutesForEntity($entity);
84+
85+
//explicit flush to save routes persisted by updateRoutesForEntity()
86+
$this->entityManager->flush();
87+
88+
return $entity;
7489
}
7590

7691
/**
@@ -86,6 +101,7 @@ public function updateEvent(int $id, Request $request): Event
86101
$entity = $this->findEventByIdAndLocale($id, $request);
87102
$entity = $this->mapDataToEvent($entity, $request->request->all());
88103
$entity = $this->mapSettingsToEvent($entity, $request->request->all());
104+
$this->updateRoutesForEntity($entity);
89105

90106
$this->domainEventCollector->collect(
91107
new ModifiedEvent($entity, $request->request->all())
@@ -291,4 +307,27 @@ private function mapSettingsToEvent(Event $entity, array $data): Event
291307
}
292308
return $entity;
293309
}
310+
311+
private function updateRoutesForEntity(Event $entity): void
312+
{
313+
$this->routeManager->createOrUpdateByAttributes(
314+
Event::class,
315+
(string) $entity->getId(),
316+
$entity->getLocale(),
317+
$entity->getRoutePath()
318+
);
319+
}
320+
321+
private function removeRoutesForEntity(Event $entity): void
322+
{
323+
$routes = $this->routeRepository->findAllByEntity(
324+
Event::class,
325+
(string) $entity->getId(),
326+
$entity->getLocale()
327+
);
328+
329+
foreach ($routes as $route) {
330+
$this->routeRepository->remove($route);
331+
}
332+
}
294333
}

src/Resources/config/controller.xml

-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
<argument type="service" id="sulu_event.model.event"/>
99
<argument type="service" id="sulu_event.model.event_seo"/>
1010
<argument type="service" id="sulu_event.model.event_excerpt"/>
11-
<argument type="service" id="sulu_route.manager.route_manager"/>
12-
<argument type="service" id="sulu.repository.route"/>
1311
<argument type="service" id="sulu_event.doctrine_list_representation_factory"/>
1412
<argument type="service" id="sulu_security.security_checker"/>
1513
<argument type="service" id="sulu_trash.trash_manager"/>

src/Resources/config/services.xml

+3
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@
131131
<argument type="service" id="sulu_event.repository.location"/>
132132
<argument type="service" id="sulu.repository.media"/>
133133
<argument type="service" id="sulu.repository.contact"/>
134+
<argument type="service" id="sulu_route.manager.route_manager"/>
135+
<argument type="service" id="sulu.repository.route"/>
136+
<argument type="service" id="doctrine.orm.entity_manager" />
134137
<argument type="service" id="sulu_activity.domain_event_collector"/>
135138
</service>
136139

0 commit comments

Comments
 (0)