* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ require_once dirname(__FILE__) . '/../RetailcrmPrestashopLoader.php'; abstract class RetailcrmAbstractEvent implements RetailcrmEventInterface { private $cliMode; private $force; private $shopId; /** * {@inheritDoc} */ abstract public function execute(); /** * {@inheritDoc} */ public function getName() { throw new InvalidArgumentException('Not implemented.'); } /** * Sets cli mode to true. CLI mode here stands for any execution outside of JobManager context. * * @param bool $mode */ public function setCliMode($mode) { $this->cliMode = (bool) $mode; } /** * @param mixed $force */ public function setForce($force) { $this->force = (bool) $force; } /** * Sets context shop id. * * @param string|int|null $shopId */ public function setShopId($shopId = null) { if (null !== $shopId) { $this->shopId = (int) $shopId; } } /** * Returns true if current job is running now * * @return bool */ protected function isRunning() { return !$this->force && ('' !== RetailcrmJobManager::getCurrentJob() || '' !== RetailcrmCli::getCurrentJob()); } /** * Sets current job as active based on execution context. * * @return bool */ protected function setRunning() { if ($this->force) { return true; } if ($this->cliMode) { return RetailcrmCli::setCurrentJob($this->getName()); } return RetailcrmJobManager::setCurrentJob($this->getName()); } /** * Returns array of active shops or false. * * @return array|false */ protected function getShops() { $shops = Shop::getShops(); if (Shop::isFeatureActive()) { if (0 < $this->shopId) { if (isset($shops[$this->shopId])) { RetailcrmLogger::writeDebug( __METHOD__, sprintf( 'Running job for shop %s (%s).', $shops[$this->shopId]['name'], $this->shopId ) ); return [$shops[$this->shopId]]; } else { RetailcrmLogger::writeDebug( __METHOD__, sprintf( 'Shop with id=%s not found.', $this->shopId ) ); return []; } } return $shops; } else { return [$shops[Shop::getContextShopID()]]; } } }