protected function isMultiValuedPropertyDirty(array $cleanData, $currentValue)
{
if (count($cleanData['value']) > 0 && count($cleanData['value']) === count($currentValue)) {
if ($currentValue instanceof \SplObjectStorage) {
$cleanIdentifiers = [];
foreach ($cleanData['value'] as &$cleanObjectData) {
$cleanIdentifiers[] = $cleanObjectData['value']['identifier'];
}
sort($cleanIdentifiers);
$currentIdentifiers = [];
foreach ($currentValue as $currentObject) {
$currentIdentifier = $this->getIdentifierByObject($currentObject);
if ($currentIdentifier !== null) {
$currentIdentifiers[] = $currentIdentifier;
}
}
sort($currentIdentifiers);
if ($cleanIdentifiers !== $currentIdentifiers) {
return true;
}
} else {
foreach ($cleanData['value'] as &$cleanObjectData) {
if (!isset($currentValue[$cleanObjectData['index']])) {
return true;
}
if ($cleanObjectData['type'] === 'array' && $this->isMultiValuedPropertyDirty($cleanObjectData, $currentValue[$cleanObjectData['index']]) === true || $cleanObjectData['type'] !== 'array' && $this->isSingleValuedPropertyDirty($cleanObjectData['type'], $cleanObjectData['value'], $currentValue[$cleanObjectData['index']]) === true) {
return true;
}
}
}
} elseif (count($cleanData['value']) > 0 || count($currentValue) > 0) {
return true;
}
return false;
}