bundles/IndabaIbexportBundle/EventListener/RelationsUpdateListener.php line 46

Open in your IDE?
  1. <?php
  2. namespace IndabaIbexportBundle\EventListener;
  3. use Pimcore\Event\Model\ElementEventInterface;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Pimcore\Event\Model\AssetEvent;
  6. use Pimcore\Event\Model\DocumentEvent;
  7. use Pimcore\Db;
  8. use Pimcore\Model\Asset;
  9. use IndabaIbexportBundle\Model\IBExportConfiguration;
  10. use IndabaPublicationBundle\Service\Helper;
  11. /**
  12.  * Description of RelationsUpdateListener
  13.  *
  14.  * @author PcCom
  15.  */
  16. class RelationsUpdateListener
  17. {
  18.     // in new version doesn't need, because they save id and not the filename
  19.     public function onPreAssetUpdate(ElementEventInterface $e)
  20.     {
  21.         if ($e instanceof AssetEvent) {
  22.             try {
  23.                 $obj $e->getAsset();
  24.                 $cachedObj Asset::getById($obj->getId(), ['force' => true]);
  25.                 if ($cachedObj) {
  26.                    if ($obj->getType() == "image" && method_exists($cachedObj"getFilename")) {
  27.                         $newfile $obj->getFilename();
  28.                         $oldfile $cachedObj->getFilename();
  29.                         if ($newfile != $oldfile) {
  30.                             $db Db::get();
  31.                             $db->query("UPDATE `schrader_catalogue_structure` SET `configuration` = REPLACE (`configuration`, '" $oldfile "', '" $newfile "') WHERE `configuration` LIKE '%" $oldfile "%';");
  32.                         }
  33.                     } 
  34.                 }
  35.             } catch (\Exception $e) {
  36.                 $error $e->getMessage();
  37.                 \Pimcore\Log\Simple::log("ObjectEventLog""IBExportBundle preAssetsUpdate: " $error);
  38.             }
  39.         }
  40.     }
  41.     
  42.     public function onAssetDeleteInfo(ElementEventInterface $e)
  43.     {
  44.         if ($e instanceof AssetEvent) {
  45.             $asset $e->getAsset();
  46.             if ("folder" != $asset->getType()) {
  47.                 if ($this->inPublications($asset->getId())) {
  48.                     $e->setDeletionAllowed(false);
  49.                     $e->setReason("This asset \"" $asset->getFilename() . "\" has any relations to publications. You must remove this relations before you can delete this asset");
  50.                 }
  51.             } else {
  52.                 foreach ($this->getAssetsInFolderIdList($asset) as $id) {
  53.                     if ($this->inPublications($id)) {
  54.                         $e->setDeletionAllowed(false);
  55.                         $e->setReason("The assets in the folder \"" $asset->getFilename() . "\" have any relations to publications. You must remove this relations before you can delete this folder");
  56.                         break;
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     
  63.     
  64.     private function inPublications(int $id) : bool
  65.     {
  66.         $db Db::get();
  67.         $asset Asset::getById($id);
  68.         $filename $asset->getFilename();
  69.         $query "SELECT `id` FROM `schrader_catalogue_structure` WHERE `configuration` LIKE '%" $filename "%' OR `configuration` LIKE '%\"id\":" $id ",%' LIMIT 1;";
  70.         \Pimcore\Log\Simple::log("AssetDeleteInfo"$query);
  71.         $result $db->query($query);
  72.         return ($result->rowCount() > 0) ? true false ;
  73.     }
  74.     
  75.     private function getAssetsInFolderIdList($asset)
  76.     {
  77.         $fullPath $asset->getFullPath();
  78.         $list = new \Pimcore\Model\Asset\Listing();
  79.         $list->setCondition("path LIKE ? AND type NOT LIKE ?", [$fullPath "/%""folder"]);
  80.         return $list->loadIdList();
  81.     }
  82. }