vendor/pimcore/pimcore/models/Document/Editable/Pdf.php line 25

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\Document\Editable;
  15. use Pimcore\Logger;
  16. use Pimcore\Model;
  17. use Pimcore\Model\Asset;
  18. /**
  19.  * @method \Pimcore\Model\Document\Editable\Dao getDao()
  20.  */
  21. class Pdf extends Model\Document\Editable implements EditmodeDataInterface
  22. {
  23.     /**
  24.      * @internal
  25.      *
  26.      * @var int|null
  27.      */
  28.     protected $id;
  29.     /**
  30.      * {@inheritdoc}
  31.      */
  32.     public function getType()
  33.     {
  34.         return 'pdf';
  35.     }
  36.     /**
  37.      * {@inheritdoc}
  38.      */
  39.     public function getData()
  40.     {
  41.         return [
  42.             'id' => $this->id,
  43.         ];
  44.     }
  45.     /**
  46.      * {@inheritdoc}
  47.      */
  48.     public function getDataForResource()
  49.     {
  50.         return [
  51.             'id' => $this->id,
  52.         ];
  53.     }
  54.     /**
  55.      * {@inheritdoc}
  56.      */
  57.     public function getDataEditmode() /** : mixed */
  58.     {
  59.         $pages 0;
  60.         if ($asset Asset\Document::getById($this->id)) {
  61.             $pages $asset->getPageCount();
  62.         }
  63.         return [
  64.             'id' => $this->id,
  65.             'pageCount' => $pages,
  66.         ];
  67.     }
  68.     /**
  69.      * {@inheritdoc}
  70.      */
  71.     public function getCacheTags(Model\Document\PageSnippet $ownerDocument, array $tags = []): array
  72.     {
  73.         $asset Asset::getById($this->id);
  74.         if ($asset instanceof Asset) {
  75.             if (!array_key_exists($asset->getCacheTag(), $tags)) {
  76.                 $tags $asset->getCacheTags($tags);
  77.             }
  78.         }
  79.         return $tags;
  80.     }
  81.     /**
  82.      * {@inheritdoc}
  83.      */
  84.     public function resolveDependencies()
  85.     {
  86.         $dependencies = [];
  87.         $asset Asset::getById($this->id);
  88.         if ($asset instanceof Asset) {
  89.             $key 'asset_' $asset->getId();
  90.             $dependencies[$key] = [
  91.                 'id' => $asset->getId(),
  92.                 'type' => 'asset',
  93.             ];
  94.         }
  95.         return $dependencies;
  96.     }
  97.     /**
  98.      * {@inheritdoc}
  99.      */
  100.     public function checkValidity()
  101.     {
  102.         $sane true;
  103.         if (!empty($this->id)) {
  104.             $el Asset::getById($this->id);
  105.             if (!$el instanceof Asset) {
  106.                 $sane false;
  107.                 Logger::notice('Detected insane relation, removing reference to non existent asset with id [' $this->id ']');
  108.                 $this->id null;
  109.             }
  110.         }
  111.         return $sane;
  112.     }
  113.     /**
  114.      * {@inheritdoc}
  115.      */
  116.     public function setDataFromResource($data)
  117.     {
  118.         if (!empty($data)) {
  119.             $data \Pimcore\Tool\Serialize::unserialize($data);
  120.         }
  121.         $this->id $data['id'];
  122.         return $this;
  123.     }
  124.     /**
  125.      * {@inheritdoc}
  126.      */
  127.     public function setDataFromEditmode($data)
  128.     {
  129.         $pdf Asset::getById($data['id']);
  130.         if ($pdf instanceof Asset\Document) {
  131.             $this->id $pdf->getId();
  132.         }
  133.         return $this;
  134.     }
  135.     /**
  136.      * {@inheritdoc}
  137.      */
  138.     public function frontend()
  139.     {
  140.         $asset Asset::getById($this->id);
  141.         $config $this->getConfig();
  142.         $thumbnailConfig = ['width' => 1000];
  143.         if (isset($config['thumbnail'])) {
  144.             $thumbnailConfig $config['thumbnail'];
  145.         }
  146.         if ($asset instanceof Asset\Document && $asset->getPageCount()) {
  147.             $divId 'pimcore-pdf-' uniqid();
  148.             $pdfPath $asset->getFullPath();
  149.             $thumbnailPath $asset->getImageThumbnail($thumbnailConfig1true);
  150.             $code = <<<HTML
  151.             <div id="$divId" class="pimcore-pdfViewer">
  152.                 <a href="$pdfPath" target="_blank"><img src="$thumbnailPath"></a>
  153.             </div>
  154. HTML;
  155.             return $code;
  156.         } else {
  157.             return $this->getErrorCode('Preview in progress or not a valid PDF file');
  158.         }
  159.     }
  160.     /**
  161.      * @param string $message
  162.      *
  163.      * @return string
  164.      */
  165.     private function getErrorCode($message '')
  166.     {
  167.         // only display error message in debug mode
  168.         if (!\Pimcore::inDebugMode()) {
  169.             $message '';
  170.         }
  171.         $code '
  172.         <div id="pimcore_pdf_' $this->getName() . '" class="pimcore_editable_pdf">
  173.             <div class="pimcore_editable_video_error" style="line-height: 50px; text-align:center; width: 100%; min-height: 50px; background: #ececec;">
  174.                 ' $message '
  175.             </div>
  176.         </div>';
  177.         return $code;
  178.     }
  179.     /**
  180.      * {@inheritdoc}
  181.      */
  182.     public function isEmpty()
  183.     {
  184.         if ($this->id) {
  185.             return false;
  186.         }
  187.         return true;
  188.     }
  189.     /**
  190.      * @return Asset|null
  191.      */
  192.     public function getElement()
  193.     {
  194.         $data $this->getData();
  195.         return Asset::getById($data['id']);
  196.     }
  197.     /**
  198.      * @param int|null $id
  199.      */
  200.     public function setId($id)
  201.     {
  202.         $this->id $id;
  203.     }
  204.     /**
  205.      * @return int|null
  206.      */
  207.     public function getId()
  208.     {
  209.         return $this->id;
  210.     }
  211. }