Track and display usage information including page requests, database field changes, php errors and yii logs.
Tracks the following information:
$_GET/$_POST/$_SESSION/$_FILES/$_COOKIE), the arrays are serialized then compressed using gzip
CDbCommandBuilder::createMultipleInsertCommand().
Please download using ONE of the following methods:
All requirements are automatically downloaded into the correct location when using composer. There is no need to download additional files or set paths to third party files.
Get composer:
curl http://getcomposer.org/installer | php
Install latest release OR development version:
php composer.phar require cornernote/yii-audit-module:* // latest release php composer.phar require cornernote/yii-audit-module:dev-master // development version
Add the vendor folder to the aliases in your yii configuration:
return array(
'aliases' => array(
'vendor' => '/path/to/vendor',
),
);
Download the latest release or
development version and move the
audit folder into your protected/modules folder.
In addition the following are required:
Add the audit folder to the aliases in your yii configuration:
return array(
'aliases' => array(
'audit' => '/path/to/vendor/cornernote/yii-audit-module/audit',
),
);
Add AuditModule to the modules in your yii configuration:
return array(
'modules' => array(
'audit' => array(
// path to the AuditModule class
'class' => 'audit.AuditModule',
// set this to your user view url,
// AuditModule will replace --user_id-- with the actual user_id
'userViewUrl' => array('/user/view', 'id' => '--user_id--'),
// Set to false if you do not wish to track database audits.
'enableAuditField' => true,
// The ID of the CDbConnection application component. If not set, a SQLite3
// database will be automatically created in protected/runtime/audit-AuditVersion.db.
'connectionID' => 'db',
// Whether the DB tables should be created automatically if they do not exist. Defaults to true.
// If you already have the table created, it is recommended you set this property to be false to improve performance.
'autoCreateTables' => true,
// The layout used for module controllers.
'layout' => 'audit.views.layouts.column1',
// The widget used to render grid views.
'gridViewWidget' => 'bootstrap.widgets.TbGridView',
// The widget used to render detail views.
'detailViewWidget' => 'zii.widgets.CDetailView',
// Defines the access filters for the module.
// The default is AuditAccessFilter which will allow any user listed in AuditModule::adminUsers to have access.
'controllerFilters' => array(
'auditAccess' => array('audit.components.AuditAccessFilter'),
),
// A list of users who can access this module.
'adminUsers' => array('admin'),
// The path to YiiStrap.
// Only required if you do not want YiiStrap in your app config, for example, if you are running YiiBooster.
// Only required if you did not install using composer.
// Please note:
// - You must download YiiStrap even if you are using YiiBooster in your app.
// - When using this setting YiiStrap will only loaded in the menu interface (eg: index.php?r=menu).
'yiiStrapPath' => '/path/to/vendor/crisu83/yiistrap',
),
),
);
Use AuditErrorHandler as your applications error handler by updating the
components section in your yii configuration:
return array(
'components' => array(
'errorHandler' => array(
// path to the AuditErrorHandler class
'class' => 'audit.components.AuditErrorHandler',
// set this as you normally would for CErrorHandler
'errorAction' => 'site/error',
// Set to false to only track error requests. Defaults to false.
'trackAllRequests' => false,
// Set to false to not handle fatal errors. Defaults to true.
'catchFatalErrors' => true,
// Request keys that we do not want to save in the tracking data.
'auditRequestIgnoreKeys' => array('PHP_AUTH_PW', 'password'),
),
),
);
To handle fatal errors we have add the error handler to the
preload section in your yii configuration:
return array(
'preload' => array(
'log',
'errorHandler', // handle fatal errors
),
);
To track logs we need to add a logroute to AuditLogRoute to your yii configuration:
return array(
'components' => array(
'db' => array(
// standard setup
'connectionString' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'password' => '',
// set to true to enable database query logging
// don't forget to put `profile` in the log route `levels` below
'enableProfiling' => true,
// set to true to replace the params with the literal values
'enableParamLogging' => true,
),
'log' => array(
'class' => 'CLogRouter',
'routes' => array(
// add a new log route
array(
// path to the AuditLogRoute class
'class' => 'audit.components.AuditLogRoute',
// can be: trace, warning, error, info, profile
// can also be anything else you want to pass as a level to `Yii::log()`
'levels' => 'error, warning, profile, audit',
),
),
),
),
);
To track field changes add AuditFieldBehavior to your CActiveRecord
behaviors() functions.
class Post extends CActiveRecord
{
public function behaviors()
{
return array(
'AuditFieldBehavior' => array(
// Path to AuditFieldBehavior class.
'class' => 'audit.components.AuditFieldBehavior',
// Set to false if you just want to use getDbAttribute and other methods in this class.
// If left unset the value will come from AuditModule::enableAuditField
'enableAuditField' => null,
// Any additional models you want to use to write model and model_id audits to. If this array is not empty then
// each field modifed will result in an AuditField being created for each additionalAuditModels.
'additionalAuditModels' => array(
'Post' => 'post_id',
),
// A list of fields to be ignored on update and delete
'ignoreFields' = array(
'insert' => array('modified', 'modified_by', 'deleted', 'deleted_by'),
'update' => array('created', 'created_by', 'modified'),
),
// A list of values that will be treated as if they were null.
'ignoreValues' => array('0', '0.0', '0.00', '0.000', '0.0000', '0.00000', '0.000000', '0000-00-00', '0000-00-00 00:00:00'),
),
);
}
}
Logging is as simple as calling Yii::log(). The second argument needs to be one of the
AuditLogRoute::levels you specified above (error, warning or audit).
Yii::log('Hello World!', 'audit');
Yii::log('something really bad just happened', 'error');
There are several partial views that you can render into your application. These are all optional.
Add information to your footer:
$this->renderPartial('audit.views.request.__footer');
Show changes for a model:
$post = Post::model()->findByPk(123);
$this->renderPartial('audit.views.field.__fields', array('model' => $post));
// or by using the model_name and model_id
// $this->renderPartial('audit.views.field.__fields', array('model_name' => 'Post', 'model_id' => 123));
Show changes for a single field in a model:
$post = Post::model()->findByPk(123);
$this->renderPartial('audit.views.field.__field', array('model' => $post, 'field' => 'status'));
// or by using the model_name and model_id
// $this->renderPartial('audit.views.field.__field', array('model_name' => 'Post', 'model_id' => 123, 'field' => 'status'));