Skip to content
10 changes: 10 additions & 0 deletions lib/Event/AssetEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,16 @@ final class AssetEvents
*/
const POST_DELETE_FAILURE = 'pimcore.asset.postDeleteFailure';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
*
* @Event("Pimcore\Event\Model\AssetPreLoadEvent")
*
* @var string
*/
const PRE_LOAD = 'pimcore.asset.preLoad';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
Expand Down
10 changes: 10 additions & 0 deletions lib/Event/DataObjectEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,16 @@ final class DataObjectEvents
*/
const POST_DELETE_FAILURE = 'pimcore.dataobject.postDeleteFailure';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
*
* @Event("Pimcore\Event\Model\DataObjectPreLoadEvent")
*
* @var string
*/
const PRE_LOAD = 'pimcore.dataobject.preLoad';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
Expand Down
10 changes: 10 additions & 0 deletions lib/Event/DocumentEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,16 @@ final class DocumentEvents
*/
const POST_DELETE_FAILURE = 'pimcore.document.postDeleteFailure';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
*
* @Event("Pimcore\Event\Model\DocumentPreLoadEvent")
*
* @var string
*/
const PRE_LOAD = 'pimcore.document.preLoad';

/**
* Arguments:
* - params | array | contains the values that were passed to getById() as the second parameter
Expand Down
58 changes: 58 additions & 0 deletions lib/Event/Model/AssetPreLoadEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);

/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Commercial License (PCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PCL
*/

namespace Pimcore\Event\Model;

use Pimcore\Event\Traits\ArgumentsAwareTrait;
use Pimcore\Model\Asset;
use Pimcore\Model\Exception\NotFoundException;
use Symfony\Contracts\EventDispatcher\Event;

class AssetPreLoadEvent extends Event implements ElementEventInterface
{
use ArgumentsAwareTrait;

protected ?Asset $asset;

/**
* AssetEvent constructor.
*
* @param array $arguments additional parameters (e.g. "versionNote" for the version note)
*/
public function __construct(?Asset $asset, array $arguments = [])
{
$this->asset = $asset;
$this->arguments = $arguments;
}

public function getAsset(): Asset
{
if ($this->asset === null) {
throw new NotFoundException();
}
return $this->asset;
}

public function setAsset(?Asset $asset): void
{
$this->asset = $asset;
}

public function getElement(): Asset
{
return $this->getAsset();
}
}
57 changes: 57 additions & 0 deletions lib/Event/Model/DataObjectPreLoadEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);

/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Commercial License (PCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PCL
*/

namespace Pimcore\Event\Model;

use Pimcore\Event\Traits\ArgumentsAwareTrait;
use Pimcore\Model\DataObject\AbstractObject;
use Pimcore\Model\Exception\NotFoundException;
use Symfony\Contracts\EventDispatcher\Event;

class DataObjectPreLoadEvent extends Event implements ElementEventInterface
{
use ArgumentsAwareTrait;

protected ?AbstractObject $object;

/**
* DataObjectEvent constructor.
*
*/
public function __construct(?AbstractObject $object, array $arguments = [])
{
$this->object = $object;
$this->arguments = $arguments;
}

public function getObject(): AbstractObject
{
if ($this->object === null) {
throw new NotFoundException();
}
return $this->object;
}

public function setObject(?AbstractObject $object): void
{
$this->object = $object;
}

public function getElement(): AbstractObject
{
return $this->getObject();
}
}
57 changes: 57 additions & 0 deletions lib/Event/Model/DocumentPreLoadEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);

/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Commercial License (PCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PCL
*/

namespace Pimcore\Event\Model;

use Pimcore\Event\Traits\ArgumentsAwareTrait;
use Pimcore\Model\Document;
use Pimcore\Model\Exception\NotFoundException;
use Symfony\Contracts\EventDispatcher\Event;

class DocumentPreLoadEvent extends Event implements ElementEventInterface
{
use ArgumentsAwareTrait;

protected ?Document $document;

/**
* DocumentEvent constructor.
*
*/
public function __construct(?Document $document, array $arguments = [])
{
$this->document = $document;
$this->arguments = $arguments;
}

public function getDocument(): Document
{
if ($this->document === null) {
throw new NotFoundException();
}
return $this->document;
}

public function setDocument(?Document $document): void
{
$this->document = $document;
}

public function getElement(): Document
{
return $this->getDocument();
}
}
14 changes: 14 additions & 0 deletions models/Asset.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

use Doctrine\DBAL\Exception\DeadlockException;
use Exception;
use Pimcore\Event\Model\AssetPreLoadEvent;
use function is_array;
use League\Flysystem\FilesystemException;
use League\Flysystem\FilesystemOperator;
Expand Down Expand Up @@ -283,6 +284,11 @@ public static function getById($id, $force = false)

try {
$asset->getDao()->getById($id);
// fire pre load event
$preLoadEvent = new AssetPreLoadEvent($asset, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, AssetEvents::PRE_LOAD);
$asset = $preLoadEvent->getAsset();

$className = 'Pimcore\\Model\\Asset\\' . ucfirst($asset->getType());
/** @var Asset $newAsset */
$newAsset = self::getModelFactory()->build($className);
Expand All @@ -302,6 +308,14 @@ public static function getById($id, $force = false)
$asset = null;
}
} else {
try {
// fire pre load event
$preLoadEvent = new AssetPreLoadEvent($asset, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, AssetEvents::PRE_LOAD);
$asset = $preLoadEvent->getAsset();
} catch (NotFoundException $e) {
return null;
}
RuntimeCache::set($cacheKey, $asset);
}

Expand Down
15 changes: 15 additions & 0 deletions models/DataObject/AbstractObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use Pimcore\Db;
use Pimcore\Event\DataObjectEvents;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Event\Model\DataObjectPreLoadEvent;
use Pimcore\Logger;
use Pimcore\Model;
use Pimcore\Model\DataObject;
Expand Down Expand Up @@ -399,6 +400,11 @@ public static function getById($id, $force = false)
$object = self::getModelFactory()->build($className);
RuntimeCache::set($cacheKey, $object);
$object->getDao()->getById($id);
// fire pre load event
$preLoadEvent = new DataObjectPreLoadEvent($object, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, DataObjectEvents::PRE_LOAD);
$object = $preLoadEvent->getObject();

$object->__setDataVersionTimestamp($object->getModificationDate());

Service::recursiveResetDirtyMap($object);
Expand All @@ -416,6 +422,15 @@ public static function getById($id, $force = false)
return null;
}
} else {
try {
// fire pre load event
$preLoadEvent = new DataObjectPreLoadEvent($object, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, DataObjectEvents::PRE_LOAD);
$object = $preLoadEvent->getObject();
} catch (Model\Exception\NotFoundException $e) {
return null;
}

RuntimeCache::set($cacheKey, $object);
}

Expand Down
13 changes: 13 additions & 0 deletions models/Document.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use Pimcore\Event\DocumentEvents;
use Pimcore\Event\FrontendEvents;
use Pimcore\Event\Model\DocumentEvent;
use Pimcore\Event\Model\DocumentPreLoadEvent;
use Pimcore\Loader\ImplementationLoader\Exception\UnsupportedException;
use Pimcore\Logger;
use Pimcore\Model\Document\Hardlink\Wrapper\WrapperInterface;
Expand Down Expand Up @@ -259,6 +260,10 @@ public static function getById($id, $force = false)

try {
$document->getDao()->getById($id);
// fire pre load event
$preLoadEvent = new DocumentPreLoadEvent($document, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, DocumentEvents::PRE_LOAD);
$document = $preLoadEvent->getDocument();
} catch (NotFoundException $e) {
return null;
}
Expand Down Expand Up @@ -305,6 +310,14 @@ public static function getById($id, $force = false)

\Pimcore\Cache::save($document, $cacheKey);
} else {
try {
// fire pre load event
$preLoadEvent = new DocumentPreLoadEvent($document, ['params' => $params]);
\Pimcore::getEventDispatcher()->dispatch($preLoadEvent, DocumentEvents::PRE_LOAD);
$document = $preLoadEvent->getDocument();
} catch (NotFoundException $e) {
return null;
}
RuntimeCache::set($cacheKey, $document);
}

Expand Down