mirror of https://github.com/MISP/MISP
fix: [auditLog] Warning when deleting event
parent
741a74165e
commit
776b0d046f
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue