loadMe(); foreach ($postData as $key => $value) { if (is_array($value)) { $postData[$key] = json_encode($value); } } foreach (array_diff_assoc($postData, (array) $currentData) as $key => $value) { WarehouseHistoryModel::create(['table' => $mod, 'row_id' => $postData['id'], 'key' => $key, 'old_value' => $currentData->$key ?? '', 'new_value' => $value, 'note' => '', 'user_id' => $me->id, 'create' => date('U')]); } } public function getHistory($id, string $mod, $columns): array { $history = WarehouseHistoryModel::getByRowId($id, $mod); return array_map(function ($item) use ($columns) { $item = (array) $item; if (isset($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'])) { if ($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'checkbox') { $item['old_value'] = $item['old_value'] === '1' ? 'Ja' : 'Nein'; $item['new_value'] = $item['new_value'] === '1' ? 'Ja' : 'Nein'; } if ($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'select') { $column = $columns[array_search($item['key'], array_column($columns, 'key'))]; if (isset($column['modal']['items'][array_search($item['old_value'], array_column($column['modal']['items'], 'value'))]) && isset($column['modal']['items'][array_search($item['new_value'], array_column($column['modal']['items'], 'value'))])) { $item['old_value'] = $column['modal']['items'][array_search($item['old_value'], array_column($column['modal']['items'], 'value'))]['text']; $item['new_value'] = $column['modal']['items'][array_search($item['new_value'], array_column($column['modal']['items'], 'value'))]['text']; } } if ($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'autocomplete') { if (method_exists($this, 'customAutoComplete' . ucfirst($item['key']))) { $item['old_value'] = $this->{'customAutoComplete' . ucfirst($item['key'])}($item['old_value']); $item['new_value'] = $this->{'customAutoComplete' . ucfirst($item['key'])}($item['new_value']); } else { $autoCompleteModelName = explode('/', $columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['apiUrl'])[0] . 'Model'; $autoCompleteModel = new $autoCompleteModelName(); $data_old = isset($item['old_value']) && $item['old_value'] !== '' ? $autoCompleteModel::get($item['old_value']) : ''; $data_new = isset($item['new_value']) && $item['new_value'] !== '' ? $autoCompleteModel::get($item['new_value']) : ''; // check if title exists else it should be name $textColum = $columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['text'] ?? 'name'; $item['old_value'] = isset($data_old) && $data_old !== '' ? $data_old->$textColum : $item['old_value']; $item['new_value'] = isset($data_new) && $data_new !== '' ? $data_new->$textColum : $item['new_value']; } } } $item['columnHeader'] = $columns[array_search($item['key'], array_column($columns, 'key'))]['text']; return $item; }, $history); } }