bundles/IndabaPublicationBundle/EventListener/RelationsUpdateListener.php line 81

Open in your IDE?
  1. <?php
  2. namespace IndabaPublicationBundle\EventListener;
  3. use Pimcore\Event\Model\ElementEventInterface;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Pimcore\Model\DataObject;
  6. use Pimcore\Event\Model\AssetEvent;
  7. use Pimcore\Event\Model\DocumentEvent;
  8. use Pimcore\Db;
  9. use IndabaPublicationBundle\Service\Exportconfig;
  10. use IndabaPublicationBundle\Service\Helper;
  11. /**
  12.  * Description of RelationsUpdateListener
  13.  *
  14.  * @author PcCom
  15.  */
  16. class RelationsUpdateListener
  17. {
  18.     public function onPreUpdate(ElementEventInterface $e)
  19.     {
  20.         if ($e instanceof DataObjectEvent) {
  21.             try {
  22.                 $updateObject $e->getObject();
  23.                 $oid $updateObject->getId();
  24.                 $updateKeyValue $updateObject->getKey();
  25.                 $currentObject DataObject::getById($oidtrue);
  26.                 if (!$currentObject) {
  27.                     return 0;
  28.                 }
  29.                 if ($currentObject->getKey() !== $updateKeyValue) {
  30.                     $db Db::get();
  31.                     $result $db->query("SELECT `id`, `name`, `structure_path` FROM `schrader_catalogue_structure` WHERE `object_id` = " $oid ";");
  32.                     while ($row $result->fetch()) {
  33.                         $nodeId $row["id"];
  34.                         $oldStructurePath $row["structure_path"] . $row["name"] . "/";
  35.                         $newStructurePath $row["structure_path"] . $updateKeyValue "/";
  36.                         $db->query("UPDATE `schrader_catalogue_structure` SET `name` = '" $updateKeyValue "' WHERE `id` =  " $nodeId " ;");
  37.                         $db->query("UPDATE `schrader_catalogue_structure` SET `structure_path` = REPLACE (`structure_path`, '" $oldStructurePath "', '" $newStructurePath "') WHERE `structure_path` LIKE '" $oldStructurePath "%';");
  38.                     }
  39.                 }
  40.                 if (method_exists($currentObject"getNotforpublications")) {
  41.                     $cachedValue $currentObject->getNotforpublications();
  42.                 }
  43.                 if (method_exists($updateObject"getNotforpublications")) {
  44.                     $newValue $updateObject->getNotforpublications();
  45.                 }
  46.                 if ($newValue && ($newValue !== $cachedValue)) {
  47.                     // $this->deleteObject($oid);
  48.                 }
  49.             } catch (\Exception $e) {
  50.                 $error $e->getMessage();
  51.                 \Pimcore\Log\Simple::log("ObjectEventLog""IndabaPublication preUpdate: " $error);
  52.             }
  53.         }
  54.     }
  55.     public function onDataObjectDeleteInfo(ElementEventInterface $e)
  56.     {
  57.         if ($e instanceof DataObjectEvent) {
  58.             $object $e->getObject();
  59.             if ($this->inPublications($object)) {
  60.                 $e->setDeletionAllowed(false);
  61.                 $e->setReason("This object \"" $object->getKey() . "\" or his children have any relations to publications. You must remove this relations before you can delete this object");
  62.             }
  63.         }
  64.     }
  65.     
  66.     public function onPreDelete(ElementEventInterface $e)
  67.     {
  68.         if ($e instanceof DataObjectEvent) {
  69.             $object $e->getObject();
  70.             if ($this->inPublications($object)) {
  71.                 throw new \Exception("This object or his children have any relations to publications. You must remove this relations before you can delete this object.");
  72.             }
  73.         }
  74.     }
  75.     
  76.     private function inPublications($object)
  77.     {
  78.         $db Db::get();
  79.         $query "SELECT id 
  80.             FROM schrader_catalogue_structure
  81.             WHERE object_id IN (SELECT o_id FROM objects WHERE o_id = "  $object->getId() . " OR o_path LIKE '" $object->getFullPath() . "/%')
  82.             LIMIT 1;";
  83.         
  84.         $result $db->query($query);
  85.         
  86.         return ($result->rowCount() > 0) ? true false ;
  87.     }
  88. }