vendor/ezsystems/ezcommerce-shop/src/Silversolutions/Bundle/EshopBundle/Services/StashErpSemaphoreService.php line 16

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. namespace Silversolutions\Bundle\EshopBundle\Services;
  7. use Silversolutions\Bundle\EshopBundle\Exceptions\ErpDisabledException;
  8. use Stash\Interfaces\ItemInterface;
  9. use Stash\Interfaces\PoolInterface;
  10. /**
  11.  * A Semaphore service for ERP requests which uses Stash for locking persistence.
  12.  */
  13. class StashErpSemaphoreService implements ErpSemaphoreServiceInterface
  14. {
  15.     /**
  16.      * @var PoolInterface
  17.      */
  18.     protected $stashPool;
  19.     /**
  20.      * @var string
  21.      */
  22.     protected $stashItemId;
  23.     /**
  24.      * @var int
  25.      */
  26.     protected $maxLockTime;
  27.     /**
  28.      * @param PoolInterface $stashPool
  29.      * @param string $stashItemId
  30.      * @param int $maxLockTime
  31.      */
  32.     public function __construct(PoolInterface $stashPool$stashItemId$maxLockTime)
  33.     {
  34.         $this->stashPool $stashPool;
  35.         $this->stashItemId $stashItemId;
  36.         $this->maxLockTime $maxLockTime;
  37.     }
  38.     /**
  39.      * Checks the stash item in the pool. If it exists, ErpDisabledException
  40.      * is thrown.
  41.      *
  42.      * @throws ErpDisabledException
  43.      */
  44.     public function testAvailability()
  45.     {
  46.         /** @var ItemInterface $item */
  47.         $item $this->stashPool->getItem($this->stashItemId);
  48.         if (!$item->isMiss()) {
  49.             $lastLockTime $item->get();
  50.             $lockTimeLeft $lastLockTime $this->maxLockTime time();
  51.             throw new ErpDisabledException('ERP communication still disabled for ' $lockTimeLeft ' seconds.');
  52.         }
  53.     }
  54.     /**
  55.      * Sets or extends the timeout of the semaphore by resetting the stash
  56.      * item data with a specific time-to-live (TTL).
  57.      */
  58.     public function setUnavailable()
  59.     {
  60.         /** @var ItemInterface $item */
  61.         $item $this->stashPool->getItem($this->stashItemId);
  62.         $item->set(time())->setTTL($this->maxLockTime)->save();
  63.     }
  64. }