vendor/php-flasher/flasher-symfony/Storage/Storage.php line 71

Open in your IDE?
  1. <?php
  2. namespace Flasher\Symfony\Storage;
  3. use Flasher\Prime\Envelope;
  4. use Flasher\Prime\Stamp\UuidStamp;
  5. use Flasher\Prime\Storage\StorageInterface;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\HttpFoundation\Session as LegacySession;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. final class Storage implements StorageInterface
  10. {
  11.     const ENVELOPES_NAMESPACE 'flasher::envelopes';
  12.     /**
  13.      * @var SessionInterface|RequestStack
  14.      */
  15.     private $requestStack;
  16.     /**
  17.      * @param SessionInterface|RequestStack $session
  18.      */
  19.     public function __construct($requestStack)
  20.     {
  21.         $this->requestStack $requestStack;
  22.     }
  23.     public function all()
  24.     {
  25.         return $this->session()->get(self::ENVELOPES_NAMESPACE, array());
  26.     }
  27.     public function add($envelopes)
  28.     {
  29.         $envelopes is_array($envelopes) ? $envelopes func_get_args();
  30.         $this->session()->set(self::ENVELOPES_NAMESPACEarray_merge($this->all(), $envelopes));
  31.     }
  32.     public function update($envelopes)
  33.     {
  34.         $envelopes is_array($envelopes) ? $envelopes func_get_args();
  35.         $map UuidStamp::indexByUuid($envelopes);
  36.         $store $this->all();
  37.         foreach ($store as $index => $envelope) {
  38.             $uuid $envelope->get('Flasher\Prime\Stamp\UuidStamp')->getUuid();
  39.             if (!isset($map[$uuid])) {
  40.                 continue;
  41.             }
  42.             $store[$index] = $map[$uuid];
  43.         }
  44.         $this->session()->set(self::ENVELOPES_NAMESPACE$store);
  45.     }
  46.     public function remove($envelopes)
  47.     {
  48.         $envelopes is_array($envelopes) ? $envelopes func_get_args();
  49.         $map UuidStamp::indexByUuid($envelopes);
  50.         $store array_filter($this->all(), function (Envelope $envelope) use ($map) {
  51.             $uuid $envelope->get('Flasher\Prime\Stamp\UuidStamp')->getUuid();
  52.             return !isset($map[$uuid]);
  53.         });
  54.         $this->session()->set(self::ENVELOPES_NAMESPACE$store);
  55.     }
  56.     public function clear()
  57.     {
  58.         $this->session()->set(self::ENVELOPES_NAMESPACE, array());
  59.     }
  60.     /**
  61.      * @return SessionInterface
  62.      */
  63.     private function session()
  64.     {
  65.         if ($this->requestStack instanceof SessionInterface || $this->requestStack instanceof LegacySession) {
  66.             return $this->requestStack;
  67.         }
  68.         if (method_exists($this->requestStack'getSession')) {
  69.             return $this->requestStack->getSession();
  70.         }
  71.         $request $this->requestStack->getCurrentRequest();
  72.         return $request->getSession();
  73.     }
  74. }