From 6a2534ba5c8d149b93b7d037ea0e0d19dea52c0a Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 09:56:26 +0200 Subject: [PATCH 01/11] feat: added before load event for objects, documents and assets --- lib/Event/AssetEvents.php | 10 ++++ lib/Event/DataObjectEvents.php | 10 ++++ lib/Event/DocumentEvents.php | 10 ++++ lib/Event/Model/AssetPreLoadEvent.php | 58 ++++++++++++++++++++++ lib/Event/Model/DataObjectPreLoadEvent.php | 57 +++++++++++++++++++++ lib/Event/Model/DocumentPreLoadEvent.php | 57 +++++++++++++++++++++ models/Asset.php | 6 +++ models/DataObject/AbstractObject.php | 6 +++ models/Document.php | 5 ++ 9 files changed, 219 insertions(+) create mode 100644 lib/Event/Model/AssetPreLoadEvent.php create mode 100644 lib/Event/Model/DataObjectPreLoadEvent.php create mode 100644 lib/Event/Model/DocumentPreLoadEvent.php diff --git a/lib/Event/AssetEvents.php b/lib/Event/AssetEvents.php index ad5ddaf9e99..4b3c80e073c 100644 --- a/lib/Event/AssetEvents.php +++ b/lib/Event/AssetEvents.php @@ -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 diff --git a/lib/Event/DataObjectEvents.php b/lib/Event/DataObjectEvents.php index 6bb0523fdb6..a8043eb68fd 100644 --- a/lib/Event/DataObjectEvents.php +++ b/lib/Event/DataObjectEvents.php @@ -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 diff --git a/lib/Event/DocumentEvents.php b/lib/Event/DocumentEvents.php index 202cacb5cac..553dbcda3c3 100644 --- a/lib/Event/DocumentEvents.php +++ b/lib/Event/DocumentEvents.php @@ -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 diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php new file mode 100644 index 00000000000..b9e2c0ecbca --- /dev/null +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -0,0 +1,58 @@ +asset = $asset; + $this->arguments = $arguments; + } + + public function getAsset(): ?Asset + { + if (empty($this->document)) { + throw new NotFoundException(); + } + return $this->asset; + } + + public function setAsset(?Asset $asset): void + { + $this->asset = $asset; + } + + public function getElement(): Asset + { + return $this->getAsset(); + } +} diff --git a/lib/Event/Model/DataObjectPreLoadEvent.php b/lib/Event/Model/DataObjectPreLoadEvent.php new file mode 100644 index 00000000000..376939275a1 --- /dev/null +++ b/lib/Event/Model/DataObjectPreLoadEvent.php @@ -0,0 +1,57 @@ +object = $object; + $this->arguments = $arguments; + } + + public function getObject(): ?AbstractObject + { + if (empty($this->object)) { + throw new NotFoundException(); + } + return $this->object; + } + + public function setObject(?AbstractObject $object): void + { + $this->object = $object; + } + + public function getElement(): AbstractObject + { + return $this->getObject(); + } +} diff --git a/lib/Event/Model/DocumentPreLoadEvent.php b/lib/Event/Model/DocumentPreLoadEvent.php new file mode 100644 index 00000000000..71b8676b1bc --- /dev/null +++ b/lib/Event/Model/DocumentPreLoadEvent.php @@ -0,0 +1,57 @@ +document = $document; + $this->arguments = $arguments; + } + + public function getDocument(): ?Document + { + if (empty($this->document)) { + throw new NotFoundException(); + } + return $this->document; + } + + public function setDocument(?Document $document): void + { + $this->document = $document; + } + + public function getElement(): Document + { + return $this->getDocument(); + } +} diff --git a/models/Asset.php b/models/Asset.php index 62cabe515f2..7fd61e6fab2 100644 --- a/models/Asset.php +++ b/models/Asset.php @@ -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; @@ -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); diff --git a/models/DataObject/AbstractObject.php b/models/DataObject/AbstractObject.php index e62f99370c9..468091808c8 100644 --- a/models/DataObject/AbstractObject.php +++ b/models/DataObject/AbstractObject.php @@ -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; @@ -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); diff --git a/models/Document.php b/models/Document.php index f21adf54aa8..2cc9485a48b 100644 --- a/models/Document.php +++ b/models/Document.php @@ -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; @@ -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; } From bf53cab6eca8005bde1b224050d8ff034bf44365 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 10:52:10 +0200 Subject: [PATCH 02/11] fix: fixed asset event --- lib/Event/Model/AssetPreLoadEvent.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index b9e2c0ecbca..4039d8bad3d 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -40,7 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): ?Asset { - if (empty($this->document)) { + if (empty($this->asset)) { throw new NotFoundException(); } return $this->asset; From fcd68acc366bdfed415f5f1ef262f9ea75b0a175 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 10:56:09 +0200 Subject: [PATCH 03/11] fix: fixed types on getter methods --- lib/Event/Model/AssetPreLoadEvent.php | 2 +- lib/Event/Model/DataObjectPreLoadEvent.php | 2 +- lib/Event/Model/DocumentPreLoadEvent.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index 4039d8bad3d..7bc9a272a98 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -38,7 +38,7 @@ public function __construct(?Asset $asset, array $arguments = []) $this->arguments = $arguments; } - public function getAsset(): ?Asset + public function getAsset(): Asset { if (empty($this->asset)) { throw new NotFoundException(); diff --git a/lib/Event/Model/DataObjectPreLoadEvent.php b/lib/Event/Model/DataObjectPreLoadEvent.php index 376939275a1..153537d5b2f 100644 --- a/lib/Event/Model/DataObjectPreLoadEvent.php +++ b/lib/Event/Model/DataObjectPreLoadEvent.php @@ -37,7 +37,7 @@ public function __construct(?AbstractObject $object, array $arguments = []) $this->arguments = $arguments; } - public function getObject(): ?AbstractObject + public function getObject(): AbstractObject { if (empty($this->object)) { throw new NotFoundException(); diff --git a/lib/Event/Model/DocumentPreLoadEvent.php b/lib/Event/Model/DocumentPreLoadEvent.php index 71b8676b1bc..2553f3a2cbc 100644 --- a/lib/Event/Model/DocumentPreLoadEvent.php +++ b/lib/Event/Model/DocumentPreLoadEvent.php @@ -37,7 +37,7 @@ public function __construct(?Document $document, array $arguments = []) $this->arguments = $arguments; } - public function getDocument(): ?Document + public function getDocument(): Document { if (empty($this->document)) { throw new NotFoundException(); From f754b7416b6e89f2e38c16e6e1c1b725f5ef7deb Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 11:08:24 +0200 Subject: [PATCH 04/11] chore: do null check instead of empty --- lib/Event/Model/AssetPreLoadEvent.php | 4 ++-- lib/Event/Model/DataObjectPreLoadEvent.php | 4 ++-- lib/Event/Model/DocumentPreLoadEvent.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index 7bc9a272a98..7b6be0129c5 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -25,7 +25,7 @@ class AssetPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?Asset $asset; + protected ?Asset $asset = null; /** * AssetEvent constructor. @@ -40,7 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { - if (empty($this->asset)) { + if ($this->asset === null) { throw new NotFoundException(); } return $this->asset; diff --git a/lib/Event/Model/DataObjectPreLoadEvent.php b/lib/Event/Model/DataObjectPreLoadEvent.php index 153537d5b2f..9ca316850f8 100644 --- a/lib/Event/Model/DataObjectPreLoadEvent.php +++ b/lib/Event/Model/DataObjectPreLoadEvent.php @@ -25,7 +25,7 @@ class DataObjectPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?AbstractObject $object; + protected ?AbstractObject $object = null; /** * DataObjectEvent constructor. @@ -39,7 +39,7 @@ public function __construct(?AbstractObject $object, array $arguments = []) public function getObject(): AbstractObject { - if (empty($this->object)) { + if ($this->object === null) { throw new NotFoundException(); } return $this->object; diff --git a/lib/Event/Model/DocumentPreLoadEvent.php b/lib/Event/Model/DocumentPreLoadEvent.php index 2553f3a2cbc..c57becc6690 100644 --- a/lib/Event/Model/DocumentPreLoadEvent.php +++ b/lib/Event/Model/DocumentPreLoadEvent.php @@ -25,7 +25,7 @@ class DocumentPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?Document $document; + protected ?Document $document = null; /** * DocumentEvent constructor. @@ -39,7 +39,7 @@ public function __construct(?Document $document, array $arguments = []) public function getDocument(): Document { - if (empty($this->document)) { + if ($this->document === null) { throw new NotFoundException(); } return $this->document; From eb099cb87fe379b16e2020b40b8d147443b259c6 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 11:30:20 +0200 Subject: [PATCH 05/11] chore: do is null check to avoid magic method calls --- lib/Event/Model/AssetPreLoadEvent.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index 7b6be0129c5..bf96bac6afb 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -40,7 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { - if ($this->asset === null) { + if (is_null($this->asset)) { throw new NotFoundException(); } return $this->asset; From 8b553f7f416bd181a882cc9698892457a1de7730 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 11:31:19 +0200 Subject: [PATCH 06/11] chore: do is null check to avoid magic method calls --- lib/Event/Model/DataObjectPreLoadEvent.php | 2 +- lib/Event/Model/DocumentPreLoadEvent.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Event/Model/DataObjectPreLoadEvent.php b/lib/Event/Model/DataObjectPreLoadEvent.php index 9ca316850f8..f1143e8b79d 100644 --- a/lib/Event/Model/DataObjectPreLoadEvent.php +++ b/lib/Event/Model/DataObjectPreLoadEvent.php @@ -39,7 +39,7 @@ public function __construct(?AbstractObject $object, array $arguments = []) public function getObject(): AbstractObject { - if ($this->object === null) { + if (is_null($this->object)) { throw new NotFoundException(); } return $this->object; diff --git a/lib/Event/Model/DocumentPreLoadEvent.php b/lib/Event/Model/DocumentPreLoadEvent.php index c57becc6690..167a334f255 100644 --- a/lib/Event/Model/DocumentPreLoadEvent.php +++ b/lib/Event/Model/DocumentPreLoadEvent.php @@ -39,7 +39,7 @@ public function __construct(?Document $document, array $arguments = []) public function getDocument(): Document { - if ($this->document === null) { + if (is_null($this->document)) { throw new NotFoundException(); } return $this->document; From 92733c7e5dde0ef996ab243f15fde4bae6fabde7 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 11:44:21 +0200 Subject: [PATCH 07/11] chore: revert changes --- lib/Event/Model/AssetPreLoadEvent.php | 4 ++-- lib/Event/Model/DataObjectPreLoadEvent.php | 4 ++-- lib/Event/Model/DocumentPreLoadEvent.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index bf96bac6afb..62d0cda958b 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -25,7 +25,7 @@ class AssetPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?Asset $asset = null; + protected ?Asset $asset; /** * AssetEvent constructor. @@ -40,7 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { - if (is_null($this->asset)) { + if ($this->asset === null) { throw new NotFoundException(); } return $this->asset; diff --git a/lib/Event/Model/DataObjectPreLoadEvent.php b/lib/Event/Model/DataObjectPreLoadEvent.php index f1143e8b79d..56633f858af 100644 --- a/lib/Event/Model/DataObjectPreLoadEvent.php +++ b/lib/Event/Model/DataObjectPreLoadEvent.php @@ -25,7 +25,7 @@ class DataObjectPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?AbstractObject $object = null; + protected ?AbstractObject $object; /** * DataObjectEvent constructor. @@ -39,7 +39,7 @@ public function __construct(?AbstractObject $object, array $arguments = []) public function getObject(): AbstractObject { - if (is_null($this->object)) { + if ($this->object === null) { throw new NotFoundException(); } return $this->object; diff --git a/lib/Event/Model/DocumentPreLoadEvent.php b/lib/Event/Model/DocumentPreLoadEvent.php index 167a334f255..8a719f69ee7 100644 --- a/lib/Event/Model/DocumentPreLoadEvent.php +++ b/lib/Event/Model/DocumentPreLoadEvent.php @@ -25,7 +25,7 @@ class DocumentPreLoadEvent extends Event implements ElementEventInterface { use ArgumentsAwareTrait; - protected ?Document $document = null; + protected ?Document $document; /** * DocumentEvent constructor. @@ -39,7 +39,7 @@ public function __construct(?Document $document, array $arguments = []) public function getDocument(): Document { - if (is_null($this->document)) { + if ($this->document === null) { throw new NotFoundException(); } return $this->document; From 6c797461e0de97866126acad8be23b60b32dfe0a Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 12:05:22 +0200 Subject: [PATCH 08/11] chore: added logging --- lib/Event/Model/AssetPreLoadEvent.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index 62d0cda958b..a4e2515152d 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -40,6 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { + echo getType($this->asset); if ($this->asset === null) { throw new NotFoundException(); } From 92b6b7d883ca906dd9861b14e21d735582e6bacd Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 13:23:12 +0200 Subject: [PATCH 09/11] chore: added logging --- lib/Event/Model/AssetPreLoadEvent.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index a4e2515152d..8e87d57308e 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -40,7 +40,7 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { - echo getType($this->asset); + $type = getType($this->asset); if ($this->asset === null) { throw new NotFoundException(); } From 51faa8ed0533e4de6c7c4ef3e39842687f00d73b Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Tue, 17 Oct 2023 13:34:02 +0200 Subject: [PATCH 10/11] chore: revert changes --- lib/Event/Model/AssetPreLoadEvent.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Event/Model/AssetPreLoadEvent.php b/lib/Event/Model/AssetPreLoadEvent.php index 8e87d57308e..62d0cda958b 100644 --- a/lib/Event/Model/AssetPreLoadEvent.php +++ b/lib/Event/Model/AssetPreLoadEvent.php @@ -40,7 +40,6 @@ public function __construct(?Asset $asset, array $arguments = []) public function getAsset(): Asset { - $type = getType($this->asset); if ($this->asset === null) { throw new NotFoundException(); } From be8ce60542dcef515af09623aa746d2c6f27cd98 Mon Sep 17 00:00:00 2001 From: Stefan Scheu Date: Wed, 18 Oct 2023 17:03:34 +0200 Subject: [PATCH 11/11] feat: fire event on cached entries --- models/Asset.php | 8 ++++++++ models/DataObject/AbstractObject.php | 9 +++++++++ models/Document.php | 8 ++++++++ 3 files changed, 25 insertions(+) diff --git a/models/Asset.php b/models/Asset.php index 7fd61e6fab2..3127ddbdacf 100644 --- a/models/Asset.php +++ b/models/Asset.php @@ -308,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); } diff --git a/models/DataObject/AbstractObject.php b/models/DataObject/AbstractObject.php index 468091808c8..c631a5256b7 100644 --- a/models/DataObject/AbstractObject.php +++ b/models/DataObject/AbstractObject.php @@ -422,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); } diff --git a/models/Document.php b/models/Document.php index 2cc9485a48b..c75f435275e 100644 --- a/models/Document.php +++ b/models/Document.php @@ -310,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); }