Passed
Push — master ( 6b8b10...614334 )
by Stone
06:50 queued 10s
created

ImageSetPrimarySubscriber::setPrimaryImageToggle()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 19
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 19
rs 9.9332
c 0
b 0
f 0
cc 4
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
        if (getenv('PRIMARY_IMAGE_CAROUSEL') === "false") {
15
            $trick = $event->getTrick();
16
            $image = $event->getEntity();
17
18
            //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
19
            //leaving the clicked button on primary so the next step ca take care of the setting / unsetting
20
            $trickImages = $trick->getImages();
21
22
            /** @var Image $trickImage */
23
            foreach ($trickImages as $trickImage) {
24
                if ($trickImage->getPrimaryImage() && $trickImage !== $image ) {
25
                    $trickImage->setPrimaryImage(false);
26
                }
27
28
            }
29
            $this->em->persist($trick);
30
        }
31
    }
32
33
    public function setPrimaryImageToggle(ImageSetPrimaryEvent $event)
34
    {
35
36
        $trick = $event->getTrick();
37
        $image = $event->getEntity();
38
        $trickImages = $trick->getImages();
39
40
        //setting the actual image, if we clicked on the same image then unset
41
        /** @var Image $trickImage */
42
        foreach ($trickImages as $trickImage) {
43
            if ($trickImage === $image) {
44
                if($trickImage->getPrimaryImage()){
45
                    $trickImage->setPrimaryImage(false);
46
                }else{
47
                    $trickImage->setPrimaryImage(true);
48
                }
49
50
            }
51
            $this->em->persist($trick);
52
        }
53
    }
54
55
    /**
56
     * @return array The event names to listen to
57
     */
58
    public static function getSubscribedEvents()
59
    {
60
        return [
61
            ImageSetPrimaryEvent::NAME => [
62
                ['resetPrimaryImages', 50],
63
                ['setPrimaryImageToggle', 40],
64
                ['flush', 20],
65
            ],
66
        ];
67
    }
68
69
70
}