vendor/pimcore/pimcore/models/Site.php line 27

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Model;
  15. use Pimcore\Cache\RuntimeCache;
  16. use Pimcore\Logger;
  17. use Pimcore\Model\Exception\NotFoundException;
  18. /**
  19.  * @method \Pimcore\Model\Site\Dao getDao()
  20.  * @method void delete()
  21.  * @method void save()
  22.  */
  23. final class Site extends AbstractModel
  24. {
  25.     /**
  26.      * @var Site|null
  27.      */
  28.     protected static ?Site $currentSite null;
  29.     /**
  30.      * @var int|null
  31.      */
  32.     protected $id;
  33.     /**
  34.      * @var array
  35.      */
  36.     protected $domains;
  37.     /**
  38.      * Contains the ID to the Root-Document
  39.      *
  40.      * @var int
  41.      */
  42.     protected $rootId;
  43.     /**
  44.      * @var Document\Page|null
  45.      */
  46.     protected ?Document\Page $rootDocument null;
  47.     /**
  48.      * @var string|null
  49.      */
  50.     protected $rootPath;
  51.     /**
  52.      * @var string
  53.      */
  54.     protected $mainDomain '';
  55.     /**
  56.      * @var string
  57.      */
  58.     protected $errorDocument '';
  59.     /**
  60.      * @var array
  61.      */
  62.     protected $localizedErrorDocuments;
  63.     /**
  64.      * @var bool
  65.      */
  66.     protected $redirectToMainDomain false;
  67.     /**
  68.      * @var int|null
  69.      */
  70.     protected $creationDate;
  71.     /**
  72.      * @var int|null
  73.      */
  74.     protected $modificationDate;
  75.     /**
  76.      * @param int $id
  77.      *
  78.      * @return Site|string|null
  79.      *
  80.      * @throws \Exception
  81.      */
  82.     public static function getById($id)
  83.     {
  84.         $cacheKey 'site_id_'$id;
  85.         if (RuntimeCache::isRegistered($cacheKey)) {
  86.             $site RuntimeCache::get($cacheKey);
  87.         } elseif (!$site \Pimcore\Cache::load($cacheKey)) {
  88.             try {
  89.                 $site = new self();
  90.                 $site->getDao()->getById((int)$id);
  91.             } catch (NotFoundException $e) {
  92.                 $site 'failed';
  93.             }
  94.             \Pimcore\Cache::save($site$cacheKey, ['system''site'], null999);
  95.         }
  96.         if ($site === 'failed' || !$site) {
  97.             $site null;
  98.         }
  99.         RuntimeCache::set($cacheKey$site);
  100.         return $site;
  101.     }
  102.     /**
  103.      * @param int $id
  104.      *
  105.      * @return Site|null
  106.      */
  107.     public static function getByRootId($id)
  108.     {
  109.         try {
  110.             $site = new self();
  111.             $site->getDao()->getByRootId((int)$id);
  112.             return $site;
  113.         } catch (NotFoundException $e) {
  114.             return null;
  115.         }
  116.     }
  117.     /**
  118.      * @param string $domain
  119.      *
  120.      * @return Site|string|null
  121.      */
  122.     public static function getByDomain($domain)
  123.     {
  124.         // cached because this is called in the route
  125.         $cacheKey 'site_domain_'md5($domain);
  126.         if (RuntimeCache::isRegistered($cacheKey)) {
  127.             $site RuntimeCache::get($cacheKey);
  128.         } elseif (!$site \Pimcore\Cache::load($cacheKey)) {
  129.             try {
  130.                 $site = new self();
  131.                 $site->getDao()->getByDomain($domain);
  132.             } catch (NotFoundException $e) {
  133.                 $site 'failed';
  134.             }
  135.             \Pimcore\Cache::save($site$cacheKey, ['system''site'], null999);
  136.         }
  137.         if ($site === 'failed' || !$site) {
  138.             $site null;
  139.         }
  140.         RuntimeCache::set($cacheKey$site);
  141.         return $site;
  142.     }
  143.     /**
  144.      * @param mixed $mixed
  145.      *
  146.      * @return Site|string|null
  147.      *
  148.      * @throws \Exception
  149.      */
  150.     public static function getBy($mixed)
  151.     {
  152.         $site null;
  153.         if (is_numeric($mixed)) {
  154.             $site self::getById($mixed);
  155.         } elseif (is_string($mixed)) {
  156.             $site self::getByDomain($mixed);
  157.         } elseif ($mixed instanceof Site) {
  158.             $site $mixed;
  159.         }
  160.         return $site;
  161.     }
  162.     /**
  163.      * @param array $data
  164.      *
  165.      * @return Site
  166.      */
  167.     public static function create($data)
  168.     {
  169.         $site = new self();
  170.         self::checkCreateData($data);
  171.         $site->setValues($data);
  172.         return $site;
  173.     }
  174.     /**
  175.      * returns true if the current process/request is inside a site
  176.      *
  177.      * @return bool
  178.      */
  179.     public static function isSiteRequest()
  180.     {
  181.         if (null !== self::$currentSite) {
  182.             return true;
  183.         }
  184.         return false;
  185.     }
  186.     /**
  187.      * @return Site
  188.      *
  189.      * @throws \Exception
  190.      */
  191.     public static function getCurrentSite()
  192.     {
  193.         if (null !== self::$currentSite) {
  194.             return self::$currentSite;
  195.         }
  196.         throw new \Exception('This request/process is not inside a subsite');
  197.     }
  198.     /**
  199.      * Register the current site
  200.      *
  201.      * @param Site $site
  202.      */
  203.     public static function setCurrentSite(Site $site): void
  204.     {
  205.         self::$currentSite $site;
  206.     }
  207.     /**
  208.      * @return int|null
  209.      */
  210.     public function getId()
  211.     {
  212.         return $this->id;
  213.     }
  214.     /**
  215.      * @return array
  216.      */
  217.     public function getDomains()
  218.     {
  219.         return $this->domains;
  220.     }
  221.     /**
  222.      * @return int
  223.      */
  224.     public function getRootId()
  225.     {
  226.         return $this->rootId;
  227.     }
  228.     /**
  229.      * @return Document\Page|null
  230.      */
  231.     public function getRootDocument(): ?Document\Page
  232.     {
  233.         return $this->rootDocument;
  234.     }
  235.     /**
  236.      * @param int $id
  237.      *
  238.      * @return $this
  239.      */
  240.     public function setId($id)
  241.     {
  242.         $this->id = (int) $id;
  243.         return $this;
  244.     }
  245.     /**
  246.      * @param mixed $domains
  247.      *
  248.      * @return $this
  249.      */
  250.     public function setDomains($domains)
  251.     {
  252.         if (is_string($domains)) {
  253.             $domains \Pimcore\Tool\Serialize::unserialize($domains);
  254.         }
  255.         $this->domains $domains;
  256.         return $this;
  257.     }
  258.     /**
  259.      * @param int $rootId
  260.      *
  261.      * @return $this
  262.      */
  263.     public function setRootId($rootId)
  264.     {
  265.         $this->rootId = (int) $rootId;
  266.         $rd Document\Page::getById($this->rootId);
  267.         $this->setRootDocument($rd);
  268.         return $this;
  269.     }
  270.     /**
  271.      * @param Document\Page|null $rootDocument
  272.      *
  273.      * @return $this
  274.      */
  275.     public function setRootDocument($rootDocument)
  276.     {
  277.         $this->rootDocument $rootDocument;
  278.         return $this;
  279.     }
  280.     /**
  281.      * @param string|null $path
  282.      *
  283.      * @return $this
  284.      */
  285.     public function setRootPath($path)
  286.     {
  287.         $this->rootPath $path;
  288.         return $this;
  289.     }
  290.     /**
  291.      * @return string|null
  292.      */
  293.     public function getRootPath()
  294.     {
  295.         if (!$this->rootPath && $this->getRootDocument()) {
  296.             return $this->getRootDocument()->getRealFullPath();
  297.         }
  298.         return $this->rootPath;
  299.     }
  300.     /**
  301.      * @param string $errorDocument
  302.      */
  303.     public function setErrorDocument($errorDocument)
  304.     {
  305.         $this->errorDocument $errorDocument;
  306.     }
  307.     /**
  308.      * @return string
  309.      */
  310.     public function getErrorDocument()
  311.     {
  312.         return $this->errorDocument;
  313.     }
  314.     /**
  315.      * @param mixed $localizedErrorDocuments
  316.      *
  317.      * @return $this
  318.      */
  319.     public function setLocalizedErrorDocuments($localizedErrorDocuments)
  320.     {
  321.         if (is_string($localizedErrorDocuments)) {
  322.             $localizedErrorDocuments \Pimcore\Tool\Serialize::unserialize($localizedErrorDocuments);
  323.         }
  324.         $this->localizedErrorDocuments $localizedErrorDocuments;
  325.         return $this;
  326.     }
  327.     /**
  328.      * @return array
  329.      */
  330.     public function getLocalizedErrorDocuments()
  331.     {
  332.         return $this->localizedErrorDocuments;
  333.     }
  334.     /**
  335.      * @param string $mainDomain
  336.      */
  337.     public function setMainDomain($mainDomain)
  338.     {
  339.         $this->mainDomain $mainDomain;
  340.     }
  341.     /**
  342.      * @return string
  343.      */
  344.     public function getMainDomain()
  345.     {
  346.         return $this->mainDomain;
  347.     }
  348.     /**
  349.      * @param bool $redirectToMainDomain
  350.      */
  351.     public function setRedirectToMainDomain($redirectToMainDomain)
  352.     {
  353.         $this->redirectToMainDomain = (bool) $redirectToMainDomain;
  354.     }
  355.     /**
  356.      * @return bool
  357.      */
  358.     public function getRedirectToMainDomain()
  359.     {
  360.         return $this->redirectToMainDomain;
  361.     }
  362.     /**
  363.      * @internal
  364.      */
  365.     public function clearDependentCache()
  366.     {
  367.         // this is mostly called in Site\Dao not here
  368.         try {
  369.             \Pimcore\Cache::clearTag('site');
  370.         } catch (\Exception $e) {
  371.             Logger::crit((string) $e);
  372.         }
  373.     }
  374.     /**
  375.      * @param int $modificationDate
  376.      *
  377.      * @return $this
  378.      */
  379.     public function setModificationDate($modificationDate)
  380.     {
  381.         $this->modificationDate = (int) $modificationDate;
  382.         return $this;
  383.     }
  384.     /**
  385.      * @return int|null
  386.      */
  387.     public function getModificationDate()
  388.     {
  389.         return $this->modificationDate;
  390.     }
  391.     /**
  392.      * @param int $creationDate
  393.      *
  394.      * @return $this
  395.      */
  396.     public function setCreationDate($creationDate)
  397.     {
  398.         $this->creationDate = (int) $creationDate;
  399.         return $this;
  400.     }
  401.     /**
  402.      * @return int|null
  403.      */
  404.     public function getCreationDate()
  405.     {
  406.         return $this->creationDate;
  407.     }
  408. }