vendor/pimcore/pimcore/models/Document/Link.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 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;
  19. use Pimcore\Model\Asset;
  20. use Pimcore\Model\Document;
  21. /**
  22.  * @method \Pimcore\Model\Document\Link\Dao getDao()
  23.  */
  24. class Link extends Model\Document
  25. {
  26.     use Document\Traits\ScheduledTasksTrait;
  27.     /**
  28.      * Contains the ID of the internal ID
  29.      *
  30.      * @var int|null
  31.      */
  32.     protected $internal;
  33.     /**
  34.      * Contains the type of the internal ID
  35.      *
  36.      * @var string
  37.      */
  38.     protected $internalType;
  39.     /**
  40.      * Contains object of linked Document|Asset|DataObject
  41.      *
  42.      * @var Document|Asset|Model\DataObject\Concrete|null
  43.      */
  44.     protected $object;
  45.     /**
  46.      * Contains the direct link as plain text
  47.      *
  48.      * @var string
  49.      */
  50.     protected $direct '';
  51.     /**
  52.      * Type of the link (internal/direct)
  53.      *
  54.      * @var string
  55.      */
  56.     protected $linktype 'internal';
  57.     /**
  58.      * static type of this object
  59.      *
  60.      * @var string
  61.      */
  62.     protected $type 'link';
  63.     /**
  64.      * path of the link
  65.      *
  66.      * @var string
  67.      */
  68.     protected $href '';
  69.     /**
  70.      * @see Document::resolveDependencies
  71.      *
  72.      * @return array
  73.      */
  74.     public function resolveDependencies()
  75.     {
  76.         $dependencies parent::resolveDependencies();
  77.         if ($this->getLinktype() == 'internal') {
  78.             if ($this->getObject() instanceof Document || $this->getObject() instanceof Asset) {
  79.                 $key $this->getInternalType() . '_' $this->getObject()->getId();
  80.                 $dependencies[$key] = [
  81.                     'id' => $this->getObject()->getId(),
  82.                     'type' => $this->getInternalType(),
  83.                 ];
  84.             }
  85.         }
  86.         return $dependencies;
  87.     }
  88.     /**
  89.      * Resolves dependencies and create tags for caching out of them
  90.      *
  91.      * @param array $tags
  92.      *
  93.      * @return array
  94.      */
  95.     public function getCacheTags($tags = [])
  96.     {
  97.         $tags is_array($tags) ? $tags : [];
  98.         $tags parent::getCacheTags($tags);
  99.         if ($this->getLinktype() == 'internal') {
  100.             if ($this->getObject() instanceof Document || $this->getObject() instanceof Asset) {
  101.                 if ($this->getObject()->getId() != $this->getId() and !array_key_exists($this->getObject()->getCacheTag(), $tags)) {
  102.                     $tags $this->getObject()->getCacheTags($tags);
  103.                 }
  104.             }
  105.         }
  106.         return $tags;
  107.     }
  108.     /**
  109.      * Returns the plain text path of the link
  110.      *
  111.      * @return string
  112.      */
  113.     public function getHref()
  114.     {
  115.         $path '';
  116.         if ($this->getLinktype() == 'internal') {
  117.             if ($this->getObject() instanceof Document || $this->getObject() instanceof Asset) {
  118.                 $path $this->getObject()->getFullPath();
  119.             } else {
  120.                 if ($this->getObject() instanceof Model\DataObject\Concrete) {
  121.                     if ($linkGenerator $this->getObject()->getClass()->getLinkGenerator()) {
  122.                         $path $linkGenerator->generate(
  123.                             $this->getObject(),
  124.                             [
  125.                                 'document' => $this,
  126.                                 'context' => $this,
  127.                             ]
  128.                         );
  129.                     }
  130.                 }
  131.             }
  132.         } else {
  133.             $path $this->getDirect();
  134.         }
  135.         $this->href $path;
  136.         return $path;
  137.     }
  138.     /**
  139.      * Returns the plain text path of the link needed for the editmode
  140.      *
  141.      * @return string
  142.      */
  143.     public function getRawHref()
  144.     {
  145.         $rawHref '';
  146.         if ($this->getLinktype() == 'internal') {
  147.             if ($this->getObject() instanceof Document || $this->getObject() instanceof Asset ||
  148.                 ($this->getObject() instanceof Model\DataObject\Concrete)
  149.             ) {
  150.                 $rawHref $this->getObject()->getFullPath();
  151.             }
  152.         } else {
  153.             $rawHref $this->getDirect();
  154.         }
  155.         return $rawHref;
  156.     }
  157.     /**
  158.      * Returns the path of the link including the anchor and parameters
  159.      *
  160.      * @return string
  161.      */
  162.     public function getLink()
  163.     {
  164.         $path $this->getHref();
  165.         $parameters $this->getProperty('navigation_parameters');
  166.         if (strlen($parameters) > 0) {
  167.             $path .= '?' str_replace('?'''$parameters);
  168.         }
  169.         $anchor $this->getProperty('navigation_anchor');
  170.         if (strlen($anchor) > 0) {
  171.             $path .= '#' str_replace('#'''$anchor);
  172.         }
  173.         return $path;
  174.     }
  175.     /**
  176.      * Returns the id of the internal document|asset which is linked
  177.      *
  178.      * @return int
  179.      */
  180.     public function getInternal()
  181.     {
  182.         return $this->internal;
  183.     }
  184.     /**
  185.      * Returns the direct link (eg. http://www.pimcore.org/test)
  186.      *
  187.      * @return string
  188.      */
  189.     public function getDirect()
  190.     {
  191.         return $this->direct;
  192.     }
  193.     /**
  194.      * Returns the type of the link (internal/direct)
  195.      *
  196.      * @return string
  197.      */
  198.     public function getLinktype()
  199.     {
  200.         return $this->linktype;
  201.     }
  202.     /**
  203.      * @param int $internal
  204.      *
  205.      * @return $this
  206.      */
  207.     public function setInternal($internal)
  208.     {
  209.         if (!empty($internal)) {
  210.             $this->internal = (int) $internal;
  211.             $this->setObjectFromId();
  212.         } else {
  213.             $this->internal null;
  214.         }
  215.         return $this;
  216.     }
  217.     /**
  218.      * @param string $direct
  219.      *
  220.      * @return $this
  221.      */
  222.     public function setDirect($direct)
  223.     {
  224.         $this->direct $direct;
  225.         return $this;
  226.     }
  227.     /**
  228.      * @param string $linktype
  229.      *
  230.      * @return $this
  231.      */
  232.     public function setLinktype($linktype)
  233.     {
  234.         $this->linktype $linktype;
  235.         return $this;
  236.     }
  237.     /**
  238.      * @return string
  239.      */
  240.     public function getInternalType()
  241.     {
  242.         return $this->internalType;
  243.     }
  244.     /**
  245.      * @param string $type
  246.      *
  247.      * @return $this
  248.      */
  249.     public function setInternalType($type)
  250.     {
  251.         $this->internalType $type;
  252.         return $this;
  253.     }
  254.     /**
  255.      * @return Document|Asset|Model\DataObject\Concrete|null
  256.      */
  257.     public function getObject()
  258.     {
  259.         if ($this->object instanceof Document || $this->object instanceof Asset || $this->object instanceof Model\DataObject\Concrete) {
  260.             return $this->object;
  261.         } else {
  262.             if ($this->setObjectFromId()) {
  263.                 return $this->object;
  264.             }
  265.         }
  266.         return null;
  267.     }
  268.     /**
  269.      * @param Document|Asset|Model\DataObject\Concrete $object
  270.      *
  271.      * @return $this
  272.      */
  273.     public function setObject($object)
  274.     {
  275.         $this->object $object;
  276.         return $this;
  277.     }
  278.     /**
  279.      * @return Asset|Document|Model\DataObject\Concrete
  280.      */
  281.     public function setObjectFromId()
  282.     {
  283.         if ($this->internal) {
  284.             if ($this->internalType == 'document') {
  285.                 $this->object Document::getById($this->internal);
  286.             } elseif ($this->internalType == 'asset') {
  287.                 $this->object Asset::getById($this->internal);
  288.             } elseif ($this->internalType == 'object') {
  289.                 $this->object Model\DataObject\Concrete::getById($this->internal);
  290.             }
  291.         }
  292.         return $this->object;
  293.     }
  294.     /**
  295.      * returns the ready-use html for this link
  296.      *
  297.      * @return string
  298.      */
  299.     public function getHtml()
  300.     {
  301.         $attributes = [
  302.             'class',
  303.             'target',
  304.             'title',
  305.             'accesskey',
  306.             'tabindex',
  307.             'rel' => 'relation',
  308.         ];
  309.         $link $this->getLink();
  310.         $link .= $this->getProperty('navigation_parameters') . $this->getProperty('navigation_anchor');
  311.         $attribs = [];
  312.         foreach ($attributes as $key => $name) {
  313.             $key is_numeric($key) ? $name $key;
  314.             $value $this->getProperty('navigation_' $name);
  315.             if ($value) {
  316.                 $attribs[] = $key '="' $value '"';
  317.             }
  318.         }
  319.         return '<a href="' $link '" ' implode(' '$attribs) . '>' htmlspecialchars($this->getProperty('navigation_name')) . '</a>';
  320.     }
  321.     /**
  322.      * @inheritDoc
  323.      */
  324.     protected function update($params = [])
  325.     {
  326.         parent::update($params);
  327.         $this->saveScheduledTasks();
  328.     }
  329.     public function __sleep()
  330.     {
  331.         $finalVars = [];
  332.         $parentVars parent::__sleep();
  333.         $blockedVars = ['object'];
  334.         foreach ($parentVars as $key) {
  335.             if (!in_array($key$blockedVars)) {
  336.                 $finalVars[] = $key;
  337.             }
  338.         }
  339.         return $finalVars;
  340.     }
  341. }