|
|
|
@ -221,8 +221,9 @@ class Scanner extends BasicEmitter implements IScanner {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Only update metadata that has changed
|
|
|
|
|
$newData = array_diff_assoc($data, $cacheData->getData());
|
|
|
|
|
|
|
|
|
|
// i.e. get all the values in $data that are not present in the cache already
|
|
|
|
|
$newData = $this->array_diff_assoc_multi($data, $cacheData->getData());
|
|
|
|
|
|
|
|
|
|
// make it known to the caller that etag has been changed and needs propagation
|
|
|
|
|
if (isset($newData['etag'])) {
|
|
|
|
|
$data['etag_changed'] = true;
|
|
|
|
@ -369,6 +370,50 @@ class Scanner extends BasicEmitter implements IScanner {
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Compares $array1 against $array2 and returns all the values in $array1 that are not in $array2
|
|
|
|
|
* Note this is a one-way check - i.e. we don't care about things that are in $array2 that aren't in $array1
|
|
|
|
|
*
|
|
|
|
|
* Supports multi-dimensional arrays
|
|
|
|
|
* Also checks keys/indexes
|
|
|
|
|
* Comparisons are strict just like array_diff_assoc
|
|
|
|
|
* Order of keys/values does not matter
|
|
|
|
|
*
|
|
|
|
|
* @param array $array1
|
|
|
|
|
* @param array $array2
|
|
|
|
|
* @return array with the differences between $array1 and $array1
|
|
|
|
|
* @throws \InvalidArgumentException if $array1 isn't an actual array
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function array_diff_assoc_multi(array $array1, array $array2) {
|
|
|
|
|
|
|
|
|
|
$result = [];
|
|
|
|
|
|
|
|
|
|
foreach ($array1 as $key => $value) {
|
|
|
|
|
|
|
|
|
|
// if $array2 doesn't have the same key, that's a result
|
|
|
|
|
if (!array_key_exists($key, $array2)) {
|
|
|
|
|
$result[$key] = $value;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if $array2's value for the same key is different, that's a result
|
|
|
|
|
if ($array2[$key] !== $value && !is_array($value)) {
|
|
|
|
|
$result[$key] = $value;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (is_array($value)) {
|
|
|
|
|
$nestedDiff = $this->array_diff_assoc_multi($value, $array2[$key]);
|
|
|
|
|
if (!empty($nestedDiff)) {
|
|
|
|
|
$result[$key] = $nestedDiff;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the children currently in the cache
|
|
|
|
|
*
|
|
|
|
|