vendor/elements/universal-license-bundle/src/EventListener/PreUpdateListener.php line 20

Open in your IDE?
  1. <?php
  2. namespace Elements\Bundle\UniversalLicenseBundle\EventListener;
  3. use Elements\Bundle\UniversalLicenseBundle\Model\DataObject\AbstractULicense;
  4. use Pimcore\Event\Model\ElementEventInterface;
  5. use Pimcore\Event\Model\DataObjectEvent;
  6. use Pimcore\Event\Model\AssetEvent;
  7. use Pimcore\Event\Model\DocumentEvent;
  8. use Pimcore\Model\Asset;
  9. use Pimcore\Model\DataObject\ULicense;
  10. use Pimcore\Model\DataObject;
  11. use Pimcore\Model\Document;
  12. use Pimcore\Model\Element\Tag;
  13. class PreUpdateListener
  14. {
  15.     const TAG_PARENT_NAME 'ULicenses';
  16.     public function onPreUpdate(ElementEventInterface $e) {
  17.         if($e instanceof AssetEvent) {
  18.             $asset $e->getAsset();
  19.             $oldVersion Asset::getById($asset->getId(), true);
  20.             $oldLicense $oldVersion $oldVersion->getProperty(AbstractULicense::LICENSE_PROPERTY) : null;
  21.             $license $asset->getProperty(AbstractULicense::LICENSE_PROPERTY);
  22.             if ($oldLicense instanceof ULicense && (!$license instanceof ULicense || ($license->getId() != $oldLicense->getId()))) {
  23.                 if ($tag $oldLicense->getTag()) {
  24.                     try {
  25.                         Tag::removeTagFromElement('asset'$asset->getId(), $tag);
  26.                     } catch (\Throwable $exception) {
  27.                         // ignore
  28.                     }
  29.                 }
  30.             }
  31.             if ($license instanceof ULicense) {
  32.                 if ($tag $license->getTag()) {
  33.                     try {
  34.                         Tag::addTagToElement('asset'$asset->getId(), $tag);
  35.                     } catch (\Throwable $exception) {
  36.                         // ignore
  37.                     }
  38.                 }
  39.             }
  40.         } else if ($e instanceof DocumentEvent) {
  41.             $document $e->getDocument();
  42.             $oldVersion Document::getById($document->getId(), true);
  43.             $oldLicense $oldVersion $oldVersion->getProperty(AbstractULicense::LICENSE_PROPERTY) : null;
  44.             $license $document->getProperty(AbstractULicense::LICENSE_PROPERTY);
  45.             if ($oldLicense instanceof ULicense && (!$license instanceof ULicense || ($license->getId() != $oldLicense->getId()))) {
  46.                 if ($tag $oldLicense->getTag()) {
  47.                     try {
  48.                         Tag::removeTagFromElement('document'$document->getId(), $tag);
  49.                     } catch (\Throwable $exception) {
  50.                         // ignore
  51.                     }
  52.                 }
  53.             }
  54.             if ($license instanceof ULicense) {
  55.                 if ($tag $license->getTag()) {
  56.                     try {
  57.                         Tag::addTagToElement('document'$document->getId(), $tag);
  58.                     } catch (\Throwable $exception) {
  59.                         throw $exception;
  60.                         // ignore
  61.                     }
  62.                 }
  63.             }
  64.         } else if ($e instanceof DataObjectEvent) {
  65.             $object $e->getObject();
  66.             $oldVersion DataObject::getById($object->getId(), true);
  67.             $oldLicense $oldVersion $oldVersion->getProperty(AbstractULicense::LICENSE_PROPERTY) : null;
  68.             $license $object->getProperty(AbstractULicense::LICENSE_PROPERTY);
  69.             if ($oldLicense instanceof ULicense && (!$license instanceof ULicense || ($license->getId() != $oldLicense->getId()))) {
  70.                 if ($tag $oldLicense->getTag()) {
  71.                     try {
  72.                         Tag::removeTagFromElement('object'$object->getId(), $tag);
  73.                     } catch (\Throwable $exception) {
  74.                         // ignore
  75.                     }
  76.                 }
  77.             }
  78.             if ($object instanceof ULicense) {
  79.                 $tag $object->getTag();
  80.                 if ($tag == '') {
  81.                     $tag $this->getTagByCode($object->getCode());
  82.                     $object->setTagId($tag->getId());
  83.                 }
  84.             } else if ($license instanceof ULicense) {
  85.                 if ($tag $license->getTag()) {
  86.                     try {
  87.                         Tag::addTagToElement('object'$object->getId(), $tag);
  88.                     } catch (\Throwable $exception) {
  89.                         // ignore
  90.                     }
  91.                 }
  92.             }
  93.         }
  94.     }
  95.     /**
  96.      * @param $code
  97.      * @return Tag
  98.      */
  99.     private function getTagByCode($code) {
  100.         $tagParent $this->getTagParent();
  101.         $tags = new Tag\Listing();
  102.         $tags->addConditionParam('idPath LIKE "/' $tagParent->getId() . '/%"');
  103.         foreach($tags->load() ?? [] as $tag){
  104.             if ($tag->getName() == $code) {
  105.                 return $tag;
  106.             }
  107.         }
  108.         $tag = new Tag();
  109.         $tag->setName($code);
  110.         $tag->setParentId($tagParent->getId());
  111.         $tag->save();
  112.         return $tag;
  113.     }
  114.     private function getTagParent() {
  115.         $tags = new Tag\Listing();
  116.         $tags->addConditionParam('name = "' self::TAG_PARENT_NAME '"');
  117.         $tags $tags->load();
  118.         if (!empty($tags)) {
  119.             $tagParent $tags[0];
  120.         } else {
  121.             $tagParent = new Tag();
  122.             $tagParent->setName(self::TAG_PARENT_NAME);
  123.             $tagParent->setParentId(0);
  124.             $tagParent->save();
  125.         }
  126.         return $tagParent;
  127.     }
  128. }