summaryrefslogtreecommitdiff
path: root/protected/modules/auditTrail/behaviors/LoggableBehavior.php
diff options
context:
space:
mode:
Diffstat (limited to 'protected/modules/auditTrail/behaviors/LoggableBehavior.php')
-rw-r--r--protected/modules/auditTrail/behaviors/LoggableBehavior.php133
1 files changed, 133 insertions, 0 deletions
diff --git a/protected/modules/auditTrail/behaviors/LoggableBehavior.php b/protected/modules/auditTrail/behaviors/LoggableBehavior.php
new file mode 100644
index 0000000..ff28507
--- /dev/null
+++ b/protected/modules/auditTrail/behaviors/LoggableBehavior.php
@@ -0,0 +1,133 @@
+<?php
+class LoggableBehavior extends CActiveRecordBehavior
+{
+ private $_oldattributes = array();
+
+ public function afterSave($event)
+ {
+ try {
+ $username = Yii::app()->user->Name;
+ $userid = Yii::app()->user->id;
+ } catch(Exception $e) { //If we have no user object, this must be a command line program
+ $username = "NO_USER";
+ $userid = null;
+ }
+
+ if(empty($username)) {
+ $username = "NO_USER";
+ }
+
+ if(empty($userid)) {
+ $userid = null;
+ }
+
+ $newattributes = $this->Owner->getAttributes();
+ $oldattributes = $this->getOldAttributes();
+
+ if (!$this->Owner->isNewRecord) {
+ // compare old and new
+ foreach ($newattributes as $name => $value) {
+ if (!empty($oldattributes)) {
+ $old = $oldattributes[$name];
+ } else {
+ $old = '';
+ }
+
+ if ($value != $old) {
+ $log=new AuditTrail();
+ $log->old_value = $old;
+ $log->new_value = $value;
+ $log->action = 'CHANGE';
+ $log->model = get_class($this->Owner);
+ $log->model_id = $this->Owner->getPrimaryKey();
+ $log->field = $name;
+ $log->stamp = date('Y-m-d H:i:s');
+ $log->user_id = $userid;
+
+ $log->save();
+ }
+ }
+ } else {
+ $log=new AuditTrail();
+ $log->old_value = '';
+ $log->new_value = '';
+ $log->action= 'CREATE';
+ $log->model= get_class($this->Owner);
+ $log->model_id= $this->Owner->getPrimaryKey();
+ $log->field= 'N/A';
+ $log->stamp= date('Y-m-d H:i:s');
+ $log->user_id= $userid;
+
+ $log->save();
+
+
+ foreach ($newattributes as $name => $value) {
+ $log=new AuditTrail();
+ $log->old_value = '';
+ $log->new_value = $value;
+ $log->action= 'SET';
+ $log->model= get_class($this->Owner);
+ $log->model_id= $this->Owner->getPrimaryKey();
+ $log->field= $name;
+ $log->stamp= date('Y-m-d H:i:s');
+ $log->user_id= $userid;
+ $log->save();
+ }
+
+
+
+ }
+ return parent::afterSave($event);
+ }
+
+ public function afterDelete($event)
+ {
+
+ try {
+ $username = Yii::app()->user->Name;
+ $userid = Yii::app()->user->id;
+ } catch(Exception $e) {
+ $username = "NO_USER";
+ $userid = null;
+ }
+
+ if(empty($username)) {
+ $username = "NO_USER";
+ }
+
+ if(empty($userid)) {
+ $userid = null;
+ }
+
+ $log=new AuditTrail();
+ $log->old_value = '';
+ $log->new_value = '';
+ $log->action= 'DELETE';
+ $log->model= get_class($this->Owner);
+ $log->model_id= $this->Owner->getPrimaryKey();
+ $log->field= 'N/A';
+ $log->stamp= date('Y-m-d H:i:s');
+ $log->user_id= $userid;
+ $log->save();
+ return parent::afterDelete($event);
+ }
+
+ public function afterFind($event)
+ {
+ // Save old values
+ $this->setOldAttributes($this->Owner->getAttributes());
+
+ return parent::afterFind($event);
+ }
+
+ public function getOldAttributes()
+ {
+ return $this->_oldattributes;
+ }
+
+ public function setOldAttributes($value)
+ {
+ $this->_oldattributes=$value;
+ }
+}
+?> \ No newline at end of file