4
4
5
5
namespace Manuxi \SuluEventBundle \Entity \Models ;
6
6
7
+ use Doctrine \ORM \EntityManagerInterface ;
7
8
use Doctrine \ORM \OptimisticLockException ;
8
9
use Doctrine \ORM \ORMException ;
9
10
use Manuxi \SuluEventBundle \Domain \Event \Event \CopiedLanguageEvent ;
20
21
use Sulu \Bundle \ActivityBundle \Application \Collector \DomainEventCollectorInterface ;
21
22
use Sulu \Bundle \ContactBundle \Entity \ContactRepository ;
22
23
use Sulu \Bundle \MediaBundle \Entity \MediaRepositoryInterface ;
24
+ use Sulu \Bundle \RouteBundle \Entity \RouteRepositoryInterface ;
25
+ use Sulu \Bundle \RouteBundle \Manager \RouteManagerInterface ;
23
26
use Sulu \Component \Rest \Exception \EntityNotFoundException ;
24
27
use Symfony \Component \HttpFoundation \Request ;
25
28
@@ -32,6 +35,9 @@ public function __construct(
32
35
private LocationRepository $ locationRepository ,
33
36
private MediaRepositoryInterface $ mediaRepository ,
34
37
private ContactRepository $ contactRepository ,
38
+ private RouteManagerInterface $ routeManager ,
39
+ private RouteRepositoryInterface $ routeRepository ,
40
+ private EntityManagerInterface $ entityManager ,
35
41
private DomainEventCollectorInterface $ domainEventCollector
36
42
) {}
37
43
@@ -50,12 +56,13 @@ public function getEvent(int $id, Request $request = null): Event
50
56
* @param int $id
51
57
* @param string $title
52
58
*/
53
- public function deleteEvent (int $ id , string $ title ): void
59
+ public function deleteEvent (Event $ entity ): void
54
60
{
55
61
$ this ->domainEventCollector ->collect (
56
- new RemovedEvent ($ id , $ title )
62
+ new RemovedEvent ($ entity -> getId () , $ entity -> getTitle () ?? '' )
57
63
);
58
- $ this ->eventRepository ->remove ($ id );
64
+ $ this ->removeRoutesForEntity ($ entity );
65
+ $ this ->eventRepository ->remove ($ entity ->getId ());
59
66
}
60
67
61
68
/**
@@ -70,7 +77,15 @@ public function createEvent(Request $request): Event
70
77
new CreatedEvent ($ entity , $ request ->request ->all ())
71
78
);
72
79
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 ;
74
89
}
75
90
76
91
/**
@@ -86,6 +101,7 @@ public function updateEvent(int $id, Request $request): Event
86
101
$ entity = $ this ->findEventByIdAndLocale ($ id , $ request );
87
102
$ entity = $ this ->mapDataToEvent ($ entity , $ request ->request ->all ());
88
103
$ entity = $ this ->mapSettingsToEvent ($ entity , $ request ->request ->all ());
104
+ $ this ->updateRoutesForEntity ($ entity );
89
105
90
106
$ this ->domainEventCollector ->collect (
91
107
new ModifiedEvent ($ entity , $ request ->request ->all ())
@@ -291,4 +307,27 @@ private function mapSettingsToEvent(Event $entity, array $data): Event
291
307
}
292
308
return $ entity ;
293
309
}
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
+ }
294
333
}
0 commit comments