* @copyright 2020 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 $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; } /** * Sets context shop id. * * @param string|int|null $shopId */ public function setShopId($shopId = null) { if (!is_null($shopId)) $this->shopId = intval($shopId); } /** * Returns true if current job is running now * * @return bool */ protected function isRunning() { return (strcmp(RetailcrmJobManager::getCurrentJob(), $this->getName() === 0)) || (strcmp(RetailcrmCli::getCurrentJob(), $this->getName() === 0)); } /** * Sets current job as active based on execution context. * * @return bool */ protected function setRunning() { 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 ($this->shopId > 0) { 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()]]; } } }