Completed
Push — master ( 1563bb...25b79c )
by Luc
15s
created

PlaceLDProjector::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 1
eloc 20
nc 1
nop 9

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace CultuurNet\UDB3\Place\ReadModel\JSONLD;
4
5
use Broadway\Domain\DateTime;
6
use Broadway\Domain\DomainMessage;
7
use Broadway\EventHandling\EventListenerInterface;
8
use CultuurNet\UDB3\Actor\ActorImportedFromUDB2;
9
use CultuurNet\UDB3\Address\Address;
10
use CultuurNet\UDB3\Cdb\ActorItemFactory;
11
use CultuurNet\UDB3\EntityServiceInterface;
12
use CultuurNet\UDB3\Event\EventType;
13
use CultuurNet\UDB3\Event\ReadModel\DocumentGoneException;
14
use CultuurNet\UDB3\Event\ReadModel\DocumentRepositoryInterface;
15
use CultuurNet\UDB3\EventListener\EventSpecification;
16
use CultuurNet\UDB3\Iri\IriGeneratorInterface;
17
use CultuurNet\UDB3\Language;
18
use CultuurNet\UDB3\Offer\AvailableTo;
19
use CultuurNet\UDB3\Offer\ReadModel\JSONLD\OfferLDProjector;
20
use CultuurNet\UDB3\Offer\ReadModel\JSONLD\OfferUpdate;
21
use CultuurNet\UDB3\Offer\WorkflowStatus;
22
use CultuurNet\UDB3\Organizer\OrganizerProjectedToJSONLD;
23
use CultuurNet\UDB3\Place\Events\AddressTranslated;
24
use CultuurNet\UDB3\Place\Events\AddressUpdated;
25
use CultuurNet\UDB3\Place\Events\BookingInfoUpdated;
26
use CultuurNet\UDB3\Place\Events\CalendarUpdated;
27
use CultuurNet\UDB3\Place\Events\ContactPointUpdated;
28
use CultuurNet\UDB3\Place\Events\DescriptionTranslated;
29
use CultuurNet\UDB3\Place\Events\DescriptionUpdated;
30
use CultuurNet\UDB3\Place\Events\FacilitiesUpdated;
31
use CultuurNet\UDB3\Place\Events\GeoCoordinatesUpdated;
32
use CultuurNet\UDB3\Place\Events\Image\ImagesImportedFromUDB2;
33
use CultuurNet\UDB3\Place\Events\Image\ImagesUpdatedFromUDB2;
34
use CultuurNet\UDB3\Place\Events\ImageAdded;
35
use CultuurNet\UDB3\Place\Events\ImageRemoved;
36
use CultuurNet\UDB3\Place\Events\ImageUpdated;
37
use CultuurNet\UDB3\Place\Events\LabelAdded;
38
use CultuurNet\UDB3\Place\Events\LabelRemoved;
39
use CultuurNet\UDB3\Place\Events\MainImageSelected;
40
use CultuurNet\UDB3\Place\Events\MajorInfoUpdated;
41
use CultuurNet\UDB3\Place\Events\Moderation\Approved;
42
use CultuurNet\UDB3\Place\Events\Moderation\FlaggedAsDuplicate;
43
use CultuurNet\UDB3\Place\Events\Moderation\FlaggedAsInappropriate;
44
use CultuurNet\UDB3\Place\Events\Moderation\Published;
45
use CultuurNet\UDB3\Place\Events\Moderation\Rejected;
46
use CultuurNet\UDB3\Place\Events\OrganizerDeleted;
47
use CultuurNet\UDB3\Place\Events\OrganizerUpdated;
48
use CultuurNet\UDB3\Place\Events\PlaceCreated;
49
use CultuurNet\UDB3\Place\Events\PlaceDeleted;
50
use CultuurNet\UDB3\Place\Events\PlaceImportedFromUDB2;
51
use CultuurNet\UDB3\Place\Events\PlaceUpdatedFromUDB2;
52
use CultuurNet\UDB3\Place\Events\PriceInfoUpdated;
53
use CultuurNet\UDB3\Place\Events\ThemeUpdated;
54
use CultuurNet\UDB3\Place\Events\TitleTranslated;
55
use CultuurNet\UDB3\Place\Events\TitleUpdated;
56
use CultuurNet\UDB3\Place\Events\TypeUpdated;
57
use CultuurNet\UDB3\Place\Events\TypicalAgeRangeDeleted;
58
use CultuurNet\UDB3\Place\Events\TypicalAgeRangeUpdated;
59
use CultuurNet\UDB3\Place\ReadModel\Relations\RepositoryInterface;
60
use CultuurNet\UDB3\ReadModel\JsonDocument;
61
use CultuurNet\UDB3\ReadModel\JsonDocumentMetaDataEnricherInterface;
62
use CultuurNet\UDB3\Theme;
63
use Symfony\Component\Serializer\SerializerInterface;
64
65
/**
66
 * Projects state changes on Place entities to a JSON-LD read model in a
67
 * document repository.
68
 */
69
class PlaceLDProjector extends OfferLDProjector implements EventListenerInterface
70
{
71
    /**
72
     * @var RepositoryInterface
73
     */
74
    private $placeRelations;
75
76
    /**
77
     * @var CdbXMLImporter
78
     */
79
    protected $cdbXMLImporter;
80
81
    /**
82
     * @param DocumentRepositoryInterface $repository
83
     * @param IriGeneratorInterface $iriGenerator
84
     * @param EntityServiceInterface $organizerService
85
     * @param RepositoryInterface $placeRelations
86
     * @param SerializerInterface $mediaObjectSerializer
87
     * @param CdbXMLImporter $cdbXMLImporter
88
     * @param JsonDocumentMetaDataEnricherInterface $jsonDocumentMetaDataEnricher
89
     * @param EventSpecification $eventFilter
90
     * @param string[] $basePriceTranslations
91
     */
92
    public function __construct(
93
        DocumentRepositoryInterface $repository,
94
        IriGeneratorInterface $iriGenerator,
95
        EntityServiceInterface $organizerService,
96
        RepositoryInterface $placeRelations,
97
        SerializerInterface $mediaObjectSerializer,
98
        CdbXMLImporter $cdbXMLImporter,
99
        JsonDocumentMetaDataEnricherInterface $jsonDocumentMetaDataEnricher,
100
        EventSpecification $eventFilter,
101
        array $basePriceTranslations
102
    ) {
103
        parent::__construct(
104
            $repository,
105
            $iriGenerator,
106
            $organizerService,
107
            $mediaObjectSerializer,
108
            $jsonDocumentMetaDataEnricher,
109
            $eventFilter,
110
            $basePriceTranslations
111
        );
112
113
        $this->placeRelations = $placeRelations;
114
115
        $this->cdbXMLImporter = $cdbXMLImporter;
116
    }
117
118
    /**
119
     * @param PlaceImportedFromUDB2 $placeImportedFromUDB2
120
     * @return JsonDocument
121
     */
122
    protected function applyPlaceImportedFromUDB2(
123
        PlaceImportedFromUDB2 $placeImportedFromUDB2
124
    ) {
125
        return $this->projectActorImportedFromUDB2(
126
            $placeImportedFromUDB2
127
        );
128
    }
129
130
    /**
131
     * @param PlaceUpdatedFromUDB2 $placeUpdatedFromUDB2
132
     * @return JsonDocument
133
     */
134
    protected function applyPlaceUpdatedFromUDB2(
135
        PlaceUpdatedFromUDB2 $placeUpdatedFromUDB2
136
    ) {
137
        return $this->projectActorImportedFromUDB2(
138
            $placeUpdatedFromUDB2
139
        );
140
    }
141
142
    /**
143
     * @param ActorImportedFromUDB2 $actorImportedFromUDB2
144
     * @return JsonDocument
145
     * @throws \CultureFeed_Cdb_ParseException
146
     */
147
    protected function projectActorImportedFromUDB2(
148
        ActorImportedFromUDB2 $actorImportedFromUDB2
149
    ) {
150
        $actorId = $actorImportedFromUDB2->getActorId();
151
152
        $udb2Actor = ActorItemFactory::createActorFromCdbXml(
153
            $actorImportedFromUDB2->getCdbXmlNamespaceUri(),
154
            $actorImportedFromUDB2->getCdbXml()
155
        );
156
157
        try {
158
            $document = $this->loadPlaceDocumentFromRepositoryById($actorId);
159
        } catch (DocumentGoneException $e) {
160
            $document = $this->newDocument($actorId);
161
        }
162
163
        $actorLd = $document->getBody();
164
165
        $actorLd = $this->cdbXMLImporter->documentWithCdbXML(
166
            $actorLd,
167
            $udb2Actor
168
        );
169
170
        // When importing from UDB2 the main language is always nl.
171
        // When updating from UDB2 never change the main language.
172
        if (!isset($actorLd->mainLanguage)) {
173
            $this->setMainLanguage($actorLd, new Language('nl'));
174
        }
175
176
        // Remove geocoordinates, because the address might have been
177
        // updated and we might get inconsistent data if it takes a while
178
        // before the new geocoordinates are added.
179
        // In case geocoding fails, it's also easier to look for places that
180
        // have no geocoordinates instead of places that have incorrect
181
        // geocoordinates.
182
        unset($actorLd->geo);
183
184
        return $document->withBody($actorLd);
185
    }
186
187
    /**
188
     * @param string $id
189
     * @return JsonDocument
190
     */
191 View Code Duplication
    protected function newDocument($id)
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...
192
    {
193
        $document = new JsonDocument($id);
194
195
        $placeLd = $document->getBody();
196
        $placeLd->{'@id'} = $this->iriGenerator->iri($id);
197
        $placeLd->{'@context'} = '/contexts/place';
198
199
        return $document->withBody($placeLd);
200
    }
201
202
    /**
203
     * @param PlaceCreated $placeCreated
204
     * @param DomainMessage $domainMessage
205
     * @return JsonDocument
206
     */
207
    protected function applyPlaceCreated(PlaceCreated $placeCreated, DomainMessage $domainMessage)
208
    {
209
        $document = $this->newDocument($placeCreated->getPlaceId());
210
211
        $jsonLD = $document->getBody();
212
213
        $jsonLD->{'@id'} = $this->iriGenerator->iri(
214
            $placeCreated->getPlaceId()
215
        );
216
217
        $this->setMainLanguage($jsonLD, $placeCreated->getMainLanguage());
218
219
        $jsonLD->name[$placeCreated->getMainLanguage()->getCode()] = $placeCreated->getTitle();
220
221
        $this->setAddress(
222
            $jsonLD,
223
            $placeCreated->getAddress(),
224
            $this->getMainLanguage($jsonLD)
225
        );
226
227
        $calendarJsonLD = $placeCreated->getCalendar()->toJsonLd();
228
        $jsonLD = (object) array_merge((array) $jsonLD, $calendarJsonLD);
229
230
        $availableTo = AvailableTo::createFromCalendar($placeCreated->getCalendar());
231
        $jsonLD->availableTo = (string)$availableTo;
232
233
        $eventType = $placeCreated->getEventType();
234
        $jsonLD->terms = [
235
            $eventType->toJsonLd(),
236
        ];
237
238
        $theme = $placeCreated->getTheme();
239
        if (!empty($theme)) {
240
            $jsonLD->terms[] = $theme->toJsonLd();
241
        }
242
243
        $recordedOn = $domainMessage->getRecordedOn()->toString();
244
        $jsonLD->created = \DateTime::createFromFormat(
245
            DateTime::FORMAT_STRING,
246
            $recordedOn
247
        )->format('c');
248
249
        $jsonLD->modified = $jsonLD->created;
250
251
        $metaData = $domainMessage->getMetadata()->serialize();
252 View Code Duplication
        if (isset($metaData['user_email'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across 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...
253
            $jsonLD->creator = $metaData['user_email'];
254
        } elseif (isset($metaData['user_nick'])) {
255
            $jsonLD->creator = $metaData['user_nick'];
256
        }
257
258
        $jsonLD->workflowStatus = WorkflowStatus::DRAFT()->getName();
259
260
        return $document->withBody($jsonLD);
261
    }
262
263
    /**
264
     * @param PlaceDeleted $placeDeleted
265
     * @return null
266
     */
267 View Code Duplication
    protected function applyPlaceDeleted(PlaceDeleted $placeDeleted)
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...
268
    {
269
        $document = $this->loadDocumentFromRepository($placeDeleted);
270
271
        $jsonLD = $document->getBody();
272
273
        $jsonLD->workflowStatus = WorkflowStatus::DELETED()->getName();
274
275
        return $document->withBody($jsonLD);
276
    }
277
278
    /**
279
     * Apply the major info updated command to the projector.
280
     * @param MajorInfoUpdated $majorInfoUpdated
281
     * @return JsonDocument
282
     */
283
    protected function applyMajorInfoUpdated(MajorInfoUpdated $majorInfoUpdated)
284
    {
285
        $document = $this
286
            ->loadPlaceDocumentFromRepositoryById($majorInfoUpdated->getPlaceId())
287
            ->apply(OfferUpdate::calendar($majorInfoUpdated->getCalendar()));
0 ignored issues
show
Compatibility introduced by
$majorInfoUpdated->getCalendar() of type object<CultuurNet\UDB3\CalendarInterface> is not a sub-type of object<CultuurNet\UDB3\Calendar>. It seems like you assume a concrete implementation of the interface CultuurNet\UDB3\CalendarInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
288
289
        $jsonLD = $document->getBody();
290
291
        $jsonLD->name->{$this->getMainLanguage($jsonLD)->getCode()} = $majorInfoUpdated->getTitle();
292
293
        $this->setAddress(
294
            $jsonLD,
295
            $majorInfoUpdated->getAddress(),
296
            $this->getMainLanguage($jsonLD)
297
        );
298
299
        $availableTo = AvailableTo::createFromCalendar($majorInfoUpdated->getCalendar());
300
        $jsonLD->availableTo = (string)$availableTo;
301
302
        // Remove old theme and event type.
303
        $jsonLD->terms = array_filter($jsonLD->terms, function ($term) {
304
            return $term->domain !== EventType::DOMAIN &&  $term->domain !== Theme::DOMAIN;
305
        });
306
307
        $eventType = $majorInfoUpdated->getEventType();
308
        $jsonLD->terms = [
309
            $eventType->toJsonLd(),
310
        ];
311
312
        $theme = $majorInfoUpdated->getTheme();
313
        if (!empty($theme)) {
314
            $jsonLD->terms[] = $theme->toJsonLd();
315
        }
316
317
        // Remove geocoordinates, because the address might have been
318
        // updated and we might get inconsistent data if it takes a while
319
        // before the new geocoordinates are added.
320
        // In case geocoding fails, it's also easier to look for places that
321
        // have no geocoordinates instead of places that have incorrect
322
        // geocoordinates.
323
        unset($jsonLD->geo);
324
325
        return $document->withBody($jsonLD);
326
    }
327
328
    /**
329
     * @param AddressUpdated $addressUpdated
330
     * @return JsonDocument
331
     */
332 View Code Duplication
    protected function applyAddressUpdated(AddressUpdated $addressUpdated)
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...
333
    {
334
        $document = $this->loadPlaceDocumentFromRepositoryById($addressUpdated->getPlaceId());
335
        $jsonLD = $document->getBody();
336
        $this->setAddress($jsonLD, $addressUpdated->getAddress(), $this->getMainLanguage($jsonLD));
337
        return $document->withBody($jsonLD);
338
    }
339
340
    /**
341
     * @param AddressTranslated $addressTranslated
342
     * @return JsonDocument
343
     */
344 View Code Duplication
    protected function applyAddressTranslated(AddressTranslated $addressTranslated)
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...
345
    {
346
        $document = $this->loadPlaceDocumentFromRepositoryById($addressTranslated->getPlaceId());
347
        $jsonLD = $document->getBody();
348
        $this->setAddress($jsonLD, $addressTranslated->getAddress(), $addressTranslated->getLanguage());
349
        return $document->withBody($jsonLD);
350
    }
351
352
    /**
353
     * @param \stdClass $jsonLd
354
     * @param Address $address
355
     * @param Language $language
356
     */
357
    protected function setAddress(\stdClass $jsonLd, Address $address, Language $language)
358
    {
359
        if (!isset($jsonLd->address)) {
360
            $jsonLd->address = new \stdClass();
361
        }
362
363
        if (isset($jsonLd->address->streetAddress)) {
364
            // Old projections have their address in a single language.
365
            // Set the old address as the address for the main language before
366
            // updating it or adding another address.
367
            // @replay_i18n
368
            // @see https://jira.uitdatabank.be/browse/III-2201
369
            $mainLanguageCode = $this->getMainLanguage($jsonLd)->getCode();
370
            $jsonLd->address = (object) [
371
                $mainLanguageCode => $jsonLd->address,
372
            ];
373
        }
374
375
        $jsonLd->address->{$language->getCode()} = $address->toJsonLd();
376
    }
377
378
    /**
379
     * @param GeoCoordinatesUpdated $geoCoordinatesUpdated
380
     * @return JsonDocument
381
     */
382 View Code Duplication
    protected function applyGeoCoordinatesUpdated(GeoCoordinatesUpdated $geoCoordinatesUpdated)
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...
383
    {
384
        $document = $this->loadPlaceDocumentFromRepositoryById($geoCoordinatesUpdated->getItemId());
385
386
        $placeLd = $document->getBody();
387
388
        $placeLd->geo = (object) [
389
            'latitude' => $geoCoordinatesUpdated->getCoordinates()->getLatitude()->toDouble(),
390
            'longitude' => $geoCoordinatesUpdated->getCoordinates()->getLongitude()->toDouble(),
391
        ];
392
393
        return $document->withBody($placeLd);
394
    }
395
396
    /**
397
     * @param OrganizerProjectedToJSONLD $organizerProjectedToJSONLD
398
     * @return JsonDocument[]
399
     *
400
     * @throws \CultuurNet\UDB3\EntityNotFoundException
401
     */
402 View Code Duplication
    protected function applyOrganizerProjectedToJSONLD(
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...
403
        OrganizerProjectedToJSONLD $organizerProjectedToJSONLD
404
    ) {
405
        $placeIds = $this->placeRelations->getPlacesOrganizedByOrganizer(
406
            $organizerProjectedToJSONLD->getId()
407
        );
408
409
        $organizer = $this->organizerService->getEntity(
410
            $organizerProjectedToJSONLD->getId()
411
        );
412
413
        $documents = [];
414
415
        foreach ($placeIds as $placeId) {
416
            $document = $this->loadDocumentFromRepositoryByItemId($placeId);
417
            $placeLD = $document->getBody();
418
419
            $newPlaceLD = clone $placeLD;
420
            $newPlaceLD->organizer = json_decode($organizer);
421
422
            if ($newPlaceLD != $placeLD) {
423
                $documents[] = $document->withBody($newPlaceLD);
424
            }
425
        }
426
427
        return $documents;
428
    }
429
430
    /**
431
     * @param string $itemId
432
     * @return JsonDocument
433
     */
434
    protected function loadPlaceDocumentFromRepositoryById($itemId)
435
    {
436
        $document = $this->repository->get($itemId);
437
438
        if (!$document) {
439
            return $this->newDocument($itemId);
440
        }
441
442
        return $document;
443
    }
444
445
    /**
446
     * @return string
447
     */
448
    protected function getLabelAddedClassName()
449
    {
450
        return LabelAdded::class;
451
    }
452
453
    /**
454
     * @return string
455
     */
456
    protected function getLabelRemovedClassName()
457
    {
458
        return LabelRemoved::class;
459
    }
460
461
    /**
462
     * @return string
463
     */
464
    protected function getImageAddedClassName()
465
    {
466
        return ImageAdded::class;
467
    }
468
469
    /**
470
     * @return string
471
     */
472
    protected function getImageRemovedClassName()
473
    {
474
        return ImageRemoved::class;
475
    }
476
477
    /**
478
     * @return string
479
     */
480
    protected function getImageUpdatedClassName()
481
    {
482
        return ImageUpdated::class;
483
    }
484
485
    protected function getMainImageSelectedClassName()
486
    {
487
        return MainImageSelected::class;
488
    }
489
490
    /**
491
     * @return string
492
     */
493
    protected function getTitleTranslatedClassName()
494
    {
495
        return TitleTranslated::class;
496
    }
497
498
    /**
499
     * @return string
500
     */
501
    protected function getDescriptionTranslatedClassName()
502
    {
503
        return DescriptionTranslated::class;
504
    }
505
506
    /**
507
     * @return string
508
     */
509
    protected function getOrganizerUpdatedClassName()
510
    {
511
        return OrganizerUpdated::class;
512
    }
513
514
    /**
515
     * @return string
516
     */
517
    protected function getOrganizerDeletedClassName()
518
    {
519
        return OrganizerDeleted::class;
520
    }
521
522
    protected function getBookingInfoUpdatedClassName()
523
    {
524
        return BookingInfoUpdated::class;
525
    }
526
527
    /**
528
     * @return string
529
     */
530
    protected function getPriceInfoUpdatedClassName()
531
    {
532
        return PriceInfoUpdated::class;
533
    }
534
535
    protected function getContactPointUpdatedClassName()
536
    {
537
        return ContactPointUpdated::class;
538
    }
539
540
    protected function getDescriptionUpdatedClassName()
541
    {
542
        return DescriptionUpdated::class;
543
    }
544
545
    protected function getCalendarUpdatedClassName()
546
    {
547
        return CalendarUpdated::class;
548
    }
549
550
    protected function getTypicalAgeRangeUpdatedClassName()
551
    {
552
        return TypicalAgeRangeUpdated::class;
553
    }
554
555
    protected function getTypicalAgeRangeDeletedClassName()
556
    {
557
        return TypicalAgeRangeDeleted::class;
558
    }
559
560
    protected function getPublishedClassName()
561
    {
562
        return Published::class;
563
    }
564
565
    protected function getApprovedClassName()
566
    {
567
        return Approved::class;
568
    }
569
570
    protected function getRejectedClassName()
571
    {
572
        return Rejected::class;
573
    }
574
575
    protected function getFlaggedAsDuplicateClassName()
576
    {
577
        return FlaggedAsDuplicate::class;
578
    }
579
580
    protected function getFlaggedAsInappropriateClassName()
581
    {
582
        return FlaggedAsInappropriate::class;
583
    }
584
585
    protected function getImagesImportedFromUdb2ClassName()
586
    {
587
        return ImagesImportedFromUDB2::class;
588
    }
589
590
    protected function getImagesUpdatedFromUdb2ClassName()
591
    {
592
        return ImagesUpdatedFromUDB2::class;
593
    }
594
595
    protected function getTitleUpdatedClassName()
596
    {
597
        return TitleUpdated::class;
598
    }
599
600
    protected function getTypeUpdatedClassName()
601
    {
602
        return TypeUpdated::class;
603
    }
604
605
    protected function getThemeUpdatedClassName()
606
    {
607
        return ThemeUpdated::class;
608
    }
609
610
    protected function getFacilitiesUpdatedClassName()
611
    {
612
        return FacilitiesUpdated::class;
613
    }
614
}
615