vendor/pimcore/pimcore/models/Document/Page.php line 28

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 Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @category   Pimcore
  12.  * @package    Document
  13.  *
  14.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  15.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  16.  */
  17. namespace Pimcore\Model\Document;
  18. use Pimcore\Model\Document\Traits\RedirectHelperTrait;
  19. use Pimcore\Model\Redirect;
  20. use Pimcore\Model\Site;
  21. use Pimcore\Model\Tool\Targeting\TargetGroup;
  22. /**
  23.  * @method \Pimcore\Model\Document\Page\Dao getDao()
  24.  */
  25. class Page extends TargetingDocument
  26. {
  27.     use RedirectHelperTrait;
  28.     /**
  29.      * Contains the title of the page (meta-title)
  30.      *
  31.      * @var string
  32.      */
  33.     protected $title '';
  34.     /**
  35.      * Contains the description of the page (meta-description)
  36.      *
  37.      * @var string
  38.      */
  39.     protected $description '';
  40.     /**
  41.      * @var array
  42.      */
  43.     protected $metaData = [];
  44.     /**
  45.      * Static type of the document
  46.      *
  47.      * @var string
  48.      */
  49.     protected $type 'page';
  50.     /**
  51.      * @var string
  52.      */
  53.     protected $prettyUrl;
  54.     /**
  55.      * Comma separated IDs of target groups
  56.      *
  57.      * @var string
  58.      */
  59.     protected $targetGroupIds '';
  60.     /**
  61.      * @inheritdoc
  62.      */
  63.     public function delete(bool $isNested false)
  64.     {
  65.         if ($this->getId() == 1) {
  66.             throw new \Exception('root-node cannot be deleted');
  67.         }
  68.         // check for redirects pointing to this document, and delete them too
  69.         $redirects = new Redirect\Listing();
  70.         $redirects->setCondition('target = ?'$this->getId());
  71.         $redirects->load();
  72.         foreach ($redirects->getRedirects() as $redirect) {
  73.             $redirect->delete();
  74.         }
  75.         if ($site Site::getByRootId($this->getId())) {
  76.             $site->delete();
  77.         }
  78.         parent::delete($isNested);
  79.     }
  80.     /**
  81.      * @param array $params additional parameters (e.g. "versionNote" for the version note)
  82.      *
  83.      * @throws \Exception
  84.      */
  85.     protected function update($params = [])
  86.     {
  87.         $oldPath $this->getDao()->getCurrentFullPath();
  88.         $oldDocument self::getById($this->getId(), true);
  89.         parent::update($params);
  90.         $this->createRedirectForFormerPath($oldPath$oldDocument);
  91.     }
  92.     /**
  93.      * @return string
  94.      */
  95.     public function getDescription()
  96.     {
  97.         return $this->description;
  98.     }
  99.     /**
  100.      * @return string
  101.      */
  102.     public function getTitle()
  103.     {
  104.         return \Pimcore\Tool\Text::removeLineBreaks($this->title);
  105.     }
  106.     /**
  107.      * @param string $description
  108.      *
  109.      * @return $this
  110.      */
  111.     public function setDescription($description)
  112.     {
  113.         $this->description str_replace("\n"' '$description);
  114.         return $this;
  115.     }
  116.     /**
  117.      * @param string $title
  118.      *
  119.      * @return $this
  120.      */
  121.     public function setTitle($title)
  122.     {
  123.         $this->title $title;
  124.         return $this;
  125.     }
  126.     /**
  127.      * @param array $metaData
  128.      *
  129.      * @return $this
  130.      */
  131.     public function setMetaData($metaData)
  132.     {
  133.         $this->metaData $metaData;
  134.         return $this;
  135.     }
  136.     /**
  137.      * @return array
  138.      */
  139.     public function getMetaData()
  140.     {
  141.         return $this->metaData;
  142.     }
  143.     /**
  144.      * Returns the full path of the document including the key (path+key)
  145.      *
  146.      * @param bool $force
  147.      *
  148.      * @return string
  149.      */
  150.     public function getFullPath(bool $force false)
  151.     {
  152.         $path parent::getFullPath($force);
  153.         // do not use pretty url's when in admin, the current document is wrapped by a hardlink or this document isn't in the current site
  154.         if (!\Pimcore::inAdmin() && !($this instanceof Hardlink\Wrapper\WrapperInterface) && \Pimcore\Tool\Frontend::isDocumentInCurrentSite($this)) {
  155.             // check for a pretty url
  156.             $prettyUrl $this->getPrettyUrl();
  157.             if (!empty($prettyUrl) && strlen($prettyUrl) > 1) {
  158.                 return $prettyUrl;
  159.             }
  160.         }
  161.         return $path;
  162.     }
  163.     /**
  164.      * @param string $prettyUrl
  165.      *
  166.      * @return $this
  167.      */
  168.     public function setPrettyUrl($prettyUrl)
  169.     {
  170.         $this->prettyUrl '/' trim($prettyUrl' /');
  171.         if (strlen($this->prettyUrl) < 2) {
  172.             $this->prettyUrl null;
  173.         }
  174.         return $this;
  175.     }
  176.     /**
  177.      * @return string
  178.      */
  179.     public function getPrettyUrl()
  180.     {
  181.         return $this->prettyUrl;
  182.     }
  183.     /**
  184.      * Set linked Target Groups as set in properties panel as list of IDs
  185.      *
  186.      * @param string|array $targetGroupIds
  187.      */
  188.     public function setTargetGroupIds($targetGroupIds)
  189.     {
  190.         if (is_array($targetGroupIds)) {
  191.             $targetGroupIds implode(','$targetGroupIds);
  192.         }
  193.         $targetGroupIds trim($targetGroupIds' ,');
  194.         if (!empty($targetGroupIds)) {
  195.             $targetGroupIds ',' $targetGroupIds ',';
  196.         }
  197.         $this->targetGroupIds $targetGroupIds;
  198.     }
  199.     /**
  200.      * Get serialized list of Target Group IDs
  201.      *
  202.      * @return string
  203.      */
  204.     public function getTargetGroupIds(): string
  205.     {
  206.         return $this->targetGroupIds;
  207.     }
  208.     /**
  209.      * Set assigned target groups
  210.      *
  211.      * @param TargetGroup[]|int[] $targetGroups
  212.      */
  213.     public function setTargetGroups(array $targetGroups)
  214.     {
  215.         $ids array_map(function ($targetGroup) {
  216.             if (is_numeric($targetGroup)) {
  217.                 return (int)$targetGroup;
  218.             } elseif ($targetGroup instanceof TargetGroup) {
  219.                 return $targetGroup->getId();
  220.             }
  221.             return null;
  222.         }, $targetGroups);
  223.         $ids array_filter($ids, function ($id) {
  224.             return null !== $id && $id 0;
  225.         });
  226.         $this->setTargetGroupIds($ids);
  227.     }
  228.     /**
  229.      * Return list of assigned target groups (via properties panel)
  230.      *
  231.      * @return TargetGroup[]
  232.      */
  233.     public function getTargetGroups(): array
  234.     {
  235.         $ids explode(','$this->targetGroupIds);
  236.         $targetGroups array_map(function ($id) {
  237.             $id trim($id);
  238.             if (!empty($id)) {
  239.                 $targetGroup TargetGroup::getById($id);
  240.                 if ($targetGroup) {
  241.                     return $targetGroup;
  242.                 }
  243.             }
  244.         }, $ids);
  245.         $targetGroups array_filter($targetGroups);
  246.         return $targetGroups;
  247.     }
  248.     /**
  249.      * @param bool $hdpi
  250.      *
  251.      * @return string
  252.      */
  253.     public function getPreviewImageFilesystemPath($hdpi false)
  254.     {
  255.         $suffix '';
  256.         if ($hdpi) {
  257.             $suffix '@2x';
  258.         }
  259.         return PIMCORE_SYSTEM_TEMP_DIRECTORY '/document-page-previews/document-page-screenshot-' $this->getId() . $suffix '.jpg';
  260.     }
  261. }