Example #1
0
 private function __extralog($action = null, $description = null, $fieldsResult = null)
 {
     // TODO move audit to AuditsController?
     // new data
     $userId = $this->Auth->user('id');
     $model = 'User';
     $modelId = $this->Auth->user('id');
     if ($action == 'login') {
         $description = "User (" . $this->Auth->user('id') . "): " . $this->data['User']['email'];
     } elseif ($action == 'logout') {
         $description = "User (" . $this->Auth->user('id') . "): " . $this->Auth->user('email');
     } elseif ($action == 'edit') {
         $description = "User (" . $this->User->id . "): " . $this->data['User']['email'];
     } elseif ($action == 'change_pw') {
         $description = "User (" . $this->User->id . "): " . $this->data['User']['email'];
         $fieldsResult = "Password changed.";
     }
     // query
     $this->Log = ClassRegistry::init('Log');
     $this->Log->create();
     $this->Log->save(array('org' => $this->Auth->user('org'), 'email' => $this->Auth->user('email'), 'action' => $action, 'title' => $description, 'change' => $fieldsResult));
     // write to syslogd as well
     App::import('Lib', 'SysLog.SysLog');
     $syslog = new SysLog();
     if ($fieldsResult) {
         $syslog->write('notice', $description . ' -- ' . $action . ' -- ' . $fieldsResult);
     } else {
         $syslog->write('notice', $description . ' -- ' . $action);
     }
 }
 function _saveLog(&$Model, $logData, $title = null)
 {
     if ($title !== NULL) {
         $logData['Log']['title'] = $title;
     } elseif ($Model->displayField == $Model->primaryKey) {
         $logData['Log']['title'] = $Model->alias . ' (' . $Model->id . ')';
     } elseif (isset($Model->data[$Model->alias][$Model->displayField])) {
         if ($Model->alias == "User" && $logData['Log']['action'] != 'edit') {
             $logData['Log']['title'] = 'User (' . $Model->data[$Model->alias][$Model->primaryKey] . '): ' . $Model->data[$Model->alias][$Model->displayField];
         } else {
             $logData['Log']['title'] = $Model->data[$Model->alias][$Model->displayField];
         }
     } else {
         $logData['Log']['title'] = $Model->field($Model->displayField);
     }
     if (isset($this->schema[$this->settings[$Model->alias]['classField']])) {
         // by miha nahtigal
         $logData['Log'][$this->settings[$Model->alias]['classField']] = $Model->name;
     }
     if (isset($this->schema[$this->settings[$Model->alias]['foreignKey']]) && !isset($logData['Log'][$this->settings[$Model->alias]['foreignKey']])) {
         if ($Model->id) {
             $logData['Log'][$this->settings[$Model->alias]['foreignKey']] = $Model->id;
         } elseif ($Model->insertId) {
             $logData['Log'][$this->settings[$Model->alias]['foreignKey']] = $Model->insertId;
         }
     }
     if (!isset($this->schema['action'])) {
         unset($logData['Log']['action']);
     } elseif (isset($Model->logableAction) && !empty($Model->logableAction)) {
         $logData['Log']['action'] = implode(',', $Model->logableAction);
         // . ' ' . $logData['Log']['action'];
         unset($Model->logableAction);
     }
     if (isset($this->schema['version_id']) && isset($Model->version_id)) {
         $logData['Log']['version_id'] = $Model->version_id;
         unset($Model->version_id);
     }
     if (isset($this->schema['ip']) && $this->userIP) {
         $logData['Log']['ip'] = $this->userIP;
     }
     if (isset($this->schema[$this->settings[$Model->alias]['userKey']]) && $this->user) {
         $logData['Log'][$this->settings[$Model->alias]['userKey']] = $this->user[$this->UserModel->alias][$this->UserModel->primaryKey];
     }
     if (isset($this->schema['description'])) {
         if ($this->user && $this->UserModel) {
             $logData['Log']['description'] .= ' by ' . $this->settings[$Model->alias]['userModel'] . ' "' . $this->user[$this->UserModel->alias][$this->UserModel->displayField] . '"';
             if ($this->settings[$Model->alias]['description_ids']) {
                 $logData['Log']['description'] .= ' (' . $this->user[$this->UserModel->alias][$this->UserModel->primaryKey] . ')';
             }
         } else {
             // UserModel is active, but the data hasnt been set. Assume system action.
             $logData['Log']['description'] .= ' by System';
         }
         $logData['Log']['description'] .= '.';
     }
     if (isset($this->schema['email'])) {
         // TODO Audit, LogableBehevior email
         if ($this->user && $this->UserModel) {
             $logData['Log']['email'] = $this->user[$this->UserModel->alias][$this->UserModel->displayField];
         } else {
             // UserModel is active, but the data hasnt been set. Assume system action.
             $logData['Log']['email'] = 'SYS';
         }
     }
     if (isset($this->schema['org'])) {
         // TODO Audit, LogableBehevior org CHECK!!!
         if ($this->user && $this->UserModel) {
             $logData['Log']['org'] = $this->user[$this->UserModel->alias][$this->UserModel->orgField];
         } else {
             // UserModel is active, but the data hasnt been set. Assume system action.
             $logData['Log']['org'] = 'SYS';
         }
     }
     if (isset($this->schema['title'])) {
         // TODO LogableBehevior title
         if ($this->user && $this->UserModel) {
             //  $Model->data[$Model->alias][$Model->displayField]
             switch ($Model->alias) {
                 case "User":
                     // TODO Audit, not used here but done in UsersController
                     if ($logData['Log']['action'] == 'edit' || $logData['Log']['action'] == 'delete') {
                         return;
                         // handle in model itself
                     }
                     $title = 'User (' . $Model->data[$Model->alias]['id'] . ') ' . $Model->data[$Model->alias]['email'];
                     break;
                 case "Event":
                     App::uses('EventsController', 'Controller');
                     App::build(array('Controller' => array(APP . DS . 'Controller'), 'EventsController'));
                     $this->Events = new EventsController();
                     $this->Events->constructClasses();
                     $title = 'Event (' . $Model->data[$Model->alias]['id'] . '): ' . $Model->data[$Model->alias]['info'];
                     $logData['Log']['title'] = $title;
                     break;
                 case "Attribute":
                     if (isset($Model->combinedKeys)) {
                         if (is_array($Model->combinedKeys)) {
                             $title = 'Attribute (' . $Model->data[$Model->alias]['id'] . ') ' . 'from Event (' . $Model->data[$Model->alias]['event_id'] . '): ' . $Model->data[$Model->alias][$Model->combinedKeys[1]] . '/' . $Model->data[$Model->alias][$Model->combinedKeys[2]] . ' ' . $Model->data[$Model->alias]['value1'];
                             $logData['Log']['title'] = $title;
                         }
                     }
                     break;
                 case "Server":
                     $this->Servers = new ServersController();
                     $this->Servers->constructClasses();
                     $title = 'Server (' . $Model->data[$Model->alias]['id'] . '): ' . $Model->data[$Model->alias]['url'];
                     $logData['Log']['title'] = $title;
                     break;
                 case "Role":
                     $this->Roles = new RolesController();
                     $this->Roles->constructClasses();
                     $title = 'Role (' . $Model->data[$Model->alias]['id'] . '): ' . $Model->data[$Model->alias]['name'];
                     $logData['Log']['title'] = $title;
                     break;
                 case "Whitelist":
                     $this->Whitelists = new WhitelistsController();
                     $this->Whitelists->constructClasses();
                     $title = 'Whitelist (' . $Model->data[$Model->alias]['id'] . '): ' . $Model->data[$Model->alias]['name'];
                     $logData['Log']['title'] = $title;
                     break;
                 case "Regexp":
                     $this->Regexp = new RegexpController();
                     $this->Regexp->constructClasses();
                     $title = 'Regexp (' . $Model->data[$Model->alias]['id'] . '): ' . $Model->data[$Model->alias]['regexp'];
                     $logData['Log']['title'] = $title;
                     break;
                 default:
                     if (isset($Model->combinedKeys)) {
                         if (is_array($Model->combinedKeys)) {
                             $title = '';
                             foreach ($Model->combinedKeys as $combinedKey) {
                                 $title .= '/' . $Model->data[$Model->alias][$combinedKey];
                             }
                             $title = substr($title, 1);
                             $logData['Log']['title'] = $title;
                         }
                     }
             }
         }
     }
     $this->Log->create($logData);
     $this->Log->save(null, array('validate' => false, 'callbacks' => false));
     // write to syslogd as well
     $syslog = new SysLog();
     if (isset($logData['Log']['change'])) {
         $syslog->write('notice', $logData['Log']['description'] . ' -- ' . $logData['Log']['change']);
     } else {
         $syslog->write('notice', $logData['Log']['description']);
     }
 }