<?php
namespace Javra\ReIndexOnTheFlyBundle\EventListener;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Model\Search\Backend\Data;
use Pimcore\Model\Search\Backend\Data\Id;
use Pimcore\Event\Model\AssetEvent;
/**
* Runs when events are triggered
*/
class IndexOnPostListener
{
/**
* AssetonPostAddEdit
* Runs after asset is created or updated and index the asset
* @param AssetEvent $e
* @return void
*/
public function AssetonPostAddEdit(AssetEvent $e): void
{
$this->createUpdateIndexElement($e->getAsset());
}
/**
* AssetonPostDelete
* Runs after asset is deleted and remove it from the index
* @param AssetEvent $e
* @return void
*/
public function AssetonPostDelete(AssetEvent $e): void
{
$this->deleteIndexElement($e->getAsset());
}
/**
* DataObjectOnPostAddEdit
* Runs after dataObject is created or updated and index the asset
* @param AssetEvent $e
* @return void
*/
public function DataObjectOnPostAddEdit(DataObjectEvent $e): void
{
$this->createUpdateIndexElement($e->getObject());
}
/**
* DataObjectOnPostDelete
* Runs after dataObject is created or updated and index the asset
* @param AssetEvent $e
* @return void
*/
public function DataObjectOnPostDelete(DataObjectEvent $e): void
{
$this->deleteIndexElement($e->getObject());
}
/**
* Creates the entry on the index table for the element if not exists otherwise update the entry
*
* @param [mixed] $element
* @return void
*/
private function createUpdateIndexElement($element): void
{
$searchEntry = Data::getForElement($element);
if ($searchEntry instanceof Data && $searchEntry->getId() instanceof Id) {
$searchEntry->setDataFromElement($element);
} else {
$searchEntry = new Data($element);
}
$searchEntry->save();
}
/**
* Removes the element from the index table
*
* @param [mixed] $element
* @return void
*/
private function deleteIndexElement($element)
{
$searchEntry = Data::getForElement($element);
if ($searchEntry instanceof Data && $searchEntry->getId() instanceof Id) {
$searchEntry->setDataFromElement($element);
}
$searchEntry->delete();
}
}