vendor/sulu/sulu/src/Sulu/Component/Webspace/Webspace.php line 20

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Sulu.
  4.  *
  5.  * (c) Sulu GmbH
  6.  *
  7.  * This source file is subject to the MIT license that is bundled
  8.  * with this source code in the file LICENSE.
  9.  */
  10. namespace Sulu\Component\Webspace;
  11. use Sulu\Component\Localization\Localization;
  12. use Sulu\Component\Util\ArrayableInterface;
  13. /**
  14.  * Container for a webspace definition.
  15.  */
  16. class Webspace implements ArrayableInterface
  17. {
  18.     /**
  19.      * The name of the webspace.
  20.      *
  21.      * @var string
  22.      */
  23.     private $name;
  24.     /**
  25.      * The key of the webspace.
  26.      *
  27.      * @var string
  28.      */
  29.     private $key;
  30.     /**
  31.      * The localizations defined for this webspace.
  32.      *
  33.      * @var Localization[]
  34.      */
  35.     private $localizations = [];
  36.     /**
  37.      * The default localization defined for this webspace.
  38.      *
  39.      * @var Localization
  40.      */
  41.     private $defaultLocalization;
  42.     /**
  43.      * The x-default localization defined for this webspace.
  44.      *
  45.      * @var Localization
  46.      */
  47.     private $xDefaultLocalization;
  48.     /**
  49.      * The segments defined for this webspace.
  50.      *
  51.      * @var Segment[]
  52.      */
  53.     private $segments = [];
  54.     /**
  55.      * The default segment defined for this webspace.
  56.      *
  57.      * @var Segment
  58.      */
  59.     private $defaultSegment;
  60.     /**
  61.      * The theme of the webspace.
  62.      *
  63.      * @var string
  64.      */
  65.     private $theme;
  66.     /**
  67.      * The portals defined for this webspace.
  68.      *
  69.      * @var Portal[]
  70.      */
  71.     private $portals = [];
  72.     /**
  73.      * The security system for this webspace.
  74.      *
  75.      * @var Security|null
  76.      */
  77.     private $security;
  78.     /**
  79.      * Navigation for this webspace.
  80.      *
  81.      * @var Navigation
  82.      */
  83.     private $navigation;
  84.     /**
  85.      * A list of twig templates.
  86.      *
  87.      * @var array
  88.      */
  89.     private $templates = [];
  90.     /**
  91.      * Template which is selected by default if no other template is chosen.
  92.      *
  93.      * @var string[]
  94.      */
  95.     private $defaultTemplates = [];
  96.     /**
  97.      * @var string[]
  98.      */
  99.     private $excludedTemplates = [];
  100.     /**
  101.      * The url generation strategy for this portal.
  102.      *
  103.      * @var string
  104.      */
  105.     private $resourceLocatorStrategy;
  106.     /**
  107.      * Sets the key of the webspace.
  108.      *
  109.      * @param string $key
  110.      */
  111.     public function setKey($key)
  112.     {
  113.         $this->key $key;
  114.     }
  115.     /**
  116.      * Returns the key of the webspace.
  117.      *
  118.      * @return string
  119.      */
  120.     public function getKey()
  121.     {
  122.         return $this->key;
  123.     }
  124.     /**
  125.      * Adds a localization to the webspace.
  126.      */
  127.     public function addLocalization(Localization $localization)
  128.     {
  129.         $this->localizations[] = $localization;
  130.         if ($localization->isDefault()) {
  131.             $this->setDefaultLocalization($localization);
  132.         }
  133.         if ($localization->isXDefault()) {
  134.             $this->xDefaultLocalization $localization;
  135.         }
  136.     }
  137.     /**
  138.      * Returns the localizations of this webspace.
  139.      *
  140.      * @param Localization[] $localizations
  141.      */
  142.     public function setLocalizations($localizations)
  143.     {
  144.         $this->localizations $localizations;
  145.     }
  146.     /**
  147.      * Returns the localizations of this webspace.
  148.      *
  149.      * @return Localization[]
  150.      */
  151.     public function getLocalizations()
  152.     {
  153.         return $this->localizations;
  154.     }
  155.     /**
  156.      * Returns a list of all localizations and sublocalizations.
  157.      *
  158.      * @return Localization[]
  159.      */
  160.     public function getAllLocalizations()
  161.     {
  162.         $localizations = [];
  163.         foreach ($this->getLocalizations() as $child) {
  164.             $localizations[] = $child;
  165.             $localizations array_merge($localizations$child->getAllLocalizations());
  166.         }
  167.         return $localizations;
  168.     }
  169.     /**
  170.      * Returns the localization object for a given localization string.
  171.      *
  172.      * @param string $localization
  173.      *
  174.      * @return Localization|null
  175.      */
  176.     public function getLocalization($localization)
  177.     {
  178.         $localizations $this->getLocalizations();
  179.         if (!empty($localizations)) {
  180.             foreach ($localizations as $webspaceLocalization) {
  181.                 $result $webspaceLocalization->findLocalization($localization);
  182.                 if ($result) {
  183.                     return $result;
  184.                 }
  185.             }
  186.         }
  187.         return;
  188.     }
  189.     /**
  190.      * Sets the default localization for this webspace.
  191.      *
  192.      * @param Localization $defaultLocalization
  193.      */
  194.     public function setDefaultLocalization($defaultLocalization)
  195.     {
  196.         $this->defaultLocalization $defaultLocalization;
  197.         if (!$this->getXDefaultLocalization()) {
  198.             $this->xDefaultLocalization $defaultLocalization;
  199.         }
  200.     }
  201.     /**
  202.      * Returns the default localization for this webspace.
  203.      *
  204.      * @return Localization
  205.      */
  206.     public function getDefaultLocalization()
  207.     {
  208.         if (!$this->defaultLocalization) {
  209.             return $this->localizations[0];
  210.         }
  211.         return $this->defaultLocalization;
  212.     }
  213.     /**
  214.      * Returns the x-default localization for this webspace.
  215.      *
  216.      * @return Localization
  217.      */
  218.     public function getXDefaultLocalization()
  219.     {
  220.         if (!$this->xDefaultLocalization) {
  221.             return $this->localizations[0];
  222.         }
  223.         return $this->xDefaultLocalization;
  224.     }
  225.     /**
  226.      * Sets the name of the webspace.
  227.      *
  228.      * @param string $name
  229.      */
  230.     public function setName($name)
  231.     {
  232.         $this->name $name;
  233.     }
  234.     /**
  235.      * Returns the name of the webspace.
  236.      *
  237.      * @return string
  238.      */
  239.     public function getName()
  240.     {
  241.         return $this->name;
  242.     }
  243.     /**
  244.      * Adds a portal to the webspace.
  245.      */
  246.     public function addPortal(Portal $portal)
  247.     {
  248.         $this->portals[] = $portal;
  249.     }
  250.     /**
  251.      * Sets the portals of this webspace.
  252.      *
  253.      * @param \Sulu\Component\Webspace\Portal[] $portals
  254.      */
  255.     public function setPortals($portals)
  256.     {
  257.         $this->portals $portals;
  258.     }
  259.     /**
  260.      * Returns the portals of this webspace.
  261.      *
  262.      * @return \Sulu\Component\Webspace\Portal[]
  263.      */
  264.     public function getPortals()
  265.     {
  266.         return $this->portals;
  267.     }
  268.     /**
  269.      * Adds a segment to the webspace.
  270.      */
  271.     public function addSegment(Segment $segment)
  272.     {
  273.         $this->segments[] = $segment;
  274.         if ($segment->isDefault()) {
  275.             $this->setDefaultSegment($segment);
  276.         }
  277.     }
  278.     /**
  279.      * Sets the segments of this webspace.
  280.      *
  281.      * @param \Sulu\Component\Webspace\Segment[] $segments
  282.      */
  283.     public function setSegments($segments)
  284.     {
  285.         $this->segments $segments;
  286.     }
  287.     /**
  288.      * Returns the segments of this webspace.
  289.      *
  290.      * @return \Sulu\Component\Webspace\Segment[]
  291.      */
  292.     public function getSegments()
  293.     {
  294.         return $this->segments;
  295.     }
  296.     /**
  297.      * Sets the default segment of this webspace.
  298.      *
  299.      * @param Segment $defaultSegment
  300.      */
  301.     public function setDefaultSegment($defaultSegment)
  302.     {
  303.         $this->defaultSegment $defaultSegment;
  304.     }
  305.     /**
  306.      * Returns the default segment for this webspace.
  307.      *
  308.      * @return Segment
  309.      */
  310.     public function getDefaultSegment()
  311.     {
  312.         return $this->defaultSegment;
  313.     }
  314.     /**
  315.      * Sets the theme for this portal.
  316.      *
  317.      * @param string|null $theme this parameter is options
  318.      */
  319.     public function setTheme($theme null)
  320.     {
  321.         $this->theme $theme;
  322.     }
  323.     /**
  324.      * Returns the theme for this portal.
  325.      *
  326.      * @return string
  327.      */
  328.     public function getTheme()
  329.     {
  330.         return $this->theme;
  331.     }
  332.     /**
  333.      * Sets the security system.
  334.      *
  335.      * @param Security|null $security
  336.      */
  337.     public function setSecurity($security)
  338.     {
  339.         $this->security $security;
  340.     }
  341.     /**
  342.      * Returns the security system.
  343.      *
  344.      * @return Security|null
  345.      */
  346.     public function getSecurity()
  347.     {
  348.         return $this->security;
  349.     }
  350.     /**
  351.      * @return Navigation
  352.      */
  353.     public function getNavigation()
  354.     {
  355.         return $this->navigation;
  356.     }
  357.     /**
  358.      * @param Navigation $navigation
  359.      */
  360.     public function setNavigation($navigation)
  361.     {
  362.         $this->navigation $navigation;
  363.     }
  364.     /**
  365.      * Returns false if domain not exists in webspace.
  366.      *
  367.      * @param string $domain
  368.      * @param string $environment
  369.      * @param string $locale
  370.      *
  371.      * @return bool
  372.      *
  373.      * @throws Exception\EnvironmentNotFoundException
  374.      */
  375.     public function hasDomain($domain$environment$locale null)
  376.     {
  377.         $localizationParts explode('_'$locale);
  378.         $language $localizationParts[0];
  379.         $country = isset($localizationParts[1]) ? $localizationParts[1] : '';
  380.         foreach ($this->getPortals() as $portal) {
  381.             foreach ($portal->getEnvironment($environment)->getUrls() as $url) {
  382.                 $host parse_url('//' $url->getUrl())['host'];
  383.                 if ((null === $locale || $url->isValidLocale($language$country))
  384.                     && ($host === $domain || '{host}' === $host)
  385.                 ) {
  386.                     return true;
  387.                 }
  388.             }
  389.         }
  390.         return false;
  391.     }
  392.     /**
  393.      * Add a new template for given type.
  394.      *
  395.      * @param string $type
  396.      * @param string $template
  397.      */
  398.     public function addTemplate($type$template)
  399.     {
  400.         $this->templates[$type] = $template;
  401.     }
  402.     /**
  403.      * Returns a template for the given type.
  404.      *
  405.      * @param string $type
  406.      * @param string $format
  407.      *
  408.      * @return string|null
  409.      */
  410.     public function getTemplate($type$format 'html')
  411.     {
  412.         if (array_key_exists($type$this->templates)) {
  413.             return $this->templates[$type] . '.' $format '.twig';
  414.         }
  415.         return;
  416.     }
  417.     /**
  418.      * Returns an array of templates.
  419.      *
  420.      * @return string[]
  421.      */
  422.     public function getTemplates()
  423.     {
  424.         return $this->templates;
  425.     }
  426.     /**
  427.      * Add a new default template for given type.
  428.      *
  429.      * @param string $type
  430.      * @param string $template
  431.      */
  432.     public function addDefaultTemplate($type$template)
  433.     {
  434.         $this->defaultTemplates[$type] = $template;
  435.     }
  436.     /**
  437.      * Returns a error template for given code.
  438.      *
  439.      * @param string $type
  440.      *
  441.      * @return string|null
  442.      */
  443.     public function getDefaultTemplate($type)
  444.     {
  445.         if (array_key_exists($type$this->defaultTemplates)) {
  446.             return $this->defaultTemplates[$type];
  447.         }
  448.         return;
  449.     }
  450.     /**
  451.      * Returns a array of default template.
  452.      *
  453.      * @return string[]
  454.      */
  455.     public function getDefaultTemplates()
  456.     {
  457.         return $this->defaultTemplates;
  458.     }
  459.     /**
  460.      * Add a new template for given type.
  461.      *
  462.      * @param string $excludedTemplate
  463.      */
  464.     public function addExcludedTemplate($excludedTemplate)
  465.     {
  466.         $this->excludedTemplates[] = $excludedTemplate;
  467.     }
  468.     /**
  469.      * @return string[]
  470.      */
  471.     public function getExcludedTemplates()
  472.     {
  473.         return $this->excludedTemplates;
  474.     }
  475.     /**
  476.      * Set resource-locator strategy.
  477.      *
  478.      * @param string $resourceLocatorStrategy
  479.      */
  480.     public function setResourceLocatorStrategy($resourceLocatorStrategy)
  481.     {
  482.         $this->resourceLocatorStrategy $resourceLocatorStrategy;
  483.     }
  484.     /**
  485.      * Returns resource-locator strategy.
  486.      *
  487.      * @return string
  488.      */
  489.     public function getResourceLocatorStrategy()
  490.     {
  491.         return $this->resourceLocatorStrategy;
  492.     }
  493.     public function toArray($depth null)
  494.     {
  495.         $res = [];
  496.         $res['key'] = $this->getKey();
  497.         $res['name'] = $this->getName();
  498.         $res['localizations'] = [];
  499.         $res['templates'] = $this->getTemplates();
  500.         $res['defaultTemplates'] = $this->getDefaultTemplates();
  501.         $res['excludedTemplates'] = $this->getExcludedTemplates();
  502.         $res['resourceLocator']['strategy'] = $this->getResourceLocatorStrategy();
  503.         foreach ($this->getLocalizations() as $localization) {
  504.             $res['localizations'][] = $localization->toArray();
  505.         }
  506.         $thisSecurity $this->getSecurity();
  507.         if (null != $thisSecurity) {
  508.             $res['security']['system'] = $thisSecurity->getSystem();
  509.         }
  510.         $res['segments'] = [];
  511.         $segments $this->getSegments();
  512.         if (!empty($segments)) {
  513.             foreach ($segments as $segment) {
  514.                 $res['segments'][] = $segment->toArray();
  515.             }
  516.         }
  517.         $res['theme'] = !$this->theme null $this->theme;
  518.         $res['portals'] = [];
  519.         foreach ($this->getPortals() as $portal) {
  520.             $res['portals'][] = $portal->toArray();
  521.         }
  522.         $res['navigation'] = [];
  523.         $res['navigation']['contexts'] = [];
  524.         if ($navigation $this->getNavigation()) {
  525.             foreach ($this->getNavigation()->getContexts() as $context) {
  526.                 $res['navigation']['contexts'][] = [
  527.                     'key' => $context->getKey(),
  528.                     'metadata' => $context->getMetadata(),
  529.                 ];
  530.             }
  531.         }
  532.         return $res;
  533.     }
  534. }