scopeConfig = $scopeConfig; $this->config = $config; $this->enableConfigFlag = $enableConfigFlag; $this->requireRequestParam = $requireRequestParam; $this->area = $area; $this->request = $request; if (!in_array($this->area, [Area::AREA_FRONTEND, Area::AREA_ADMINHTML])) { throw new \InvalidArgumentException('Area parameter must be one of frontend or adminhtml'); } } /** * Return true if area is configured to be active * @return bool */ private function isAreaEnabled() { return (($this->area === Area::AREA_ADMINHTML) && $this->config->isEnabledBackend()) || (($this->area === Area::AREA_FRONTEND) && $this->config->isEnabledFrontend()); } /** * Return true if current zone is enabled * @return bool */ private function isZoneEnabled() { return !$this->enableConfigFlag || $this->scopeConfig->getValue($this->enableConfigFlag); } /** * Return true if request if valid * @return bool */ private function isRequestValid() { return !$this->requireRequestParam || $this->request->getParam($this->requireRequestParam); } /** * Return true if check is required * @return bool */ public function execute() { return $this->isAreaEnabled() && $this->isZoneEnabled() && $this->isRequestValid(); } }