2017 © Pedro Peláez
 

yii2-extension yii2-audittrail

A port of audit trail

image

sammaye/yii2-audittrail

A port of audit trail

  • Wednesday, January 31, 2018
  • by Sammaye
  • Repository
  • 14 Watchers
  • 35 Stars
  • 131,468 Installations
  • PHP
  • 4 Dependents
  • 0 Suggesters
  • 26 Forks
  • 0 Open issues
  • 7 Versions
  • 16 % Grown

The README.md

yii2-audittrail

Yii2 edition of the audittrail extension., (*1)

Installation

The preferred way to install this extension is through composer., (*2)

php composer.phar require sammaye/yii2-audittrail

Migration

There are two ways of doing this:, (*3)

  • Copy the migration file (within the migrations folder) to your console/migrations folder
  • Run php yii migrate --migrationPath=@vendor/sammaye/yii2-audittrail/migrations

How to use

To use this extension you can simply add it to the model's behaviours:, (*4)

use yii\db\ActiveRecord;

class Model extends ActiveRecord
{
    public function behaviors()
    {
        return [
            'sammaye\audittrail\LoggableBehavior'
        ];
    }
}

You can convert the entered behaviour into a key - value structure to define options for the extension for that model:, (*5)

class Model extends ActiveRecord
{
    public function behaviors()
    {
        return [
            'LoggableBehavior' => [
                'class' => 'sammaye\audittrail\LoggableBehavior',
                'ignored' => ['some_field'], // This ignores fields from a selection of all fields, not needed with allowed
                'allowed' => ['another_field'] // optional, not needed if you use ignore
            ]
        ];
    }
}

And that is basically how to setup this extension., (*6)

Changes

There are a couple of changes., (*7)

One of them is how to define global parameters for this extension., (*8)

An example of global parameters would be setting you own table name or defining the location of the user model., (*9)

To define your own table you can add a parameter to your params.php file called audittrail.table which would take something like {{%audit}}., (*10)

To define your own user model location you can add audittrail.model using a value like common\models\User., (*11)

The only other change is really to do with the best way to query the audit trail., (*12)

The below example is the one from the previous documentation rewritten for Yii2:, (*13)

id, Title::className()));
foreach($model->products as $id => $product){
    $model_ids[] = array($product->id, Product::className());
}

$criteria = AuditTrail::find();
$param_id = 0;

// $model_ids is the one you built in your original code
foreach( $model_ids as $id_pair ) {
    $criteria->orWhere('model_id = :id' . $param_id . ' AND model = :model' . $param_id);
    $criteria->addParams([
        ':id' . $param_id => $id_pair[0], 
        ':model' . $param_id => $id_pair[1]
    ]);
    $param_id++;
}
$criteria->orderBy(['stamp' => SORT_DESC]);

echo yii\grid\GridView::widget([
    'dataProvider' => new ActiveDataProvider([
        'query' => $criteria,
        'pagination' => [
            'pageSize' => 100,
        ]
    ]),
    'columns' => [
        [
            'label' => 'Author',
            'value' => function($model, $index, $widget){
                return $model->user ? $model->user->email : "";
            }
        ],
        [
            'attribute' => 'model',
            'value' => function($model, $index, $widget){
                $p = explode('\\', $model->model);
                return end($p);
            }
        ],
        'model_id',
        'action',
        [
            'label' => 'field',
            'value' => function($model, $index, $widget){
                return $model->getParent()->getAttributeLabel($model->field);
            }
        ],
        'old_value',
        'new_value',
        [
            'label' => 'Date Changed',
            'value' => function($model, $index, $widget){
                return date("d-m-Y H:i:s", strtotime($model->stamp));
            }
        ]
    ]
]); ?>

Notice the:, (*14)

[
    'attribute' => 'model',
    'value' => function($model, $index, $widget){
        $p = explode('\\', $model->model);
        return end($p);
    }
],

This allows us to get the name of the model without the namespace part on it., (*15)

Currently in this extension I store the fully qualified name of the class to:, (*16)

  • Take advantage of namespacing to create uniqueness
  • To make it easier to query using the className() function in Objects.

Resources

The Versions

31/01 2018

dev-master

9999999-dev

A port of audit trail

  Sources   Download

BSD-3-Clause BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

01/11 2016

1.2.0

1.2.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

04/10 2016

1.0.0

1.0.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

04/10 2016

1.1.0

1.1.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

24/05 2015

0.3.0

0.3.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

13/04 2015

0.2.0

0.2.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audittrail audit trail

24/02 2014

0.1

0.1.0.0

A port of audit trail

  Sources   Download

BSD 3-Clause

The Requires

 

extension yii2 audit trail audit trail