src/EventListener/BarcodeListener.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3.   
  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\DataObject;
  9. use Pimcore\Model\DataObject\Barcodes\Listing as BarcodeListing;
  10. use Pimcore\Model\DataObject\Product;
  11. use Pimcore\Model\Element\Note;
  12. class BarcodeListener {
  13.     public function onPostAdd (ElementEventInterface $e) {
  14.         if (!$e->hasArgument('isAutoSave')) {
  15.             if($e instanceof AssetEvent) {
  16.                 // do something with the asset
  17.                 $foo $e->getAsset(); 
  18.             } else if ($e instanceof DocumentEvent) {
  19.                 // do something with the document
  20.                 $foo $e->getDocument(); 
  21.             } else if ($e instanceof DataObjectEvent) {
  22.                 // do something with the object
  23.                 $dataObject $e->getObject(); 
  24.                 return;
  25.                 if (get_class($dataObject) == "Pimcore\Model\DataObject\Product" && $this->getLevel($dataObject) == 3) {
  26.                     $dataObject->setEAN($this->getBarcode($dataObject));
  27.                 }
  28.                 
  29.                 //$this->GetParentItemCount($parentPath->getId());
  30.                 
  31.                 
  32.             }
  33.         }
  34.     }
  35.     public function onPreDelete (ElementEventInterface $e) {
  36.        
  37.         if($e instanceof AssetEvent) {
  38.             // do something with the asset
  39.             $foo $e->getAsset(); 
  40.         } else if ($e instanceof DocumentEvent) {
  41.             // do something with the document
  42.             $foo $e->getDocument(); 
  43.         } else if ($e instanceof DataObjectEvent) {
  44.             // do something with the object
  45.             $dataObject $e->getObject(); 
  46.             
  47.             if ($dataObject instanceof Product && $dataObject->isPublished() == false) {
  48.                 $this->RemoveBarcode($dataObject);
  49.             }          
  50.             
  51.         }
  52.     }
  53.     private function RemoveBarcode($dataObject) {
  54.         $currentBarcode $dataObject->getEAN();
  55.         if (!empty($currentBarcode)) {
  56.             $barcodeObject = new BarcodeListing();
  57.             $barcodes $barcodeObject->filterByBarcode($currentBarcode);
  58.             if (!empty($barcodes)) {
  59.                 $barcodes->current()->setUsed(false);
  60.                 $barcodes->current()->setProduct(null);
  61.                 $barcodes->current()->save();
  62.                 // $noteData = [
  63.                 //     [
  64.                 //         'name'=>'Product',
  65.                 //         'type'=>'Object',
  66.                 //         'value'=>$dataObject->getSKU()
  67.                 //     ]
  68.                 // ];
  69.                 // $this->AddNote($barcodes->current(), $dataObject, "product_delete", "Unpublished associated product deleted", $noteData);
  70.             }
  71.         }
  72.     }
  73.     private function AddNote($object$dataObject$type$title$data) {
  74.         $object DataObject::getById($object->getId());
  75.         $note = new Note();
  76.         $note->setElement($object);
  77.         $note->setDate(time());
  78.         $note->setType($type);
  79.         $note->setTitle($title);
  80.         $note->setUser(0);
  81.         foreach ($data as $noteData) {
  82.             $note->addData($noteData['name'], $noteData['type'], $noteData['value']);
  83.         }
  84.         
  85.         $note->save();
  86.     }
  87.     public function GetBarcode($dataObject) {
  88.         
  89.         $currentBarcode $dataObject->getEAN();
  90.         
  91.         if (!empty($currentBarcode)) {
  92.             $barcodeObject = new BarcodeListing();
  93.             $barcodes $barcodeObject->filterByBarcode($currentBarcode);
  94.             
  95.             if (!empty($barcodes)) {
  96.                 $barcode $barcodes->current();
  97.                 $barcode->setProduct($dataObject);
  98.                 
  99.                 $barcode->setUsed(true);
  100.                 
  101.                 $barcode->save();
  102.             }
  103.         }
  104.     }
  105.     private function GetBaseFolder($parentPath) {
  106.         $baseFolder explode("/"$parentPath);
  107.         if (count($baseFolder) >= 2) {
  108.             return $baseFolder[1];
  109.         }
  110.     }
  111.     private function GetParentKey($parentPath) {
  112.         $pathParts explode("/"$parentPath);
  113.         if (count($pathParts) >= 1) {
  114.             return $pathParts[count($pathParts)-1];
  115.         }
  116.     }
  117.     private function fieldExists($dataObject$field) {
  118.         try {
  119.             $function "get".$field;
  120.             $dataObject->$function();
  121.             return true;
  122.         } catch (\Exception $e) {
  123.             return false;
  124.         }
  125.     }
  126.     private function GetLevel(DataObject $dataObject) {
  127.         $levelCount 0;
  128.         do {
  129.             $levelCount++;
  130.             $dataObject $dataObject->getParent();
  131.             if ($levelCount 5) {
  132.                 break;
  133.             }
  134.         } while ($dataObject->getType() != "folder");
  135.         
  136.         return $levelCount;
  137.     }
  138.     
  139.     
  140. }