1<?php
2/**
3 * Matomo - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 *
8 */
9namespace Piwik\Plugins\MultiSites;
10
11use Piwik\Common;
12use Piwik\Config;
13use Piwik\Date;
14use Piwik\Period;
15use Piwik\DataTable;
16use Piwik\DataTable\Row;
17use Piwik\Piwik;
18use Piwik\Translation\Translator;
19use Piwik\View;
20
21class Controller extends \Piwik\Plugin\Controller
22{
23    /**
24     * @var Translator
25     */
26    private $translator;
27
28    public function __construct(Translator $translator)
29    {
30        parent::__construct();
31
32        $this->translator = $translator;
33    }
34
35    public function index()
36    {
37        return $this->getSitesInfo($isWidgetized = false);
38    }
39
40    public function standalone()
41    {
42        return $this->getSitesInfo($isWidgetized = true);
43    }
44
45    public function getAllWithGroups()
46    {
47        Piwik::checkUserHasSomeViewAccess();
48
49        $period  = Common::getRequestVar('period', null, 'string');
50        $date    = Common::getRequestVar('date', null, 'string');
51        $segment = Common::getRequestVar('segment', false, 'string');
52        $pattern = Common::getRequestVar('pattern', '', 'string');
53        $limit   = Common::getRequestVar('filter_limit', 0, 'int');
54        $segment = $segment ?: false;
55        $request = $_GET + $_POST;
56
57        $dashboard = new Dashboard($period, $date, $segment);
58
59        if ($pattern !== '') {
60            $dashboard->search(strtolower($pattern));
61        }
62
63        $response = array(
64            'numSites' => $dashboard->getNumSites(),
65            'totals'   => $dashboard->getTotals(),
66            'lastDate' => $dashboard->getLastDate(),
67            'sites'    => $dashboard->getSites($request, $limit)
68        );
69
70        return json_encode($response);
71    }
72
73    public function getSitesInfo($isWidgetized = false)
74    {
75        Piwik::checkUserHasSomeViewAccess();
76
77        $date   = Common::getRequestVar('date', 'today');
78        $period = Common::getRequestVar('period', 'day');
79
80        $view = new View("@MultiSites/getSitesInfo");
81
82        $view->isWidgetized         = $isWidgetized;
83        $view->displayRevenueColumn = Common::isGoalPluginEnabled();
84        $view->limit                = Config::getInstance()->General['all_websites_website_per_page'];
85        $view->show_sparklines      = Config::getInstance()->General['show_multisites_sparklines'];
86
87        $view->autoRefreshTodayReport = 0;
88        // if the current date is today, or yesterday,
89        // in case the website is set to UTC-12), or today in UTC+14, we refresh the page every 5min
90        if (in_array($date, array('today', date('Y-m-d'),
91                                  'yesterday', Date::factory('yesterday')->toString('Y-m-d'),
92                                  Date::factory('now', 'UTC+14')->toString('Y-m-d')))
93        ) {
94            $view->autoRefreshTodayReport = Config::getInstance()->General['multisites_refresh_after_seconds'];
95        }
96
97        $params = $this->getGraphParamsModified();
98        $view->dateSparkline = $period == 'range' ? $date : $params['date'];
99
100        $this->setGeneralVariablesView($view);
101
102        $view->siteName = $this->translator->translate('General_AllWebsitesDashboard');
103
104        return $view->render();
105    }
106
107    public function getEvolutionGraph($columns = false)
108    {
109        if (empty($columns)) {
110            $columns = Common::getRequestVar('columns');
111        }
112        $api = "API.get";
113
114        if ($columns == 'revenue') {
115            $api = "Goals.get";
116        }
117        $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, $api);
118        $view->requestConfig->totals = 0;
119        return $this->renderView($view);
120    }
121}
122