/**
  * @param array $logs
  */
 protected function processLogs($logs)
 {
     $auditLogs = array();
     $auditRequestId = $this->getAuditRequestId();
     $userId = Yii::app()->hasComponent('user') ? Yii::app()->user->id : 0;
     $audit = Yii::app()->getModule('audit');
     $commandBuilder = $audit->getDbConnection()->getCommandBuilder();
     foreach ($logs as $log) {
         $message = explode("\n", $log[0]);
         $file = count($message) > 1 ? array_pop($message) : '';
         $message = implode("\n", $message);
         $auditLogs[] = array('level' => $log[1], 'category' => $log[2], 'message' => AuditHelper::pack($message), 'file' => $file, 'audit_request_id' => $auditRequestId, 'user_id' => $userId, 'created' => (int) $log[3]);
         // save 100 rows at a time, more than this causes an issue
         if (count($auditLogs) > 100) {
             $commandBuilder->createMultipleInsertCommand(AuditLog::model()->tableName(), $auditLogs)->execute();
             $auditLogs = array();
         }
     }
     if ($auditLogs) {
         $commandBuilder->createMultipleInsertCommand(AuditLog::model()->tableName(), $auditLogs)->execute();
     }
 }
 /**
  * Callback to update the AuditRequest at the end of the Yii request.
  * @see getAuditRequest()
  */
 public function endAuditRequest()
 {
     $auditRequest = $this->getAuditRequest();
     if (function_exists('headers_list')) {
         $auditRequest->response_headers = headers_list();
     }
     if ($auditRequest->response_headers) {
         foreach ($auditRequest->response_headers as $header) {
             if (strpos(strtolower($header), 'location:') === 0) {
                 $auditRequest->redirect = trim(substr($header, 9));
             }
         }
     }
     $auditRequest->response_headers = $this->removeValuesWithPasswordKeys($auditRequest->response_headers);
     $auditRequest->response_headers = AuditHelper::pack($auditRequest->response_headers);
     $auditRequest->memory_usage = memory_get_usage();
     $auditRequest->memory_peak = memory_get_peak_usage();
     $auditRequest->audit_field_count = $auditRequest->auditFieldCount;
     $auditRequest->end_time = microtime(true);
     $auditRequest->total_time = $auditRequest->end_time - $auditRequest->start_time;
     $auditRequest->save(false);
 }
 /**
  * Generates and saves the AuditRequest data.
  */
 private function recordAuditRequest()
 {
     // create new Audit
     $auditRequest = new AuditRequest();
     // get info
     $auditRequest->created = time();
     $auditRequest->user_id = Yii::app()->hasComponent('user') ? Yii::app()->user->id : 0;
     $auditRequest->link = $this->getCurrentLink();
     $auditRequest->start_time = YII_BEGIN_TIME;
     $auditRequest->get = $_GET;
     $auditRequest->post = $_POST;
     $auditRequest->files = $_FILES;
     $auditRequest->session = $this->getShrinkedSession();
     $auditRequest->cookie = $_COOKIE;
     $auditRequest->server = $_SERVER;
     $auditRequest->config = $this->getYiiConfig();
     $auditRequest->ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
     $auditRequest->referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
     // remove passwords
     $auditRequest->get = $this->removeValuesWithPasswordKeys($auditRequest->get, $passwordRemovedFromGet);
     $auditRequest->post = $this->removeValuesWithPasswordKeys($auditRequest->post, $passwordRemovedFromPost);
     $auditRequest->server = $this->removeValuesWithPasswordKeys($auditRequest->server);
     $auditRequest->config = $this->removeValuesWithPasswordKeys($auditRequest->config);
     if ($passwordRemovedFromGet || $passwordRemovedFromPost) {
         $auditRequest->server = null;
     }
     if ($passwordRemovedFromGet) {
         $auditRequest->link = null;
     }
     // pack all
     $auditRequest->get = AuditHelper::pack($auditRequest->get);
     $auditRequest->post = AuditHelper::pack($auditRequest->post);
     $auditRequest->files = AuditHelper::pack($auditRequest->files);
     $auditRequest->session = AuditHelper::pack($auditRequest->session);
     $auditRequest->cookie = AuditHelper::pack($auditRequest->cookie);
     $auditRequest->server = AuditHelper::pack($auditRequest->server);
     $auditRequest->config = AuditHelper::pack($auditRequest->config);
     // set the closing data incase we are already in an endRequest
     $headers = headers_list();
     foreach ($headers as $header) {
         if (strpos(strtolower($header), 'location:') === 0) {
             $auditRequest->redirect = trim(substr($header, 9));
         }
     }
     // save
     $auditRequest->save(false);
     // add an event callback to update the audit at the end
     Yii::app()->onEndRequest = array($this, 'endAuditRequest');
     return $auditRequest;
 }