Completed
Pull Request — master (#264)
by Kristof
04:49
created

Event::applyEventCopied()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace CultuurNet\UDB3\Event;
4
5
use CultuurNet\UDB3\BookingInfo;
6
use CultuurNet\UDB3\CalendarInterface;
7
use CultuurNet\UDB3\Cdb\EventItemFactory;
8
use CultuurNet\UDB3\Cdb\UpdateableWithCdbXmlInterface;
9
use CultuurNet\UDB3\ContactPoint;
10
use CultuurNet\UDB3\Event\Events\AudienceUpdated;
11
use CultuurNet\UDB3\Event\Events\BookingInfoUpdated;
12
use CultuurNet\UDB3\Event\Events\ContactPointUpdated;
13
use CultuurNet\UDB3\Event\Events\DescriptionTranslated;
14
use CultuurNet\UDB3\Event\Events\DescriptionUpdated;
15
use CultuurNet\UDB3\Event\Events\EventCdbXMLInterface;
16
use CultuurNet\UDB3\Event\Events\EventCopied;
17
use CultuurNet\UDB3\Event\Events\EventCreated;
18
use CultuurNet\UDB3\Event\Events\EventDeleted;
19
use CultuurNet\UDB3\Event\Events\EventImportedFromUDB2;
20
use CultuurNet\UDB3\Event\Events\EventUpdatedFromUDB2;
21
use CultuurNet\UDB3\Event\Events\ImageAdded;
22
use CultuurNet\UDB3\Event\Events\ImageRemoved;
23
use CultuurNet\UDB3\Event\Events\Image\ImagesImportedFromUDB2;
24
use CultuurNet\UDB3\Event\Events\Image\ImagesUpdatedFromUDB2;
25
use CultuurNet\UDB3\Event\Events\ImageUpdated;
26
use CultuurNet\UDB3\Event\Events\LabelAdded;
27
use CultuurNet\UDB3\Event\Events\LabelRemoved;
28
use CultuurNet\UDB3\Event\Events\MainImageSelected;
29
use CultuurNet\UDB3\Event\Events\MajorInfoUpdated;
30
use CultuurNet\UDB3\Event\Events\Moderation\Approved;
31
use CultuurNet\UDB3\Event\Events\Moderation\FlaggedAsDuplicate;
32
use CultuurNet\UDB3\Event\Events\Moderation\FlaggedAsInappropriate;
33
use CultuurNet\UDB3\Event\Events\Moderation\Published;
34
use CultuurNet\UDB3\Event\Events\Moderation\Rejected;
35
use CultuurNet\UDB3\Event\Events\OrganizerDeleted;
36
use CultuurNet\UDB3\Event\Events\OrganizerUpdated;
37
use CultuurNet\UDB3\Event\Events\PriceInfoUpdated;
38
use CultuurNet\UDB3\Event\Events\TitleTranslated;
39
use CultuurNet\UDB3\Event\Events\TypicalAgeRangeDeleted;
40
use CultuurNet\UDB3\Event\Events\TypicalAgeRangeUpdated;
41
use CultuurNet\UDB3\Event\ValueObjects\Audience;
42
use CultuurNet\UDB3\Label;
43
use CultuurNet\UDB3\LabelCollection;
44
use CultuurNet\UDB3\Language;
45
use CultuurNet\UDB3\Location\Location;
46
use CultuurNet\UDB3\Media\ImageCollection;
47
use CultuurNet\UDB3\Media\Image;
48
use CultuurNet\UDB3\Offer\Commands\Image\AbstractUpdateImage;
49
use CultuurNet\UDB3\Offer\Offer;
50
use CultuurNet\UDB3\Offer\WorkflowStatus;
51
use CultuurNet\UDB3\PriceInfo\PriceInfo;
52
use CultuurNet\UDB3\Theme;
53
use CultuurNet\UDB3\Title;
54
use ValueObjects\Identity\UUID;
55
use ValueObjects\String\String as StringLiteral;
56
57
class Event extends Offer implements UpdateableWithCdbXmlInterface
58
{
59
    protected $eventId;
60
61
    /**
62
     * @var Audience
63
     */
64
    private $audience;
65
66
    const MAIN_LANGUAGE_CODE = 'nl';
67
68
    public function __construct()
69
    {
70
        parent::__construct();
71
    }
72
73
    /**
74
     * Factory method to create a new event.
75
     *
76
     * @param $eventId
77
     * @param Title $title
78
     * @param EventType $eventType
79
     * @param Location $location
80
     * @param CalendarInterface $calendar
81
     * @param Theme|null $theme
82
     * @param \DateTimeImmutable|null $publicationDate
83
     * @return Event
84
     */
85 View Code Duplication
    public static function create(
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
86
        $eventId,
87
        Title $title,
88
        EventType $eventType,
89
        Location $location,
90
        CalendarInterface $calendar,
91
        Theme $theme = null,
92
        \DateTimeImmutable $publicationDate = null
93
    ) {
94
        $event = new self();
95
96
        $event->apply(
97
            new EventCreated(
98
                $eventId,
99
                $title,
100
                $eventType,
101
                $location,
102
                $calendar,
103
                $theme,
104
                $publicationDate
105
            )
106
        );
107
108
        return $event;
109
    }
110
111
    /**
112
     * @param string $eventId
113
     * @param string $originalEventId
114
     * @param CalendarInterface $calendar
115
     * @return Event
116
     */
117
    public static function copyEvent(
118
        $eventId,
119
        $originalEventId,
120
        CalendarInterface $calendar
121
    ) {
122
        $event = new self();
123
124
        $event->apply(
125
            new EventCopied(
126
                $eventId,
127
                $originalEventId,
128
                $calendar
129
            )
130
        );
131
132
        return $event;
133
    }
134
135
    /**
136
     * @param string $eventId
137
     * @param string $cdbXml
138
     * @param string $cdbXmlNamespaceUri
139
     * @return Event
140
     */
141
    public static function importFromUDB2(
142
        $eventId,
143
        $cdbXml,
144
        $cdbXmlNamespaceUri
145
    ) {
146
        $event = new self();
147
        $event->apply(
148
            new EventImportedFromUDB2(
149
                $eventId,
150
                $cdbXml,
151
                $cdbXmlNamespaceUri
152
            )
153
        );
154
155
        return $event;
156
    }
157
158
    /**
159
     * @param ImageCollection $images
160
     */
161
    public function updateImagesFromUDB2(ImageCollection $images)
162
    {
163
        $this->apply(new ImagesUpdatedFromUDB2($this->eventId, $images));
164
    }
165
166
    /**
167
     * @param ImageCollection $images
168
     */
169
    public function importImagesFromUDB2(ImageCollection $images)
170
    {
171
        $this->apply(new ImagesImportedFromUDB2($this->eventId, $images));
172
    }
173
174
    /**
175
     * {@inheritdoc}
176
     */
177
    public function getAggregateRootId()
178
    {
179
        return $this->eventId;
180
    }
181
182
    /**
183
     * @return UUID[]
184
     */
185
    public function getMediaObjects()
186
    {
187
        return $this->mediaObjects;
188
    }
189
190
    protected function applyEventCreated(EventCreated $eventCreated)
191
    {
192
        $this->eventId = $eventCreated->getEventId();
193
        $this->workflowStatus = WorkflowStatus::DRAFT();
194
    }
195
196
    /**
197
     * @param EventCopied $eventCopied
198
     */
199
    protected function applyEventCopied(EventCopied $eventCopied)
200
    {
201
        $this->eventId = $eventCopied->getItemId();
202
        $this->workflowStatus = WorkflowStatus::DRAFT();
203
    }
204
205
    protected function applyEventImportedFromUDB2(
206
        EventImportedFromUDB2 $eventImported
207
    ) {
208
        $this->eventId = $eventImported->getEventId();
209
        $this->setUDB2Data($eventImported);
210
    }
211
212
    /**
213
     * @param EventUpdatedFromUDB2 $eventUpdated
214
     */
215
    protected function applyEventUpdatedFromUDB2(
216
        EventUpdatedFromUDB2 $eventUpdated
217
    ) {
218
        $this->setUDB2Data($eventUpdated);
219
    }
220
221
    /**
222
     * @param EventCdbXMLInterface $eventCdbXML
223
     */
224
    protected function setUDB2Data(
225
        EventCdbXMLInterface $eventCdbXML
226
    ) {
227
        $udb2Event = EventItemFactory::createEventFromCdbXml(
228
            $eventCdbXML->getCdbXmlNamespaceUri(),
229
            $eventCdbXML->getCdbXml()
230
        );
231
232
        $this->importWorkflowStatus($udb2Event);
233
        $this->labels = LabelCollection::fromKeywords($udb2Event->getKeywords(true));
234
    }
235
236
    /**
237
     * Update the major info.
238
     *
239
     * @param Title $title
240
     * @param EventType $eventType
241
     * @param Location $location
242
     * @param CalendarInterface $calendar
243
     * @param Theme|null $theme
244
     */
245
    public function updateMajorInfo(
246
        Title $title,
247
        EventType $eventType,
248
        Location $location,
249
        CalendarInterface $calendar,
250
        Theme $theme = null
251
    ) {
252
        $this->apply(new MajorInfoUpdated($this->eventId, $title, $eventType, $location, $calendar, $theme));
253
    }
254
255
    /**
256
     * @param Audience $audience
257
     */
258
    public function updateAudience(
259
        Audience $audience
260
    ) {
261
        if (is_null($this->audience) || !$this->audience->equals($audience)) {
262
            $this->apply(new AudienceUpdated(
263
                $this->eventId,
264
                $audience
265
            ));
266
        }
267
    }
268
269
    /**
270
     * @param AudienceUpdated $audienceUpdated
271
     */
272
    public function applyAudienceUpdated(AudienceUpdated $audienceUpdated)
273
    {
274
        $this->audience= $audienceUpdated->getAudience();
275
    }
276
277
    /**
278
     * @inheritDoc
279
     * @return ImagesImportedFromUDB2
280
     */
281
    protected function createImagesImportedFromUDB2(ImageCollection $images)
282
    {
283
        return new ImagesImportedFromUDB2($this->eventId, $images);
284
    }
285
286
    /**
287
     * @inheritDoc
288
     * @return ImagesUpdatedFromUDB2
289
     */
290
    protected function createImagesUpdatedFromUDB2(ImageCollection $images)
291
    {
292
        return new ImagesUpdatedFromUDB2($this->eventId, $images);
293
    }
294
295
    /**
296
     * @inheritdoc
297
     */
298
    public function updateWithCdbXml($cdbXml, $cdbXmlNamespaceUri)
299
    {
300
        $this->apply(
301
            new EventUpdatedFromUDB2(
302
                $this->eventId,
303
                $cdbXml,
304
                $cdbXmlNamespaceUri
305
            )
306
        );
307
    }
308
309
    /**
310
     * @param Label $label
311
     * @return LabelAdded
312
     */
313
    protected function createLabelAddedEvent(Label $label)
314
    {
315
        return new LabelAdded($this->eventId, $label);
316
    }
317
318
    /**
319
     * @param Label $label
320
     * @return LabelRemoved
321
     */
322
    protected function createLabelRemovedEvent(Label $label)
323
    {
324
        return new LabelRemoved($this->eventId, $label);
325
    }
326
327
    /**
328
     * @param Image $image
329
     * @return ImageAdded
330
     */
331
    protected function createImageAddedEvent(Image $image)
332
    {
333
        return new ImageAdded($this->eventId, $image);
334
    }
335
336
    /**
337
     * @param Image $image
338
     * @return ImageRemoved
339
     */
340
    protected function createImageRemovedEvent(Image $image)
341
    {
342
        return new ImageRemoved($this->eventId, $image);
343
    }
344
345
    /**
346
     * @param AbstractUpdateImage $updateImageCommand
347
     * @return ImageUpdated
348
     */
349
    protected function createImageUpdatedEvent(
350
        AbstractUpdateImage $updateImageCommand
351
    ) {
352
        return new ImageUpdated(
353
            $this->eventId,
354
            $updateImageCommand->getMediaObjectId(),
355
            $updateImageCommand->getDescription(),
356
            $updateImageCommand->getCopyrightHolder()
357
        );
358
    }
359
360
    /**
361
     * @param Image $image
362
     * @return MainImageSelected
363
     */
364
    protected function createMainImageSelectedEvent(Image $image)
365
    {
366
        return new MainImageSelected($this->eventId, $image);
367
    }
368
369
    /**
370
     * @param Language $language
371
     * @param StringLiteral $title
372
     * @return TitleTranslated
373
     */
374
    protected function createTitleTranslatedEvent(Language $language, StringLiteral $title)
375
    {
376
        return new TitleTranslated($this->eventId, $language, $title);
377
    }
378
379
    /**
380
     * @param Language $language
381
     * @param StringLiteral $description
382
     * @return DescriptionTranslated
383
     */
384
    protected function createDescriptionTranslatedEvent(Language $language, StringLiteral $description)
385
    {
386
        return new DescriptionTranslated($this->eventId, $language, $description);
387
    }
388
389
    /**
390
     * @param string $description
391
     * @return DescriptionUpdated
392
     */
393
    protected function createDescriptionUpdatedEvent($description)
394
    {
395
        return new DescriptionUpdated($this->eventId, $description);
396
    }
397
398
    /**
399
     * @param string $typicalAgeRange
400
     * @return TypicalAgeRangeUpdated
401
     */
402
    protected function createTypicalAgeRangeUpdatedEvent($typicalAgeRange)
403
    {
404
        return new TypicalAgeRangeUpdated($this->eventId, $typicalAgeRange);
405
    }
406
407
    /**
408
     * @return TypicalAgeRangeDeleted
409
     */
410
    protected function createTypicalAgeRangeDeletedEvent()
411
    {
412
        return new TypicalAgeRangeDeleted($this->eventId);
413
    }
414
415
    /**
416
     * @param string $organizerId
417
     * @return OrganizerUpdated
418
     */
419
    protected function createOrganizerUpdatedEvent($organizerId)
420
    {
421
        return new OrganizerUpdated($this->eventId, $organizerId);
422
    }
423
424
    /**
425
     * @param string $organizerId
426
     * @return OrganizerDeleted
427
     */
428
    protected function createOrganizerDeletedEvent($organizerId)
429
    {
430
        return new OrganizerDeleted($this->eventId, $organizerId);
431
    }
432
433
    /**
434
     * @param ContactPoint $contactPoint
435
     * @return ContactPointUpdated
436
     */
437
    protected function createContactPointUpdatedEvent(ContactPoint $contactPoint)
438
    {
439
        return new ContactPointUpdated($this->eventId, $contactPoint);
440
    }
441
442
    /**
443
     * @param BookingInfo $bookingInfo
444
     * @return BookingInfoUpdated
445
     */
446
    protected function createBookingInfoUpdatedEvent(BookingInfo $bookingInfo)
447
    {
448
        return new BookingInfoUpdated($this->eventId, $bookingInfo);
449
    }
450
451
    /**
452
     * @param PriceInfo $priceInfo
453
     * @return PriceInfoUpdated
454
     */
455
    protected function createPriceInfoUpdatedEvent(PriceInfo $priceInfo)
456
    {
457
        return new PriceInfoUpdated($this->eventId, $priceInfo);
458
    }
459
460
    /**
461
     * @return EventDeleted
462
     */
463
    protected function createOfferDeletedEvent()
464
    {
465
        return new EventDeleted($this->eventId);
466
    }
467
468
    /**
469
     * @inheritdoc
470
     */
471
    protected function createPublishedEvent(\DateTimeInterface $publicationDate)
472
    {
473
        return new Published($this->eventId, $publicationDate);
474
    }
475
476
    /**
477
     * @inheritdoc
478
     */
479
    protected function createApprovedEvent()
480
    {
481
        return new Approved($this->eventId);
482
    }
483
484
    /**
485
     * @inheritdoc
486
     */
487
    protected function createRejectedEvent(StringLiteral $reason)
488
    {
489
        return new Rejected($this->eventId, $reason);
490
    }
491
492
    /**
493
     * @inheritDoc
494
     */
495
    protected function createFlaggedAsDuplicate()
496
    {
497
        return new FlaggedAsDuplicate($this->eventId);
498
    }
499
500
    /**
501
     * @inheritDoc
502
     */
503
    protected function createFlaggedAsInappropriate()
504
    {
505
        return new FlaggedAsInappropriate($this->eventId);
506
    }
507
}
508