Events
Events dispatched by Productsup
The ProductsupController dispatches these events. All of them live in the
Pimcore\Bundle\DataHubProductsupBundle\Event namespace and extend a shared AbstractEvent, which exposes the
current Datahub Configuration through getConfiguration().
AbstractEvent also declares getRequest(): Request, but only DeliveryModifyResultEvent and
OrderItemPreSaveEvent are dispatched with the request set. The controller does not set it on OrderPreSaveEvent,
so calling getRequest() in a listener for that event fails on the uninitialized property.
| Event | Dispatched | Use it to |
|---|---|---|
DeliveryModifyResultEvent | After the cached items for a Delivery Endpoint request are loaded, before the JSON response is built. | Reshape or filter the response with getData() and setData(). getList() returns the underlying CacheItem\Listing. |
OrderItemPreSaveEvent | For each order line, after it is built from the payload but before it is saved. | Adjust the order item with getOrderItem() before it is saved. getOrder() returns the parent order, getPayload() the full request payload, and getData() the payload for this single item. |
OrderPreSaveEvent | Once, after all order items are attached but before the order itself is saved. | Adjust the order with getOrder() before it is saved. getPayload() returns the full request payload. getRequest() is not available on this event. |
Events from Datahub File Export
Productsup's exporters (Productsup and StudioProductsup) extend Datahub File Export's AbstractExporter, and its
save hook extends File Export's DataObjectSubscriber. Both dispatch events that apply to Productsup as well. They
live in the Pimcore\Bundle\DataHubFileExportBundle\Event namespace and all expose the current exporter through
getExporter().
| Event | Dispatched | Use it to |
|---|---|---|
IsValidDataObjectTriggerEvent | On object save, before the Save Hook acts on the change. | Suppress the export trigger for a specific change. Read the triggering event with getTriggerEvent(), then setIsValid(false). |
RelevantItemListEvent | After the listing of exportable objects is built, before its IDs are loaded. | Narrow or extend the listing with getList() and setList(). |
IsValidExportItemEvent | For each item, before it is exported. | Skip a single item with setIsValid(false). getObject() returns the candidate data object. |
IsValidDataObjectTriggerEvent only fires on the Save Hook path. RelevantItemListEvent and
IsValidExportItemEvent fire on both the Save Hook and the export command path. To
restrict the exported listing permanently rather than per run, override getQueryCondition() on a custom exporter,
see Customize and Extend.
File Export's remaining events (FilterExistingDataEvent, PreWriteDataEvent, FilenameEvent) are dispatched only
by its file-writing exporters. Productsup writes to its cache table instead, so they never fire here.
Older documentation and listener examples for this bundle referenced a pimcore.dataobject.postCsvItemExport event.
It is not dispatched anywhere in the current Productsup, StudioProductsup or AbstractExporter code, so a
listener registered for it never runs. Use IsValidExportItemEvent or DeliveryModifyResultEvent instead.
Registering a Listener
App\EventListener\DataHubProductsupListener:
tags:
- { name: kernel.event_listener, event: Pimcore\Bundle\DataHubFileExportBundle\Event\RelevantItemListEvent, method: relevantItemList }
- { name: kernel.event_listener, event: Pimcore\Bundle\DataHubFileExportBundle\Event\IsValidExportItemEvent, method: isValidExportItem }
- { name: kernel.event_listener, event: Pimcore\Bundle\DataHubProductsupBundle\Event\DeliveryModifyResultEvent, method: modifyResult }
- { name: kernel.event_listener, event: Pimcore\Bundle\DataHubProductsupBundle\Event\OrderItemPreSaveEvent, method: preOrderItemSave }
- { name: kernel.event_listener, event: Pimcore\Bundle\DataHubProductsupBundle\Event\OrderPreSaveEvent, method: orderPreSave }
Sample Listener
<?php
namespace App\EventListener;
use Pimcore\Bundle\DataHubFileExportBundle\Event\IsValidExportItemEvent;
use Pimcore\Bundle\DataHubFileExportBundle\Event\RelevantItemListEvent;
use Pimcore\Bundle\DataHubProductsupBundle\Event\DeliveryModifyResultEvent;
use Pimcore\Bundle\DataHubProductsupBundle\Event\OrderItemPreSaveEvent;
use Pimcore\Bundle\DataHubProductsupBundle\Event\OrderPreSaveEvent;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\OnlineShopOrder;
class DataHubProductsupListener
{
// Restrict the exported listing to objects created in the last year.
public function relevantItemList(RelevantItemListEvent $event): void
{
$list = $event->getList();
$list->addConditionParam('creationDate > ?', strtotime('-1 year'));
$event->setList($list);
}
// Exclude one specific object from the export.
public function isValidExportItem(IsValidExportItemEvent $event): void
{
if ($event->getObject()->getId() === 81) {
$event->setIsValid(false);
}
}
// Override the price on every item returned by the Delivery Endpoint.
public function modifyResult(DeliveryModifyResultEvent $event): void
{
$data = $event->getData();
foreach ($data as $key => $entry) {
$entry['price'] = 123.90;
$data[$key] = $entry;
}
$event->setData($data);
}
// Reassign the product on every imported order item.
public function preOrderItemSave(OrderItemPreSaveEvent $event): void
{
$order = $event->getOrder();
if ($order instanceof OnlineShopOrder) {
$event->getOrderItem()->setProduct(DataObject::getById(82));
}
}
// Change the key of every imported order.
public function orderPreSave(OrderPreSaveEvent $event): void
{
$order = $event->getOrder();
if ($order instanceof OnlineShopOrder) {
$order->setKey('order-' . time());
}
}
}