Skip to main content
Version: Next

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.

EventDispatchedUse it to
DeliveryModifyResultEventAfter 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.
OrderItemPreSaveEventFor 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.
OrderPreSaveEventOnce, 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().

EventDispatchedUse it to
IsValidDataObjectTriggerEventOn 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).
RelevantItemListEventAfter the listing of exportable objects is built, before its IDs are loaded.Narrow or extend the listing with getList() and setList().
IsValidExportItemEventFor 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.

note

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());
}
}
}