Skip to content

Commit

Permalink
Merge pull request #219 from shalvah/refactor-chart-panel-renderings
Browse files Browse the repository at this point in the history
Refactor chart panel renderings
  • Loading branch information
Blizzke committed Oct 15, 2017
2 parents 871d34d + 23a859c commit 713d9f0
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 115 deletions.
58 changes: 58 additions & 0 deletions src/components/panels/RendersSummaryChartTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* Created by shalvah
* Date: 9/1/17
* Time: 12:10 PM
*/

namespace bedezign\yii2\audit\components\panels;

/**
* Trait RendersSummaryChartTrait
* @package bedezign\yii2\audit\components\panels
*
* Used by audit panels or controllers which want to render a summary chart in their view
*/
trait RendersSummaryChartTrait
{
/**
* The name of the model for which the chart should be rendered
*
* @return string Fully namespaced class name
*/
protected function getChartModel()
{
return static::className();
}

/**
* Return audit data for the last seven days
* to be rendered on the chart
*
* @return array
*/
protected function getChartData()
{
//initialise defaults (0 entries) for each day
$defaults = [];
$startDate = strtotime('-6 days');
foreach (range(-6, 0) as $day) {
$defaults[date('D: Y-m-d', strtotime($day . 'days'))] = 0;
}

$panelModel = $this->getChartModel();
$results = $panelModel::find()
->select(["COUNT(DISTINCT id) as count", "created AS day"])
->where(['between', 'created',
date('Y-m-d 00:00:00', $startDate),
date('Y-m-d 23:59:59')])
->groupBy("day")->indexBy('day')->column();

// replace defaults with data from db where available
foreach ($results as $date => $count) {
$date = date('D: Y-m-d', strtotime($date));
$defaults[$date] += $count;
}
return $defaults;
}
}
11 changes: 10 additions & 1 deletion src/controllers/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace bedezign\yii2\audit\controllers;

use bedezign\yii2\audit\components\panels\RendersSummaryChartTrait;
use bedezign\yii2\audit\components\web\Controller;
use bedezign\yii2\audit\models\AuditEntry;
use Yii;

/**
Expand All @@ -11,13 +13,20 @@
*/
class DefaultController extends Controller
{
use RendersSummaryChartTrait;

/**
* Module Default Action.
* @return mixed
*/
public function actionIndex()
{
return $this->render('index');
$chartData = $this->getChartData();
return $this->render('index', ['chartData' => $chartData]);
}

protected function getChartModel()
{
return AuditEntry::className();
}
}
12 changes: 12 additions & 0 deletions src/panels/ErrorPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use bedezign\yii2\audit\components\Helper;
use bedezign\yii2\audit\components\panels\Panel;
use bedezign\yii2\audit\components\panels\RendersSummaryChartTrait;
use bedezign\yii2\audit\models\AuditError;
use bedezign\yii2\audit\models\AuditErrorSearch;
use Yii;
Expand All @@ -15,6 +16,8 @@
*/
class ErrorPanel extends Panel
{
use RendersSummaryChartTrait;

private $_exceptions = [];

/**
Expand Down Expand Up @@ -140,13 +143,22 @@ public function getIndexUrl()
return ['error/index'];
}

/**
* @inheritdoc
*/
protected function getChartModel()
{
return AuditError::className();
}

/**
* @inheritdoc
*/
public function getChart()
{
return \Yii::$app->view->render('panels/error/chart', [
'panel' => $this,
'chartData' => $this->getChartData()
]);
}

Expand Down
14 changes: 13 additions & 1 deletion src/panels/JavascriptPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace bedezign\yii2\audit\panels;

use bedezign\yii2\audit\components\panels\Panel;
use bedezign\yii2\audit\components\panels\RendersSummaryChartTrait;
use bedezign\yii2\audit\models\AuditJavascript;
use bedezign\yii2\audit\models\AuditJavascriptSearch;
use Yii;
Expand All @@ -14,6 +15,8 @@
*/
class JavascriptPanel extends Panel
{
use RendersSummaryChartTrait;

/**
* @inheritdoc
*/
Expand Down Expand Up @@ -63,13 +66,22 @@ public function getIndexUrl()
return ['javascript/index'];
}

/**
* @inheritdoc
*/
protected function getChartModel()
{
return AuditJavascript::className();
}

/**
* @inheritdoc
*/
public function getChart()
{
return \Yii::$app->view->render('panels/javascript/chart', [
return \Yii::$app->view->render('panels/mail/chart', [
'panel' => $this,
'chartData' => $this->getChartData()
]);
}

Expand Down
12 changes: 12 additions & 0 deletions src/panels/MailPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use bedezign\yii2\audit\Audit;
use bedezign\yii2\audit\components\panels\Panel;
use bedezign\yii2\audit\components\panels\RendersSummaryChartTrait;
use bedezign\yii2\audit\models\AuditMail;
use bedezign\yii2\audit\models\AuditMailSearch;
use Swift_Message;
Expand All @@ -22,6 +23,8 @@
*/
class MailPanel extends Panel
{
use RendersSummaryChartTrait;

/**
* Store full email data
*
Expand Down Expand Up @@ -152,13 +155,22 @@ public function getIndexUrl()
return ['mail/index'];
}

/**
* @inheritdoc
*/
protected function getChartModel()
{
return AuditMail::className();
}

/**
* @inheritdoc
*/
public function getChart()
{
return \Yii::$app->view->render('panels/mail/chart', [
'panel' => $this,
'chartData' => $this->getChartData()
]);
}

Expand Down
12 changes: 12 additions & 0 deletions src/panels/TrailPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace bedezign\yii2\audit\panels;

use bedezign\yii2\audit\components\panels\Panel;
use bedezign\yii2\audit\components\panels\RendersSummaryChartTrait;
use bedezign\yii2\audit\models\AuditTrail;
use bedezign\yii2\audit\models\AuditTrailSearch;
use Yii;
Expand All @@ -14,6 +15,8 @@
*/
class TrailPanel extends Panel
{
use RendersSummaryChartTrait;

/**
* @inheritdoc
*/
Expand Down Expand Up @@ -66,13 +69,22 @@ public function getIndexUrl()
return ['trail/index'];
}

/**
* @inheritdoc
*/
protected function getChartModel()
{
return AuditTrail::className();
}

/**
* @inheritdoc
*/
public function getChart()
{
return \Yii::$app->view->render('panels/trail/chart', [
'panel' => $this,
'chartData' => $this->getChartData()
]);
}

Expand Down
29 changes: 2 additions & 27 deletions src/views/default/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use bedezign\yii2\audit\Audit;
use bedezign\yii2\audit\components\panels\Panel;
use bedezign\yii2\audit\models\AuditEntry;
use dosamigos\chartjs\ChartJs;
use yii\helpers\Html;

Expand All @@ -24,30 +23,6 @@

<div class="well">
<?php
//initialise defaults (0 entries) for each day
$defaults = [];
$startDate = strtotime('-6 days');
foreach (range(-6, 0) as $day) {
$defaults[date('D: Y-m-d', strtotime($day . 'days'))] = 0;
}

$results = AuditEntry::find()
->select(["COUNT(DISTINCT id) as count", "created AS day"])
->where(['between', 'created',
date('Y-m-d 00:00:00', $startDate),
date('Y-m-d 23:59:59')])
->groupBy("day")->indexBy('day')->column();

// format dates properly
$formattedData = [];
foreach ($results as $date => $count) {
$date = date('D: Y-m-d', strtotime($date));
$formattedData[$date] = $count;
}
$results = $formattedData;

// replace defaults with data from db where available
$results = array_merge($defaults, $results);

echo ChartJs::widget([
'type' => 'bar',
Expand All @@ -59,14 +34,14 @@
'tooltips' => ['enabled' => false],
],
'data' => [
'labels' => array_keys($results),
'labels' => array_keys($chartData),
'datasets' => [
[
'fillColor' => 'rgba(151,187,205,0.5)',
'strokeColor' => 'rgba(151,187,205,1)',
'pointColor' => 'rgba(151,187,205,1)',
'pointStrokeColor' => '#fff',
'data' => array_values($results),
'data' => array_values($chartData),
],
],
]
Expand Down
30 changes: 2 additions & 28 deletions src/views/default/panels/error/chart.php
Original file line number Diff line number Diff line change
@@ -1,50 +1,24 @@
<?php
/* @var $panel ErrorPanel */

use bedezign\yii2\audit\models\AuditError;
use bedezign\yii2\audit\panels\ErrorPanel;
use dosamigos\chartjs\ChartJs;

//initialise defaults (0 entries) for each day
$defaults = [];
$startDate = strtotime('-6 days');
foreach (range(-6, 0) as $day) {
$defaults[date('D: Y-m-d', strtotime($day . 'days'))] = 0;
}

$results = AuditError::find()
->select(["COUNT(DISTINCT id) as count", "created AS day"])
->where(['between', 'created',
date('Y-m-d 00:00:00', $startDate),
date('Y-m-d 23:59:59')])
->groupBy("day")->indexBy('day')->column();

// format dates properly
$formattedData = [];
foreach ($results as $date => $count) {
$date = date('D: Y-m-d', strtotime($date));
$formattedData[$date] = $count;
}
$results = $formattedData;

// replace defaults with data from db where available
$results = array_merge($defaults, $results);

echo ChartJs::widget([
'type' => 'bar',
'clientOptions' => [
'legend' => ['display' => false],
'tooltips' => ['enabled' => false],
],
'data' => [
'labels' => array_keys($results),
'labels' => array_keys($chartData),
'datasets' => [
[
'fillColor' => 'rgba(151,187,205,0.5)',
'strokeColor' => 'rgba(151,187,205,1)',
'pointColor' => 'rgba(151,187,205,1)',
'pointStrokeColor' => '#fff',
'data' => array_values($results),
'data' => array_values($chartData),
],
],
]
Expand Down
Loading

0 comments on commit 713d9f0

Please sign in to comment.