ImageSetPrimarySubscriber::resetPrimaryImages()   A
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 21
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 21
rs 9.6111
c 0
b 0
f 0
cc 5
nc 4
nop 1
1
<?php
2
3
namespace App\EventSubscriber\Image;
4
5
use App\Entity\Image;
6
use App\Event\Image\ImageSetPrimaryEvent;
7
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8
9
class ImageSetPrimarySubscriber extends AbstractImageSubscriber implements EventSubscriberInterface
10
{
11
12
    public function resetPrimaryImages(ImageSetPrimaryEvent $event)
13
    {
14
15
        if (getenv('PRIMARY_IMAGE_CAROUSEL') !== "false") {
16
            return;
17
        }
18
19
        $trick = $event->getTrick();
20
        $image = $event->getEntity();
21
22
        //we only want one front image, so reset others. we could just reset the primary but this corrects bugs if we have 2 primary images if we switch from carousel to uniques
23
        //leaving the clicked button on primary so the next step ca take care of the setting / unsetting
24
        $trickImages = $trick->getImages();
25
26
        /** @var Image $trickImage */
27
        foreach ($trickImages as $trickImage) {
28
            if ($trickImage->getPrimaryImage() && $trickImage !== $image) {
29
                $trickImage->setPrimaryImage(false);
30
            }
31
        }
32
        $this->em->persist($trick);
33
34
    }
35
36
    public function setPrimaryImageToggle(ImageSetPrimaryEvent $event)
37
    {
38
39
        $trick = $event->getTrick();
40
        $image = $event->getEntity();
41
        $trickImages = $trick->getImages();
42
43
        //setting the actual image, if we clicked on the same image then unset
44
        /** @var Image $trickImage */
45
        foreach ($trickImages as $trickImage) {
46
            if ($trickImage === $image) {
47
                if ($trickImage->getPrimaryImage()) {
48
                    $trickImage->setPrimaryImage(false);
49
                } else {
50
                    $trickImage->setPrimaryImage(true);
51
                }
52
53
            }
54
            $this->em->persist($trick);
55
        }
56
    }
57
58
    /**
59
     * @return array The event names to listen to
60
     */
61
    public static function getSubscribedEvents()
62
    {
63
        return [
64
            ImageSetPrimaryEvent::NAME => [
65
                ['resetPrimaryImages', 50],
66
                ['setPrimaryImageToggle', 40],
67
                ['flush', 20],
68
            ],
69
        ];
70
    }
71
72
73
}