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