protected function collectProperties($identifier, $object, array $properties, &$dirty)
{
$propertyData = [];
foreach ($properties as $propertyName => $propertyMetaData) {
$propertyValue = $this->checkPropertyValue($object, $propertyName, $propertyMetaData);
// handle all objects now, because even clean ones need to be traversed
// as dirty checking is not recursive
if ($propertyValue instanceof PersistenceMagicInterface) {
if ($this->persistenceSession->isDirty($object, $propertyName)) {
$dirty = true;
$this->flattenValue($identifier, $object, $propertyName, $propertyMetaData, $propertyData);
} else {
$this->persistObject($propertyValue, $identifier);
}
} elseif ($this->persistenceSession->isDirty($object, $propertyName)) {
$dirty = true;
$this->flattenValue($identifier, $object, $propertyName, $propertyMetaData, $propertyData);
}
}
return $propertyData;
}