app/Plugin/EtunaCheckedItem/EtunaCheckedItemEvent.php line 51

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) Takashi Otaki All Rights Reserved.
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Plugin\EtunaCheckedItem;
  11. use Eccube\Event\EventArgs;
  12. use Plugin\EtunaCheckedItem\Repository\EtunaCheckedItemConfigRepository;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpFoundation\Cookie;
  15. use Symfony\Component\HttpFoundation\Response;
  16. class EtunaCheckedItemEvent implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var EtunaCheckedItemConfigRepository
  20.      */
  21.     protected $etunaCheckedItemConfigRepository;
  22.     /**
  23.      * EtunaCheckedItem constructor.
  24.      *
  25.      * @param EtunaCheckedItemConfigRepository $etunaCheckedItemConfigRepository
  26.      */
  27.     public function __construct(
  28.         EtunaCheckedItemConfigRepository $etunaCheckedItemConfigRepository)
  29.     {
  30.         $this->etunaCheckedItemConfigRepository $etunaCheckedItemConfigRepository;
  31.     }
  32.     /**
  33.      * @return array
  34.      */
  35.     public static function getSubscribedEvents()
  36.     {
  37.         return [
  38.             'front.product.detail.initialize' => 'detail',
  39.         ];
  40.     }
  41.     /**
  42.      * @param EventArgs $event
  43.      */
  44.     public function detail(EventArgs $event)
  45.     {
  46.         $request $event->getRequest();
  47.         /** @var Product $Product */
  48.         $Product $event->getArgument('Product');
  49.         $productId $Product->getId();
  50.         $Config $this->etunaCheckedItemConfigRepository->get();
  51.         $checkedItems $request->cookies->get('CheckedItemIds');
  52.         $checkedItemArray = array();
  53.         if ($checkedItems !== null) {
  54.             $checkedItemArray explode("_"$checkedItems);
  55.         }
  56.         $duplicateKeys array_keys($checkedItemArray$productId);
  57.         if (count($duplicateKeys) > 0) {
  58.             foreach ($duplicateKeys as $duplicateKey) {
  59.                 unset($checkedItemArray[$duplicateKey]);
  60.             }
  61.         }
  62.         $checkedItemArray[] = $productId;
  63.         $checkedItemDays $Config->getCheckedItemDays();
  64.         $checkedItemCount $Config->getCheckedItemCount();
  65.         //設定数以上の場合の削除処理
  66.         if ( count($checkedItemArray) > $checkedItemCount) {
  67.             $checkedItemArrayCount count($checkedItemArray) - $checkedItemCount;
  68.             if ($checkedItemArrayCount == 1) {
  69.                 unset($checkedItemArray[0]);
  70.             } else if ($checkedItemArrayCount 1) {
  71.                 foreach(range(0,$checkedItemArrayCount) as $i){
  72.                     unset($checkedItemArray[$i]);
  73.                 }
  74.             }
  75.         }
  76.         $checkedItemArray implode("_"$checkedItemArray);
  77.         setcookie('CheckedItemIds'$checkedItemArraytime() + 3600 24 $checkedItemDays'/');
  78.     }
  79. }