factory = $factory; $this->websiteCollectionFactory = $websiteCollectionFactory; } /** * @inheritdoc */ public function get($code) { if (isset($this->entities[$code])) { return $this->entities[$code]; } $websiteData = $this->getAppConfig()->get('scopes', "websites/$code", []); $website = $this->factory->create([ 'data' => $websiteData ]); if ($website->getId() === null) { throw new NoSuchEntityException( __( sprintf( "The website with code %s that was requested wasn't found. Verify the website and try again.", $code ) ) ); } $this->entities[$code] = $website; $this->entitiesById[$website->getId()] = $website; return $website; } /** * @inheritdoc */ public function getById($id) { if (isset($this->entitiesById[$id])) { return $this->entitiesById[$id]; } $websiteData = $this->getAppConfig()->get('scopes', "websites/$id", []); $website = $this->factory->create([ 'data' => $websiteData ]); if ($website->getId() === null) { throw new NoSuchEntityException( __( sprintf( "The website with id %s that was requested wasn't found. Verify the website and try again.", $id ) ) ); } $this->entities[$website->getCode()] = $website; $this->entitiesById[$id] = $website; return $website; } /** * @inheritdoc */ public function getList() { if (!$this->allLoaded) { $websites = $this->getAppConfig()->get('scopes', 'websites', []); foreach ($websites as $data) { $website = $this->factory->create([ 'data' => $data ]); $this->entities[$website->getCode()] = $website; $this->entitiesById[$website->getId()] = $website; } $this->allLoaded = true; } return $this->entities; } /** * @inheritdoc */ public function getDefault() { if (!$this->default) { foreach ($this->entities as $entity) { if ($entity->getIsDefault()) { $this->default = $entity; return $this->default; } } if (!$this->allLoaded) { $this->initDefaultWebsite(); } if (!$this->default) { throw new \DomainException(__("The default website isn't defined. Set the website and try again.")); } } return $this->default; } /** * @inheritdoc */ public function clean() { $this->entities = []; $this->entitiesById = []; $this->default = null; $this->allLoaded = false; } /** * Retrieve application config. * * @deprecated 100.1.3 * @return Config */ private function getAppConfig() { if (!$this->appConfig) { $this->appConfig = ObjectManager::getInstance()->get(Config::class); } return $this->appConfig; } /** * Initialize default website. * * @return void */ private function initDefaultWebsite() { $websites = (array) $this->getAppConfig()->get('scopes', 'websites', []); foreach ($websites as $data) { if (isset($data['is_default']) && $data['is_default'] == 1) { if ($this->default) { throw new \DomainException( __( 'The default website is invalid. ' . 'Make sure no more than one default is defined and try again.' ) ); } $website = $this->factory->create([ 'data' => $data ]); $this->default = $website; $this->entities[$this->default->getCode()] = $this->default; $this->entitiesById[$this->default->getId()] = $this->default; } } } }