fix: [auditLog] Warning when deleting event

pull/7984/head
Jakub Onderka 2021-11-22 16:32:08 +01:00
parent 741a74165e
commit 776b0d046f
1 changed files with 24 additions and 18 deletions

View File

@ -4,7 +4,10 @@ App::uses('AuditLog', 'Model');
class AuditLogBehavior extends ModelBehavior
{
/** @var array|null */
private $old;
private $beforeSave;
/** @var array|null */
private $beforeDelete;
/** @var AuditLog|null */
private $AuditLog;
@ -95,19 +98,19 @@ class AuditLogBehavior extends ModelBehavior
}
if (empty($fieldToFetch)) {
$this->old = null;
$this->beforeSave = null;
return true;
}
}
if ($model->id) {
$this->old = $model->find('first', [
$this->beforeSave = $model->find('first', [
'conditions' => [$model->alias . '.' . $model->primaryKey => $model->id],
'recursive' => -1,
'callbacks' => false,
'fields' => $fieldToFetch,
]);
} else {
$this->old = null;
$this->beforeSave = null;
}
return true;
}
@ -128,13 +131,13 @@ class AuditLogBehavior extends ModelBehavior
if (isset($data['deleted'])) {
if ($data['deleted']) {
$action = AuditLog::ACTION_SOFT_DELETE;
} else if (isset($this->old[$model->alias]['deleted']) && $this->old[$model->alias]['deleted']) {
} else if (isset($this->beforeSave[$model->alias]['deleted']) && $this->beforeSave[$model->alias]['deleted']) {
$action = AuditLog::ACTION_UNDELETE;
}
}
}
$changedFields = $this->changedFields($model, $options['fieldList']);
$changedFields = $this->changedFields($model, $this->beforeSave, $options['fieldList']);
if (empty($changedFields)) {
return;
}
@ -143,8 +146,8 @@ class AuditLogBehavior extends ModelBehavior
$eventId = $id;
} else if (isset($data['event_id'])) {
$eventId = $data['event_id'];
} else if (isset($this->old[$model->alias]['event_id'])) {
$eventId = $this->old[$model->alias]['event_id'];
} else if (isset($this->beforeSave[$model->alias]['event_id'])) {
$eventId = $this->beforeSave[$model->alias]['event_id'];
} else {
$eventId = null;
}
@ -153,11 +156,11 @@ class AuditLogBehavior extends ModelBehavior
if (isset($this->modelInfo[$model->name])) {
$modelTitleField = $this->modelInfo[$model->name];
if (is_callable($modelTitleField)) {
$modelTitle = $modelTitleField($data, isset($this->old[$model->alias]) ? $this->old[$model->alias] : []);
$modelTitle = $modelTitleField($data, isset($this->beforeSave[$model->alias]) ? $this->beforeSave[$model->alias] : []);
} else if (isset($data[$modelTitleField])) {
$modelTitle = $data[$modelTitleField];
} else if ($this->old[$model->alias][$modelTitleField]) {
$modelTitle = $this->old[$model->alias][$modelTitleField];
} else if ($this->beforeSave[$model->alias][$modelTitleField]) {
$modelTitle = $this->beforeSave[$model->alias][$modelTitleField];
}
}
@ -196,6 +199,8 @@ class AuditLogBehavior extends ModelBehavior
'event_id' => $eventId,
'change' => $changedFields,
]]);
$this->beforeSave = null; // cleanup
}
public function beforeDelete(Model $model, $cascade = true)
@ -204,7 +209,7 @@ class AuditLogBehavior extends ModelBehavior
return true;
}
$this->old = $model->find('first', [
$this->beforeDelete = $model->find('first', [
'conditions' => array($model->alias . '.' . $model->primaryKey => $model->id),
'recursive' => -1,
'callbacks' => false,
@ -217,8 +222,8 @@ class AuditLogBehavior extends ModelBehavior
if (!$this->enabled) {
return;
}
$model->data = $this->old;
$this->old = null;
$model->data = $this->beforeDelete;
$this->beforeDelete = null;
if ($model->name === 'Event') {
$eventId = $model->id;
} else {
@ -264,7 +269,7 @@ class AuditLogBehavior extends ModelBehavior
'model_id' => $id,
'model_title' => $modelTitle,
'event_id' => $eventId,
'change' => $this->changedFields($model),
'change' => $this->changedFields($model, null),
]]);
}
@ -309,10 +314,11 @@ class AuditLogBehavior extends ModelBehavior
/**
* @param Model $model
* @param array|null $oldData Array with alias
* @param array|null $fieldsToSave
* @return array
*/
private function changedFields(Model $model, $fieldsToSave = null)
private function changedFields(Model $model, $oldData, $fieldsToSave = null)
{
$dbFields = $model->schema();
$changedFields = [];
@ -328,8 +334,8 @@ class AuditLogBehavior extends ModelBehavior
continue;
}
if ($hasPrimaryField && isset($this->old[$model->alias][$key])) {
$old = $this->old[$model->alias][$key];
if ($hasPrimaryField && isset($oldData[$model->alias][$key])) {
$old = $oldData[$model->alias][$key];
} else {
$old = null;
}