Skip to content

Commit 79ac87d

Browse files
committed
#65 adding analytics to number types
1 parent 0752d90 commit 79ac87d

File tree

5 files changed

+135
-0
lines changed

5 files changed

+135
-0
lines changed

Diff for: Analytics/CustomFieldAnalytics.php

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace Kanboard\Plugin\MetaMagik\Analytics;
4+
5+
use Kanboard\Core\Base;
6+
use Kanboard\Model\TaskMetadataModel;
7+
use Kanboard\Model\TaskFinderModel;
8+
use Kanboard\Plugin\MetaMagik\Model\MetadataTypeModel;
9+
10+
/**
11+
* Custom Field Numeric Total Analytic Distribution
12+
*
13+
* @package MetaMagik
14+
* @author Craig Crosby
15+
*/
16+
class CustomFieldAnalytics extends Base
17+
{
18+
19+
public function build($project_id)
20+
{
21+
$metrics = array();
22+
$total = 0;
23+
$fields = $this->metadataTypeModel->getAllInScope($project_id);
24+
$tasks = $this->taskFinderModel->getAll($project_id);
25+
26+
foreach ($fields as $field) {
27+
28+
$field_total = 0;
29+
30+
foreach ($tasks as $task) {
31+
if (!empty($this->taskMetadataModel->get($task['id'], $field['human_name'], '')) && $field['data_type'] === 'number' ) {
32+
$field_total += $this->taskMetadataModel->get($task['id'], $field['human_name'], '');
33+
$total += $this->taskMetadataModel->get($task['id'], $field['human_name'], '');
34+
}
35+
36+
}
37+
38+
if ($field_total !== 0) {
39+
$metrics[] = array(
40+
'column_title' => $field['human_name'],
41+
'nb_tasks' => $field_total,
42+
);
43+
}
44+
45+
}
46+
47+
if ($total === 0) {
48+
return array();
49+
}
50+
51+
foreach ($metrics as &$metric) {
52+
$metric['percentage'] = round(($metric['nb_tasks'] * 100) / $total, 2);
53+
}
54+
55+
return $metrics;
56+
}
57+
}

Diff for: Controller/AnalyticExtensionController.php

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Kanboard\Plugin\MetaMagik\Controller;
4+
5+
use Kanboard\Filter\TaskProjectFilter;
6+
use Kanboard\Model\TaskModel;
7+
use Kanboard\Plugin\MetaMagik\Analytics\CustomFieldAnalytics;
8+
use Kanboard\Controller\BaseController;
9+
10+
/**
11+
* Project Analytic Controller
12+
*
13+
* @package Kanboard\Controller
14+
* @author Frederic Guillot
15+
*/
16+
class AnalyticExtensionController extends BaseController
17+
{
18+
/**
19+
* Show tasks distribution graph
20+
*
21+
* @access public
22+
*/
23+
public function fieldTotalDistribution()
24+
{
25+
26+
$project = $this->getProject();
27+
28+
$this->response->html($this->helper->layout->analytic('metaMagik:analytic/custom_field_totals', array(
29+
'project' => $project,
30+
'metrics' => $this->customFieldAnalytics->build($project['id']),
31+
'title' => t('Custom Field Total distribution'),
32+
)));
33+
}
34+
}

Diff for: Plugin.php

+7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Kanboard\Plugin\MetaMagik\Model\NewTaskCreationModel;
1212
use Kanboard\Plugin\MetaMagik\Model\NewTaskDuplicationModel;
1313
use Kanboard\Plugin\MetaMagik\Model\NewTaskProjectDuplicationModel;
14+
use Kanboard\Plugin\MetaMagik\Analytics\CustomFieldAnalytics;
1415
use Kanboard\Plugin\MetaMagik\Validator\NewTaskValidator;
1516
use Kanboard\Plugin\MetaMagik\Filter\MetaFieldFilter;
1617
use Kanboard\Plugin\MetaMagik\Filter\MetaValueFilter;
@@ -56,6 +57,9 @@ public function initialize()
5657
$this->template->hook->attach('template:task:form:second-column', 'metaMagik:task/rendermeta2');
5758
$this->template->hook->attach('template:task:form:third-column', 'metaMagik:task/rendermeta3');
5859
$this->template->hook->attach('template:task:details:bottom', 'metaMagik:task/metasummary');
60+
$this->template->hook->attach('template:analytic:sidebar', 'metaMagik:analytic/layout_hook');
61+
62+
5963

6064
$this->template->setTemplateOverride('export/tasks', 'metaMagik:export/tasks');
6165

@@ -106,6 +110,9 @@ public function getClasses()
106110
'Plugin\MetaMagik\Export' => [
107111
'MetaTaskExport',
108112
],
113+
'Plugin\MetaMagik\Analytics' => [
114+
'CustomFieldAnalytics',
115+
],
109116
];
110117
}
111118

Diff for: Template/analytic/custom_field_totals.php

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php if (! $is_ajax): ?>
2+
<div class="page-header">
3+
<h2><?= t('Custom Field Total distribution') ?></h2>
4+
</div>
5+
<?php endif ?>
6+
7+
<?php if (empty($metrics)): ?>
8+
<p class="alert"><?= t('Not enough data to show the graph.') ?></p>
9+
<?php else: ?>
10+
<?= $this->app->component('chart-project-task-distribution', array(
11+
'metrics' => $metrics,
12+
)) ?>
13+
14+
<table class="table-striped">
15+
<tr>
16+
<th><?= t('Custom Field') ?></th>
17+
<th><?= t('Total Value') ?></th>
18+
<th><?= t('Percentage') ?></th>
19+
</tr>
20+
<?php foreach ($metrics as $metric): ?>
21+
<tr>
22+
<td>
23+
<?= $this->text->e($metric['column_title']) ?>
24+
</td>
25+
<td>
26+
<?= $metric['nb_tasks'] ?>
27+
</td>
28+
<td>
29+
<?= n($metric['percentage']) ?>%
30+
</td>
31+
</tr>
32+
<?php endforeach ?>
33+
</table>
34+
<?php endif ?>

Diff for: Template/analytic/layout_hook.php

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<li <?= $this->app->checkMenuSelection('AnalyticExtensionController', 'fieldTotalDistribution', 'metaMagik') ?>>
2+
<?= $this->modal->replaceLink(t('Custom field total distribution'), 'AnalyticExtensionController', 'fieldTotalDistribution', array('plugin' => 'metaMagik', 'project_id' => $project['id'])) ?>
3+
</li>

0 commit comments

Comments
 (0)