protected function blockCipherFields(AbstractChangeEventArgs $eventArgs) { $metadata = $eventArgs->getMetadata(); $cryptMetadata = $metadata->getCrypt(); if (!isset($cryptMetadata) || !isset($cryptMetadata['blockCipher'])) { return; } $document = $eventArgs->getDocument(); $changeSet = $eventArgs->getChangeSet(); foreach ($cryptMetadata['blockCipher'] as $field => $setting) { if ($this->hasChanged($field, $changeSet)) { $service = $this->serviceLocator->get($setting['service']); if (!$service instanceof BlockCipherServiceInterface) { throw new \Zoop\Shard\Exception\InvalidArgumentException(); } $service->encryptField($field, $document, $metadata); $eventArgs->addRecompute($field); } } }
public function validate(AbstractChangeEventArgs $eventArgs) { $document = $eventArgs->getDocument(); $documentValidator = $this->getDocumentValidator(); $result = $documentValidator->isValid($document, $eventArgs->getMetadata(), $eventArgs->getChangeSet()); if (!$result->getValue()) { // Raise INVALID_MODEL $eventArgs->getEventManager()->dispatchEvent(Events::INVALID_MODEL, new EventArgs($document, $result)); $eventArgs->setReject(true); } }
protected function recompute($document, AbstractChangeEventArgs $eventArgs, $documentManager) { $unitOfWork = $documentManager->getUnitOfWork(); $changeSet = $eventArgs->getChangeSet(); $metadata = $eventArgs->getMetadata(); foreach ($eventArgs->getRecompute() as $field) { if ($changeSet->hasField($field)) { $oldValue = $changeSet->getField($field)[0]; } else { $oldValue = null; } $unitOfWork->propertyChanged($document, $field, $oldValue, $metadata->getFieldValue($document, $field)); } }