ソースを参照

Simplify logable behavior

euromark 11 年 前
コミット
83a36a2d5b
1 ファイル変更64 行追加56 行削除
  1. 64 56
      Model/Behavior/LogableBehavior.php

+ 64 - 56
Model/Behavior/LogableBehavior.php

@@ -116,16 +116,12 @@ class LogableBehavior extends ModelBehavior {
 		}
 		}
 	}
 	}
 
 
-	public function settings(Model $Model) {
-		return $this->settings[$Model->alias];
-	}
-
 	/**
 	/**
 	 * LogableBehavior::enableLog()
 	 * 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) {
 	public function enableLog(Model $Model, $enable = null) {
 		if ($enable !== null) {
 		if ($enable !== null) {
@@ -321,20 +317,19 @@ class LogableBehavior extends ModelBehavior {
 	 * @param array $values optional other values for your logs table
 	 * @param array $values optional other values for your logs table
 	 * @return mixed Success
 	 * @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) {
 		if ($id === null) {
 			$id = $Model->id;
 			$id = $Model->id;
 		}
 		}
 		if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey']) && is_numeric($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;
 		$title = null;
 		if (isset($values['title'])) {
 		if (isset($values['title'])) {
 			$title = $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);
 		return $this->_saveLog($Model, $logData, $title);
 	}
 	}
 
 
@@ -384,16 +379,16 @@ class LogableBehavior extends ModelBehavior {
 		}
 		}
 		$logData = array();
 		$logData = array();
 		if ($this->Log->hasField('description')) {
 		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) {
 			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']) {
 			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)) {
 		if (!$this->_saveLog($Model, $logData)) {
 			throw new RuntimeException('Logging failed');
 			throw new RuntimeException('Logging failed');
 		}
 		}
@@ -435,33 +430,33 @@ class LogableBehavior extends ModelBehavior {
 			$id = $Model->insertId;
 			$id = $Model->insertId;
 		}
 		}
 		if ($this->Log->hasField($this->settings[$Model->alias]['foreignKey'])) {
 		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')) {
 		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) {
 			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']) {
 			if ($this->settings[$Model->alias]['descriptionIds']) {
-				$logData[$this->Log->alias]['description'] .= '(' . $id . ') ';
+				$logData['description'] .= '(' . $id . ') ';
 			}
 			}
 
 
 			if ($created) {
 			if ($created) {
-				$logData[$this->Log->alias]['description'] .= __('added');
+				$logData['description'] .= __('added');
 			} else {
 			} else {
-				$logData[$this->Log->alias]['description'] .= __('updated');
+				$logData['description'] .= __('updated');
 			}
 			}
 		}
 		}
 		if ($this->Log->hasField('action')) {
 		if ($this->Log->hasField('action')) {
 			if ($created) {
 			if ($created) {
-				$logData[$this->Log->alias]['action'] = 'add';
+				$logData['action'] = 'add';
 			} else {
 			} else {
-				$logData[$this->Log->alias]['action'] = 'edit';
+				$logData['action'] = 'edit';
 			}
 			}
 		}
 		}
 		if ($this->Log->hasField('change')) {
 		if ($this->Log->hasField('change')) {
-			$logData[$this->Log->alias]['change'] = '';
+			$logData['change'] = '';
 			$dbFields = array_keys($Model->schema());
 			$dbFields = array_keys($Model->schema());
 			$changedFields = array();
 			$changedFields = array();
 			foreach ($Model->data[$Model->alias] as $key => $value) {
 			foreach ($Model->data[$Model->alias] as $key => $value) {
@@ -485,11 +480,11 @@ class LogableBehavior extends ModelBehavior {
 				return true;
 				return true;
 			}
 			}
 			if ($this->settings[$Model->alias]['change'] === 'serialize') {
 			if ($this->settings[$Model->alias]['change'] === 'serialize') {
-				$logData[$this->Log->alias]['change'] = serialize($changedFields);
+				$logData['change'] = serialize($changedFields);
 			} else {
 			} else {
-				$logData[$this->Log->alias]['change'] = implode(', ', $changedFields);
+				$logData['change'] = implode(', ', $changedFields);
 			}
 			}
-			$logData[$this->Log->alias]['changes'] = $changes;
+			$logData['changes'] = $changes;
 		}
 		}
 
 
 		if (empty($logData)) {
 		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()
 	 * LogableBehavior::_prepareLog()
 	 *
 	 *
 	 * @param Model $Model
 	 * @param Model $Model
@@ -528,73 +534,75 @@ class LogableBehavior extends ModelBehavior {
 	 */
 	 */
 	protected function _saveLog(Model $Model, $logData, $title = null) {
 	protected function _saveLog(Model $Model, $logData, $title = null) {
 		if ($title !== null) {
 		if ($title !== null) {
-			$logData[$this->Log->alias]['title'] = $title;
+			$logData['title'] = $title;
 		} elseif ($Model->displayField == $Model->primaryKey) {
 		} 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(
 			$options = array(
-				'conditions' => $logData[$this->Log->alias][$this->settings[$Model->alias]['foreignKey']],
+				'conditions' => $logData[$this->settings[$Model->alias]['foreignKey']],
 				'recursive' => -1
 				'recursive' => -1
 			);
 			);
 			$record = $Model->find('first', $options);
 			$record = $Model->find('first', $options);
 			if ($record) {
 			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'])) {
 		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) {
 			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) {
 			} 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')) {
 		if (!$this->Log->hasField('action')) {
-			unset($logData[$this->Log->alias]['action']);
+			unset($logData['action']);
 		} elseif (isset($Model->logableAction) && !empty($Model->logableAction)) {
 		} 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)) {
 		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) {
 		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])) {
 		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 ($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])) {
 			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']) {
 				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 {
 			} else {
 				// UserModel is active, but the data hasnt been set. Assume system action.
 				// 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);
 		$this->Log->create($logData);
 		return $this->Log->save(null, array('validate' => false, 'callbacks' => false));
 		return $this->Log->save(null, array('validate' => false, 'callbacks' => false));
 	}
 	}