<?php
/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Sulu\Component\Webspace;
use Sulu\Component\Localization\Localization;
use Sulu\Component\Webspace\Exception\EnvironmentNotFoundException;
use Sulu\Component\Webspace\Exception\PortalLocalizationNotFoundException;
/**
* Container for a portal configuration.
*/
class Portal
{
/**
* The name of the portal.
*
* @var string
*/
private $name;
/**
* The key of the portal.
*
* @var string
*/
private $key;
/**
* An array of localizations.
*
* @var Localization[]
*/
private $localizations;
/**
* The default localization for this portal.
*
* @var Localization
*/
private $defaultLocalization;
/**
* The x-default localization for this portal.
*
* @deprecated use $defaultLocalization instead
*
* @var Localization
*/
private $xDefaultLocalization;
/**
* @var Environment[]
*/
private $environments;
/**
* @var Webspace
*/
private $webspace;
/**
* Sets the name of the portal.
*
* @param string $name The name of the portal
*/
public function setName($name)
{
$this->name = $name;
}
/**
* Returns the name of the portal.
*
* @return string The name of the portal
*/
public function getName()
{
return $this->name;
}
/**
* @param string $key
*/
public function setKey($key)
{
$this->key = $key;
}
/**
* @return string
*/
public function getKey()
{
return $this->key;
}
/**
* Adds the given language to the portal.
*/
public function addLocalization(Localization $localization)
{
$this->localizations[] = $localization;
if ($localization->isDefault()) {
$this->setDefaultLocalization($localization);
}
if ($localization->isXDefault(false)) {
$this->setXDefaultLocalization($localization, false);
}
}
/**
* Sets the localizations to this portal.
*
* @param Localization[] $localizations
*/
public function setLocalizations($localizations)
{
$this->localizations = $localizations;
}
/**
* Returns the languages of this portal.
*
* @return Localization[] The languages of this portal
*/
public function getLocalizations()
{
return $this->localizations;
}
public function getLocalization($locale)
{
foreach ($this->getLocalizations() as $localization) {
if ($locale === $localization->getLocale()) {
return $localization;
}
}
throw new PortalLocalizationNotFoundException($this, $locale);
}
/**
* @param Localization $defaultLocalization
*/
public function setDefaultLocalization($defaultLocalization)
{
$this->defaultLocalization = $defaultLocalization;
if (!$this->getXDefaultLocalization()) {
$this->setXDefaultLocalization($defaultLocalization);
}
}
/**
* @return Localization
*/
public function getDefaultLocalization()
{
return $this->defaultLocalization;
}
/**
* @param Localization $xDefaultLocalization
*
* @deprecated use setDefaultLocalization instead
*/
public function setXDefaultLocalization($xDefaultLocalization)
{
if (\func_num_args() < 2 || \func_get_arg(1)) {
@trigger_deprecation('sulu/sulu', '2.3', 'The "%s" method is deprecated on "%s" use "setDefaultLocalization" instead.', __METHOD__, __CLASS__);
}
$this->xDefaultLocalization = $xDefaultLocalization;
}
/**
* @return Localization
*
* @deprecated use getDefaultLocalization instead
*/
public function getXDefaultLocalization()
{
@trigger_deprecation('sulu/sulu', '2.3', 'The "%s" method is deprecated on "%s" use "getDefaultLocalization" instead.', __METHOD__, __CLASS__);
return $this->xDefaultLocalization;
}
/**
* Adds an environment to this portal.
*
* @param Environment $environment Environment The environment to add
*/
public function addEnvironment($environment)
{
$this->environments[$environment->getType()] = $environment;
}
/**
* Sets the environments for this portal.
*
* @param \Sulu\Component\Webspace\Environment[] $environments
*/
public function setEnvironments(array $environments)
{
$this->environments = [];
foreach ($environments as $environment) {
$this->addEnvironment($environment);
}
}
/**
* Returns the environment for this portal.
*
* @return \Sulu\Component\Webspace\Environment[]
*/
public function getEnvironments()
{
return $this->environments;
}
/**
* Returns the environment with the given type, and throws an exception if the environment does not exist.
*
* @param string $type
*
* @return \Sulu\Component\Webspace\Environment
*
* @throws Exception\EnvironmentNotFoundException
*/
public function getEnvironment($type)
{
if (!isset($this->environments[$type])) {
throw new EnvironmentNotFoundException($this, $type);
}
return $this->environments[$type];
}
/**
* @param \Sulu\Component\Webspace\Webspace $webspace
*/
public function setWebspace(Webspace $webspace)
{
$this->webspace = $webspace;
}
/**
* @return \Sulu\Component\Webspace\Webspace
*/
public function getWebspace()
{
return $this->webspace;
}
public function toArray($depth = null)
{
$res = [];
$res['name'] = $this->getName();
$res['key'] = $this->getKey();
$res['localizations'] = [];
foreach ($this->getLocalizations() as $localization) {
$res['localizations'][] = $localization->toArray();
}
foreach ($this->getEnvironments() as $environment) {
$res['environments'][] = $environment->toArray();
}
return $res;
}
}