blob: 05a6579c9d9f4dc75e012f0a2a1508c3843fdd5a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\Piwik;
/**
* This API is the <a href='http://matomo.org/docs/analytics-api/reference/' rel='noreferrer' target='_blank'>Dashboard API</a>: it gives information about dashboards.
*
* @method static \Piwik\Plugins\Dashboard\API getInstance()
*/
class API extends \Piwik\Plugin\API
{
private $dashboard = null;
public function __construct(Dashboard $dashboard)
{
$this->dashboard = $dashboard;
}
/**
* Get each dashboard that belongs to a user including the containing widgets that are placed within each dashboard.
* If the user has not created any dashboard yet, the default dashboard will be returned.
*
* @return array[]
*/
public function getDashboards()
{
$dashboards = $this->getUserDashboards();
if (empty($dashboards)) {
$dashboards = array($this->getDefaultDashboard());
}
return $dashboards;
}
/**
* Get the default dashboard.
* @return \array[]
*/
private function getDefaultDashboard()
{
$defaultLayout = $this->dashboard->getDefaultLayout();
$defaultLayout = $this->dashboard->decodeLayout($defaultLayout);
$defaultDashboard = array('name' => Piwik::translate('Dashboard_Dashboard'), 'layout' => $defaultLayout, 'iddashboard' => 1);
$widgets = $this->getVisibleWidgetsWithinDashboard($defaultDashboard);
return $this->buildDashboard($defaultDashboard, $widgets);
}
/**
* Get all dashboards which a user has created.
* @return \array[]
*/
private function getUserDashboards()
{
$userLogin = Piwik::getCurrentUserLogin();
$userDashboards = $this->dashboard->getAllDashboards($userLogin);
$dashboards = array();
foreach ($userDashboards as $userDashboard) {
$widgets = $this->getVisibleWidgetsWithinDashboard($userDashboard);
$dashboards[] = $this->buildDashboard($userDashboard, $widgets);
}
return $dashboards;
}
private function getVisibleWidgetsWithinDashboard($dashboard)
{
$columns = $this->getColumnsFromDashboard($dashboard);
$widgets = array();
$columns = array_filter($columns);
foreach ($columns as $column) {
foreach ($column as $widget) {
if ($this->widgetIsNotHidden($widget) && !empty($widget->parameters->module)) {
$module = $widget->parameters->module;
$action = $widget->parameters->action;
$widgets[] = array('module' => $module, 'action' => $action);
}
}
}
return $widgets;
}
private function getColumnsFromDashboard($dashboard)
{
if (empty($dashboard['layout'])) {
return array();
}
if (is_array($dashboard['layout'])) {
return $dashboard['layout'];
}
if (!empty($dashboard['layout']->columns)) {
return $dashboard['layout']->columns;
}
return array();
}
private function buildDashboard($dashboard, $widgets)
{
return array('name' => $dashboard['name'], 'id' => $dashboard['iddashboard'], 'widgets' => $widgets);
}
private function widgetIsNotHidden($widget)
{
return empty($widget->isHidden);
}
}
|