|
|
@@ -116,16 +116,12 @@ class LogableBehavior extends ModelBehavior {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public function settings(Model $Model) {
|
|
|
- return $this->settings[$Model->alias];
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* LogableBehavior::enableLog()
|
|
|
*
|
|
|
- * @param mixed $Model
|
|
|
- * @param mixed $enable
|
|
|
- * @deprecated Unload behavior instead?
|
|
|
+ * @param Model $Model
|
|
|
+ * @param bool $enable
|
|
|
+ * @return bool Current enabled status
|
|
|
*/
|
|
|
public function enableLog(Model $Model, $enable = null) {
|
|
|
if ($enable !== null) {
|
|
|
@@ -321,20 +317,19 @@ class LogableBehavior extends ModelBehavior {
|
|
|
* @param array $values optional other values for your logs table
|
|
|
* @return mixed Success
|
|
|
*/
|
|
|
- public function customLog(Model $Model, $action, $id = null, $values = array()) {
|
|
|
- $logData[$this->Log->alias] = $values;
|
|
|
+ public function customLog(Model $Model, $action, $id = null, $logData = array()) {
|
|
|
if ($id === null) {
|
|
|
$id = $Model->id;
|
|
|
}
|
|
|
if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey']) && is_numeric($id)) {
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']] = $id;
|
|
|
+ $logData[$this->settings[$Model->alias]['foreignKey']] = $id;
|
|
|
}
|
|
|
$title = null;
|
|
|
if (isset($values['title'])) {
|
|
|
$title = $values['title'];
|
|
|
- unset($logData[$this->Log->alias]['title']);
|
|
|
+ unset($logData['title']);
|
|
|
}
|
|
|
- $logData[$this->Log->alias]['action'] = $action;
|
|
|
+ $logData['action'] = $action;
|
|
|
return $this->_saveLog($Model, $logData, $title);
|
|
|
}
|
|
|
|
|
|
@@ -384,16 +379,16 @@ class LogableBehavior extends ModelBehavior {
|
|
|
}
|
|
|
$logData = array();
|
|
|
if ($this->Log->hasField('description')) {
|
|
|
- $logData[$this->Log->alias]['description'] = $Model->alias;
|
|
|
+ $logData['description'] = $Model->alias;
|
|
|
if (isset($Model->data[$Model->alias][$Model->displayField]) && $Model->displayField != $Model->primaryKey) {
|
|
|
- $logData[$this->Log->alias]['description'] .= ' "' . $Model->data[$Model->alias][$Model->displayField] . '"';
|
|
|
+ $logData['description'] .= ' "' . $Model->data[$Model->alias][$Model->displayField] . '"';
|
|
|
}
|
|
|
if ($this->settings[$Model->alias]['descriptionIds']) {
|
|
|
- $logData[$this->Log->alias]['description'] .= ' (' . $Model->id . ') ';
|
|
|
+ $logData['description'] .= ' (' . $Model->id . ') ';
|
|
|
}
|
|
|
- $logData[$this->Log->alias]['description'] .= __('deleted');
|
|
|
+ $logData['description'] .= __('deleted');
|
|
|
}
|
|
|
- $logData[$this->Log->alias]['action'] = 'delete';
|
|
|
+ $logData['action'] = 'delete';
|
|
|
if (!$this->_saveLog($Model, $logData)) {
|
|
|
throw new RuntimeException('Logging failed');
|
|
|
}
|
|
|
@@ -435,33 +430,33 @@ class LogableBehavior extends ModelBehavior {
|
|
|
$id = $Model->insertId;
|
|
|
}
|
|
|
if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey'])) {
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']] = $id;
|
|
|
+ $logData[$this->settings[$Model->alias]['foreignKey']] = $id;
|
|
|
}
|
|
|
if ($this->Log->hasField('description')) {
|
|
|
- $logData[$this->Log->alias]['description'] = $Model->alias . ' ';
|
|
|
+ $logData['description'] = $Model->alias . ' ';
|
|
|
if (isset($Model->data[$Model->alias][$Model->displayField]) && $Model->displayField != $Model->primaryKey) {
|
|
|
- $logData[$this->Log->alias]['description'] .= '"' . $Model->data[$Model->alias][$Model->displayField] . '" ';
|
|
|
+ $logData['description'] .= '"' . $Model->data[$Model->alias][$Model->displayField] . '" ';
|
|
|
}
|
|
|
|
|
|
if ($this->settings[$Model->alias]['descriptionIds']) {
|
|
|
- $logData[$this->Log->alias]['description'] .= '(' . $id . ') ';
|
|
|
+ $logData['description'] .= '(' . $id . ') ';
|
|
|
}
|
|
|
|
|
|
if ($created) {
|
|
|
- $logData[$this->Log->alias]['description'] .= __('added');
|
|
|
+ $logData['description'] .= __('added');
|
|
|
} else {
|
|
|
- $logData[$this->Log->alias]['description'] .= __('updated');
|
|
|
+ $logData['description'] .= __('updated');
|
|
|
}
|
|
|
}
|
|
|
if ($this->Log->hasField('action')) {
|
|
|
if ($created) {
|
|
|
- $logData[$this->Log->alias]['action'] = 'add';
|
|
|
+ $logData['action'] = 'add';
|
|
|
} else {
|
|
|
- $logData[$this->Log->alias]['action'] = 'edit';
|
|
|
+ $logData['action'] = 'edit';
|
|
|
}
|
|
|
}
|
|
|
if ($this->Log->hasField('change')) {
|
|
|
- $logData[$this->Log->alias]['change'] = '';
|
|
|
+ $logData['change'] = '';
|
|
|
$dbFields = array_keys($Model->schema());
|
|
|
$changedFields = array();
|
|
|
foreach ($Model->data[$Model->alias] as $key => $value) {
|
|
|
@@ -485,11 +480,11 @@ class LogableBehavior extends ModelBehavior {
|
|
|
return true;
|
|
|
}
|
|
|
if ($this->settings[$Model->alias]['change'] === 'serialize') {
|
|
|
- $logData[$this->Log->alias]['change'] = serialize($changedFields);
|
|
|
+ $logData['change'] = serialize($changedFields);
|
|
|
} else {
|
|
|
- $logData[$this->Log->alias]['change'] = implode(', ', $changedFields);
|
|
|
+ $logData['change'] = implode(', ', $changedFields);
|
|
|
}
|
|
|
- $logData[$this->Log->alias]['changes'] = $changes;
|
|
|
+ $logData['changes'] = $changes;
|
|
|
}
|
|
|
|
|
|
if (empty($logData)) {
|
|
|
@@ -499,6 +494,17 @@ class LogableBehavior extends ModelBehavior {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * LogableBehavior::settings()
|
|
|
+ *
|
|
|
+ * @param mixed $Model
|
|
|
+ * @return array
|
|
|
+ * @deprecated Directly use settings instead.
|
|
|
+ */
|
|
|
+ public function settings(Model $Model) {
|
|
|
+ return $this->settings[$Model->alias];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* LogableBehavior::_prepareLog()
|
|
|
*
|
|
|
* @param Model $Model
|
|
|
@@ -528,73 +534,75 @@ class LogableBehavior extends ModelBehavior {
|
|
|
*/
|
|
|
protected function _saveLog(Model $Model, $logData, $title = null) {
|
|
|
if ($title !== null) {
|
|
|
- $logData[$this->Log->alias]['title'] = $title;
|
|
|
+ $logData['title'] = $title;
|
|
|
} elseif ($Model->displayField == $Model->primaryKey) {
|
|
|
- $logData[$this->Log->alias]['title'] = $Model->alias . ' (' . $Model->id . ')';
|
|
|
- } elseif (isset($Model->data[$Model->alias][$Model->displayField])) {
|
|
|
- $logData[$this->Log->alias]['title'] = $Model->data[$Model->alias][$Model->displayField];
|
|
|
- } elseif ($Model->id) {
|
|
|
- $logData[$this->Log->alias]['title'] = $Model->field($Model->displayField);
|
|
|
- } elseif (!empty($logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']])) {
|
|
|
+ $logData['title'] = $Model->alias . ' (' . $Model->id . ')';
|
|
|
+ } elseif (!empty($Model->data[$Model->alias][$Model->displayField])) {
|
|
|
+ $logData['title'] = $Model->data[$Model->alias][$Model->displayField];
|
|
|
+ } elseif ($Model->id && $title = $Model->field($Model->displayField)) {
|
|
|
+ $logData['title'] = $title;
|
|
|
+ } elseif (!empty($logData[$this->settings[$Model->alias]['foreignKey']])) {
|
|
|
$options = array(
|
|
|
- 'conditions' => $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']],
|
|
|
+ 'conditions' => $logData[$this->settings[$Model->alias]['foreignKey']],
|
|
|
'recursive' => -1
|
|
|
);
|
|
|
$record = $Model->find('first', $options);
|
|
|
if ($record) {
|
|
|
- $logData[$this->Log->alias]['title'] = $record[$Model->alias][$Model->displayField];
|
|
|
+ $logData['title'] = $record[$Model->alias][$Model->displayField];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ($this->Log->hasField($this->settings[$Model->alias]['classField'])) {
|
|
|
- // by miha nahtigal
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['classField']] = $Model->name;
|
|
|
+ $logData[$this->settings[$Model->alias]['classField']] = $Model->name;
|
|
|
}
|
|
|
|
|
|
- if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey']) && !isset($logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']])) {
|
|
|
+ if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey']) && !isset($logData[$this->settings[$Model->alias]['foreignKey']])) {
|
|
|
if ($Model->id) {
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']] = $Model->id;
|
|
|
+ $logData[$this->settings[$Model->alias]['foreignKey']] = $Model->id;
|
|
|
} elseif ($Model->insertId) {
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']] = $Model->insertId;
|
|
|
+ $logData[$this->settings[$Model->alias]['foreignKey']] = $Model->insertId;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!$this->Log->hasField('action')) {
|
|
|
- unset($logData[$this->Log->alias]['action']);
|
|
|
+ unset($logData['action']);
|
|
|
} elseif (isset($Model->logableAction) && !empty($Model->logableAction)) {
|
|
|
- $logData[$this->Log->alias]['action'] = implode(',', $Model->logableAction); // . ' ' . $logData[$this->Log->alias]['action'];
|
|
|
- unset($Model->logableAction);
|
|
|
+ $logData['action'] = implode(',', $Model->logableAction);
|
|
|
}
|
|
|
|
|
|
if ($this->Log->hasField('version_id') && isset($Model->versionId)) {
|
|
|
- $logData[$this->Log->alias]['version_id'] = $Model->versionId;
|
|
|
- unset($Model->versionId);
|
|
|
+ $logData['version_id'] = $Model->versionId;
|
|
|
}
|
|
|
|
|
|
if ($this->Log->hasField('ip') && $this->userIP) {
|
|
|
- $logData[$this->Log->alias]['ip'] = $this->userIP;
|
|
|
+ $logData['ip'] = $this->userIP;
|
|
|
}
|
|
|
|
|
|
if ($this->Log->hasField($this->settings[$Model->alias]['userKey']) && $this->user && isset($this->user[$this->UserModel->alias])) {
|
|
|
- $logData[$this->Log->alias][$this->settings[$Model->alias]['userKey']] = $this->user[$this->UserModel->alias][$this->UserModel->primaryKey];
|
|
|
+ $logData[$this->settings[$Model->alias]['userKey']] = $this->user[$this->UserModel->alias][$this->UserModel->primaryKey];
|
|
|
}
|
|
|
|
|
|
if ($this->Log->hasField('description')) {
|
|
|
- if (empty($logData[$this->Log->alias]['description'])) {
|
|
|
- $logData[$this->Log->alias]['description'] = __('Custom action');
|
|
|
+ if (empty($logData['description'])) {
|
|
|
+ $logData['description'] = __('Custom action');
|
|
|
}
|
|
|
if ($this->user && $this->UserModel && isset($this->user[$this->UserModel->alias])) {
|
|
|
- $logData[$this->Log->alias]['description'] .= ' ' . __('by') . ' ' . $this->settings[$Model->alias]['userModel'] . ' "' . $this->user[$this->UserModel->alias][$this->UserModel->displayField] . '"';
|
|
|
+ $logData['description'] .= ' ' . __('by') . ' ' . $this->settings[$Model->alias]['userModel'] . ' "' . $this->user[$this->UserModel->alias][$this->UserModel->displayField] . '"';
|
|
|
if ($this->settings[$Model->alias]['descriptionIds']) {
|
|
|
- $logData[$this->Log->alias]['description'] .= ' (' . $this->user[$this->UserModel->alias][$this->UserModel->primaryKey] . ')';
|
|
|
+ $logData['description'] .= ' (' . $this->user[$this->UserModel->alias][$this->UserModel->primaryKey] . ')';
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
// UserModel is active, but the data hasnt been set. Assume system action.
|
|
|
- $logData[$this->Log->alias]['description'] .= ' ' . __('by System');
|
|
|
+ $logData['description'] .= ' ' . __('by System');
|
|
|
}
|
|
|
- $logData[$this->Log->alias]['description'] .= '.';
|
|
|
+ $logData['description'] .= '.';
|
|
|
}
|
|
|
+ if (empty($logData['title'])) {
|
|
|
+ // Fallback in case the title is null - add the action + ed
|
|
|
+ $logData['title'] = $Model->alias . ' ' . $logData['action'] . 'ed';
|
|
|
+ }
|
|
|
+
|
|
|
$this->Log->create($logData);
|
|
|
return $this->Log->save(null, array('validate' => false, 'callbacks' => false));
|
|
|
}
|