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
  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|null
  79.      */
  80.     public static function getById($id)
  81.     {
  82.         $cacheKey 'site_id_'$id;
  83.         if (RuntimeCache::isRegistered($cacheKey)) {
  84.             $site RuntimeCache::get($cacheKey);
  85.         } elseif (!$site \Pimcore\Cache::load($cacheKey)) {
  86.             try {
  87.                 $site = new self();
  88.                 $site->getDao()->getById((int)$id);
  89.             } catch (NotFoundException $e) {
  90.                 $site 'failed';
  91.             }
  92.             \Pimcore\Cache::save($site$cacheKey, ['system''site'], null999);
  93.         }
  94.         if ($site === 'failed' || !$site) {
  95.             $site null;
  96.         }
  97.         RuntimeCache::set($cacheKey$site);
  98.         return $site;
  99.     }
  100.     /**
  101.      * @param int $id
  102.      *
  103.      * @return Site|null
  104.      */
  105.     public static function getByRootId($id)
  106.     {
  107.         try {
  108.             $site = new self();
  109.             $site->getDao()->getByRootId((int)$id);
  110.             return $site;
  111.         } catch (NotFoundException $e) {
  112.             return null;
  113.         }
  114.     }
  115.     /**
  116.      * @param string $domain
  117.      *
  118.      * @return Site|null
  119.      */
  120.     public static function getByDomain($domain)
  121.     {
  122.         // cached because this is called in the route
  123.         $cacheKey 'site_domain_'md5($domain);
  124.         if (RuntimeCache::isRegistered($cacheKey)) {
  125.             $site RuntimeCache::get($cacheKey);
  126.         } elseif (!$site \Pimcore\Cache::load($cacheKey)) {
  127.             try {
  128.                 $site = new self();
  129.                 $site->getDao()->getByDomain($domain);
  130.             } catch (NotFoundException $e) {
  131.                 $site 'failed';
  132.             }
  133.             \Pimcore\Cache::save($site$cacheKey, ['system''site'], null999);
  134.         }
  135.         if ($site === 'failed' || !$site) {
  136.             $site null;
  137.         }
  138.         RuntimeCache::set($cacheKey$site);
  139.         return $site;
  140.     }
  141.     /**
  142.      * @param mixed $mixed
  143.      *
  144.      * @return Site|null
  145.      */
  146.     public static function getBy($mixed)
  147.     {
  148.         $site null;
  149.         if (is_numeric($mixed)) {
  150.             $site self::getById($mixed);
  151.         } elseif (is_string($mixed)) {
  152.             $site self::getByDomain($mixed);
  153.         } elseif ($mixed instanceof Site) {
  154.             $site $mixed;
  155.         }
  156.         return $site;
  157.     }
  158.     /**
  159.      * @param array $data
  160.      *
  161.      * @return Site
  162.      */
  163.     public static function create($data)
  164.     {
  165.         $site = new self();
  166.         self::checkCreateData($data);
  167.         $site->setValues($data);
  168.         return $site;
  169.     }
  170.     /**
  171.      * returns true if the current process/request is inside a site
  172.      *
  173.      * @return bool
  174.      */
  175.     public static function isSiteRequest()
  176.     {
  177.         if (null !== self::$currentSite) {
  178.             return true;
  179.         }
  180.         return false;
  181.     }
  182.     /**
  183.      * @return Site
  184.      *
  185.      * @throws \Exception
  186.      */
  187.     public static function getCurrentSite()
  188.     {
  189.         if (null !== self::$currentSite) {
  190.             return self::$currentSite;
  191.         }
  192.         throw new \Exception('This request/process is not inside a subsite');
  193.     }
  194.     /**
  195.      * Register the current site
  196.      *
  197.      * @param Site $site
  198.      */
  199.     public static function setCurrentSite(Site $site): void
  200.     {
  201.         self::$currentSite $site;
  202.     }
  203.     /**
  204.      * @return int
  205.      */
  206.     public function getId()
  207.     {
  208.         return $this->id;
  209.     }
  210.     /**
  211.      * @return array
  212.      */
  213.     public function getDomains()
  214.     {
  215.         return $this->domains;
  216.     }
  217.     /**
  218.      * @return int
  219.      */
  220.     public function getRootId()
  221.     {
  222.         return $this->rootId;
  223.     }
  224.     /**
  225.      * @return Document\Page|null
  226.      */
  227.     public function getRootDocument(): ?Document\Page
  228.     {
  229.         return $this->rootDocument;
  230.     }
  231.     /**
  232.      * @param int $id
  233.      *
  234.      * @return $this
  235.      */
  236.     public function setId($id)
  237.     {
  238.         $this->id = (int) $id;
  239.         return $this;
  240.     }
  241.     /**
  242.      * @param mixed $domains
  243.      *
  244.      * @return $this
  245.      */
  246.     public function setDomains($domains)
  247.     {
  248.         if (is_string($domains)) {
  249.             $domains \Pimcore\Tool\Serialize::unserialize($domains);
  250.         }
  251.         $this->domains $domains;
  252.         return $this;
  253.     }
  254.     /**
  255.      * @param int $rootId
  256.      *
  257.      * @return $this
  258.      */
  259.     public function setRootId($rootId)
  260.     {
  261.         $this->rootId = (int) $rootId;
  262.         $rd Document\Page::getById($this->rootId);
  263.         $this->setRootDocument($rd);
  264.         return $this;
  265.     }
  266.     /**
  267.      * @param Document\Page|null $rootDocument
  268.      *
  269.      * @return $this
  270.      */
  271.     public function setRootDocument($rootDocument)
  272.     {
  273.         $this->rootDocument $rootDocument;
  274.         return $this;
  275.     }
  276.     /**
  277.      * @param string|null $path
  278.      *
  279.      * @return $this
  280.      */
  281.     public function setRootPath($path)
  282.     {
  283.         $this->rootPath $path;
  284.         return $this;
  285.     }
  286.     /**
  287.      * @return string|null
  288.      */
  289.     public function getRootPath()
  290.     {
  291.         if (!$this->rootPath && $this->getRootDocument()) {
  292.             return $this->getRootDocument()->getRealFullPath();
  293.         }
  294.         return $this->rootPath;
  295.     }
  296.     /**
  297.      * @param string $errorDocument
  298.      */
  299.     public function setErrorDocument($errorDocument)
  300.     {
  301.         $this->errorDocument $errorDocument;
  302.     }
  303.     /**
  304.      * @return string
  305.      */
  306.     public function getErrorDocument()
  307.     {
  308.         return $this->errorDocument;
  309.     }
  310.     /**
  311.      * @param mixed $localizedErrorDocuments
  312.      *
  313.      * @return $this
  314.      */
  315.     public function setLocalizedErrorDocuments($localizedErrorDocuments)
  316.     {
  317.         if (is_string($localizedErrorDocuments)) {
  318.             $localizedErrorDocuments \Pimcore\Tool\Serialize::unserialize($localizedErrorDocuments);
  319.         }
  320.         $this->localizedErrorDocuments $localizedErrorDocuments;
  321.         return $this;
  322.     }
  323.     /**
  324.      * @return array
  325.      */
  326.     public function getLocalizedErrorDocuments()
  327.     {
  328.         return $this->localizedErrorDocuments;
  329.     }
  330.     /**
  331.      * @param string $mainDomain
  332.      */
  333.     public function setMainDomain($mainDomain)
  334.     {
  335.         $this->mainDomain $mainDomain;
  336.     }
  337.     /**
  338.      * @return string
  339.      */
  340.     public function getMainDomain()
  341.     {
  342.         return $this->mainDomain;
  343.     }
  344.     /**
  345.      * @param bool $redirectToMainDomain
  346.      */
  347.     public function setRedirectToMainDomain($redirectToMainDomain)
  348.     {
  349.         $this->redirectToMainDomain = (bool) $redirectToMainDomain;
  350.     }
  351.     /**
  352.      * @return bool
  353.      */
  354.     public function getRedirectToMainDomain()
  355.     {
  356.         return $this->redirectToMainDomain;
  357.     }
  358.     /**
  359.      * @internal
  360.      */
  361.     public function clearDependentCache()
  362.     {
  363.         // this is mostly called in Site\Dao not here
  364.         try {
  365.             \Pimcore\Cache::clearTag('site');
  366.         } catch (\Exception $e) {
  367.             Logger::crit((string) $e);
  368.         }
  369.     }
  370.     /**
  371.      * @param int $modificationDate
  372.      *
  373.      * @return $this
  374.      */
  375.     public function setModificationDate($modificationDate)
  376.     {
  377.         $this->modificationDate = (int) $modificationDate;
  378.         return $this;
  379.     }
  380.     /**
  381.      * @return int|null
  382.      */
  383.     public function getModificationDate()
  384.     {
  385.         return $this->modificationDate;
  386.     }
  387.     /**
  388.      * @param int $creationDate
  389.      *
  390.      * @return $this
  391.      */
  392.     public function setCreationDate($creationDate)
  393.     {
  394.         $this->creationDate = (int) $creationDate;
  395.         return $this;
  396.     }
  397.     /**
  398.      * @return int|null
  399.      */
  400.     public function getCreationDate()
  401.     {
  402.         return $this->creationDate;
  403.     }
  404. }