diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php index b14c9aaaff..c1bf4c9c3c 100644 --- a/app/Http/Transformers/ActionlogsTransformer.php +++ b/app/Http/Transformers/ActionlogsTransformer.php @@ -19,14 +19,6 @@ class ActionlogsTransformer return (new DatatablesTransformer)->transformDatatables($array, $total); } - private function clean_field($value) - { - if(is_object($value) && isset($value->value)) { - return clean_field($value->value); - } - return is_scalar($value) || is_null($value) ? e($value) : e(json_encode($value)); - } - public function transformActionlog (Actionlog $actionlog, $settings = null) { $icon = $actionlog->present()->icon(); @@ -39,9 +31,49 @@ class ActionlogsTransformer $meta_array = json_decode($actionlog->log_meta); if ($meta_array) { - foreach ($meta_array as $fieldname => $fieldata) { - $clean_meta[$fieldname]['old'] = $this->clean_field($fieldata['old']); - $clean_meta[$fieldname]['new'] = $this->clean_field($fieldata['new']); + foreach ($meta_array as $key => $value) { + foreach ($value as $meta_key => $meta_value) { + + if (is_array($meta_value)) { + foreach ($meta_value as $meta_value_key => $meta_value_value) { + if (is_scalar($meta_value_value)) { + $clean_meta[$key][$meta_value_key] = e($meta_value_value); + } else { + $clean_meta[$key][$meta_value_key] = 'invalid scalar: '.print_r($meta_value_value, true); + } + } + } else { + + // This object stuff is weird, and is used to make up for the fact that + // older data can get strangely formatted if an asset existed, + // then a new custom field is added, and the asset is saved again. + // It can result in funnily-formatted strings like: + // + // {"_snipeit_right_sized_fault_tolerant_localareanetwo_1": + // {"old":null,"new":{"value":"1579490695972","_snipeit_new_field_2":2,"_snipeit_new_field_3":"Monday, 20 January 2020 2:24:55 PM"}} + // so we have to walk down that next level + + if (is_object($meta_value)) { + + foreach ($meta_value as $meta_value_key => $meta_value_value) { + + if ($meta_value_key == 'value') { + $clean_meta[$key]['old'] = null; + $clean_meta[$key]['new'] = e($meta_value->value); + } else { + $clean_meta[$meta_value_key]['old'] = null; + $clean_meta[$meta_value_key]['new'] = e($meta_value_value); + } + } + + + + } else { + $clean_meta[$key][$meta_key] = e($meta_value); + } + } + + } } } @@ -90,7 +122,6 @@ class ActionlogsTransformer 'action_date' => ($actionlog->action_date) ? Helper::getFormattedDateObject($actionlog->action_date, 'datetime'): Helper::getFormattedDateObject($actionlog->created_at, 'datetime'), ]; - //\Log::info("Clean Meta is: ".print_r($clean_meta,true)); return $array; }