Starbugstone/SnowTricks

View on GitHub
src/EventSubscriber/Image/ImageSetPrimarySubscriber.php

Summary

Maintainability
A
35 mins
Test Coverage
<?php

namespace App\EventSubscriber\Image;

use App\Entity\Image;
use App\Event\Image\ImageSetPrimaryEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ImageSetPrimarySubscriber extends AbstractImageSubscriber implements EventSubscriberInterface
{

    public function resetPrimaryImages(ImageSetPrimaryEvent $event)
    {

        if (getenv('PRIMARY_IMAGE_CAROUSEL') !== "false") {
            return;
        }

        $trick = $event->getTrick();
        $image = $event->getEntity();

        //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
        //leaving the clicked button on primary so the next step ca take care of the setting / unsetting
        $trickImages = $trick->getImages();

        /** @var Image $trickImage */
        foreach ($trickImages as $trickImage) {
            if ($trickImage->getPrimaryImage() && $trickImage !== $image) {
                $trickImage->setPrimaryImage(false);
            }
        }
        $this->em->persist($trick);

    }

    public function setPrimaryImageToggle(ImageSetPrimaryEvent $event)
    {

        $trick = $event->getTrick();
        $image = $event->getEntity();
        $trickImages = $trick->getImages();

        //setting the actual image, if we clicked on the same image then unset
        /** @var Image $trickImage */
        foreach ($trickImages as $trickImage) {
            if ($trickImage === $image) {
                if ($trickImage->getPrimaryImage()) {
                    $trickImage->setPrimaryImage(false);
                } else {
                    $trickImage->setPrimaryImage(true);
                }

            }
            $this->em->persist($trick);
        }
    }

    /**
     * @return array The event names to listen to
     */
    public static function getSubscribedEvents()
    {
        return [
            ImageSetPrimaryEvent::NAME => [
                ['resetPrimaryImages', 50],
                ['setPrimaryImageToggle', 40],
                ['flush', 20],
            ],
        ];
    }


}