. */ namespace SP\Core; use DI\Container; use Klein\Klein; use SP\Bootstrap; use SP\Config\Config; use SP\Core\Context\ContextInterface; use SP\Core\Events\EventDispatcher; use SP\Http\Request; use SP\Providers\Log\DatabaseLogHandler; use SP\Providers\Log\FileLogHandler; use SP\Providers\Log\RemoteSyslogHandler; use SP\Providers\Log\SyslogHandler; use SP\Providers\Mail\MailHandler; use SP\Providers\Notification\NotificationHandler; use SP\Util\Util; /** * Class ModuleBase * * @package SP\Core */ abstract class ModuleBase { /** * @var \SP\Config\ConfigData */ protected $configData; /** * @var Config */ protected $config; /** * @var Klein */ protected $router; /** * @var Container */ protected $container; /** * @var Request */ protected $request; /** * Module constructor. * * @param Container $container * * @throws \DI\DependencyException * @throws \DI\NotFoundException */ public function __construct(Container $container) { $this->container = $container; $this->config = $container->get(Config::class); $this->configData = $this->config->getConfigData(); $this->router = $container->get(Klein::class); $this->request = $container->get(Request::class); } /** * @param string $controller * * @return mixed */ abstract public function initialize($controller); /** * Comprobar si el modo mantenimiento está activado * Esta función comprueba si el modo mantenimiento está activado. * Devuelve un error 503 y un reintento de 120s al cliente. * * @param ContextInterface $context * * @return bool */ public function checkMaintenanceMode(ContextInterface $context) { if ($this->configData->isMaintenance()) { Bootstrap::$LOCK = Util::getAppLock(); return ($this->request->isAjax() || (Bootstrap::$LOCK !== false && Bootstrap::$LOCK->userId > 0 && $context->isLoggedIn() && Bootstrap::$LOCK->userId === $context->getUserData()->getId()) ) === false; } return false; } /** * Initializes event handlers * * @throws \DI\DependencyException * @throws \DI\NotFoundException */ protected function initEventHandlers() { $eventDispatcher = $this->container->get(EventDispatcher::class); if ($this->configData->isLogEnabled()) { $eventDispatcher->attach($this->container->get(DatabaseLogHandler::class)); if (DEBUG) { $eventDispatcher->attach($this->container->get(FileLogHandler::class)); } } if ($this->configData->isMailEnabled()) { $eventDispatcher->attach($this->container->get(MailHandler::class)); } if ($this->configData->isSyslogEnabled()) { $eventDispatcher->attach($this->container->get(SyslogHandler::class)); } if ($this->configData->isSyslogRemoteEnabled()) { $eventDispatcher->attach($this->container->get(RemoteSyslogHandler::class)); } $eventDispatcher->attach($this->container->get(NotificationHandler::class)); } }