コード例 #1
0
 /**
  * @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();
     }
 }
コード例 #2
0
<?php

/**
 * @var $this AuditErrorController
 * @var $auditError AuditError
 *
 * @author Brett O'Donnell <*****@*****.**>
 * @author Zain Ul abidin <*****@*****.**>
 * @copyright 2013 Mr PHP
 * @link https://github.com/cornernote/yii-audit-module
 * @license BSD-3-Clause https://raw.github.com/cornernote/yii-audit-module/master/LICENSE
 *
 * @package yii-audit-module
 */
$errorHandler = Yii::app()->getErrorHandler();
$cs = Yii::app()->clientScript;
$cs->registerCssFile($this->module->getAssetsUrl() . '/css/error.css');
$cs->registerScriptFile($this->module->getAssetsUrl() . '/js/error.js');
$this->pageTitle = Yii::t('audit', 'Error ID-:id', array(':id' => $auditError->id));
$details = CHtml::tag('small', array(), Yii::t('audit', ':type on :date by :user with :auditRequest:', array(':date' => Yii::app()->format->formatDatetime($auditError->created), ':type' => $auditError->type, ':user' => $this->module->userViewLink($auditError->auditRequest->user_id, 'User ID-'), ':auditRequest' => CHtml::link(Yii::t('audit', 'Request ID-') . $auditError->audit_request_id, array('request/view', 'id' => $auditError->audit_request_id)))));
echo CHtml::tag('p', array('class' => 'message'), $details . Yii::app()->format->formatNtext("\n" . $auditError->message));
echo CHtml::tag('div', array('class' => 'source'), CHtml::tag('p', array('class' => 'file'), htmlspecialchars($auditError->file, ENT_QUOTES, Yii::app()->charset) . '(' . $auditError->line . ')') . AuditHelper::unpack($auditError->source_code));
if ($auditError->stack_trace) {
    echo CHtml::tag('div', array('class' => 'traces'), CHtml::tag('h2', array(), Yii::t('audit', 'Stack Trace')) . AuditHelper::unpack($auditError->stack_trace));
}
コード例 #3
0
 /**
  * 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);
 }
コード例 #4
0
 /**
  * @return string
  */
 public function getFileAlias()
 {
     return AuditHelper::replaceFileWithAlias(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->file));
 }
コード例 #5
0
ファイル: view.php プロジェクト: cornernote/yii-audit-module
if (isset($_GET['AuditField'])) {
    $auditField->attributes = $_GET['AuditField'];
}
$auditField->audit_request_id = $auditRequest->id;
$this->renderPartial('/field/_grid', array('auditField' => $auditField));
echo '<h2>' . Yii::t('audit', 'Logs') . '</h2>';
$auditLog = new AuditLog('search');
if (isset($_GET['AuditLog'])) {
    $auditLog->attributes = $_GET['AuditLog'];
}
$auditLog->audit_request_id = $auditRequest->id;
$this->renderPartial('/log/_grid', array('auditLog' => $auditLog));
echo '<h2>' . Yii::t('audit', 'Page Variables') . '</h2>';
$this->widget(Yii::app()->getModule('audit')->detailViewWidget, array('data' => $auditRequest, 'attributes' => array(array('label' => '$_GET', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->get), true) . '</pre>', 'type' => 'raw'), array('label' => '$_POST', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->post), true) . '</pre>', 'type' => 'raw'), array('label' => '$_FILES', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->files), true) . '</pre>', 'type' => 'raw'), array('label' => 'php://input', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->php_input), true) . '</pre>', 'type' => 'raw')), 'htmlOptions' => array('class' => 'table table-condensed table-striped')));
echo '<h2>' . Yii::t('audit', 'Headers') . '</h2>';
$this->widget(Yii::app()->getModule('audit')->detailViewWidget, array('data' => $auditRequest, 'attributes' => array(array('name' => 'request_headers', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->request_headers), true) . '</pre>', 'type' => 'raw'), array('name' => 'response_headers', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->response_headers), true) . '</pre>', 'type' => 'raw')), 'htmlOptions' => array('class' => 'table table-condensed table-striped')));
$onClick = "\$('#session_detail').toggle(); \$(this).html(\$(this).html()=='[+]' ? '[-]' : '[+]');";
echo '<h2><small><a href="javascript:void(0)" onclick="' . $onClick . '">[+]</a></small> ' . Yii::t('audit', 'Session and Cookies') . '</h2>';
echo '<div id="session_detail" style="display: none;">';
$this->widget(Yii::app()->getModule('audit')->detailViewWidget, array('data' => $auditRequest, 'attributes' => array(array('label' => '$_SESSION', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->session), true) . '</pre>', 'type' => 'raw'), array('label' => '$_COOKIE', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->cookie), true) . '</pre>', 'type' => 'raw')), 'htmlOptions' => array('class' => 'table table-condensed table-striped')));
echo '</div>';
$onClick = "\$('#server_detail').toggle(); \$(this).html(\$(this).html()=='[+]' ? '[-]' : '[+]');";
echo '<h2><small><a href="javascript:void(0)" onclick="' . $onClick . '">[+]</a></small> ' . Yii::t('audit', 'Server Data') . '</h2>';
echo '<div id="server_detail" style="display: none;">';
$this->widget(Yii::app()->getModule('audit')->detailViewWidget, array('data' => $auditRequest, 'attributes' => array(array('label' => '$_SERVER', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->server), true) . '</pre>', 'type' => 'raw')), 'htmlOptions' => array('class' => 'table table-condensed table-striped')));
echo '</div>';
$onClick = "\$('#config_detail').toggle(); \$(this).html(\$(this).html()=='[+]' ? '[-]' : '[+]');";
echo '<h2><small><a href="javascript:void(0)" onclick="' . $onClick . '">[+]</a></small> ' . Yii::t('audit', 'Config Data') . '</h2>';
echo '<div id="config_detail" style="display: none;">';
$this->widget(Yii::app()->getModule('audit')->detailViewWidget, array('data' => $auditRequest, 'attributes' => array(array('label' => 'Yii::config', 'value' => '<pre>' . print_r(AuditHelper::unpack($auditRequest->config), true) . '</pre>', 'type' => 'raw')), 'htmlOptions' => array('class' => 'table table-condensed table-striped')));
echo '</div>';
コード例 #6
0
 /**
  * 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;
 }
コード例 #7
0
ファイル: view.php プロジェクト: cornernote/yii-audit-module
<?php

/**
 * @var $this AuditErrorController
 * @var $auditError AuditError
 *
 * @author Brett O'Donnell <*****@*****.**>
 * @author Zain Ul abidin <*****@*****.**>
 * @copyright 2013 Mr PHP
 * @link https://github.com/cornernote/yii-audit-module
 * @license BSD-3-Clause https://raw.github.com/cornernote/yii-audit-module/master/LICENSE
 *
 * @package yii-audit-module
 */
$errorHandler = Yii::app()->getErrorHandler();
$cs = Yii::app()->clientScript;
$cs->registerCssFile($this->module->getAssetsUrl() . '/css/error.css');
$cs->registerScriptFile($this->module->getAssetsUrl() . '/js/error.js');
$this->pageTitle = Yii::t('audit', 'Error ID-:id', array(':id' => $auditError->id));
$details = CHtml::tag('small', array(), Yii::t('audit', ':type on :date by :user with :auditRequest:', array(':date' => Yii::app()->format->formatDatetime($auditError->created), ':type' => $auditError->type, ':user' => $this->module->userViewLink($auditError->auditRequest->user_id, 'User ID-'), ':auditRequest' => CHtml::link(Yii::t('audit', 'Request ID-') . $auditError->audit_request_id, array('request/view', 'id' => $auditError->audit_request_id)))));
echo CHtml::tag('p', array('class' => 'message'), $details . Yii::app()->format->formatNtext("\n" . $auditError->message));
echo CHtml::tag('div', array('class' => 'source'), CHtml::tag('p', array('class' => 'file'), htmlspecialchars($auditError->file, ENT_QUOTES, Yii::app()->charset) . '(' . $auditError->line . ')') . AuditHelper::unpack($auditError->source_code));
if ($auditError->stack_trace) {
    echo CHtml::tag('div', array('class' => 'traces'), CHtml::tag('h2', array(), Yii::t('audit', 'Stack Trace')) . AuditHelper::unpack($auditError->stack_trace));
}
if ($auditError->extra) {
    echo CHtml::tag('div', array('class' => 'extra'), CHtml::tag('h2', array(), Yii::t('audit', 'Extra')) . '<pre>' . print_r(AuditHelper::unpack($auditError->extra), true) . '</pre>');
}
コード例 #8
0
ファイル: view.php プロジェクト: Horlacher/yii-audit-module
<?php

/**
 * @var $this AuditErrorController
 * @var $auditError AuditError
 *
 * @author Brett O'Donnell <*****@*****.**>
 * @author Zain Ul abidin <*****@*****.**>
 * @copyright 2013 Mr PHP
 * @link https://github.com/cornernote/yii-audit-module
 * @license BSD-3-Clause https://raw.github.com/cornernote/yii-audit-module/master/LICENSE
 *
 * @package yii-audit-module
 */
$errorHandler = Yii::app()->getErrorHandler();
$cs = Yii::app()->clientScript;
$cs->registerCssFile($this->module->getAssetsUrl() . '/css/error.css');
$cs->registerScriptFile($this->module->getAssetsUrl() . '/js/error.js');
$this->pageTitle = Yii::t('audit', 'Error ID-:id', array(':id' => $auditError->id));
$details = CHtml::tag('small', array(), Yii::t('audit', ':type on :date by :user with :auditRequest:', array(':date' => Yii::app()->format->formatDatetime($auditError->created), ':type' => $auditError->type, ':user' => $this->module->userViewLink($auditError->auditRequest->user_id, 'User ID-'), ':auditRequest' => CHtml::link(Yii::t('audit', 'Request ID-') . $auditError->audit_request_id, array('request/view', 'id' => $auditError->audit_request_id)))));
echo CHtml::tag('p', array('class' => 'message'), $details . Yii::app()->format->formatNtext("\n" . $auditError->message));
echo CHtml::tag('div', array('class' => 'source'), CHtml::tag('p', array('class' => 'file'), htmlspecialchars($auditError->file, ENT_QUOTES, Yii::app()->charset) . '(' . $auditError->line . ')') . AuditHelper::unpack($auditError->source_code));
if ($auditError->stack_trace) {
    echo CHtml::tag('div', array('class' => 'traces'), CHtml::tag('h2', array(), Yii::t('audit', 'Stack Trace')) . AuditHelper::unpack($auditError->stack_trace));
}
if ($auditError->extra) {
    echo CHtml::tag('div', array('class' => 'extra'), CHtml::tag('h2', array(), Yii::t('audit', 'Extra')) . AuditHelper::unpack($auditError->extra));
}