diff options
Diffstat (limited to 'protected/modules/auditTrail/widgets/portlets/ShowAuditTrail.php')
| -rw-r--r-- | protected/modules/auditTrail/widgets/portlets/ShowAuditTrail.php | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/protected/modules/auditTrail/widgets/portlets/ShowAuditTrail.php b/protected/modules/auditTrail/widgets/portlets/ShowAuditTrail.php new file mode 100644 index 0000000..eb5a94f --- /dev/null +++ b/protected/modules/auditTrail/widgets/portlets/ShowAuditTrail.php @@ -0,0 +1,157 @@ +<?php +/** + * ShowAuditTrail shows the audit trail for the current item + */ + +Yii::import('zii.widgets.CPortlet'); +require_once(realpath(dirname(__FILE__) . '/../../AuditTrailModule.php')); + +class ShowAuditTrail extends CPortlet +{ + /** + * @var CActiveRecord the model you want to use with this field + */ + public $model; + + /** + * @var boolean whether or not to show the widget + */ + public $visible = true; + + /** + * @var this allows you to override individual columns' display properties in the datagrid. + * Column definitions should be indexed by column name, and the value should match the column + * format of CDataGrid. For example: + * + * 'dataGridColumnsOverride' => array( + * 'old_value' => array( + * 'name' => 'old_value', + * 'filter' => '', + * ), + * 'new_value' => array( + * 'name' => 'new_value', + * 'filter' => '', + * ), + * ) + * + * Please do not specify a column if you do not wish to override the defaults of that column. + * Also, please be careful when specifying a format for user_id, as special handling exists + * to format the user name + */ + public $dataGridColumnsOverride = array( ); + + /** + * @var AuditTrailModule static variable to hold the module so we don't have to instantiate it a million times to get config values + */ + private static $__auditTrailModule; + + /** + * Sets the title of the portlet + */ + public function init() { + $this->title = "Audit Trail For " . get_class($this->model) . " " . $this->model->id; + parent::init(); + } + + /** + * generates content of widget the widget. + * This renders the widget, if it is visible. + */ + public function renderContent() + { + if($this->visible) { + $auditTrail = AuditTrail::model()->recently(); + $auditTrail->model = get_class($this->model); + $auditTrail->model_id = $this->model->primaryKey; + $columnFormat = $this->getColumnFormat(); + $this->widget('zii.widgets.grid.CGridView', array( + 'id'=>'audit-trail-grid', + 'dataProvider'=>$auditTrail->search(), + 'columns'=> $this->getColumnFormat(), + )); + } + } + + /** + * Builds the label code we need to display usernames correctly + * @return The code to be evaled to display the user info correctly + */ + protected function getEvalUserLabelCode() { + $userClass = $this->getFromConfigOrObject('userClass'); + $userNameColumn = $this->getFromConfigOrObject('userNameColumn'); + $userEvalLabel = ' ( ($t = ' + . $userClass + . '::model()->findByPk($data->user_id)) == null ? "": $t->' + . $userNameColumn + . ' ) '; + return $userEvalLabel; + } + + /** + * Returns the value you want to look up, either from the config file or a user's override + * @var value The name of the value you would like to look up + * @return the config value you need + */ + protected function getFromConfigOrObject($value) { + $at = Yii::app()->modules['auditTrail']; + + //If we can get the value from the config, do that to save overhead + if( isset( $at[$value]) && !empty($at[$value] ) ) { + return $at[$value]; + } + + //If we cannot get the config value from the config file, get it from the + //instantiated object. Only instantiate it once though, its probably + //expensive to do. PS I feel this is a dirty trick and I don't like it + //but I don't know a better way + if(!is_object(self::$__auditTrailModule)) { + self::$__auditTrailModule = new AuditTrailModule(microtime(), null); + } + + return self::$__auditTrailModule->$value; + } + + /** + * Gets final column format. Starts with default column format (specified in this method + * and checks $this->dataGridColumnsOverride array to see if any columns need to use a + * user specified format. + * @return array The final format array, with any user specified formats taking precedent over defaults + */ + protected function getColumnFormat() { + $evalUserLabel = $this->getEvalUserLabelCode(); + $columnFormat = array(); + $defaultColumnFormat = array( + 'old_value' => array( + 'name' => 'old_value', + 'filter' => '', + ), + 'new_value' => array( + 'name' => 'new_value', + 'filter' => '', + ), + 'action' => array( + 'name' => 'action', + 'filter'=> '', + ), + 'field' => array( + 'name' => 'field', + 'filter' => '', + ), + 'stamp' => array( + 'name' => 'stamp', + 'filter' => '', + ), + 'user_id' => array( + 'name' => 'user_id', + 'value'=>$evalUserLabel, + 'filter'=> '', + ), + ); + + foreach($defaultColumnFormat as $key => $format) { + $columnFormat[] = isset($this->dataGridColumnsOverride[$key]) ? $this->dataGridColumnsOverride[$key] : $defaultColumnFormat[$key]; + } + + return $columnFormat; + } +}
\ No newline at end of file |
