1234567891011121314151617181920212223242526272829303132333435363738394041 |
- <?php
- namespace App\Services\History;
- use App\Models\Enums\ActionObjectType;
- use Illuminate\Database\Eloquent\Model;
- class ModelChangeDetector
- {
- public static function detector(ActionObjectType $objectType, Model $model): array
- {
- $detector = $objectType->detectorClassName();
- if (! $detector) {
- return [];
- }
- $fields = call_user_func([$detector, "fields"]);
- $diffFields = call_user_func([$detector, "diffFields"]);
- if (!$fields) {
- return [];
- }
- $items = [];
- foreach ($fields as $field) {
- if (! $model->isDirty($field)) {
- continue;
- }
- $items[] = [
- 'old' => is_array($model->getOriginal($field)) ? json_encode($model->getOriginal($field)) : $model->getOriginal($field),
- 'field' => $field,
- 'new' => is_array($model->$field) ? json_encode($model->$field) : $model->$field,
- 'diff' => in_array($field, $diffFields) ? text_diff($model->getOriginal($field) ?? '', $model->$field ?? '') : null,
- ];
- }
- return $items;
- }
- }
|