Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Add ability to log activity for propel objects

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 src
Octocat-spinner-32 tests
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 README.md
Octocat-spinner-32 composer.json
Octocat-spinner-32 phpunit.xml.dist
README.md

AuditableBehavior

Build Status

Quick start

Add the behavior to your database schema :

<database name="propel" defaultIdMethod="native" package="lib.model">
  <behavior name="auditable" />
  <table name="auditable_object">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="name" type="VARCHAR" size="255" />
  </table>
</database>
<?php
$auditable = new Auditable();
$auditable->setName('audit');
$auditable->save();

// and now access audit trail
$auditable->countActivity();
foreach ($auditable->getLastActivity() as $activity) {
  echo $activity->getLabel() . '<br />';
}
// will result in "CREATE<br />"

Installation

Install the behavior in your vendor directory

$ git submodule add git://github.com/Carpe-Hora/AuditableBehavior.git lib/vendor/AuditableBehavior

add following to your propel.ini file:

propel.behavior.auditable.class               = lib.vendor.AuditableBehavior.src.AuditableBehavior

Declare behavior for the whole database in your config/schema.xml

<database name="propel" defaultIdMethod="native" package="lib.model">
  <behavior name="auditable" />
</database>

or for a table only

<database name="propel" defaultIdMethod="native" package="lib.model">
  <table name="my_table">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <behavior name="auditable" />
  </table>
</database>

Configuration

Following paramters are available :

  • create_label : activity log for create (default CREATE)
  • update_label : activity log for update (default UPDATE)
  • delete_label : activity log for delete (default DELETE)
  • audit_create : log object creation (default true)
  • audit_update : log object update (default true)
  • audit_delete : log object deletion (default true)
  • activity_table : activity table name (default audit_activity)
  • activity_label_column : column for activity log in activity_table
  • object_column : column for object table in activity_table
  • object_pk_column : column for object primarikey in activity_table
  • blacklist: a coma separated list of tables to exclude from audit

How it works

This behavior create an activity table and log activity for auditableed object.

To achieve this goal, method logActivity($label, $con=null) is called on postHooks.

This method create a new MonitorActivity with following parameters:

  • auditable_label corresponding value for CREATE, UPDATE or DELETE
  • auditable_object_class corresponding object class
  • auditable_object_pk corresponding object primary key

Built in methods

Active record extension

  • getLastActivity($number=10, $label=null, $con=null) return the recent object related activity.
  • logActivity($label, $con=null) create an activity entry for $label
  • countActivity($label = null, $con=null) count related activity
  • isAudited() is the current objcet auditableing its activity
  • disableLocalAudit() temporary remove auditableing activity for this object
  • enableLocalAudit() temporary force auditableing activity for this object
  • getActivityCriteria get a criteria to filter activity against this object

and both static methods

  • disableAudit() disable auditableing activity globaly.
  • enableAudit() enable auditableing activity globaly.

Activity table

Active Query extension

  • filterByObject($auditableedObject) filter query for $auditableObject related activity.

Active record extension

  • getRelatedObject() return the activity related object.

TODO

  • alter activty active record and query
Something went wrong with that request. Please try again.